Esellers_Ipay - Version 1.0.0

Version Notes

free

Download this release

Release Info

Developer YoungJun
Extension Esellers_Ipay
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

Files changed (110) hide show
  1. app/code/community/Esellers/Aboutep/Block/System/Config/Form/Fieldep.php +142 -0
  2. app/code/community/Esellers/Aboutep/Helper/Data.php +6 -0
  3. app/code/community/Esellers/Aboutep/Model/Createep.php +162 -0
  4. app/code/community/Esellers/Aboutep/controllers/EpController.php +17 -0
  5. app/code/community/Esellers/Aboutep/etc/adminhtml.xml +26 -0
  6. app/code/community/Esellers/Aboutep/etc/config.xml +95 -0
  7. app/code/community/Esellers/Aboutep/etc/system.xml +67 -0
  8. app/code/community/Esellers/Ipay/Block/Cart/Onepage.php +66 -0
  9. app/code/community/Esellers/Ipay/Block/Logo.php +17 -0
  10. app/code/community/Esellers/Ipay/Block/Onepage/Review/Info.php +45 -0
  11. app/code/community/Esellers/Ipay/Block/Sales/Order/View.php +323 -0
  12. app/code/community/Esellers/Ipay/Helper/Active.php +17 -0
  13. app/code/community/Esellers/Ipay/Helper/Data.php +6 -0
  14. app/code/community/Esellers/Ipay/Model/Carrier/ShippingMethod.php +61 -0
  15. app/code/community/Esellers/Ipay/Model/Ipay.php +45 -0
  16. app/code/community/Esellers/Ipay/Model/Mysql4/Setup.php +6 -0
  17. app/code/community/Esellers/Ipay/Model/Mysql4/ipay.php +11 -0
  18. app/code/community/Esellers/Ipay/Model/Observer.php +130 -0
  19. app/code/community/Esellers/Ipay/Model/PaymentMethod.php +17 -0
  20. app/code/community/Esellers/Ipay/Model/System/Config/Source/Color.php +42 -0
  21. app/code/community/Esellers/Ipay/Model/System/Config/Source/Company.php +7 -0
  22. app/code/community/Esellers/Ipay/Model/System/Config/Source/Escrow.php +60 -0
  23. app/code/community/Esellers/Ipay/Model/System/Config/Source/Font.php +46 -0
  24. app/code/community/Esellers/Ipay/Model/System/Config/Source/Layout.php +43 -0
  25. app/code/community/Esellers/Ipay/Model/System/Config/Source/Paymethod.php +64 -0
  26. app/code/community/Esellers/Ipay/Model/System/Config/Source/Roundoff.php +62 -0
  27. app/code/community/Esellers/Ipay/Model/System/Config/Source/Shiptype.php +62 -0
  28. app/code/community/Esellers/Ipay/controllers/PaymentController.php +54 -0
  29. app/code/community/Esellers/Ipay/controllers/Sales/Order/ShipmentController.php +365 -0
  30. app/code/community/Esellers/Ipay/etc/adminhtml.xml +26 -0
  31. app/code/community/Esellers/Ipay/etc/config.xml +150 -0
  32. app/code/community/Esellers/Ipay/etc/system.xml +246 -0
  33. app/code/community/Esellers/Ipay/sql/ipay_setup/mysql4-upgrade-1.0.0-1.1.0.php +41 -0
  34. app/code/community/Esellers/Naverep/Block/System/Config/Form/Fieldep.php +142 -0
  35. app/code/community/Esellers/Naverep/Helper/Data.php +6 -0
  36. app/code/community/Esellers/Naverep/Model/Createep.php +157 -0
  37. app/code/community/Esellers/Naverep/Model/Createep_.php +153 -0
  38. app/code/community/Esellers/Naverep/Model/Createep__.php +157 -0
  39. app/code/community/Esellers/Naverep/Model/System/Config/Source/EPUrl.php +40 -0
  40. app/code/community/Esellers/Naverep/controllers/EpController.php +17 -0
  41. app/code/community/Esellers/Naverep/etc/adminhtml.xml +26 -0
  42. app/code/community/Esellers/Naverep/etc/config.xml +92 -0
  43. app/code/community/Esellers/Naverep/etc/system.xml +67 -0
  44. app/code/community/Esellers/Salesgrid/Block/Sales/Order.php +50 -0
  45. app/code/community/Esellers/Salesgrid/Block/Sales/Order/Grid.php +232 -0
  46. app/code/community/Esellers/Salesgrid/controllers/Sales/OrderController.php +36 -0
  47. app/code/community/Esellers/Salesgrid/etc/config.xml +89 -0
  48. app/code/community/Mage/Adminhtml/Block/Sales/Order/Shipment/Create/Tracking.php +102 -0
  49. app/code/community/Mage/Adminhtml/Block/Sales/Order/Shipment/View/Tracking.php +158 -0
  50. app/code/community/Mage/Adminhtml/Controller/Action.php +387 -0
  51. app/code/community/Mage/Adminhtml/Controller/Report/Abstract.php +124 -0
  52. app/code/community/Mage/Adminhtml/Controller/Sales/Creditmemo.php +141 -0
  53. app/code/community/Mage/Adminhtml/Controller/Sales/Invoice.php +154 -0
  54. app/code/community/Mage/Adminhtml/Controller/Sales/Shipment.php +119 -0
  55. app/code/community/Mage/Adminhtml/controllers/Action.php +387 -0
  56. app/code/community/Mage/Adminhtml/controllers/Block/Sales/Order/Shipment/Create/Tracking.php +102 -0
  57. app/code/community/Mage/Adminhtml/controllers/Controller/Action.php +387 -0
  58. app/code/community/Mage/Adminhtml/controllers/Controller/Report/Abstract.php +124 -0
  59. app/code/community/Mage/Adminhtml/controllers/Controller/Sales/Creditmemo.php +141 -0
  60. app/code/community/Mage/Adminhtml/controllers/Controller/Sales/Invoice.php +154 -0
  61. app/code/community/Mage/Adminhtml/controllers/Controller/Sales/Shipment.php +119 -0
  62. app/code/community/Mage/Adminhtml/controllers/Report/Abstract.php +124 -0
  63. app/code/community/Mage/Adminhtml/controllers/Sales/Creditmemo.php +141 -0
  64. app/code/community/Mage/Adminhtml/controllers/Sales/Invoice.php +154 -0
  65. app/code/community/Mage/Adminhtml/controllers/Sales/Order/ShipmentController.php +787 -0
  66. app/code/community/Mage/Adminhtml/controllers/Sales/Shipment.php +119 -0
  67. app/code/community/Mage/Directory/Model/Currency.php +312 -0
  68. app/code/community/Mage/Directory/Model/Currency.php.bak +309 -0
  69. app/design/adminhtml/default/default/layout/ipay.xml +51 -0
  70. app/design/adminhtml/default/default/locale/en_US/translate.csv +201 -0
  71. app/design/adminhtml/default/default/locale/ko_KR/translate.csv +612 -0
  72. app/design/adminhtml/default/default/template/ipay/form.phtml +129 -0
  73. app/design/adminhtml/default/default/template/ipay/info.phtml +148 -0
  74. app/design/adminhtml/default/default/template/ipay/items.phtml +203 -0
  75. app/design/frontend/base/default/template/ipay/available.phtml +72 -0
  76. app/design/frontend/base/default/template/ipay/billing.phtml +157 -0
  77. app/design/frontend/base/default/template/ipay/button.phtml +24 -0
  78. app/design/frontend/base/default/template/ipay/cart.phtml +242 -0
  79. app/design/frontend/base/default/template/ipay/cart.phtml_ +0 -0
  80. app/design/frontend/base/default/template/ipay/cart.phtml_today +407 -0
  81. app/design/frontend/base/default/template/ipay/footer.phtml +19 -0
  82. app/design/frontend/base/default/template/ipay/info.phtml +55 -0
  83. app/design/frontend/base/default/template/ipay/ipay.phtml +19 -0
  84. app/design/frontend/base/default/template/ipay/ipayInfo.phtml +63 -0
  85. app/design/frontend/base/default/template/ipay/ipayInfo_.phtml +61 -0
  86. app/design/frontend/base/default/template/ipay/ipayservice.phtml +11 -0
  87. app/design/frontend/base/default/template/ipay/item.phtml +262 -0
  88. app/design/frontend/base/default/template/ipay/links.phtml +30 -0
  89. app/design/frontend/base/default/template/ipay/methods.phtml +46 -0
  90. app/design/frontend/base/default/template/ipay/overview.phtml +152 -0
  91. app/design/frontend/base/default/template/ipay/progress.phtml +55 -0
  92. app/design/frontend/base/default/template/ipay/success.phtml +65 -0
  93. app/design/frontend/base/default/template/ipay/totals.phtml +18 -0
  94. app/design/frontend/default/default/layout/ipay.xml +203 -0
  95. app/design/frontend/default/default/locale/en_US/translate.csv +1 -0
  96. app/design/frontend/default/default/locale/ko_KR/translate.csv +218 -0
  97. app/design/frontend/default/default/template/ipay/billing.phtml +223 -0
  98. app/design/frontend/default/default/template/ipay/logo.phtml +10 -0
  99. app/design/frontend/default/default/template/ipay/top.links.phtml +48 -0
  100. app/etc/modules/Esellers_Ipay.xml +15 -0
  101. js/esellers/ipay.js +26 -0
  102. lib/Zend/Locale/Data/ko_KR.xml +9 -0
  103. lib/class.ipay.php +512 -0
  104. lib/func.xml.php +135 -0
  105. lib/ipaySession.php +469 -0
  106. lib/nusoap.php +6800 -0
  107. package.xml +18 -0
  108. skin/frontend/default/default/images/ipay/logo_ipay01.gif +0 -0
  109. skin/frontend/default/default/images/ipay/logo_ipay02.gif +0 -0
  110. skin/frontend/default/default/images/ipay/sbtn_ipay.gif +0 -0
app/code/community/Esellers/Aboutep/Block/System/Config/Form/Fieldep.php ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Form element default renderer
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Esellers_Aboutep_Block_System_Config_Form_Fieldep extends Mage_Adminhtml_Block_Template implements Varien_Data_Form_Element_Renderer_Interface
35
+ {
36
+ protected $_element;
37
+
38
+ /**
39
+ * Enter description here...
40
+ *
41
+ * @param Varien_Data_Form_Element_Abstract $element
42
+ * @return string
43
+ */
44
+ public function render(Varien_Data_Form_Element_Abstract $element)
45
+ {
46
+ $id = $element->getHtmlId();
47
+
48
+ $html = '<td class="label"><label for="'.$id.'">'.$element->getLabel().'</label></td>';
49
+
50
+ //$isDefault = !$this->getRequest()->getParam('website') && !$this->getRequest()->getParam('store');
51
+ $isMultiple = $element->getExtType()==='multiple';
52
+
53
+ // replace [value] with [inherit]
54
+ $namePrefix = preg_replace('#\[value\](\[\])?$#', '', $element->getName());
55
+
56
+ $options = $element->getValues();
57
+
58
+ $addInheritCheckbox = false;
59
+ if ($element->getCanUseWebsiteValue()) {
60
+ $addInheritCheckbox = true;
61
+ $checkboxLabel = Mage::helper('adminhtml')->__('Use Website');
62
+ }
63
+ elseif ($element->getCanUseDefaultValue()) {
64
+ $addInheritCheckbox = true;
65
+ $checkboxLabel = Mage::helper('adminhtml')->__('Use Default');
66
+ }
67
+
68
+ if ($addInheritCheckbox) {
69
+ $inherit = $element->getInherit()==1 ? 'checked="checked"' : '';
70
+ if ($inherit) {
71
+ $element->setDisabled(true);
72
+ }
73
+ }
74
+
75
+ if ($element->getTooltip()) {
76
+ $html .= '<td class="value with-tooltip">';
77
+ $html .= $this->_getElementHtml($element);
78
+ $html .= '<div class="field-tooltip"><div>' . $element->getTooltip() . '</div></div>';
79
+ } else {
80
+ $html .= '<td class="value">';
81
+ $html .= $this->_getElementHtml($element);
82
+ };
83
+ if ($element->getComment()) {
84
+ $html.= '<p class="note"><span>'.$element->getComment().'</span></p>';
85
+ }
86
+ $html.= '</td>';
87
+
88
+ if ($addInheritCheckbox) {
89
+
90
+ $defText = $element->getDefaultValue();
91
+ if ($options) {
92
+ $defTextArr = array();
93
+ foreach ($options as $k=>$v) {
94
+ if ($isMultiple) {
95
+ if (is_array($v['value']) && in_array($k, $v['value'])) {
96
+ $defTextArr[] = $v['label'];
97
+ }
98
+ } elseif ($v['value']==$defText) {
99
+ $defTextArr[] = $v['label'];
100
+ break;
101
+ }
102
+ }
103
+ $defText = join(', ', $defTextArr);
104
+ }
105
+
106
+ // default value
107
+ $html.= '<td class="use-default">';
108
+ //$html.= '<input id="'.$id.'_inherit" name="'.$namePrefix.'[inherit]" type="checkbox" value="1" class="input-checkbox config-inherit" '.$inherit.' onclick="$(\''.$id.'\').disabled = this.checked">';
109
+ $html.= '<input id="'.$id.'_inherit" name="'.$namePrefix.'[inherit]" type="checkbox" value="1" class="checkbox config-inherit" '.$inherit.' onclick="toggleValueElements(this, Element.previous(this.parentNode))" /> ';
110
+ $html.= '<label for="'.$id.'_inherit" class="inherit" title="'.htmlspecialchars($defText).'">'.$checkboxLabel.'</label>';
111
+ $html.= '</td>';
112
+ }
113
+
114
+ $html.= '<td class="scope-label">';
115
+ if ($element->getScope()) {
116
+ $html .= $element->getScopeLabel();
117
+ }
118
+ $html.= '</td>';
119
+
120
+ $html.= '<td class="">';
121
+ if ($element->getHint()) {
122
+ $html.= '<div class="hint" >';
123
+ $html.= '<div style="display: none;">' . $element->getHint() . '</div>';
124
+ $html.= '</div>';
125
+ }
126
+ $html.= '</td>';
127
+
128
+ return $this->_decorateRowHtml($element, $html);
129
+ }
130
+
131
+ /**
132
+ * Decorate field row html
133
+ *
134
+ * @param Varien_Data_Form_Element_Abstract $element
135
+ * @param string $html
136
+ * @return string
137
+ */
138
+ protected function _decorateRowHtml($element, $html)
139
+ {
140
+ return '<tr id="row_' . $element->getHtmlId() . '">' . $html . '</tr>';
141
+ }
142
+ }
app/code/community/Esellers/Aboutep/Helper/Data.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Esellers_Aboutep_Helper_Data extends Mage_Core_Helper_Abstract
4
+ {
5
+
6
+ }
app/code/community/Esellers/Aboutep/Model/Createep.php ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Esellers_Aboutep_Model_Createep extends Mage_Core_Model_Abstract
3
+ {
4
+ var $fp;
5
+
6
+ public function makeEp() {
7
+ $productIds=$this->getProductIds(1);
8
+ $data = "";
9
+ $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addIdFilter($productIds);
10
+
11
+ $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
12
+ $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
13
+ $shipfee = (int)Mage::helper('directory')->currencyConvert($this->getAllShippingPrice(), $baseCurrencyCode, $currentCurrencyCode);
14
+
15
+
16
+ Mage::log("start");
17
+ foreach ($collection as $product){
18
+ $price = (int)Mage::helper('directory')->currencyConvert($product->getPrice(), $baseCurrencyCode, $currentCurrencyCode);
19
+ $imgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
20
+ $pgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK).$product->getUrlPath();
21
+ $data .= $product->getSku()."<!>";
22
+ $data .= "C<!>";
23
+ $data .= $product->getName()."<!>";
24
+ $data .= $price."<!>";
25
+ $data .= $imgurl."<!>";
26
+ $data .= $pgurl."<!>";
27
+ foreach ($product->getCategoryIds() as $category_id) {
28
+ $category = Mage::getModel('catalog/category')->load($category_id);
29
+ $data.= $this->getCategoryData($category_id,"",$category->getLevel())."<!>";
30
+ }
31
+
32
+ $data .= $product->getModel()."<!>";
33
+ $data .= $product->getBrand()."<!>";
34
+ $data .= $product->getAttributeText('manufacturer')."<!>";
35
+ $data .= $product->getAttributeText('country_of_manufacture')."<!>";
36
+ $data .= $product->getCreateDt()."<!>";
37
+ $data .= $shipfee."<!>";
38
+ $data .= "<!>"; //이벤트
39
+ $data .= "<!>"; //쿠폰금액
40
+ $data .= "<!>"; //무이자
41
+ $data .= "<!>"; //적립금
42
+ $data .= "<!>"; //이미지 변경여부
43
+ $data .= "<!>"; //물품특성정보
44
+ $data .= "<!>"; //상점내 매출비율
45
+ $data .= "<!>"; //특별할인카드명
46
+ $data .= "<!>"; //특별할인 할인 금액
47
+ $data .= "<!>"; //상품정보 변경시간
48
+
49
+ $data .= "\n";
50
+ }
51
+ Mage::log("end");
52
+
53
+ header("Cache-Control: no-cache, must-revalidate");
54
+ header("Content-Type: text/plain; charset=euc-kr");
55
+ echo $data;
56
+ }
57
+
58
+ public function getCategoryData($category_id,$data,$cate){
59
+ $category = Mage::getModel('catalog/category')->load($category_id);
60
+ $level = $category->getLevel();
61
+ $cate=$category_id.$cate;
62
+ if($level>2){
63
+ if($data=="")
64
+ $data=$category_id.$data."<!>";
65
+ else
66
+ $data=$cate."<i>".$category_id.$data;
67
+ return $this->getCategoryData($category->getParentId(),$data,$cate);
68
+ }else{
69
+ $data=$category_id."<!>".$data;
70
+ return $data;
71
+ }
72
+ }
73
+
74
+ public function makeSummaryep() {
75
+ $data = "<<<begin>>>\n";
76
+ $productIds=$this->getProductIds(1);
77
+ $nowtime=date("Y-m-d", time()-86400)." 08:00:00";
78
+ $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addFieldToFilter("updated_at",array("gt"=>"$nowtime"))->addIdFilter($productIds);
79
+
80
+ $data .= $this->makeTxt("in",$collection);
81
+
82
+
83
+ $productIds_out=$this->getProductIds(0);
84
+
85
+ $collection_out = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addIdFilter($productIds_out);
86
+ $data .= $this->makeTxt("out",$collection_out);
87
+
88
+
89
+ $data .= "<<<ftend>>>\n";
90
+
91
+
92
+ echo $data;
93
+ }
94
+
95
+ public function getProductIds($status){
96
+ $stockCollection = Mage::getModel('cataloginventory/stock_item')->getCollection()->addFieldToFilter('is_in_stock',$status);
97
+ $productIds = array();
98
+
99
+ foreach ($stockCollection as $item){
100
+ $productIds[] = $item->getOrigData('product_id');
101
+ }
102
+ return $productIds;
103
+ }
104
+
105
+ public function makeTxt($mode,$collection){
106
+ $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
107
+ $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
108
+ $shipfee = (int)Mage::helper('directory')->currencyConvert($this->getAllShippingPrice(), $baseCurrencyCode, $currentCurrencyCode);
109
+ $data="";
110
+
111
+ foreach ($collection as $product){
112
+ $price = (int)Mage::helper('directory')->currencyConvert($product->getPrice(), $baseCurrencyCode, $currentCurrencyCode);
113
+ $imgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
114
+
115
+ $data .= "<<<mapid>>>".$product->getSku()."\n";
116
+ $data .= "<<<pname>>>".$product->getName()."\n";
117
+ $data .= "<<<price>>>".$price."\n";
118
+ $data .= "<<<pgurl>>>".$product->getProductUrl()."\n";
119
+ $data .= "<<<igurl>>>".$imgurl."\n";
120
+
121
+ foreach ($product->getCategoryIds() as $category_id) {
122
+ $category = Mage::getModel('catalog/category')->load($category_id);
123
+ $data.= $this->getCategoryData($category_id,"","");
124
+ }
125
+ $data .= "<<<model>>>".$product->getModel()."\n";
126
+ //$data .= "<<<brand>>>".$product->getAttributeText('computer_manufacturers')."\n";
127
+ $data .= "<<<maker>>>".$product->getAttributeText('manufacturer')."\n";
128
+ $data .= "<<<origi>>>".$product->getAttributeText('country_of_manufacture')."\n";
129
+ $data .= "<<<deliv>>>$shipfee\n";
130
+
131
+ $data .=" <<<utime>>>".$product->getUpdatedAt()."\n";
132
+
133
+ if($mode=="in"){
134
+ $data .=" <<<class>>U\n";
135
+ }else if($mode=="out"){
136
+ $data .=" <<<class>>D\n";
137
+ }
138
+
139
+ $data .= "<<<event>>>\n";
140
+
141
+ }
142
+
143
+
144
+ return $data;
145
+
146
+ }
147
+
148
+ public function getAllShippingPrice()
149
+ {
150
+ $store=Mage::app()->getStore()->getId();
151
+ $carriers = Mage::getStoreConfig('carriers', $store);
152
+ foreach ($carriers as $carrierCode => $carrierConfig) {
153
+ if (Mage::getStoreConfigFlag('carriers/'.$carrierCode.'/active', $store)) {
154
+ if($carrierCode=="flatrate"){
155
+ return $carrierConfig["price"];
156
+ }
157
+ }
158
+ }
159
+ return 0;
160
+ }
161
+ }
162
+ ?>
app/code/community/Esellers/Aboutep/controllers/EpController.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Esellers_Aboutep_EpController extends Mage_Core_Controller_Front_Action {
3
+
4
+ public function indexAction()
5
+ {
6
+ $model=Mage::getModel("aboutep/createep");
7
+ $model->makeEp();
8
+ //$this->loadLayout();
9
+ //$this->renderLayout();
10
+ }
11
+
12
+ public function summaryAction()
13
+ {
14
+ $model=Mage::getModel("aboutep/createep");
15
+ $model->makeSummaryep();
16
+ }
17
+ }
app/code/community/Esellers/Aboutep/etc/adminhtml.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <acl>
5
+ <resources>
6
+ <all>
7
+ <title>Esellers About EP</title>
8
+ </all>
9
+ <admin>
10
+ <children>
11
+ <system>
12
+ <children>
13
+ <config>
14
+ <children>
15
+ <aboutep translate="label">
16
+ <title>About Ep</title>
17
+ </aboutep>
18
+ </children>
19
+ </config>
20
+ </children>
21
+ </system>
22
+ </children>
23
+ </admin>
24
+ </resources>
25
+ </acl>
26
+ </config>
app/code/community/Esellers/Aboutep/etc/config.xml ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <modules>
5
+ <Esellers_Aboutep>
6
+ <version>1.1.0</version>
7
+ </Esellers_Aboutep>
8
+ </modules>
9
+ <frontend>
10
+ <routers>
11
+ <aboutep>
12
+ <use>standard</use>
13
+ <args>
14
+ <module>Esellers_Aboutep</module>
15
+ <frontName>aboutep</frontName>
16
+ </args>
17
+ </aboutep>
18
+ </routers>
19
+ <default>
20
+ <router>aboutep</router>
21
+ </default>
22
+ <layout>
23
+ <updates>
24
+ <aboutep>
25
+ <file>aboutep.xml</file>
26
+ </aboutep>
27
+ </updates>
28
+ </layout>
29
+ </frontend>
30
+ <adminhtml>
31
+ <layout>
32
+ <updates>
33
+ <aboutep>
34
+ <file>aboutep.xml</file>
35
+ </aboutep>
36
+ </updates>
37
+ </layout>
38
+ </adminhtml>
39
+ <global>
40
+ <models>
41
+ <aboutep>
42
+ <class>Esellers_Aboutep_Model</class>
43
+ <resourceModel>aboutep_mysql4</resourceModel>
44
+ </aboutep>
45
+ <createep>
46
+ <rewrite>
47
+ <po>Esellers_Aboutep_Model_Createep</po>
48
+ <!-- statement>Unirgy_DropshipPo_Model_Statement</statement -->
49
+ </rewrite>
50
+ </createep>
51
+
52
+ </models>
53
+ <resources>
54
+ <aboutep_setup>
55
+ <setup>
56
+ <module>Esellers_Aboutep</module>
57
+ </setup>
58
+ <connection>
59
+ <use>core_setup</use>
60
+ </connection>
61
+ </aboutep_setup>
62
+ <aboutep_write>
63
+ <connection>
64
+ <use>core_write</use>
65
+ </connection>
66
+ </aboutep_write>
67
+ <aboutep_read>
68
+ <connection>
69
+ <use>core_read</use>
70
+ </connection>
71
+ </aboutep_read>
72
+ </resources>
73
+ <blocks>
74
+ <aboutep>
75
+ <class>Esellers_Aboutep_Block</class>
76
+ </aboutep>
77
+ </blocks>
78
+ <helpers>
79
+ <aboutep>
80
+ <class>Esellers_Aboutep_Helper</class>
81
+ </aboutep>
82
+ </helpers>
83
+ </global>
84
+ <default>
85
+ <aboutep>
86
+ <ENABLED>1</ENABLED>
87
+ <DBEngine>
88
+ <fullepurl>{{base_url}}/ep.txt</fullepurl>
89
+ <shortepurl>{{base_url}}/ep_summary.txt</shortepurl>
90
+ </DBEngine>
91
+ </aboutep>
92
+ </default>
93
+
94
+
95
+ </config>
app/code/community/Esellers/Aboutep/etc/system.xml ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <esellers translate="label" module="aboutep">
5
+ <label>Product DB EP</label>
6
+ <sort_order>200</sort_order>
7
+ </esellers>
8
+ </tabs>
9
+ <sections>
10
+ <aboutep translate="label">
11
+ <label>eBay korea about</label>
12
+ <tab>esellers</tab>
13
+ <frontend_type>text</frontend_type>
14
+ <sort_order>1000</sort_order>
15
+ <show_in_default>1</show_in_default>
16
+ <show_in_website>1</show_in_website>
17
+ <show_in_store>1</show_in_store>
18
+ <groups>
19
+ <!-- New groups go here -->
20
+ <DBEngine translate="label">
21
+ <label>Product DB Enging Page Information</label>
22
+ <frontend_type>text</frontend_type>
23
+ <sort_order>100</sort_order>
24
+ <show_in_default>1</show_in_default>
25
+ <show_in_website>1</show_in_website>
26
+ <show_in_store>1</show_in_store>
27
+ <fields>
28
+ <active translate="label">
29
+ <label>EP USE</label>
30
+ <frontend_type>select</frontend_type>
31
+ <source_model>adminhtml/system_config_source_yesno</source_model>
32
+ <sort_order>1</sort_order>
33
+ <show_in_default>1</show_in_default>
34
+ <show_in_website>1</show_in_website>
35
+ <show_in_store>0</show_in_store>
36
+ </active>
37
+
38
+ <fullepurl translate="label">
39
+ <label>Full EP URL</label>
40
+ <frontend_type>linkep</frontend_type>
41
+ <sort_order>1</sort_order>
42
+ <show_in_default>1</show_in_default>
43
+ <show_in_website>1</show_in_website>
44
+ <show_in_store>0</show_in_store>
45
+ </fullepurl>
46
+ <shortepurl translate="label">
47
+ <label>Short EP URL</label>
48
+ <frontend_type>linksummaryep</frontend_type>
49
+ <sort_order>2</sort_order>
50
+ <show_in_default>1</show_in_default>
51
+ <show_in_website>1</show_in_website>
52
+ <show_in_store>0</show_in_store>
53
+ </shortepurl>
54
+ <eplabel>
55
+ <frontend_type>labelAboutep</frontend_type>
56
+ <sort_order>3</sort_order>
57
+ <show_in_default>1</show_in_default>
58
+ <show_in_website>1</show_in_website>
59
+ <show_in_store>0</show_in_store>
60
+ </eplabel>
61
+ </fields>
62
+ </DBEngine>
63
+ </groups>
64
+ </aboutep>
65
+ </sections>
66
+
67
+ </config>
app/code/community/Esellers/Ipay/Block/Cart/Onepage.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Checkout
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Onepage checkout block
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Checkout
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Esellers_Ipay_Block_Onepage extends Mage_Checkout_Block_Onepage
35
+ {
36
+ /**
37
+ * Get 'one step checkout' step data
38
+ *
39
+ * @return array
40
+ */
41
+ public function getSteps()
42
+ {
43
+ $steps = array();
44
+ $stepCodes = $this->_getStepCodes();
45
+
46
+ if ($this->isCustomerLoggedIn()) {
47
+ $stepCodes = array_diff($stepCodes, array('login'));
48
+ }
49
+
50
+ foreach ($stepCodes as $step) {
51
+ $steps[$step] = $this->getCheckout()->getStepData($step);
52
+ }
53
+
54
+ return $steps;
55
+ }
56
+
57
+ /**
58
+ * Get active step
59
+ *
60
+ * @return string
61
+ */
62
+ public function getActiveStep()
63
+ {
64
+ return $this->isCustomerLoggedIn() ? 'billing' : 'login';
65
+ }
66
+ }
app/code/community/Esellers/Ipay/Block/Logo.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Esellers_Ipay_Block_Logo extends Mage_Core_Block_Template {
5
+
6
+
7
+
8
+ /**
9
+ * Disable block output if logo turned off
10
+ *
11
+ * @return string
12
+ */
13
+ protected function _toHtml()
14
+ {
15
+ return parent::_toHtml();
16
+ }
17
+ }
app/code/community/Esellers/Ipay/Block/Onepage/Review/Info.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Checkout
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * One page checkout order review
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Checkout
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Esellers_Ipay_Block_Onepage_Review_Info extends Mage_Sales_Block_Items_Abstract
35
+ {
36
+ public function getItems()
37
+ {
38
+ return Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems();
39
+ }
40
+
41
+ public function getTotals()
42
+ {
43
+ return Mage::getSingleton('checkout/session')->getQuote()->getTotals();
44
+ }
45
+ }
app/code/community/Esellers/Ipay/Block/Sales/Order/View.php ADDED
@@ -0,0 +1,323 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales order view
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Esellers_Ipay_Block_Sales_Order_View extends Mage_Adminhtml_Block_Sales_Order_View
35
+ {
36
+
37
+ public function __construct()
38
+ {
39
+ $this->_objectId = 'order_id';
40
+ $this->_controller = 'sales_order';
41
+ $this->_mode = 'view';
42
+
43
+ parent::__construct();
44
+
45
+ $this->_removeButton('delete');
46
+ $this->_removeButton('reset');
47
+ $this->_removeButton('save');
48
+ $this->setId('sales_order_view');
49
+ $order = $this->getOrder();
50
+
51
+ if ($this->_isAllowedAction('edit') && $order->canEdit()) {
52
+ $onclickJs = 'deleteConfirm(\''
53
+ . Mage::helper('sales')->__('Are you sure? This order will be canceled and a new one will be created instead')
54
+ . '\', \'' . $this->getEditUrl() . '\');';
55
+ $this->_addButton('order_edit', array(
56
+ 'label' => Mage::helper('sales')->__('Edit'),
57
+ 'onclick' => $onclickJs,
58
+ ));
59
+ // see if order has non-editable products as items
60
+ $nonEditableTypes = array_keys($this->getOrder()->getResource()->aggregateProductsByTypes(
61
+ $order->getId(),
62
+ array_keys(Mage::getConfig()
63
+ ->getNode('adminhtml/sales/order/create/available_product_types')
64
+ ->asArray()
65
+ ),
66
+ false
67
+ ));
68
+ if ($nonEditableTypes) {
69
+ $this->_updateButton('order_edit', 'onclick',
70
+ 'if (!confirm(\'' .
71
+ Mage::helper('sales')->__('This order contains (%s) items and therefore cannot be edited through the admin interface at this time, if you wish to continue editing the (%s) items will be removed, the order will be canceled and a new order will be placed.', implode(', ', $nonEditableTypes), implode(', ', $nonEditableTypes)) . '\')) return false;' . $onclickJs
72
+ );
73
+ }
74
+ }
75
+
76
+ if ($this->_isAllowedAction('cancel') && $order->canCancel()) {
77
+ $message = Mage::helper('sales')->__('Are you sure you want to cancel this order?');
78
+ $this->_addButton('order_cancel', array(
79
+ 'label' => Mage::helper('sales')->__('Cancel'),
80
+ 'onclick' => 'deleteConfirm(\''.$message.'\', \'' . $this->getCancelUrl() . '\')',
81
+ ));
82
+ }
83
+
84
+ if ($this->_isAllowedAction('emails') && !$order->isCanceled()) {
85
+ $message = Mage::helper('sales')->__('Are you sure you want to send order email to customer?');
86
+ $this->addButton('send_notification', array(
87
+ 'label' => Mage::helper('sales')->__('Send Email'),
88
+ 'onclick' => "confirmSetLocation('{$message}', '{$this->getEmailUrl()}')",
89
+ ));
90
+ }
91
+
92
+ if ($this->_isAllowedAction('creditmemo') && $order->canCreditmemo()) {
93
+ $message = Mage::helper('sales')->__('This will create an offline refund. To create an online refund, open an invoice and create credit memo for it. Do you wish to proceed?');
94
+ $onClick = "setLocation('{$this->getCreditmemoUrl()}')";
95
+ if ($order->getPayment()->getMethodInstance()->isGateway()) {
96
+ $onClick = "confirmSetLocation('{$message}', '{$this->getCreditmemoUrl()}')";
97
+ }
98
+ $this->_addButton('order_creditmemo', array(
99
+ 'label' => Mage::helper('sales')->__('Credit Memo'),
100
+ 'onclick' => $onClick,
101
+ 'class' => 'go'
102
+ ));
103
+ }
104
+
105
+ // invoice action intentionally
106
+ if ($this->_isAllowedAction('invoice') && $order->canVoidPayment()) {
107
+ $message = Mage::helper('sales')->__('Are you sure you want to void the payment?');
108
+ $this->addButton('void_payment', array(
109
+ 'label' => Mage::helper('sales')->__('Void'),
110
+ 'onclick' => "confirmSetLocation('{$message}', '{$this->getVoidPaymentUrl()}')",
111
+ ));
112
+ }
113
+
114
+ if ($this->_isAllowedAction('hold') && $order->canHold()) {
115
+ $this->_addButton('order_hold', array(
116
+ 'label' => Mage::helper('sales')->__('Hold'),
117
+ 'onclick' => 'setLocation(\'' . $this->getHoldUrl() . '\')',
118
+ ));
119
+ }
120
+
121
+ if ($this->_isAllowedAction('unhold') && $order->canUnhold()) {
122
+ $this->_addButton('order_unhold', array(
123
+ 'label' => Mage::helper('sales')->__('Unhold'),
124
+ 'onclick' => 'setLocation(\'' . $this->getUnholdUrl() . '\')',
125
+ ));
126
+ }
127
+
128
+ if ($this->_isAllowedAction('review_payment')) {
129
+ if ($order->canReviewPayment()) {
130
+ $message = Mage::helper('sales')->__('Are you sure you want to accept this payment?');
131
+ $this->_addButton('accept_payment', array(
132
+ 'label' => Mage::helper('sales')->__('Accept Payment'),
133
+ 'onclick' => "confirmSetLocation('{$message}', '{$this->getReviewPaymentUrl('accept')}')",
134
+ ));
135
+ $message = Mage::helper('sales')->__('Are you sure you want to deny this payment?');
136
+ $this->_addButton('deny_payment', array(
137
+ 'label' => Mage::helper('sales')->__('Deny Payment'),
138
+ 'onclick' => "confirmSetLocation('{$message}', '{$this->getReviewPaymentUrl('deny')}')",
139
+ ));
140
+ }
141
+ if ($order->canFetchPaymentReviewUpdate()) {
142
+ $this->_addButton('get_review_payment_update', array(
143
+ 'label' => Mage::helper('sales')->__('Get Payment Update'),
144
+ 'onclick' => 'setLocation(\'' . $this->getReviewPaymentUrl('update') . '\')',
145
+ ));
146
+ }
147
+ }
148
+
149
+ if ($this->_isAllowedAction('invoice') && $order->canInvoice()) {
150
+ $_label = $order->getForcedDoShipmentWithInvoice() ?
151
+ Mage::helper('sales')->__('Invoice and Ship') :
152
+ Mage::helper('sales')->__('Invoice');
153
+ $this->_addButton('order_invoice', array(
154
+ 'label' => $_label,
155
+ 'onclick' => 'setLocation(\'' . $this->getInvoiceUrl() . '\')',
156
+ 'class' => 'go'
157
+ ));
158
+ }
159
+
160
+ if ($this->_isAllowedAction('ship') && $order->canShip()
161
+ && !$order->getForcedDoShipmentWithInvoice()) {
162
+ $this->_addButton('order_ship', array(
163
+ 'label' => Mage::helper('sales')->__('Ship'),
164
+ 'onclick' => 'setLocation(\'' . $this->getShipUrl() . '\')',
165
+ 'class' => 'go'
166
+ ));
167
+ }
168
+
169
+ if ($this->_isAllowedAction('reorder')
170
+ && $this->helper('sales/reorder')->isAllowed($order->getStore())
171
+ && $order->canReorderIgnoreSalable()
172
+ ) {
173
+ $this->_addButton('order_reorder', array(
174
+ 'label' => Mage::helper('sales')->__('Reorder'),
175
+ 'onclick' => 'setLocation(\'' . $this->getReorderUrl() . '\')',
176
+ 'class' => 'go'
177
+ ));
178
+ }
179
+ }
180
+
181
+ /**
182
+ * Retrieve order model object
183
+ *
184
+ * @return Mage_Sales_Model_Order
185
+ */
186
+ public function getOrder()
187
+ {
188
+ return Mage::registry('sales_order');
189
+ }
190
+
191
+ /**
192
+ * Retrieve Order Identifier
193
+ *
194
+ * @return int
195
+ */
196
+ public function getOrderId()
197
+ {
198
+ return $this->getOrder()->getId();
199
+ }
200
+
201
+ public function getHeaderText()
202
+ {
203
+ if ($_extOrderId = $this->getOrder()->getExtOrderId()) {
204
+ $_extOrderId = '[' . $_extOrderId . '] ';
205
+ } else {
206
+ $_extOrderId = '';
207
+ }
208
+ return Mage::helper('sales')->__('Order # %s %s | %s', $this->getOrder()->getRealOrderId(), $_extOrderId, $this->formatDate($this->getOrder()->getCreatedAtDate(), 'medium', true));
209
+ }
210
+
211
+ public function getUrl($params='', $params2=array())
212
+ {
213
+ $params2['order_id'] = $this->getOrderId();
214
+ return parent::getUrl($params, $params2);
215
+ }
216
+
217
+ public function getEditUrl()
218
+ {
219
+ return $this->getUrl('*/sales_order_edit/start');
220
+ }
221
+
222
+ public function getEmailUrl()
223
+ {
224
+ return $this->getUrl('*/*/email');
225
+ }
226
+
227
+ public function getCancelUrl()
228
+ {
229
+ return $this->getUrl('*/*/cancel');
230
+ }
231
+
232
+ public function getInvoiceUrl()
233
+ {
234
+ return $this->getUrl('*/sales_order_invoice/start');
235
+ }
236
+
237
+ public function getCreditmemoUrl()
238
+ {
239
+ return $this->getUrl('*/sales_order_creditmemo/start');
240
+ }
241
+
242
+ public function getHoldUrl()
243
+ {
244
+ return $this->getUrl('*/*/hold');
245
+ }
246
+
247
+ public function getUnholdUrl()
248
+ {
249
+ return $this->getUrl('*/*/unhold');
250
+ }
251
+
252
+ public function getShipUrl()
253
+ {
254
+ return $this->getUrl('*/sales_order_shipment/start');
255
+ }
256
+
257
+ public function getCommentUrl()
258
+ {
259
+ return $this->getUrl('*/*/comment');
260
+ }
261
+
262
+ public function getReorderUrl()
263
+ {
264
+ return $this->getUrl('*/sales_order_create/reorder');
265
+ }
266
+
267
+ /**
268
+ * Payment void URL getter
269
+ */
270
+ public function getVoidPaymentUrl()
271
+ {
272
+ return $this->getUrl('*/*/voidPayment');
273
+ }
274
+
275
+ protected function _isAllowedAction($action)
276
+ {
277
+ return Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/' . $action);
278
+ }
279
+
280
+ /**
281
+ * Return back url for view grid
282
+ *
283
+ * @return string
284
+ */
285
+ public function getBackUrl()
286
+ {
287
+ if ($this->getOrder()->getBackUrl()) {
288
+ return $this->getOrder()->getBackUrl();
289
+ }
290
+
291
+ return $this->getUrl('*/*/');
292
+ }
293
+
294
+ public function getReviewPaymentUrl($action)
295
+ {
296
+ return $this->getUrl('*/*/reviewPayment', array('action' => $action));
297
+ }
298
+ //
299
+ // /**
300
+ // * Return URL for accept payment action
301
+ // *
302
+ // * @return string
303
+ // */
304
+ // public function getAcceptPaymentUrl()
305
+ // {
306
+ // return $this->getUrl('*/*/reviewPayment', array('action' => 'accept'));
307
+ // }
308
+ //
309
+ // /**
310
+ // * Return URL for deny payment action
311
+ // *
312
+ // * @return string
313
+ // */
314
+ // public function getDenyPaymentUrl()
315
+ // {
316
+ // return $this->getUrl('*/*/reviewPayment', array('action' => 'deny'));
317
+ // }
318
+ //
319
+ // public function getPaymentReviewUpdateUrl()
320
+ // {
321
+ // return $this->getUrl('*/*/reviewPaymentUpdate');
322
+ // }
323
+ }
app/code/community/Esellers/Ipay/Helper/Active.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Esellers_Ipay_Helper_Active extends Mage_Core_Helper_Abstract {
4
+
5
+ public function getAppId() {
6
+ return Mage::getStoreConfig('ipay/settings/appid');
7
+ }
8
+
9
+ public function getSecretKey() {
10
+ return Mage::getStoreConfig('ipay/settings/secret');
11
+ }
12
+
13
+ public function isActiveActivity()
14
+ {
15
+ return Mage::getStoreConfig('ipay/activity/enabled');
16
+ }
17
+ }
app/code/community/Esellers/Ipay/Helper/Data.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Esellers_Ipay_Helper_Data extends Mage_Core_Helper_Abstract
4
+ {
5
+
6
+ }
app/code/community/Esellers/Ipay/Model/Carrier/ShippingMethod.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Our test shipping method module adapter
5
+ */
6
+ class Esellers_Ipay_Model_Carrier_ShippingMethod extends Mage_Shipping_Model_Carrier_Abstract
7
+ {
8
+ /**
9
+ * unique internal shipping method identifier
10
+ *
11
+ * @var string [a-z0-9_]
12
+ */
13
+ protected $_code = 'ipay';
14
+
15
+ /**
16
+ * Collect rates for this shipping method based on information in $request
17
+ *
18
+ * @param Mage_Shipping_Model_Rate_Request $data
19
+ * @return Mage_Shipping_Model_Rate_Result
20
+ */
21
+ public function collectRates(Mage_Shipping_Model_Rate_Request $request)
22
+ {
23
+ // skip if not enabled
24
+ if (!Mage::getStoreConfig('carriers/'.$this->_code.'/active')) {
25
+ return false;
26
+ }
27
+
28
+ /**
29
+ * here we are retrieving shipping rates from external service
30
+ * or using internal logic to calculate the rate from $request
31
+ * you can see an example in Mage_Usa_Model_Shipping_Carrier_Ups::setRequest()
32
+ */
33
+
34
+ // get necessary configuration values
35
+ $handling = Mage::getStoreConfig('carriers/'.$this->_code.'/handling_fee');
36
+
37
+ // this object will be returned as result of this method
38
+ // containing all the shipping rates of this method
39
+ $result = Mage::getModel('shipping/rate_result');
40
+ $rate = Mage::getModel('shipping/rate_result_method');
41
+
42
+ $rate->setCarrier($this->_code);
43
+ $rate->setCarrierTitle($this->getConfigdata('title'));
44
+ $rate->setMethod('ipay');
45
+ $rate->setMethodTitle('Cash on Delivery');
46
+ $rate->setCost(2500);
47
+ $rate->setPrice($handling); //You should calculate this or obtain in a service
48
+
49
+ $result->append($rate);
50
+
51
+ return $result;
52
+ }
53
+
54
+ /**
55
+ * This method is used when viewing / listing Shipping Methods with Codes programmatically
56
+ */
57
+ public function getAllowedMethods() {
58
+ return array($this->_code => $this->getConfigData('name'));
59
+ }
60
+ }
61
+ ?>
app/code/community/Esellers/Ipay/Model/Ipay.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Esellers_Ipay_Model_Ipay extends Mage_Core_Model_Abstract {
4
+
5
+ var $orderno;
6
+ var $ipaycartno;
7
+ var $insdate;
8
+ var $paydate;
9
+ var $payprice;
10
+ var $paymenttype;
11
+ var $serviceurl;
12
+ var $redirecturl;
13
+ var $emoney;
14
+ var $itemnos;
15
+ var $cardname;
16
+ var $nointerestyn;
17
+ var $cardmonth;
18
+ var $cardnumb;
19
+ var $payno;
20
+ var $auctionorderno;
21
+ var $apprnumb;
22
+ var $cardcode;
23
+
24
+ public function _construct()
25
+ {
26
+ parent::_construct();
27
+ $this->_init('ipay/ipay');
28
+ }
29
+
30
+ function ipay(){
31
+ include dirname(__FILE__)."/conf.php";
32
+ $this->cfg = $cfg[ipay];
33
+ }
34
+
35
+ function reset(){
36
+ unset($this->orderno); unset($this->payno); unset($this->cartno); unset($this->itemno); unset($this->sdate);
37
+ unset($this->edate); unset($this->data); unset($this->error); unset($this->errormsg);
38
+ unset($this->request); unset($this->response);
39
+ }
40
+
41
+ function setAuctionOrderNo($auctionorderno){
42
+ $this->auctionorderno=$auctionorderno;
43
+ }
44
+ }
45
+ ?>
app/code/community/Esellers/Ipay/Model/Mysql4/Setup.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Esellers_Ipay_Mysql4_Setup extends Mage_Eav_Model_Entity_Setup
5
+ {
6
+ }
app/code/community/Esellers/Ipay/Model/Mysql4/ipay.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Esellers_Ipay_Model_Mysql4_Ipay extends Mage_Core_Model_Mysql4_Abstract
5
+ {
6
+ public function _construct()
7
+ {
8
+ parent::_construct();
9
+ $this->_init('ipay/ipay', 'id');
10
+ }
11
+ }
app/code/community/Esellers/Ipay/Model/Observer.php ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ include "ipaySession.php";
3
+ class Esellers_Ipay_Model_Observer {
4
+ const FLAG_SHOW_CONFIG = 'showConfig';
5
+ const FLAG_SHOW_CONFIG_FORMAT = 'showConfigFormat';
6
+
7
+ private $request;
8
+
9
+ public function cancel(Varien_Event_Observer $observer)
10
+ {
11
+ $ticket = Mage::getStoreConfig("payment/ipay/certification");
12
+ $id = Mage::getStoreConfig("payment/ipay/auctionid");
13
+ $requestOrderNo = new requestOrderNo ($ticket,$id);
14
+
15
+ $event = $observer->getEvent();
16
+ $order = $event->getPayment()->getOrder();
17
+ $orderid = $order->getIncrementId();
18
+
19
+ $read = Mage::getSingleton('core/resource')->getConnection('core_read');
20
+ $sql = "select * from ipay where order_id='$orderid'";
21
+
22
+ $result = $read->query($sql);
23
+
24
+ $payinfo = $result->fetch();
25
+ $ItemNos = $payinfo["auction_item_no"];
26
+ $OrderNo = $payinfo["auction_order_no"];
27
+
28
+ if($OrderNo!=""){
29
+ $nosArr = explode("@",$ItemNos);
30
+ $orderArr = explode("@",$OrderNo);
31
+
32
+ foreach($nosArr as $key=> $val){
33
+ if($val!=""){
34
+ $itemNo = explode("=",$val);
35
+ $requestResult = $requestOrderNo->doCancel($itemNo[1], $orderArr[$key]);
36
+ }
37
+ }
38
+ }
39
+ }
40
+
41
+ public function registerInvoice(Varien_Event_Observer $observer)
42
+ {
43
+ $ticket = Mage::getStoreConfig("payment/ipay/certification");
44
+ $id = Mage::getStoreConfig("payment/ipay/auctionid");
45
+ $requestOrderNo = new requestOrderNo ($ticket,$id);
46
+
47
+ if(Mage::getStoreConfig("payment/ipay/placeorderenable")){
48
+ $order = $observer->getData('order');
49
+ $orderid = $order->getIncrementId();
50
+
51
+ $read = Mage::getSingleton('core/resource')->getConnection('core_read');
52
+ $sql = "select * from ipay where order_id='$orderid'";
53
+
54
+ $result = $read->query($sql);
55
+
56
+ $payinfo = $result->fetch();
57
+ $ItemNos = $payinfo["auction_item_no"];
58
+ $OrderNo = $payinfo["auction_order_no"];
59
+
60
+ $orderList = explode("@",$OrderNo);
61
+
62
+ foreach($orderList as $key=> $val){
63
+ if($val!=""){
64
+ $requestResult = $requestOrderNo->doPlaceOrder($val);
65
+ }
66
+ }
67
+ }
68
+ }
69
+
70
+ public function startShipment(Varien_Event_Observer $observer)
71
+ {
72
+ $ticket = Mage::getStoreConfig("payment/ipay/certification");
73
+ $id = Mage::getStoreConfig("payment/ipay/auctionid");
74
+ $requestOrderNo = new requestOrderNo ($ticket,$id);
75
+
76
+ if(Mage::getStoreConfig("payment/ipay/shipmentenable")){
77
+ $order = $observer->getEvent()->getShipment();
78
+ //$order = $shipment->getOrder();
79
+ //$order = $observer->getData('shipment');
80
+ $orderid = $order->getOrderId();
81
+
82
+ foreach($order->getAllTracks() as $tracknum)
83
+ {
84
+ $tracknums[]=$tracknum->getNumber();
85
+ $trackcode[]=$tracknum->getCarrierCode();
86
+ }
87
+ $carriercode = $trackcode[0];
88
+ $numbers = $tracknums[0];
89
+
90
+ $read = Mage::getSingleton('core/resource')->getConnection('core_read');
91
+ $sql = "select entity_id,auction_order_no from sales_flat_order A,ipay B where A.increment_id=B.order_id and entity_id='$orderid'";
92
+
93
+ $result = $read->query($sql);
94
+
95
+ $payinfo = $result->fetch();
96
+ $OrderNo = $payinfo["auction_order_no"];
97
+
98
+ $orderList = explode("@",$OrderNo);
99
+ foreach($orderList as $key=> $val){
100
+ if($val!=""){
101
+ $requestResult = $requestOrderNo->doShipment($val,$numbers,$carriercode);
102
+ }
103
+ }
104
+ }
105
+ }
106
+
107
+ public function checkForConfigRequest($observer) {
108
+ $this->request = $observer->getEvent()->getData('front')->getRequest();
109
+ if($this->request->{self::FLAG_SHOW_CONFIG} === 'true'){
110
+ $this->setHeader();
111
+ $this->outputConfig();
112
+ }
113
+ }
114
+
115
+ private function setHeader() {
116
+ $format = isset($this->request->{self::FLAG_SHOW_CONFIG_FORMAT}) ?
117
+ $this->request->{self::FLAG_SHOW_CONFIG_FORMAT} : 'xml';
118
+ switch($format){
119
+ case 'text':
120
+ header("Content-Type: text/plain");
121
+ break;
122
+ default:
123
+ header("Content-Type: text/xml");
124
+ }
125
+ }
126
+
127
+ private function outputConfig() {
128
+ die(Mage::app()->getConfig()->getNode()->asXML());
129
+ }
130
+ }
app/code/community/Esellers/Ipay/Model/PaymentMethod.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Esellers_IPay_Model_PaymentMethod extends Mage_Payment_Model_Method_Checkmo
3
+ {
4
+ protected $_code = 'ipay';
5
+ protected $_isGateway = false;
6
+ protected $_canAuthorize = false;
7
+ protected $_canCapture = false;
8
+ protected $_canCapturePartial = false;
9
+ protected $_canRefund = false;
10
+ protected $_canVoid = false;
11
+ protected $_canUseInternal = true;
12
+ protected $_canUseCheckout = true;
13
+ protected $_canUseForMultishipping = true;
14
+ protected $_canSaveCc = false;
15
+
16
+ }
17
+ ?>
app/code/community/Esellers/Ipay/Model/System/Config/Source/Color.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BelVG LLC.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://store.belvg.com/BelVG-LICENSE-COMMUNITY.txt
11
+ *
12
+ /***************************************
13
+ * MAGENTO EDITION USAGE NOTICE *
14
+ *****************************************/
15
+ /* This package designed for Magento COMMUNITY edition
16
+ * BelVG does not guarantee correct work of this extension
17
+ * on any other Magento edition except Magento COMMUNITY edition.
18
+ * BelVG does not provide extension support in case of
19
+ * incorrect edition usage.
20
+ /***************************************
21
+ * DISCLAIMER *
22
+ *****************************************/
23
+ /* Do not edit or add to this file if you wish to upgrade Magento to newer
24
+ * versions in the future.
25
+ *****************************************************
26
+ * @category Esellers
27
+ * @package Esellers_Ipay
28
+ * @copyright Copyright (c) 2010 - 2011 BelVG LLC. (http://www.belvg.com)
29
+ * @license http://store.belvg.com/BelVG-LICENSE-COMMUNITY.txt
30
+ */
31
+
32
+ class Esellers_Ipay_Model_System_Config_Source_Color
33
+ {
34
+ public function toOptionArray()
35
+ {
36
+ return array(
37
+ //array('value'=>'', 'label'=>''),
38
+ array('value'=>'light', 'label'=>Mage::helper('ipay')->__('Light')),
39
+ array('value'=>'dark', 'label'=>Mage::helper('ipay')->__('Dark')),
40
+ );
41
+ }
42
+ }
app/code/community/Esellers/Ipay/Model/System/Config/Source/Company.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * To change this template, choose Tools | Templates
5
+ * and open the template in the editor.
6
+ */
7
+ ?>
app/code/community/Esellers/Ipay/Model/System/Config/Source/Escrow.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Used in creating options for Yes|No config value selection
29
+ *
30
+ */
31
+ class Esellers_Ipay_Model_System_Config_Source_Escrow
32
+ {
33
+
34
+ /**
35
+ * Options getter
36
+ *
37
+ * @return array
38
+ */
39
+ public function toOptionArray()
40
+ {
41
+ return array(
42
+ array('value' => Mage::getStoreConfig("web/unsecure/base_url")."skin/frontend/default/default/images/ipay/logo_ipay01.gif", 'label'=>Mage::helper('ipay')->__('Logo 1')),
43
+ array('value' => Mage::getStoreConfig("web/unsecure/base_url")."skin/frontend/default/default/images/ipay/logo_ipay02.gif", 'label'=>Mage::helper('ipay')->__('Logo 2')),
44
+ );
45
+ }
46
+
47
+ /**
48
+ * Get options in "key-value" format
49
+ *
50
+ * @return array
51
+ */
52
+ public function toArray()
53
+ {
54
+ return array(
55
+ Mage::getStoreConfig("web/unsecure/base_url")."skin/frontend/default/default/images/ipay/logo_ipay01.gif" => Mage::helper('ipay')->__('Logo 1'),
56
+ Mage::getStoreConfig("web/unsecure/base_url")."skin/frontend/default/default/images/ipay/logo_ipay02.gif" => Mage::helper('ipay')->__('Logo 2'),
57
+ );
58
+ }
59
+
60
+ }
app/code/community/Esellers/Ipay/Model/System/Config/Source/Font.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BelVG LLC.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://store.belvg.com/BelVG-LICENSE-COMMUNITY.txt
11
+ *
12
+ /***************************************
13
+ * MAGENTO EDITION USAGE NOTICE *
14
+ *****************************************/
15
+ /* This package designed for Magento COMMUNITY edition
16
+ * BelVG does not guarantee correct work of this extension
17
+ * on any other Magento edition except Magento COMMUNITY edition.
18
+ * BelVG does not provide extension support in case of
19
+ * incorrect edition usage.
20
+ /***************************************
21
+ * DISCLAIMER *
22
+ *****************************************/
23
+ /* Do not edit or add to this file if you wish to upgrade Magento to newer
24
+ * versions in the future.
25
+ *****************************************************
26
+ * @category Esellers
27
+ * @package Esellers_Ipay
28
+ * @copyright Copyright (c) 2010 - 2011 BelVG LLC. (http://www.belvg.com)
29
+ * @license http://store.belvg.com/BelVG-LICENSE-COMMUNITY.txt
30
+ */
31
+
32
+ class Esellers_Ipay_Model_System_Config_Source_Font
33
+ {
34
+ public function toOptionArray()
35
+ {
36
+ return array(
37
+ //array('value'=>'', 'label'=>''),
38
+ array('value'=>'arial', 'label'=>Mage::helper('facebookall')->__('Arial')),
39
+ array('value'=>'lucida grande', 'label'=>Mage::helper('facebookall')->__('Lucida Grande')),
40
+ array('value'=>'segoe ui', 'label'=>Mage::helper('facebookall')->__('Segoe Ui')),
41
+ array('value'=>'tahoma', 'label'=>Mage::helper('facebookall')->__('Tahoma')),
42
+ array('value'=>'trebuchet ms', 'label'=>Mage::helper('facebookall')->__('Trebuchet MS')),
43
+ array('value'=>'verdana', 'label'=>Mage::helper('facebookall')->__('Verdana')),
44
+ );
45
+ }
46
+ }
app/code/community/Esellers/Ipay/Model/System/Config/Source/Layout.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BelVG LLC.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://store.belvg.com/BelVG-LICENSE-COMMUNITY.txt
11
+ *
12
+ /***************************************
13
+ * MAGENTO EDITION USAGE NOTICE *
14
+ *****************************************/
15
+ /* This package designed for Magento COMMUNITY edition
16
+ * BelVG does not guarantee correct work of this extension
17
+ * on any other Magento edition except Magento COMMUNITY edition.
18
+ * BelVG does not provide extension support in case of
19
+ * incorrect edition usage.
20
+ /***************************************
21
+ * DISCLAIMER *
22
+ *****************************************/
23
+ /* Do not edit or add to this file if you wish to upgrade Magento to newer
24
+ * versions in the future.
25
+ *****************************************************
26
+ * @category Belvg
27
+ * @package Belvg_FacebookFree
28
+ * @copyright Copyright (c) 2010 - 2011 BelVG LLC. (http://www.belvg.com)
29
+ * @license http://store.belvg.com/BelVG-LICENSE-COMMUNITY.txt
30
+ */
31
+
32
+ class Belvg_FacebookFree_Model_System_Config_Source_Layout
33
+ {
34
+ public function toOptionArray()
35
+ {
36
+ return array(
37
+ //array('value'=>'', 'label'=>''),
38
+ array('value'=>'standart', 'label'=>Mage::helper('ipay')->__('Standart')),
39
+ array('value'=>'button_count', 'label'=>Mage::helper('ipay')->__('Button Count')),
40
+ array('value'=>'box_count', 'label'=>Mage::helper('ipay')->__('Box Count')),
41
+ );
42
+ }
43
+ }
app/code/community/Esellers/Ipay/Model/System/Config/Source/Paymethod.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Used in creating options for Yes|No config value selection
29
+ *
30
+ */
31
+ class Esellers_Ipay_Model_System_Config_Source_Paymethod
32
+ {
33
+
34
+ /**
35
+ * Options getter
36
+ *
37
+ * @return array
38
+ */
39
+ public function toOptionArray()
40
+ {
41
+ return array(
42
+ array('value' => 0, 'label'=>Mage::helper('ipay')->__('All')),
43
+ array('value' => 1, 'label'=>Mage::helper('ipay')->__('VBank,Bank,CPhone')),
44
+ array('value' => 2, 'label'=>Mage::helper('ipay')->__('Card,Bank,CPhone')),
45
+ array('value' => 3, 'label'=>Mage::helper('ipay')->__('VBank,Bank')),
46
+ );
47
+ }
48
+
49
+ /**
50
+ * Get options in "key-value" format
51
+ *
52
+ * @return array
53
+ */
54
+ public function toArray()
55
+ {
56
+ return array(
57
+ 0 => Mage::helper('ipay')->__('All'),
58
+ 1 => Mage::helper('ipay')->__('VBank,Bank,CPhone'),
59
+ 2 => Mage::helper('ipay')->__('Card,Bank,CPhone'),
60
+ 3 => Mage::helper('ipay')->__('VBank,CPhone'),
61
+ );
62
+ }
63
+
64
+ }
app/code/community/Esellers/Ipay/Model/System/Config/Source/Roundoff.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Used in creating options for Yes|No config value selection
29
+ *
30
+ */
31
+ class Esellers_Ipay_Model_System_Config_Source_Roundoff
32
+ {
33
+
34
+ /**
35
+ * Options getter
36
+ *
37
+ * @return array
38
+ */
39
+ public function toOptionArray()
40
+ {
41
+ return array(
42
+ array('value' => 'Floor', 'label'=>Mage::helper('ipay')->__('Floor')),
43
+ array('value' => 'Round off', 'label'=>Mage::helper('ipay')->__('Round off')),
44
+ array('value' => 'Ceil', 'label'=>Mage::helper('ipay')->__('Ceil')),
45
+ );
46
+ }
47
+
48
+ /**
49
+ * Get options in "key-value" format
50
+ *
51
+ * @return array
52
+ */
53
+ public function toArray()
54
+ {
55
+ return array(
56
+ 1 => Mage::helper('ipay')->__('Free'),
57
+ 2 => Mage::helper('ipay')->__('Cash on arrival'),
58
+ 3 => Mage::helper('ipay')->__('Prepaid'),
59
+ );
60
+ }
61
+
62
+ }
app/code/community/Esellers/Ipay/Model/System/Config/Source/Shiptype.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Used in creating options for Yes|No config value selection
29
+ *
30
+ */
31
+ class Esellers_Ipay_Model_System_Config_Source_Shiptype
32
+ {
33
+
34
+ /**
35
+ * Options getter
36
+ *
37
+ * @return array
38
+ */
39
+ public function toOptionArray()
40
+ {
41
+ return array(
42
+ array('value' => 1, 'label'=>Mage::helper('ipay')->__('Free')),
43
+ array('value' => 2, 'label'=>Mage::helper('ipay')->__('FREIGHT PREPAID')),
44
+ array('value' => 3, 'label'=>Mage::helper('ipay')->__('Prepaid')),
45
+ );
46
+ }
47
+
48
+ /**
49
+ * Get options in "key-value" format
50
+ *
51
+ * @return array
52
+ */
53
+ public function toArray()
54
+ {
55
+ return array(
56
+ 1 => Mage::helper('ipay')->__('Free'),
57
+ 2 => Mage::helper('ipay')->__('Cash on arrival'),
58
+ 3 => Mage::helper('ipay')->__('Prepaid'),
59
+ );
60
+ }
61
+
62
+ }
app/code/community/Esellers/Ipay/controllers/PaymentController.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Esellers_Ipay_PaymentController extends Mage_Core_Controller_Front_Action {
3
+
4
+ public function indexAction()
5
+ {
6
+ $this->loadLayout();
7
+ $this->renderLayout();
8
+ }
9
+
10
+ public function reviewAction()
11
+ {
12
+ $this->loadLayout();
13
+ $this->renderLayout();
14
+ }
15
+
16
+ public function cancelAction()
17
+ {
18
+ include "class.ipay.php";
19
+ //include "func.xml.php";
20
+
21
+ $xml = xml2array($GLOBALS['HTTP_RAW_POST_DATA']);
22
+ $_POST= $xml['IpayResponse'];
23
+ $url = Mage::getStoreConfig("web/secure/base_url");
24
+
25
+ $client = new SoapClient($url.'index.php/api/soap/?wsdl');
26
+
27
+ // If somestuff requires api authentification,
28
+ // then get a session token
29
+ $api_user = Mage::getStoreConfig("payment/ipay/apiuser");
30
+ $api_pass = Mage::getStoreConfig("payment/ipay/apipass");
31
+ $session = $client->login($api_user, $api_pass);
32
+ $orderNo = $_POST["AuctionOrderNo"];
33
+
34
+ $read = Mage::getSingleton("core/resource")->getConnection("core_read");
35
+
36
+ $sql = "select order_id from ipay where auction_order_no='$orderNo@'";
37
+ $result = $read->query($sql);
38
+ $payinfo = $result->fetch();
39
+ $ipayNo = $payinfo["order_id"];
40
+
41
+ try{
42
+ if($ipayNo!=""){
43
+ $result2 = $client->call($session, 'sales_order.info', "$ipayNo");
44
+
45
+ Mage::log($url.$ipayNo . " was canceling");
46
+ $client->call($session, 'sales_order.cancel', "$ipayNo");
47
+ Mage::log($ipayNo . " was canceled");
48
+ }
49
+
50
+ } catch (soapFault $fault){
51
+ Mage::log($fault->faultstring);
52
+ }
53
+ }
54
+ }
app/code/community/Esellers/Ipay/controllers/Sales/Order/ShipmentController.php ADDED
@@ -0,0 +1,365 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * To change this template, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+ require_once 'Mage/Adminhtml/controllers/Sales/Order/ShipmentController.php';
7
+
8
+ class Esellers_Ipay_Sales_Order_ShipmentController extends Mage_Adminhtml_Sales_Order_ShipmentController
9
+ {
10
+ /**
11
+ * Initialize shipment items QTY
12
+ */
13
+ protected function _getItemQtys()
14
+ {
15
+ parent::_getItemQtys();
16
+ }
17
+
18
+ /**
19
+ * Initialize shipment model instance
20
+ *
21
+ * @return Mage_Sales_Model_Order_Shipment|bool
22
+ */
23
+ protected function _initShipment()
24
+ {
25
+ $this->_title($this->__('Sales'))->_title($this->__('Shipments'));
26
+
27
+ $shipment = false;
28
+ $shipmentId = $this->getRequest()->getParam('shipment_id');
29
+ $orderId = $this->getRequest()->getParam('order_id');
30
+
31
+ if ($shipmentId) {
32
+ $shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
33
+ } elseif ($orderId) {
34
+ $order = Mage::getModel('sales/order')->load($orderId);
35
+
36
+ /**
37
+ * Check order existing
38
+ */
39
+ if (!$order->getId()) {
40
+ $this->_getSession()->addError($this->__('The order no longer exists.'));
41
+ return false;
42
+ }
43
+ /**
44
+ * Check shipment is available to create separate from invoice
45
+ */
46
+ if ($order->getForcedDoShipmentWithInvoice()) {
47
+ $this->_getSession()->addError($this->__('Cannot do shipment for the order separately from invoice.'));
48
+ return false;
49
+ }
50
+ /**
51
+ * Check shipment create availability
52
+ */
53
+ if (!$order->canShip()) {
54
+ $this->_getSession()->addError($this->__('Cannot do shipment for the order.'));
55
+ return false;
56
+ }
57
+ $savedQtys = $this->_getItemQtys();
58
+ $shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($savedQtys);
59
+
60
+ $tracks = $this->getRequest()->getPost('tracking');
61
+ if ($tracks) {
62
+ foreach ($tracks as $data) {
63
+ if (empty($data['number'])) {
64
+ Mage::throwException($this->__('Tracking number cannot1 be empty.'));
65
+ }
66
+
67
+
68
+ $track = Mage::getModel('sales/order_shipment_track')
69
+ ->addData($data);
70
+ $shipment->addTrack($track);
71
+ }
72
+ }
73
+ }
74
+
75
+ Mage::register('current_shipment', $shipment);
76
+ return $shipment;
77
+ }
78
+
79
+ /**
80
+ * Save shipment and order in one transaction
81
+ *
82
+ * @param Mage_Sales_Model_Order_Shipment $shipment
83
+ * @return Mage_Adminhtml_Sales_Order_ShipmentController
84
+ */
85
+ protected function _saveShipment($shipment)
86
+ {
87
+ parent::_saveShipment($shipment);
88
+ }
89
+
90
+ /**
91
+ * Shipment information page
92
+ */
93
+ public function viewAction()
94
+ {
95
+ if ($this->_initShipment()) {
96
+ $this->_title($this->__('View Shipment'));
97
+
98
+ $this->loadLayout();
99
+ $this->getLayout()->getBlock('sales_shipment_view')
100
+ ->updateBackButtonUrl($this->getRequest()->getParam('come_from'));
101
+ $this->_setActiveMenu('sales/order')
102
+ ->renderLayout();
103
+ } else {
104
+ $this->_forward('noRoute');
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Start create shipment action
110
+ */
111
+ public function startAction()
112
+ {
113
+ /**
114
+ * Clear old values for shipment qty's
115
+ */
116
+ $this->_redirect('*/*/new', array('order_id'=>$this->getRequest()->getParam('order_id')));
117
+ }
118
+
119
+ /**
120
+ * Shipment create page
121
+ */
122
+ public function newAction()
123
+ {
124
+ parent::newAction();
125
+ }
126
+
127
+ /**
128
+ * Save shipment
129
+ * We can save only new shipment. Existing shipments are not editable
130
+ *
131
+ * @return null
132
+ */
133
+ public function saveAction()
134
+ {
135
+ $data = $this->getRequest()->getPost('shipment');
136
+ if (!empty($data['comment_text'])) {
137
+ Mage::getSingleton('adminhtml/session')->setCommentText($data['comment_text']);
138
+ }
139
+
140
+ try {
141
+ $shipment = $this->_initShipment();
142
+ if (!$shipment) {
143
+ $this->_forward('noRoute');
144
+ return;
145
+ }
146
+
147
+ $shipment->register();
148
+ $comment = '';
149
+ if (!empty($data['comment_text'])) {
150
+ $shipment->addComment(
151
+ $data['comment_text'],
152
+ isset($data['comment_customer_notify']),
153
+ isset($data['is_visible_on_front'])
154
+ );
155
+ if (isset($data['comment_customer_notify'])) {
156
+ $comment = $data['comment_text'];
157
+ }
158
+ }
159
+
160
+ if (!empty($data['send_email'])) {
161
+ $shipment->setEmailSent(true);
162
+ }
163
+
164
+
165
+ $shipment->getOrder()->setCustomerNoteNotify(!empty($data['send_email']));
166
+ $responseAjax = new Varien_Object();
167
+ $isNeedCreateLabel = isset($data['create_shipping_label']) && $data['create_shipping_label'];
168
+
169
+ if ($isNeedCreateLabel && $this->_createShippingLabel($shipment)) {
170
+ $responseAjax->setOk(true);
171
+ }
172
+
173
+ $tracking = $this->getRequest()->getPost('tracking');
174
+
175
+ if(Mage::getStoreConfig("payment/ipay/active")){
176
+ foreach($tracking as $key=>$arr){
177
+ $tracknums = $arr["number"];
178
+ $trackcode = $arr["carrier_code"];
179
+
180
+ $flag=$this->chk($tracknums,$trackcode);
181
+ if($flag==false){
182
+ Mage::throwException($this->__('Invalid tracking number.'));
183
+ }
184
+ }
185
+ }
186
+
187
+ if($flag){
188
+ $this->_saveShipment($shipment);
189
+
190
+ $shipment->sendEmail(!empty($data['send_email']), $comment);
191
+
192
+ $shipmentCreatedMessage = $this->__('The shipment has been created.');
193
+ $labelCreatedMessage = $this->__('The shipping label has been created.');
194
+
195
+ $this->_getSession()->addSuccess($isNeedCreateLabel ? $shipmentCreatedMessage . ' ' . $labelCreatedMessage
196
+ : $shipmentCreatedMessage);
197
+ Mage::getSingleton('adminhtml/session')->getCommentText(true);
198
+ }
199
+ } catch (Mage_Core_Exception $e) {
200
+ if ($isNeedCreateLabel) {
201
+ $responseAjax->setError(true);
202
+ $responseAjax->setMessage($e->getMessage());
203
+ } else {
204
+ $this->_getSession()->addError($e->getMessage());
205
+ $this->_redirect('*/*/new', array('order_id' => $this->getRequest()->getParam('order_id')));
206
+ }
207
+ } catch (Exception $e) {
208
+ Mage::logException($e);
209
+ if ($isNeedCreateLabel) {
210
+ $responseAjax->setError(true);
211
+ $responseAjax->setMessage(
212
+ Mage::helper('sales')->__('An error occurred while creating shipping label.'));
213
+ } else {
214
+ $this->_getSession()->addError($this->__('Cannot save shipment.'));
215
+ $this->_redirect('*/*/new', array('order_id' => $this->getRequest()->getParam('order_id')));
216
+ }
217
+ }
218
+ if ($isNeedCreateLabel) {
219
+ $this->getResponse()->setBody($responseAjax->toJson());
220
+ } else {
221
+ $this->_redirect('*/sales_order/view', array('order_id' => $shipment->getOrderId()));
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Send email with shipment data to customer
227
+ */
228
+ public function emailAction()
229
+ {
230
+ parent::emailAction();
231
+ }
232
+
233
+ /**
234
+ * Add new tracking number action
235
+ */
236
+ public function addTrackAction()
237
+ {
238
+ try {
239
+ $carrier = $this->getRequest()->getPost('carrier');
240
+ $number = $this->getRequest()->getPost('number');
241
+ $title = $this->getRequest()->getPost('title');
242
+ if (empty($carrier)) {
243
+ Mage::throwException($this->__('The carrier needs to be specified.'));
244
+ }
245
+
246
+ if (empty($number)) {
247
+ Mage::throwException($this->__('Tracking number cannot be empty.'));
248
+ }
249
+
250
+ $flag=$this->chk($number,$carrier);
251
+ if($flag==false){
252
+ Mage::throwException($this->__("$flag".'Invalid tracking number.'));
253
+ }
254
+
255
+ $shipment = $this->_initShipment();
256
+
257
+ if ($shipment) {
258
+ $track = Mage::getModel('sales/order_shipment_track')
259
+ ->setNumber($number)
260
+ ->setCarrierCode($carrier)
261
+ ->setTitle($title);
262
+ $shipment->addTrack($track)
263
+ ->save();
264
+
265
+ $this->loadLayout();
266
+ $response = $this->getLayout()->getBlock('shipment_tracking')->toHtml();
267
+ } else {
268
+ $response = array(
269
+ 'error' => true,
270
+ 'message' => $this->__('Cannot initialize shipment for adding tracking number.1'),
271
+ );
272
+ }
273
+ } catch (Mage_Core_Exception $e) {
274
+ $response = array(
275
+ 'error' => true,
276
+ 'message' => $e->getMessage(),
277
+ );
278
+ } catch (Exception $e) {
279
+ $response = array(
280
+ 'error' => true,
281
+ 'message' => $this->__('Cannot add tracking number.'),
282
+ );
283
+ }
284
+ if (is_array($response)) {
285
+ $response = Mage::helper('core')->jsonEncode($response);
286
+ }
287
+ $this->getResponse()->setBody($response);
288
+ }
289
+
290
+ /**
291
+ * Return grid with shipping items for Ajax request
292
+ *
293
+ * @return Mage_Core_Controller_Response_Http
294
+ */
295
+ public function getShippingItemsGridAction()
296
+ {
297
+ $this->_initShipment();
298
+ return $this->getResponse()->setBody(
299
+ $this->getLayout()
300
+ ->createBlock('adminhtml/sales_order_shipment_packaging_grid')
301
+ ->setIndex($this->getRequest()->getParam('index'))
302
+ ->toHtml()
303
+ );
304
+ }
305
+
306
+ public function chk($invoiceNo,$company)
307
+ {
308
+ $digit=1;
309
+ if($company=="cjgls"){
310
+ if(strlen($invoiceNo)==12)
311
+ $digit=2;
312
+ else if(strlen($invoiceNo==11))
313
+ $digit=3;
314
+ }
315
+ $array = $this->invoiceNoLength();
316
+ $companyLength = $array[$company];
317
+
318
+ if(array_search($company,$array)!==false){
319
+ return true;
320
+ }
321
+
322
+ if(!$companyLength)
323
+ return true;
324
+
325
+ if(!array_search(strlen($invoiceNo),$companyLength)){
326
+ return false;
327
+ }
328
+
329
+ if($companyLength["flag"]){
330
+ $lastNum = substr($invoiceNo,-1);
331
+ $firstNum = substr($invoiceNo,0+($digit-1),-1);
332
+ if($firstNum%7 == $lastNum)
333
+ return true;
334
+ else
335
+ return false;
336
+ }else{
337
+ if($company=="epost" ){
338
+ $fnum = substr($invoiceNo,0,1);
339
+ $keyArr = array( 1=>6, 2=>7, 3=>8);
340
+ if(!array_search($fnum,$keyArr)){
341
+ return false;
342
+ }
343
+ }
344
+ }
345
+ }
346
+
347
+ public function invoiceNoLength(){
348
+ return array( "hanjin" => array("flag"=>true, 1=>10 ,2=>12),
349
+ "cjgls" => array("flag"=>true, 1=>10 ,2=>11 ,3=>12),
350
+ "kyungdong" => array("flag"=>false, 1=>8 ,2=>9 ,3=>10 ,4=>11 ,5=>12 ,6=>13 ,7=>14 ,8=>15 ,9=>16),
351
+ "korex" => array("flag"=>false, 1=>10),
352
+ "dongbu" => array("flag"=>true, 1=>12),
353
+ "innogis" => array("flag"=>false, 1=>10 ,2=>11 ,3=>12 ,4=>13),
354
+ "hanaro" => array("flag"=>true, 1=>10),
355
+ "hyundai" => array("flag"=>true, 1=>10 ,2=>12),
356
+ "yellow" => array("flag"=>true, 1=>11),
357
+ "kgb" => array("flag"=>true, 1=>11),
358
+ "epost" => array("flag"=>false, 1=>13),
359
+ "etc" => array(1=>10),
360
+ );
361
+ }
362
+ }
363
+
364
+
365
+ ?>
app/code/community/Esellers/Ipay/etc/adminhtml.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <acl>
5
+ <resources>
6
+ <all>
7
+ <title>Esellers IPAY</title>
8
+ </all>
9
+ <admin>
10
+ <children>
11
+ <system>
12
+ <children>
13
+ <config>
14
+ <children>
15
+ <ipay translate="label">
16
+ <title>Ipay Section</title>
17
+ </ipay>
18
+ </children>
19
+ </config>
20
+ </children>
21
+ </system>
22
+ </children>
23
+ </admin>
24
+ </resources>
25
+ </acl>
26
+ </config>
app/code/community/Esellers/Ipay/etc/config.xml ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <modules>
5
+ <Esellers_Ipay>
6
+ <version>1.1.0</version>
7
+ </Esellers_Ipay>
8
+ </modules>
9
+ <frontend>
10
+ <routers>
11
+ <ipay>
12
+ <use>standard</use>
13
+ <args>
14
+ <module>Esellers_Ipay</module>
15
+ <frontName>ipay</frontName>
16
+ </args>
17
+ </ipay>
18
+ </routers>
19
+ <default>
20
+ <router>ipay</router>
21
+ </default>
22
+ <layout>
23
+ <updates>
24
+ <ipay>
25
+ <file>ipay.xml</file>
26
+ </ipay>
27
+ </updates>
28
+ </layout>
29
+ </frontend>
30
+ <adminhtml>
31
+ <layout>
32
+ <updates>
33
+ <ipay>
34
+ <file>ipay.xml</file>
35
+ </ipay>
36
+ </updates>
37
+ </layout>
38
+ </adminhtml>
39
+ <global>
40
+ <rewrite>
41
+ <esellers_ipay_shipment>
42
+ <from><![CDATA[#^/admin/sales_order_shipment/addTrack/#]]></from>
43
+ <to>/ipay/sales_order_shipment/addTrack/</to>
44
+ <from><![CDATA[#^/admin/sales_order_shipment/save/#]]></from>
45
+ <to>/ipay/sales_order_shipment/save/</to>
46
+ </esellers_ipay_shipment>
47
+ </rewrite>
48
+ <models>
49
+ <ipay>
50
+ <class>Esellers_Ipay_Model</class>
51
+ <resourceModel>ipay_mysql4</resourceModel>
52
+ </ipay>
53
+ <ipay_mysql4>
54
+ <class>Esellers_Ipay_Model</class>
55
+ <entities>
56
+ <ipay>
57
+ <table>ipay_ipay</table>
58
+ </ipay>
59
+ </entities>
60
+ </ipay_mysql4>
61
+ </models>
62
+ <resources>
63
+ <ipay_setup>
64
+ <setup>
65
+ <module>Esellers_Ipay</module>
66
+ </setup>
67
+ <connection>
68
+ <use>core_setup</use>
69
+ </connection>
70
+ </ipay_setup>
71
+ <ipay_write>
72
+ <connection>
73
+ <use>core_write</use>
74
+ </connection>
75
+ </ipay_write>
76
+ <ipay_read>
77
+ <connection>
78
+ <use>core_read</use>
79
+ </connection>
80
+ </ipay_read>
81
+ </resources>
82
+ <blocks>
83
+ <ipay>
84
+ <class>Esellers_Ipay_Block</class>
85
+ </ipay>
86
+ </blocks>
87
+ <helpers>
88
+ <ipay>
89
+ <class>Esellers_Ipay_Helper</class>
90
+ </ipay>
91
+ </helpers>
92
+
93
+ <events>
94
+ <sales_order_payment_cancel>
95
+ <observers>
96
+ <esellers_ipay_observer>
97
+ <type>singleton</type>
98
+ <class>Esellers_Ipay_Model_Observer</class>
99
+ <method>cancel</method>
100
+ </esellers_ipay_observer>
101
+ </observers>
102
+ </sales_order_payment_cancel>
103
+ <sales_order_invoice_register>
104
+ <observers>
105
+ <esellers_ipay_observer>
106
+ <type>singleton</type>
107
+ <class>Esellers_Ipay_Model_Observer</class>
108
+ <method>registerInvoice</method>
109
+ </esellers_ipay_observer>
110
+ </observers>
111
+ </sales_order_invoice_register>
112
+ <sales_order_shipment_save_after>
113
+ <observers>
114
+ <esellers_ipay_observer>
115
+ <type>singleton</type>
116
+ <class>Esellers_Ipay_Model_Observer</class>
117
+ <method>startShipment</method>
118
+ </esellers_ipay_observer>
119
+ </observers>
120
+ </sales_order_shipment_save_after>
121
+ </events>
122
+ </global>
123
+ <default>
124
+ <ipay>
125
+ <style>
126
+ <logo>nowAccepting_150x60</logo>z`
127
+ </style>
128
+ <activity>
129
+ <enabled>0</enabled>
130
+ <width>200</width>
131
+ <height>300</height>
132
+ <header>1</header>
133
+ <color>light</color>
134
+ <recommendations>1</recommendations>
135
+ <maxage>0</maxage>
136
+ </activity>
137
+ </ipay>
138
+ <payment>
139
+ <ipay>
140
+ <active>1</active>
141
+ <model>ipay/paymentMethod</model>
142
+ <order_status>pending</order_status>
143
+ <title>ipay</title>
144
+ <allowspecific>0</allowspecific>
145
+ <cancelrestriction>1</cancelrestriction>
146
+ <address_required>1</address_required>
147
+ </ipay>
148
+ </payment>
149
+ </default>
150
+ </config>
app/code/community/Esellers/Ipay/etc/system.xml ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <esellers translate="label" module="ipay">
5
+ <label>Ipay</label>
6
+ <sort_order>200</sort_order>
7
+ </esellers>
8
+ </tabs>
9
+ <sections>
10
+ <ipay translate="label">
11
+ <label>Ipay setting</label>
12
+ <tab>esellers</tab>
13
+ <frontend_type>text</frontend_type>
14
+ <sort_order>1000</sort_order>
15
+ <show_in_default>1</show_in_default>
16
+ <show_in_website>1</show_in_website>
17
+ <show_in_store>1</show_in_store>
18
+ <groups>
19
+ <!-- New groups go here -->
20
+ <logo_image translate="label">
21
+ </logo_image>
22
+ </groups>
23
+ </ipay>
24
+ <carriers>
25
+ <groups>
26
+ <ipay translate="label" module="shipping">
27
+ <label>iPay Shipping Fee</label>
28
+ <frontend_type>text</frontend_type>
29
+ <sort_order>13</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
+ <fields>
34
+ <active translate="label">
35
+ <label>Enabled</label>
36
+ <frontend_type>select</frontend_type>
37
+ <source_model>adminhtml/system_config_source_yesno</source_model>
38
+ <sort_order>1</sort_order>
39
+ <show_in_default>1</show_in_default>
40
+ <show_in_website>1</show_in_website>
41
+ <show_in_store>1</show_in_store>
42
+ </active>
43
+ <!--
44
+ If the free_shipping_enable flag enable, the system will check free_shipping_subtotal to give free shipping
45
+ otherwise will use shopping cart price rule behaviour
46
+ -->
47
+
48
+ <sort_order translate="label">
49
+ <label>Sort order</label>
50
+ <frontend_type>text</frontend_type>
51
+ <sort_order>100</sort_order>
52
+ <show_in_default>1</show_in_default>
53
+ <show_in_website>1</show_in_website>
54
+ <show_in_store>1</show_in_store>
55
+ </sort_order>
56
+ <title translate="label">
57
+ <label>Title</label>
58
+ <frontend_type>text</frontend_type>
59
+ <sort_order>2</sort_order>
60
+ <show_in_default>1</show_in_default>
61
+ <show_in_website>1</show_in_website>
62
+ <show_in_store>1</show_in_store>
63
+ </title>
64
+
65
+ </fields>
66
+ </ipay>
67
+ </groups>
68
+ </carriers>
69
+
70
+
71
+ <payment>
72
+ <groups>
73
+ <!-- newmodule fieldset -->
74
+ <ipay translate="label" module="paygate">
75
+ <!-- will have title 'New Module' -->
76
+ <label>iPay</label>
77
+ <frontend_type>text</frontend_type>
78
+ <!-- position between other payment methods -->
79
+ <sort_order>670</sort_order>
80
+
81
+ <!-- do not show this configuration options in store scope -->
82
+ <show_in_default>1</show_in_default>
83
+ <show_in_website>1</show_in_website>
84
+ <show_in_store>1</show_in_store>
85
+ <fields>
86
+ <!-- is this payment method active for the website? -->
87
+ <active translate="label">
88
+ <!-- label for the field -->
89
+ <label>Enabled</label>
90
+ <!-- input type for configuration value -->
91
+ <frontend_type>select</frontend_type>
92
+ <!-- model to take the option values from -->
93
+ <source_model>adminhtml/system_config_source_yesno</source_model>
94
+ <!-- field position -->
95
+ <sort_order>1</sort_order>
96
+ <!-- do not show this field in store scope -->
97
+ <show_in_default>1</show_in_default>
98
+ <show_in_website>1</show_in_website>
99
+ <show_in_store>0</show_in_store>
100
+ </active>
101
+
102
+ <title translate="label">
103
+ <label>Title</label>
104
+ <frontend_type>text</frontend_type>
105
+ <sort_order>1</sort_order>
106
+ <show_in_default>1</show_in_default>
107
+ <show_in_website>1</show_in_website>
108
+ <show_in_store>0</show_in_store>
109
+ </title>
110
+ <certification translate="label">
111
+ <label>key</label>
112
+ <frontend_type>text</frontend_type>
113
+ <source_model>ipay/system_config_source_shiptype</source_model>
114
+ <sort_order>3</sort_order>
115
+ <show_in_default>1</show_in_default>
116
+ <show_in_website>1</show_in_website>
117
+ <show_in_store>0</show_in_store>
118
+
119
+ <comment><![CDATA[
120
+ <a href="javascript:window.open('http://ipay.auction.co.kr/ipay/SellerRegister.aspx',500,500);void(0)"><img src="http://click4.checkoutshop.co.kr/skin/frontend/default/default/images/ipay/sbtn_ipay.gif" vspace="5" align="absmiddle"></a>
121
+ <span class="stxt gray"></span>
122
+ ]]></comment>
123
+ </certification>
124
+
125
+ <auctionid translate="label">
126
+ <label>auction id</label>
127
+ <frontend_type>text</frontend_type>
128
+ <sort_order>4</sort_order>
129
+ <show_in_default>1</show_in_default>
130
+ <show_in_website>1</show_in_website>
131
+ <show_in_store>0</show_in_store>
132
+ </auctionid>
133
+
134
+ <apiuser translate="label">
135
+ <label>API User Name</label>
136
+ <frontend_type>text</frontend_type>
137
+ <sort_order>5</sort_order>
138
+ <show_in_default>1</show_in_default>
139
+ <show_in_website>1</show_in_website>
140
+ <show_in_store>0</show_in_store>
141
+ </apiuser>
142
+
143
+ <apipass translate="label">
144
+ <label>API Key</label>
145
+ <frontend_type>password</frontend_type>
146
+ <sort_order>6</sort_order>
147
+ <show_in_default>1</show_in_default>
148
+ <show_in_website>1</show_in_website>
149
+ <show_in_store>0</show_in_store>
150
+ </apipass>
151
+
152
+ <ipay_payment_method translate="label">
153
+ <label>payment method</label>
154
+ <frontend_type>select</frontend_type>
155
+ <source_model>ipay/system_config_source_paymethod</source_model>
156
+ <sort_order>7</sort_order>
157
+ <show_in_default>1</show_in_default>
158
+ <show_in_website>1</show_in_website>
159
+ <show_in_store>0</show_in_store>
160
+ </ipay_payment_method>
161
+
162
+ <cancelrestriction translate="label">
163
+ <label>cancel restriction/auto place order</label>
164
+ <frontend_type>select</frontend_type>
165
+ <source_model>adminhtml/system_config_source_yesno</source_model>
166
+ <sort_order>8</sort_order>
167
+ <show_in_default>1</show_in_default>
168
+ <show_in_website>1</show_in_website>
169
+ <show_in_store>0</show_in_store>
170
+ </cancelrestriction>
171
+
172
+
173
+
174
+
175
+
176
+ <escrow translate="label">
177
+ <label>Escrow Image</label>
178
+ <frontend_type>select</frontend_type>
179
+ <source_model>ipay/system_config_source_escrow</source_model>
180
+ <sort_order>101</sort_order>
181
+ <show_in_default>1</show_in_default>
182
+ <show_in_website>1</show_in_website>
183
+ <show_in_store>1</show_in_store>
184
+ <comment><![CDATA[
185
+ <span ><table width='100%' >
186
+ <tr><td align=center width=50%>Logo 1</td><td align=center width=50%>Logo 2</td></tr>
187
+ <tr><td align=center><img src='http://click4.checkoutshop.co.kr/skin/frontend/default/default/images/ipay/logo_ipay01.gif'></td><td align=center><img src='http://click4.checkoutshop.co.kr/skin/frontend/default/default/images/ipay/logo_ipay02.gif'></td></tr></table>
188
+ </span>
189
+ ]]>
190
+ </comment>
191
+ </escrow>
192
+
193
+ <escrow_enable translate="label">
194
+ <label>Enable Escrow Image</label>
195
+ <frontend_type>select</frontend_type>
196
+ <source_model>adminhtml/system_config_source_yesno</source_model>
197
+ <sort_order>100</sort_order>
198
+ <show_in_default>1</show_in_default>
199
+ <show_in_website>1</show_in_website>
200
+ <show_in_store>1</show_in_store>
201
+ </escrow_enable>
202
+
203
+ <placeorderenable translate="label">
204
+ <label>Place Order When Invoice created</label>
205
+ <frontend_type>select</frontend_type>
206
+ <source_model>adminhtml/system_config_source_yesno</source_model>
207
+ <sort_order>102</sort_order>
208
+ <show_in_default>1</show_in_default>
209
+ <show_in_website>1</show_in_website>
210
+ <show_in_store>1</show_in_store>
211
+ </placeorderenable>
212
+
213
+ <shipmentenable translate="label">
214
+ <label>Create iPay Ship When shipped</label>
215
+ <frontend_type>select</frontend_type>
216
+ <source_model>adminhtml/system_config_source_yesno</source_model>
217
+ <sort_order>103</sort_order>
218
+ <show_in_default>1</show_in_default>
219
+ <show_in_website>1</show_in_website>
220
+ <show_in_store>1</show_in_store>
221
+ </shipmentenable>
222
+ <address_required>
223
+ <label>Address Required</label>
224
+ <frontend_type>select</frontend_type>
225
+ <source_model>adminhtml/system_config_source_yesno</source_model>
226
+ <sort_order>104</sort_order>
227
+ <show_in_default>1</show_in_default>
228
+ <show_in_website>1</show_in_website>
229
+ <show_in_store>1</show_in_store>
230
+ </address_required>
231
+
232
+ <!--shipcompany translate="label">
233
+ <label>shipment company</label>
234
+ <frontend_type>select</frontend_type>
235
+ <source_model>ipay/system_config_source_company</source_model>
236
+ <sort_order>104</sort_order>
237
+ <show_in_default>1</show_in_default>
238
+ <show_in_website>1</show_in_website>
239
+ <show_in_store>1</show_in_store>
240
+ </shipcompany-->
241
+ </fields>
242
+ </ipay>
243
+ </groups>
244
+ </payment>
245
+ </sections>
246
+ </config>
app/code/community/Esellers/Ipay/sql/ipay_setup/mysql4-upgrade-1.0.0-1.1.0.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * To change this template, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+ $installer = $this;
7
+ $installer->startSetup();
8
+
9
+ $installer->run("
10
+ CREATE TABLE IF NOT EXISTS {$this->getTable('ipay')} (
11
+ `ipay_id` int(11) unsigned NOT NULL auto_increment,
12
+ `auction_order_no` varchar(50) NOT NULL,
13
+ `ipay_cart_no` int(10) NOT NULL,
14
+ `orderdate` date,
15
+ `bankcode` varchar(20) ,
16
+ `bankname` varchar(50) ,
17
+ `paydate` date,
18
+ `payprice` int(10),
19
+ `payment_type` char(1),
20
+ `expire_date` date,
21
+ `card_name` varchar(20),
22
+ `auction_pay_no` varchar(20),
23
+ `quote_id` int(11),
24
+ `order_id` varchar(30),
25
+ `checkoutsession` varchar(200),
26
+ `auction_item_no` varchar(20),
27
+ PRIMARY KEY (`ipay_id`)
28
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
29
+
30
+ insert into core_config_data (scope, scope_id,path,value) values ('default',0,'carriers/ipay/model','Esellers_Ipay_Model_Carrier_ShippingMethod');
31
+ insert into core_config_data (scope, scope_id,path,value) values ('default',0,'carriers/ipay/handling_fee','0');
32
+ insert into core_config_data (scope, scope_id,path,value) values ('default',0,'carriers/ipay/active','1');
33
+ insert into core_config_data (scope, scope_id,path,value) values ('default',0,'carriers/ipay/title','Cash On Delivery');
34
+ insert into core_config_data (scope, scope_id,path,value) values ('default',0,'carriers/ipay/handling_action','O');
35
+ insert into core_config_data (scope, scope_id,path,value) values ('default',0,'carriers/ipay/handling_type','F');
36
+ insert into core_config_data (scope, scope_id,path,value) values ('default',0,'carriers/ipay/shiptype','3');
37
+ insert into core_config_data (scope, scope_id,path,value) values ('default',0,'pament/ipay/ipayuse','1');
38
+ insert into core_config_data (scope, scope_id,path,value) values ('default',0,'pament/ipay/ipay_payment_method','0')
39
+ ");
40
+ $installer->endSetup();
41
+ ?>
app/code/community/Esellers/Naverep/Block/System/Config/Form/Fieldep.php ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Form element default renderer
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Esellers_Naverep_Block_System_Config_Form_Fieldep extends Mage_Adminhtml_Block_Template implements Varien_Data_Form_Element_Renderer_Interface
35
+ {
36
+ protected $_element;
37
+
38
+ /**
39
+ * Enter description here...
40
+ *
41
+ * @param Varien_Data_Form_Element_Abstract $element
42
+ * @return string
43
+ */
44
+ public function render(Varien_Data_Form_Element_Abstract $element)
45
+ {
46
+ $id = $element->getHtmlId();
47
+
48
+ $html = '<td class="label"><label for="'.$id.'">'.$element->getLabel().'</label></td>';
49
+
50
+ //$isDefault = !$this->getRequest()->getParam('website') && !$this->getRequest()->getParam('store');
51
+ $isMultiple = $element->getExtType()==='multiple';
52
+
53
+ // replace [value] with [inherit]
54
+ $namePrefix = preg_replace('#\[value\](\[\])?$#', '', $element->getName());
55
+
56
+ $options = $element->getValues();
57
+
58
+ $addInheritCheckbox = false;
59
+ if ($element->getCanUseWebsiteValue()) {
60
+ $addInheritCheckbox = true;
61
+ $checkboxLabel = Mage::helper('adminhtml')->__('Use Website');
62
+ }
63
+ elseif ($element->getCanUseDefaultValue()) {
64
+ $addInheritCheckbox = true;
65
+ $checkboxLabel = Mage::helper('adminhtml')->__('Use Default');
66
+ }
67
+
68
+ if ($addInheritCheckbox) {
69
+ $inherit = $element->getInherit()==1 ? 'checked="checked"' : '';
70
+ if ($inherit) {
71
+ $element->setDisabled(true);
72
+ }
73
+ }
74
+
75
+ if ($element->getTooltip()) {
76
+ $html .= '<td class="value with-tooltip">';
77
+ $html .= $this->_getElementHtml($element);
78
+ $html .= '<div class="field-tooltip"><div>' . $element->getTooltip() . '</div></div>';
79
+ } else {
80
+ $html .= '<td class="value">';
81
+ $html .= $this->_getElementHtml($element);
82
+ };
83
+ if ($element->getComment()) {
84
+ $html.= '<p class="note"><span>'.$element->getComment().'</span></p>';
85
+ }
86
+ $html.= '</td>';
87
+
88
+ if ($addInheritCheckbox) {
89
+
90
+ $defText = $element->getDefaultValue();
91
+ if ($options) {
92
+ $defTextArr = array();
93
+ foreach ($options as $k=>$v) {
94
+ if ($isMultiple) {
95
+ if (is_array($v['value']) && in_array($k, $v['value'])) {
96
+ $defTextArr[] = $v['label'];
97
+ }
98
+ } elseif ($v['value']==$defText) {
99
+ $defTextArr[] = $v['label'];
100
+ break;
101
+ }
102
+ }
103
+ $defText = join(', ', $defTextArr);
104
+ }
105
+
106
+ // default value
107
+ $html.= '<td class="use-default">';
108
+ //$html.= '<input id="'.$id.'_inherit" name="'.$namePrefix.'[inherit]" type="checkbox" value="1" class="input-checkbox config-inherit" '.$inherit.' onclick="$(\''.$id.'\').disabled = this.checked">';
109
+ $html.= '<input id="'.$id.'_inherit" name="'.$namePrefix.'[inherit]" type="checkbox" value="1" class="checkbox config-inherit" '.$inherit.' onclick="toggleValueElements(this, Element.previous(this.parentNode))" /> ';
110
+ $html.= '<label for="'.$id.'_inherit" class="inherit" title="'.htmlspecialchars($defText).'">'.$checkboxLabel.'</label>';
111
+ $html.= '</td>';
112
+ }
113
+
114
+ $html.= '<td class="scope-label">';
115
+ if ($element->getScope()) {
116
+ $html .= $element->getScopeLabel();
117
+ }
118
+ $html.= '</td>';
119
+
120
+ $html.= '<td class="">';
121
+ if ($element->getHint()) {
122
+ $html.= '<div class="hint" >';
123
+ $html.= '<div style="display: none;">' . $element->getHint() . '</div>';
124
+ $html.= '</div>';
125
+ }
126
+ $html.= '</td>';
127
+
128
+ return $this->_decorateRowHtml($element, $html);
129
+ }
130
+
131
+ /**
132
+ * Decorate field row html
133
+ *
134
+ * @param Varien_Data_Form_Element_Abstract $element
135
+ * @param string $html
136
+ * @return string
137
+ */
138
+ protected function _decorateRowHtml($element, $html)
139
+ {
140
+ return '<tr id="row_' . $element->getHtmlId() . '">' . $html . '</tr>';
141
+ }
142
+ }
app/code/community/Esellers/Naverep/Helper/Data.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Esellers_Naverep_Helper_Data extends Mage_Core_Helper_Abstract
4
+ {
5
+
6
+ }
app/code/community/Esellers/Naverep/Model/Createep.php ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Esellers_Naverep_Model_Createep extends Mage_Core_Model_Abstract
3
+ {
4
+ var $fp;
5
+
6
+ public function makeEp() {
7
+ $productIds=$this->getProductIds(1);
8
+
9
+ $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addIdFilter($productIds);
10
+
11
+ $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
12
+ $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
13
+ $shipfee = (int)Mage::helper('directory')->currencyConvert($this->getAllShippingPrice(), $baseCurrencyCode, $currentCurrencyCode);
14
+
15
+ //$fp = fopen(Mage::getBaseDir()."/ep.txt","w+");
16
+ $data = "<<<begin>>>\n";
17
+
18
+ foreach ($collection as $product){
19
+ $price = (int)Mage::helper('directory')->currencyConvert($product->getPrice(), $baseCurrencyCode, $currentCurrencyCode);
20
+
21
+ $imgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
22
+ $pgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK).$product->getUrlPath();
23
+ $data .= "<<<mapid>>>".$product->getSku()."\n";
24
+ $data .= "<<<pname>>>".$product->getName()."\n";
25
+ $data .= "<<<price>>>".$price."\n";
26
+ $data .= "<<<pgurl>>>".$pgurl."\n";
27
+ $data .= "<<<mourl>>>".$pgurl."\n";
28
+ $data .= "<<<igurl>>>".$imgurl."\n";
29
+
30
+ foreach ($product->getCategoryIds() as $category_id) {
31
+ $category = Mage::getModel('catalog/category')->load($category_id);
32
+ $data.= $this->getCategoryData($category_id,"",$category->getLevel());
33
+ }
34
+
35
+ $data .= "<<<model>>>".$product->getModel()."\n";
36
+ //$data .= "<<<brand>>>".$product->getAttributeText('computer_manufacturers')."\n";
37
+ $data .= "<<<maker>>>".$product->getAttributeText('manufacturer')."\n";
38
+ $data .= "<<<origi>>>".$product->getAttributeText('country_of_manufacture')."\n";
39
+ $data .= "<<<deliv>>>$shipfee\n";
40
+ $data .= "<<<event>>>\n";
41
+ }
42
+ $data .= "<<<ftend>>>\n";
43
+ header("Cache-Control: no-cache, must-revalidate");
44
+ header("Content-Type: text/plain; charset=euc-kr");
45
+ echo $data;
46
+ //fwrite($fp,$data);
47
+ //fclose($fp);
48
+ }
49
+
50
+ public function getCategoryData($category_id,$data,$initLevel){
51
+ $category = Mage::getModel('catalog/category')->load($category_id);
52
+ $level = $category->getLevel();
53
+ if($level>1){
54
+ $data="<<<cate".($level-1).">>>".$category->getName()."\n".$data;
55
+ $data="<<<caid".($level-1).">>>".$category_id."\n".$data;
56
+
57
+ return $this->getCategoryData($category->getParentId(),$data,$initLevel);
58
+ }else{
59
+ for($i=$initLevel;$i<5;$i++){
60
+ $data.="<<<cate".($i).">>>\n";
61
+ $data.="<<<caid".($i).">>>\n";
62
+ }
63
+ return $data;
64
+ }
65
+ }
66
+
67
+ public function makeSummaryep() {
68
+
69
+ $data = "<<<begin>>>\n";
70
+ $productIds=$this->getProductIds(1);
71
+ $nowtime=date("Y-m-d", time()-86400)." 08:00:00";
72
+ $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addFieldToFilter("updated_at",array("gt"=>"$nowtime"))->addIdFilter($productIds);
73
+
74
+ $data .= $this->makeTxt("in",$collection);
75
+
76
+
77
+ $productIds_out=$this->getProductIds(0);
78
+
79
+ $collection_out = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addIdFilter($productIds_out);
80
+ $data .= $this->makeTxt("out",$collection_out);
81
+
82
+
83
+ $data .= "<<<ftend>>>\n";
84
+
85
+
86
+ header("Cache-Control: no-cache, must-revalidate");
87
+ header("Content-Type: text/plain; charset=euc-kr");
88
+ echo $data;
89
+ }
90
+
91
+ public function getProductIds($status){
92
+ $stockCollection = Mage::getModel('cataloginventory/stock_item')->getCollection()->addFieldToFilter('is_in_stock',$status);
93
+ $productIds = array();
94
+
95
+ foreach ($stockCollection as $item){
96
+ $productIds[] = $item->getOrigData('product_id');
97
+ }
98
+ return $productIds;
99
+ }
100
+
101
+ public function makeTxt($mode,$collection){
102
+ $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
103
+ $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
104
+ $shipfee = (int)Mage::helper('directory')->currencyConvert($this->getAllShippingPrice(), $baseCurrencyCode, $currentCurrencyCode);
105
+ $data="";
106
+
107
+ foreach ($collection as $product){
108
+ $price = (int)Mage::helper('directory')->currencyConvert($product->getPrice(), $baseCurrencyCode, $currentCurrencyCode);
109
+ $imgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
110
+
111
+ $data .= "<<<mapid>>>".$product->getSku()."\n";
112
+ $data .= "<<<pname>>>".$product->getName()."\n";
113
+ $data .= "<<<price>>>".$price."\n";
114
+ $data .= "<<<pgurl>>>".$product->getProductUrl()."\n";
115
+ $data .= "<<<igurl>>>".$imgurl."\n";
116
+
117
+ foreach ($product->getCategoryIds() as $category_id) {
118
+ $category = Mage::getModel('catalog/category')->load($category_id);
119
+ $data.= $this->getCategoryData($category_id,"",$category->getLevel());
120
+ }
121
+ $data .= "<<<model>>>".$product->getModel()."\n";
122
+ //$data .= "<<<brand>>>".$product->getAttributeText('computer_manufacturers')."\n";
123
+ $data .= "<<<maker>>>".$product->getAttributeText('manufacturer')."\n";
124
+ $data .= "<<<origi>>>".$product->getAttributeText('country_of_manufacture')."\n";
125
+ $data .= "<<<deliv>>>$shipfee\n";
126
+
127
+ $data .="<<<utime>>>".$product->getUpdatedAt()."\n";
128
+
129
+ if($mode=="in"){
130
+ $data .="<<<class>>U\n";
131
+ }else if($mode=="out"){
132
+ $data .="<<<class>>D\n";
133
+ }
134
+
135
+ $data .= "<<<event>>>\n";
136
+ }
137
+
138
+
139
+ return $data;
140
+
141
+ }
142
+
143
+ public function getAllShippingPrice()
144
+ {
145
+ $store=Mage::app()->getStore()->getId();
146
+ $carriers = Mage::getStoreConfig('carriers', $store);
147
+ foreach ($carriers as $carrierCode => $carrierConfig) {
148
+ if (Mage::getStoreConfigFlag('carriers/'.$carrierCode.'/active', $store)) {
149
+ if($carrierCode=="flatrate"){
150
+ return $carrierConfig["price"];
151
+ }
152
+ }
153
+ }
154
+ return 0;
155
+ }
156
+ }
157
+ ?>
app/code/community/Esellers/Naverep/Model/Createep_.php ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Esellers_Naverep_Model_Createep extends Mage_Core_Model_Abstract
3
+ {
4
+ var $fp;
5
+
6
+ public function makeEp() {
7
+ $productIds=$this->getProductIds(1);
8
+
9
+ $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addIdFilter($productIds);
10
+
11
+ $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
12
+ $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
13
+ $shipfee = (int)Mage::helper('directory')->currencyConvert($this->getAllShippingPrice(), $baseCurrencyCode, $currentCurrencyCode);
14
+
15
+ $fp = fopen(Mage::getBaseDir()."/ep.txt","w+");
16
+ $data = "<<<begin>>>\n";
17
+
18
+ foreach ($collection as $product){
19
+ $price = (int)Mage::helper('directory')->currencyConvert($product->getPrice(), $baseCurrencyCode, $currentCurrencyCode);
20
+
21
+ $imgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
22
+ $pgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK).$product->getUrlPath();
23
+ $data .= "<<<mapid>>>".$product->getSku()."\n";
24
+ $data .= "<<<pname>>>".$product->getName()."\n";
25
+ $data .= "<<<price>>>".$price."\n";
26
+ $data .= "<<<pgurl>>>".$pgurl."\n";
27
+ $data .= "<<<mourl>>>".$pgurl."\n";
28
+ $data .= "<<<igurl>>>".$imgurl."\n";
29
+
30
+ foreach ($product->getCategoryIds() as $category_id) {
31
+ $category = Mage::getModel('catalog/category')->load($category_id);
32
+ $data.= $this->getCategoryData($category_id,"",$category->getLevel());
33
+ }
34
+
35
+ $data .= "<<<model>>>".$product->getModel()."\n";
36
+ //$data .= "<<<brand>>>".$product->getAttributeText('computer_manufacturers')."\n";
37
+ $data .= "<<<maker>>>".$product->getAttributeText('manufacturer')."\n";
38
+ $data .= "<<<origi>>>".$product->getAttributeText('country_of_manufacture')."\n";
39
+ $data .= "<<<deliv>>>$shipfee\n";
40
+ $data .= "<<<event>>>\n";
41
+ }
42
+ $data .= "<<<ftend>>>\n";
43
+ fwrite($fp,$data);
44
+ fclose($fp);
45
+ }
46
+
47
+ public function getCategoryData($category_id,$data,$initLevel){
48
+ $category = Mage::getModel('catalog/category')->load($category_id);
49
+ $level = $category->getLevel();
50
+ if($level>1){
51
+ $data="<<<cate".($level-1).">>>".$category->getName()."\n".$data;
52
+ $data="<<<caid".($level-1).">>>".$category_id."\n".$data;
53
+
54
+ return $this->getCategoryData($category->getParentId(),$data,$initLevel);
55
+ }else{
56
+ for($i=$initLevel;$i<5;$i++){
57
+ $data.="<<<cate".($i).">>>\n";
58
+ $data.="<<<caid".($i).">>>\n";
59
+ }
60
+ return $data;
61
+ }
62
+ }
63
+
64
+ public function makeSummaryep() {
65
+ $fp = fopen(Mage::getBaseDir()."/ep_summary.txt","w+");
66
+ $data = "<<<begin>>>\n";
67
+ $productIds=$this->getProductIds(1);
68
+ $nowtime=date("Y-m-d", time()-86400)." 08:00:00";
69
+ $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addFieldToFilter("updated_at",array("gt"=>"$nowtime"))->addIdFilter($productIds);
70
+
71
+ $data .= $this->makeTxt("in",$collection);
72
+
73
+
74
+ $productIds_out=$this->getProductIds(0);
75
+
76
+ $collection_out = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addIdFilter($productIds_out);
77
+ $data .= $this->makeTxt("out",$collection_out);
78
+
79
+
80
+ $data .= "<<<ftend>>>\n";
81
+
82
+
83
+ fwrite($fp,$data);
84
+ fclose($fp);
85
+ }
86
+
87
+ public function getProductIds($status){
88
+ $stockCollection = Mage::getModel('cataloginventory/stock_item')->getCollection()->addFieldToFilter('is_in_stock',$status);
89
+ $productIds = array();
90
+
91
+ foreach ($stockCollection as $item){
92
+ $productIds[] = $item->getOrigData('product_id');
93
+ }
94
+ return $productIds;
95
+ }
96
+
97
+ public function makeTxt($mode,$collection){
98
+ $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
99
+ $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
100
+ $shipfee = (int)Mage::helper('directory')->currencyConvert($this->getAllShippingPrice(), $baseCurrencyCode, $currentCurrencyCode);
101
+ $data="";
102
+
103
+ foreach ($collection as $product){
104
+ $price = (int)Mage::helper('directory')->currencyConvert($product->getPrice(), $baseCurrencyCode, $currentCurrencyCode);
105
+ $imgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
106
+
107
+ $data .= "<<<mapid>>>".$product->getSku()."\n";
108
+ $data .= "<<<pname>>>".$product->getName()."\n";
109
+ $data .= "<<<price>>>".$price."\n";
110
+ $data .= "<<<pgurl>>>".$product->getProductUrl()."\n";
111
+ $data .= "<<<igurl>>>".$imgurl."\n";
112
+
113
+ foreach ($product->getCategoryIds() as $category_id) {
114
+ $category = Mage::getModel('catalog/category')->load($category_id);
115
+ $data.= $this->getCategoryData($category_id,"",$category->getLevel());
116
+ }
117
+ $data .= "<<<model>>>".$product->getModel()."\n";
118
+ //$data .= "<<<brand>>>".$product->getAttributeText('computer_manufacturers')."\n";
119
+ $data .= "<<<maker>>>".$product->getAttributeText('manufacturer')."\n";
120
+ $data .= "<<<origi>>>".$product->getAttributeText('country_of_manufacture')."\n";
121
+ $data .= "<<<deliv>>>$shipfee\n";
122
+
123
+ $data .=" <<<utime>>>".$product->getUpdatedAt()."\n";
124
+
125
+ if($mode=="in"){
126
+ $data .=" <<<class>>U\n";
127
+ }else if($mode=="out"){
128
+ $data .=" <<<class>>D\n";
129
+ }
130
+
131
+ $data .= "<<<event>>>\n";
132
+ }
133
+
134
+
135
+ return $data;
136
+
137
+ }
138
+
139
+ public function getAllShippingPrice()
140
+ {
141
+ $store=Mage::app()->getStore()->getId();
142
+ $carriers = Mage::getStoreConfig('carriers', $store);
143
+ foreach ($carriers as $carrierCode => $carrierConfig) {
144
+ if (Mage::getStoreConfigFlag('carriers/'.$carrierCode.'/active', $store)) {
145
+ if($carrierCode=="flatrate"){
146
+ return $carrierConfig["price"];
147
+ }
148
+ }
149
+ }
150
+ return 0;
151
+ }
152
+ }
153
+ ?>
app/code/community/Esellers/Naverep/Model/Createep__.php ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Esellers_Naverep_Model_Createep extends Mage_Core_Model_Abstract
3
+ {
4
+ var $fp;
5
+
6
+ public function makeEp() {
7
+ $productIds=$this->getProductIds(1);
8
+
9
+ $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addIdFilter($productIds);
10
+
11
+ $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
12
+ $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
13
+ $shipfee = (int)Mage::helper('directory')->currencyConvert($this->getAllShippingPrice(), $baseCurrencyCode, $currentCurrencyCode);
14
+
15
+ //$fp = fopen(Mage::getBaseDir()."/ep.txt","w+");
16
+ $data = "<<<begin>>>\n";
17
+
18
+ foreach ($collection as $product){
19
+ $price = (int)Mage::helper('directory')->currencyConvert($product->getPrice(), $baseCurrencyCode, $currentCurrencyCode);
20
+
21
+ $imgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
22
+ $pgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK).$product->getUrlPath();
23
+ $data .= "<<<mapid>>>".$product->getSku()."\n";
24
+ $data .= "<<<pname>>>".$product->getName()."\n";
25
+ $data .= "<<<price>>>".$price."\n";
26
+ $data .= "<<<pgurl>>>".$pgurl."\n";
27
+ $data .= "<<<mourl>>>".$pgurl."\n";
28
+ $data .= "<<<igurl>>>".$imgurl."\n";
29
+
30
+ foreach ($product->getCategoryIds() as $category_id) {
31
+ $category = Mage::getModel('catalog/category')->load($category_id);
32
+ $data.= $this->getCategoryData($category_id,"",$category->getLevel());
33
+ }
34
+
35
+ $data .= "<<<model>>>".$product->getModel()."\n";
36
+ //$data .= "<<<brand>>>".$product->getAttributeText('computer_manufacturers')."\n";
37
+ $data .= "<<<maker>>>".$product->getAttributeText('manufacturer')."\n";
38
+ $data .= "<<<origi>>>".$product->getAttributeText('country_of_manufacture')."\n";
39
+ $data .= "<<<deliv>>>$shipfee\n";
40
+ $data .= "<<<event>>>\n";
41
+ }
42
+ $data .= "<<<ftend>>>\n";
43
+ header("Cache-Control: no-cache, must-revalidate");
44
+ header("Content-Type: text/plain; charset=euc-kr");
45
+ echo $data;
46
+ //fwrite($fp,$data);
47
+ //fclose($fp);
48
+ }
49
+
50
+ public function getCategoryData($category_id,$data,$initLevel){
51
+ $category = Mage::getModel('catalog/category')->load($category_id);
52
+ $level = $category->getLevel();
53
+ if($level>1){
54
+ $data="<<<cate".($level-1).">>>".$category->getName()."\n".$data;
55
+ $data="<<<caid".($level-1).">>>".$category_id."\n".$data;
56
+
57
+ return $this->getCategoryData($category->getParentId(),$data,$initLevel);
58
+ }else{
59
+ for($i=$initLevel;$i<5;$i++){
60
+ $data.="<<<cate".($i).">>>\n";
61
+ $data.="<<<caid".($i).">>>\n";
62
+ }
63
+ return $data;
64
+ }
65
+ }
66
+
67
+ public function makeSummaryep() {
68
+
69
+ $data = "<<<begin>>>\n";
70
+ $productIds=$this->getProductIds(1);
71
+ $nowtime=date("Y-m-d", time()-86400)." 08:00:00";
72
+ $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addFieldToFilter("updated_at",array("gt"=>"$nowtime"))->addIdFilter($productIds);
73
+
74
+ $data .= $this->makeTxt("in",$collection);
75
+
76
+
77
+ $productIds_out=$this->getProductIds(0);
78
+
79
+ $collection_out = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addIdFilter($productIds_out);
80
+ $data .= $this->makeTxt("out",$collection_out);
81
+
82
+
83
+ $data .= "<<<ftend>>>\n";
84
+
85
+
86
+ header("Cache-Control: no-cache, must-revalidate");
87
+ header("Content-Type: text/plain; charset=euc-kr");
88
+ echo $data;
89
+ }
90
+
91
+ public function getProductIds($status){
92
+ $stockCollection = Mage::getModel('cataloginventory/stock_item')->getCollection()->addFieldToFilter('is_in_stock',$status);
93
+ $productIds = array();
94
+
95
+ foreach ($stockCollection as $item){
96
+ $productIds[] = $item->getOrigData('product_id');
97
+ }
98
+ return $productIds;
99
+ }
100
+
101
+ public function makeTxt($mode,$collection){
102
+ $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
103
+ $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
104
+ $shipfee = (int)Mage::helper('directory')->currencyConvert($this->getAllShippingPrice(), $baseCurrencyCode, $currentCurrencyCode);
105
+ $data="";
106
+
107
+ foreach ($collection as $product){
108
+ $price = (int)Mage::helper('directory')->currencyConvert($product->getPrice(), $baseCurrencyCode, $currentCurrencyCode);
109
+ $imgurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
110
+
111
+ $data .= "<<<mapid>>>".$product->getSku()."\n";
112
+ $data .= "<<<pname>>>".$product->getName()."\n";
113
+ $data .= "<<<price>>>".$price."\n";
114
+ $data .= "<<<pgurl>>>".$product->getProductUrl()."\n";
115
+ $data .= "<<<igurl>>>".$imgurl."\n";
116
+
117
+ foreach ($product->getCategoryIds() as $category_id) {
118
+ $category = Mage::getModel('catalog/category')->load($category_id);
119
+ $data.= $this->getCategoryData($category_id,"",$category->getLevel());
120
+ }
121
+ $data .= "<<<model>>>".$product->getModel()."\n";
122
+ //$data .= "<<<brand>>>".$product->getAttributeText('computer_manufacturers')."\n";
123
+ $data .= "<<<maker>>>".$product->getAttributeText('manufacturer')."\n";
124
+ $data .= "<<<origi>>>".$product->getAttributeText('country_of_manufacture')."\n";
125
+ $data .= "<<<deliv>>>$shipfee\n";
126
+
127
+ $data .="<<<utime>>>".$product->getUpdatedAt()."\n";
128
+
129
+ if($mode=="in"){
130
+ $data .="<<<class>>U\n";
131
+ }else if($mode=="out"){
132
+ $data .="<<<class>>D\n";
133
+ }
134
+
135
+ $data .= "<<<event>>>\n";
136
+ }
137
+
138
+
139
+ return $data;
140
+
141
+ }
142
+
143
+ public function getAllShippingPrice()
144
+ {
145
+ $store=Mage::app()->getStore()->getId();
146
+ $carriers = Mage::getStoreConfig('carriers', $store);
147
+ foreach ($carriers as $carrierCode => $carrierConfig) {
148
+ if (Mage::getStoreConfigFlag('carriers/'.$carrierCode.'/active', $store)) {
149
+ if($carrierCode=="flatrate"){
150
+ return $carrierConfig["price"];
151
+ }
152
+ }
153
+ }
154
+ return 0;
155
+ }
156
+ }
157
+ ?>
app/code/community/Esellers/Naverep/Model/System/Config/Source/EPUrl.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BelVG LLC.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://store.belvg.com/BelVG-LICENSE-COMMUNITY.txt
11
+ *
12
+ /***************************************
13
+ * MAGENTO EDITION USAGE NOTICE *
14
+ *****************************************/
15
+ /* This package designed for Magento COMMUNITY edition
16
+ * BelVG does not guarantee correct work of this extension
17
+ * on any other Magento edition except Magento COMMUNITY edition.
18
+ * BelVG does not provide extension support in case of
19
+ * incorrect edition usage.
20
+ /***************************************
21
+ * DISCLAIMER *
22
+ *****************************************/
23
+ /* Do not edit or add to this file if you wish to upgrade Magento to newer
24
+ * versions in the future.
25
+ *****************************************************
26
+ * @category Esellers
27
+ * @package Esellers_Ipay
28
+ * @copyright Copyright (c) 2010 - 2011 BelVG LLC. (http://www.belvg.com)
29
+ * @license http://store.belvg.com/BelVG-LICENSE-COMMUNITY.txt
30
+ */
31
+
32
+ class Esellers_Naverep_Model_System_Config_Source_Epurl
33
+ {
34
+ public function toOptionArray()
35
+ {
36
+ return array(
37
+ array('value'=>Mage::getStoreConfig('web/unsecure/base_url')."ep.txt", 'label'=>Mage::helper('ipay')->__(Mage::getStoreConfig('web/unsecure/base_url')."ep.txt")),
38
+ );
39
+ }
40
+ }
app/code/community/Esellers/Naverep/controllers/EpController.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Esellers_Naverep_EpController extends Mage_Core_Controller_Front_Action {
3
+
4
+ public function indexAction()
5
+ {
6
+ $model=Mage::getModel("naverep/createep");
7
+ $model->makeEp();
8
+ //$this->loadLayout();
9
+ //$this->renderLayout();
10
+ }
11
+
12
+ public function summaryAction()
13
+ {
14
+ $model=Mage::getModel("naverep/createep");
15
+ $model->makeSummaryep();
16
+ }
17
+ }
app/code/community/Esellers/Naverep/etc/adminhtml.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <acl>
5
+ <resources>
6
+ <all>
7
+ <title>Esellers Naver EP</title>
8
+ </all>
9
+ <admin>
10
+ <children>
11
+ <system>
12
+ <children>
13
+ <config>
14
+ <children>
15
+ <naverep translate="label">
16
+ <title>Naver Ep</title>
17
+ </naverep>
18
+ </children>
19
+ </config>
20
+ </children>
21
+ </system>
22
+ </children>
23
+ </admin>
24
+ </resources>
25
+ </acl>
26
+ </config>
app/code/community/Esellers/Naverep/etc/config.xml ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Esellers_Naverep>
5
+ <version>1.1.0</version>
6
+ </Esellers_Naverep>
7
+ </modules>
8
+ <frontend>
9
+ <routers>
10
+ <naverep>
11
+ <use>standard</use>
12
+ <args>
13
+ <module>Esellers_Naverep</module>
14
+ <frontName>naverep</frontName>
15
+ </args>
16
+ </naverep>
17
+ </routers>
18
+ <default>
19
+ <router>naverep</router>
20
+ </default>
21
+ <layout>
22
+ <updates>
23
+ <naverep>
24
+ <file>naverep.xml</file>
25
+ </naverep>
26
+ </updates>
27
+ </layout>
28
+ </frontend>
29
+ <adminhtml>
30
+ <layout>
31
+ <updates>
32
+ <naverep>
33
+ <file>naverep.xml</file>
34
+ </naverep>
35
+ </updates>
36
+ </layout>
37
+ </adminhtml>
38
+ <global>
39
+ <models>
40
+ <naverep>
41
+ <class>Esellers_Naverep_Model</class>
42
+ <resourceModel>naverep_mysql4</resourceModel>
43
+ </naverep>
44
+ <createep>
45
+ <rewrite>
46
+ <po>Esellers_Naverep_Model_Createep</po>
47
+ <!-- statement>Unirgy_DropshipPo_Model_Statement</statement -->
48
+ </rewrite>
49
+ </createep>
50
+
51
+ </models>
52
+ <resources>
53
+ <naverep_setup>
54
+ <setup>
55
+ <module>Esellers_Naverep</module>
56
+ </setup>
57
+ <connection>
58
+ <use>core_setup</use>
59
+ </connection>
60
+ </naverep_setup>
61
+ <naverep_write>
62
+ <connection>
63
+ <use>core_write</use>
64
+ </connection>
65
+ </naverep_write>
66
+ <naverep_read>
67
+ <connection>
68
+ <use>core_read</use>
69
+ </connection>
70
+ </naverep_read>
71
+ </resources>
72
+ <blocks>
73
+ <naverep>
74
+ <class>Esellers_Naverep_Block</class>
75
+ </naverep>
76
+ </blocks>
77
+ <helpers>
78
+ <naverep>
79
+ <class>Esellers_Naverep_Helper</class>
80
+ </naverep>
81
+ </helpers>
82
+ </global>
83
+ <default>
84
+ <naverep>
85
+ <ENABLED>1</ENABLED>
86
+ <DBEngine>
87
+ <fullepurl>{{base_url}}/ep.txt</fullepurl>
88
+ <shortepurl>{{base_url}}/ep_summary.txt</shortepurl>
89
+ </DBEngine>
90
+ </naverep>
91
+ </default>
92
+ </config>
app/code/community/Esellers/Naverep/etc/system.xml ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <esellers translate="label" module="naverep">
5
+ <label>Product DB EP</label>
6
+ <sort_order>200</sort_order>
7
+ </esellers>
8
+ </tabs>
9
+ <sections>
10
+ <naverep translate="label">
11
+ <label>NAVER Knowledge Shopping</label>
12
+ <tab>esellers</tab>
13
+ <frontend_type>text</frontend_type>
14
+ <sort_order>1000</sort_order>
15
+ <show_in_default>1</show_in_default>
16
+ <show_in_website>1</show_in_website>
17
+ <show_in_store>1</show_in_store>
18
+ <groups>
19
+ <!-- New groups go here -->
20
+ <DBEngine translate="label">
21
+ <label>Product DB Enging Page Information</label>
22
+ <frontend_type>text</frontend_type>
23
+ <sort_order>100</sort_order>
24
+ <show_in_default>1</show_in_default>
25
+ <show_in_website>1</show_in_website>
26
+ <show_in_store>1</show_in_store>
27
+ <fields>
28
+ <active translate="label">
29
+ <label>EP USE</label>
30
+ <frontend_type>select</frontend_type>
31
+ <source_model>adminhtml/system_config_source_yesno</source_model>
32
+ <sort_order>1</sort_order>
33
+ <show_in_default>1</show_in_default>
34
+ <show_in_website>1</show_in_website>
35
+ <show_in_store>0</show_in_store>
36
+ </active>
37
+
38
+ <fullepurl translate="label">
39
+ <label>Full EP URL</label>
40
+ <frontend_type>linkep</frontend_type>
41
+ <sort_order>1</sort_order>
42
+ <show_in_default>1</show_in_default>
43
+ <show_in_website>1</show_in_website>
44
+ <show_in_store>0</show_in_store>
45
+ </fullepurl>
46
+ <shortepurl translate="label">
47
+ <label>Short EP URL</label>
48
+ <frontend_type>linksummaryep</frontend_type>
49
+ <sort_order>2</sort_order>
50
+ <show_in_default>1</show_in_default>
51
+ <show_in_website>1</show_in_website>
52
+ <show_in_store>0</show_in_store>
53
+ </shortepurl>
54
+ <eplabel>
55
+ <frontend_type>labelep</frontend_type>
56
+ <sort_order>3</sort_order>
57
+ <show_in_default>1</show_in_default>
58
+ <show_in_website>1</show_in_website>
59
+ <show_in_store>0</show_in_store>
60
+ </eplabel>
61
+ </fields>
62
+ </DBEngine>
63
+ </groups>
64
+ </naverep>
65
+ </sections>
66
+
67
+ </config>
app/code/community/Esellers/Salesgrid/Block/Sales/Order.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders block
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Esellers_Salesgrid_Block_Sales_Order extends Mage_Adminhtml_Block_Widget_Grid_Container
35
+ {
36
+
37
+ public function __construct()
38
+ {
39
+ $this->_controller = 'sales_order';
40
+
41
+ parent::__construct();
42
+ }
43
+
44
+ public function getCreateUrl()
45
+ {
46
+ return $this->getUrl('adminhtml/sales_order_create/start');
47
+ }
48
+
49
+ }
50
+
app/code/community/Esellers/Salesgrid/Block/Sales/Order/Grid.php ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders grid
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Esellers_Salesgrid_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid
35
+ {
36
+ public function __construct()
37
+ {
38
+ parent::__construct();
39
+ $this->setId('sales_order_grid');
40
+ $this->setUseAjax(true);
41
+ $this->setDefaultSort('created_at');
42
+ $this->setDefaultDir('DESC');
43
+ $this->setSaveParametersInSession(true);
44
+ }
45
+
46
+ /**
47
+ * Retrieve collection class
48
+ *
49
+ * @return string
50
+ */
51
+ protected function _getCollectionClass()
52
+ {
53
+ return 'sales/order_grid_collection';
54
+ }
55
+
56
+ protected function _prepareCollection()
57
+ {
58
+ $collection = Mage::getResourceModel($this->_getCollectionClass());
59
+
60
+ // grid 추가
61
+ $collection->getSelect()
62
+ ->joinLeft(
63
+ array('sfoi' => 'sales_flat_order_item'),
64
+ 'sfoi.order_id=main_table.entity_id',
65
+ array()
66
+ )
67
+ ->columns(array('sku' => new Zend_Db_Expr('GROUP_CONCAT(sfoi.sku)')))
68
+ ->group('entity_id');
69
+ //
70
+
71
+
72
+ $this->setCollection($collection);
73
+ return parent::_prepareCollection();
74
+ }
75
+
76
+ protected function _prepareColumns()
77
+ {
78
+
79
+ $this->addColumn('real_order_id', array(
80
+ 'header'=> Mage::helper('sales')->__('Order #'),
81
+ 'width' => '80px',
82
+ 'type' => 'text',
83
+ 'index' => 'increment_id',
84
+ ));
85
+
86
+
87
+ if (!Mage::app()->isSingleStoreMode()) {
88
+ $this->addColumn('store_id', array(
89
+ 'header' => Mage::helper('sales')->__('Purchased From (Store)'),
90
+ 'index' => 'store_id',
91
+ 'type' => 'store',
92
+ 'store_view'=> true,
93
+ 'display_deleted' => true,
94
+ ));
95
+ }
96
+
97
+ $this->addColumn('created_at', array(
98
+ 'header' => Mage::helper('sales')->__('Purchased On'),
99
+ 'index' => 'created_at',
100
+ 'type' => 'datetime',
101
+ 'width' => '100px',
102
+ ));
103
+
104
+ $this->addColumn('billing_name', array(
105
+ 'header' => Mage::helper('sales')->__('Bill to Name'),
106
+ 'index' => 'billing_name',
107
+ ));
108
+
109
+ $this->addColumn('shipping_name', array(
110
+ 'header' => Mage::helper('sales')->__('Ship to Name'),
111
+ 'index' => 'shipping_name',
112
+ ));
113
+
114
+ $this->addColumn('base_grand_total', array(
115
+ 'header' => Mage::helper('sales')->__('G.T. (Base)'),
116
+ 'index' => 'base_grand_total',
117
+ 'type' => 'currency',
118
+ 'currency' => 'base_currency_code',
119
+ ));
120
+
121
+ $this->addColumn('grand_total', array(
122
+ 'header' => Mage::helper('sales')->__('G.T. (Purchased)'),
123
+ 'index' => 'grand_total',
124
+ 'type' => 'currency',
125
+ 'currency' => 'order_currency_code',
126
+ ));
127
+
128
+ $this->addColumn('status', array(
129
+ 'header' => Mage::helper('sales')->__('Status'),
130
+ 'index' => 'status',
131
+ 'type' => 'options',
132
+ 'width' => '70px',
133
+ 'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
134
+ ));
135
+
136
+ if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
137
+ $this->addColumn('action',
138
+ array(
139
+ 'header' => Mage::helper('sales')->__('Action'),
140
+ 'width' => '50px',
141
+ 'type' => 'action',
142
+ 'getter' => 'getId',
143
+ 'actions' => array(
144
+ array(
145
+ 'caption' => Mage::helper('sales')->__('View'),
146
+ 'url' => array('base'=>'admin/sales_order/view'),
147
+ 'field' => 'order_id'
148
+ )
149
+ ),
150
+ 'filter' => false,
151
+ 'sortable' => false,
152
+ 'index' => 'stores',
153
+ 'is_system' => true,
154
+ ));
155
+ }
156
+ $this->addRssList('rss/order/new', Mage::helper('sales')->__('New Order RSS'));
157
+
158
+ $this->addExportType('*/*/exportCsv', Mage::helper('sales')->__('CSV'));
159
+ $this->addExportType('*/*/exportExcel', Mage::helper('sales')->__('Excel XML'));
160
+
161
+ return parent::_prepareColumns();
162
+ }
163
+
164
+ protected function _prepareMassaction()
165
+ {
166
+ $this->setMassactionIdField('entity_id');
167
+ $this->getMassactionBlock()->setFormFieldName('order_ids');
168
+ $this->getMassactionBlock()->setUseSelectAll(false);
169
+
170
+ if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/cancel')) {
171
+ $this->getMassactionBlock()->addItem('cancel_order', array(
172
+ 'label'=> Mage::helper('sales')->__('Cancel'),
173
+ 'url' => $this->getUrl('*/sales_order/massCancel'),
174
+ ));
175
+ }
176
+
177
+ if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/hold')) {
178
+ $this->getMassactionBlock()->addItem('hold_order', array(
179
+ 'label'=> Mage::helper('sales')->__('Hold'),
180
+ 'url' => $this->getUrl('*/sales_order/massHold'),
181
+ ));
182
+ }
183
+
184
+ if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/unhold')) {
185
+ $this->getMassactionBlock()->addItem('unhold_order', array(
186
+ 'label'=> Mage::helper('sales')->__('Unhold'),
187
+ 'url' => $this->getUrl('*/sales_order/massUnhold'),
188
+ ));
189
+ }
190
+
191
+ $this->getMassactionBlock()->addItem('pdfinvoices_order', array(
192
+ 'label'=> Mage::helper('sales')->__('Print Invoices'),
193
+ 'url' => $this->getUrl('*/sales_order/pdfinvoices'),
194
+ ));
195
+
196
+ $this->getMassactionBlock()->addItem('pdfshipments_order', array(
197
+ 'label'=> Mage::helper('sales')->__('Print Packingslips'),
198
+ 'url' => $this->getUrl('*/sales_order/pdfshipments'),
199
+ ));
200
+
201
+ $this->getMassactionBlock()->addItem('pdfcreditmemos_order', array(
202
+ 'label'=> Mage::helper('sales')->__('Print Credit Memos'),
203
+ 'url' => $this->getUrl('*/sales_order/pdfcreditmemos'),
204
+ ));
205
+
206
+ $this->getMassactionBlock()->addItem('pdfdocs_order', array(
207
+ 'label'=> Mage::helper('sales')->__('Print All'),
208
+ 'url' => $this->getUrl('*/sales_order/pdfdocs'),
209
+ ));
210
+
211
+ $this->getMassactionBlock()->addItem('print_shipping_label', array(
212
+ 'label'=> Mage::helper('sales')->__('Print Shipping Labels'),
213
+ 'url' => $this->getUrl('*/sales_order_shipment/massPrintShippingLabel'),
214
+ ));
215
+
216
+ return $this;
217
+ }
218
+
219
+ public function getRowUrl($row)
220
+ {
221
+ if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
222
+ return $this->getUrl('/sales_order/view', array('order_id' => $row->getId()));
223
+ }
224
+ return false;
225
+ }
226
+
227
+ public function getGridUrl()
228
+ {
229
+ return $this->getUrl('*/*/grid', array('_current'=>true));
230
+ }
231
+
232
+ }
app/code/community/Esellers/Salesgrid/controllers/Sales/OrderController.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * To change this template, choose Tools | Templates
5
+ * and open the template in the editor.
6
+ */
7
+
8
+ include_once "Mage".DS."Adminhtml".DS."controllers".DS."Sales".DS."OrderController.php";
9
+ class Esellers_Salesgrid_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController
10
+ {
11
+ public function indexAction()
12
+ {
13
+ $this->loadLayout();
14
+ $this->_setActiveMenu('sales/salesgrid');
15
+
16
+ $this->_addContent(
17
+ $this->getLayout()->createBlock('adminhtml/sales_order')
18
+ );
19
+
20
+ $this->renderLayout();
21
+
22
+
23
+
24
+ }
25
+
26
+ public function gridAction()
27
+ {
28
+ parent::gridAction();
29
+ }
30
+
31
+ protected function _isAllowed()
32
+ {
33
+ return Mage::getSingleton('admin/session')->isAllowed('sales/order');
34
+ }
35
+ }
36
+ ?>
app/code/community/Esellers/Salesgrid/etc/config.xml ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ To change this template, choose Tools | Templates
4
+ and open the template in the editor.
5
+ -->
6
+
7
+
8
+ <config>
9
+ <modules>
10
+ <Esellers_Salesgrid>
11
+ <version>1.0.0.0</version>
12
+ </Esellers_Salesgrid>
13
+ </modules>
14
+ <admin>
15
+ <routers>
16
+ <salesgrid>
17
+ <!-- should be set to "admin" when overloading admin stuff (?) -->
18
+ <use>admin</use>
19
+ <args>
20
+ <module>Esellers_Salesgrid</module>
21
+ <!-- This is used when "catching" the rewrite above -->
22
+ <frontName>salesgrid</frontName>
23
+ </args>
24
+ </salesgrid>
25
+ </routers>
26
+ </admin>
27
+ <global>
28
+ <blocks>
29
+ <salesgrid>
30
+ <class>Esellers_Salesgrid_Block</class>
31
+ </salesgrid>
32
+ </blocks>
33
+ <helpers>
34
+ <salesgrid>
35
+ <class>Esellers_Salesgrid_Helper</class>
36
+ </salesgrid>
37
+ </helpers>
38
+
39
+
40
+ <models>
41
+ <salesgrid>
42
+ <class>Esellers_Salesgrid_Model</class>
43
+ </salesgrid>
44
+ </models>
45
+
46
+
47
+ <resources>
48
+ <salesgrid_setup>
49
+ <setup>
50
+ <module>Esellers_Salesgrid</module>
51
+ </setup>
52
+ <connection>
53
+ <use>core_setup</use>
54
+ </connection>
55
+ </salesgrid_setup>
56
+ <salesgrid_write>
57
+ <connection>
58
+ <use>core_write</use>
59
+ </connection>
60
+ </salesgrid_write>
61
+ <salesgrid_read>
62
+ <connection>
63
+ <use>core_read</use>
64
+ </connection>
65
+ </salesgrid_read>
66
+ </resources>
67
+ </global>
68
+
69
+ <adminhtml>
70
+ <layout>
71
+ <updates>
72
+ <salesgrid>
73
+ <file>esellers_salesgrid.xml</file>
74
+ </salesgrid>
75
+ </updates>
76
+ </layout>
77
+ <menu>
78
+ <sales module="salesgrid">
79
+ <children>
80
+ <order module="salesgrid" translate="title">
81
+ <title>Manage Products*</title>
82
+ <sort_order>0</sort_order>
83
+ <action>salesgrid/sales_order</action>
84
+ </order>
85
+ </children>
86
+ </sales>
87
+ </menu>
88
+ </adminhtml>
89
+ </config>
app/code/community/Mage/Adminhtml/Block/Sales/Order/Shipment/Create/Tracking.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Shipment tracking control form
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Mage_Adminhtml_Block_Sales_Order_Shipment_Create_Tracking extends Mage_Adminhtml_Block_Template
35
+ {
36
+ /**
37
+ * Prepares layout of block
38
+ *
39
+ * @return Mage_Adminhtml_Block_Sales_Order_View_Giftmessage
40
+ */
41
+ protected function _prepareLayout()
42
+ {
43
+ $this->setChild('add_button',
44
+ $this->getLayout()->createBlock('adminhtml/widget_button')
45
+ ->setData(array(
46
+ 'label' => Mage::helper('sales')->__('Add Tracking Number'),
47
+ 'class' => '',
48
+ 'onclick' => 'trackingControl.add()'
49
+ ))
50
+
51
+ );
52
+
53
+ }
54
+
55
+ /**
56
+ * Retrieve shipment model instance
57
+ *
58
+ * @return Mage_Sales_Model_Order_Shipment
59
+ */
60
+ public function getShipment()
61
+ {
62
+ return Mage::registry('current_shipment');
63
+ }
64
+
65
+ /**
66
+ * Retrieve
67
+ *
68
+ * @return unknown
69
+ */
70
+ public function getCarriers()
71
+ {
72
+ $carriers = array();
73
+ $carrierInstances = Mage::getSingleton('shipping/config')->getAllCarriers(
74
+ $this->getShipment()->getStoreId()
75
+ );
76
+ $carriers['custom'] = Mage::helper('sales')->__('Custom Value');
77
+ foreach ($carrierInstances as $code => $carrier) {
78
+ if ($carrier->isTrackingAvailable()) {
79
+ $carriers[$code] = $carrier->getConfigData('title');
80
+ }
81
+ }
82
+
83
+ $carriers['hanjin'] = Mage::helper('sales')->__('한진택배');
84
+ $carriers['kyungdong'] = Mage::helper('sales')->__('경동택배');
85
+ $carriers['korex'] = Mage::helper('sales')->__('대한통운');
86
+ $carriers['dongbu'] = Mage::helper('sales')->__('동부익스프레스');
87
+ $carriers['innogis'] = Mage::helper('sales')->__('이노지스');
88
+ $carriers['hanaro'] = Mage::helper('sales')->__('하나로택배');
89
+ $carriers['hyundai'] = Mage::helper('sales')->__('현대로지엠');
90
+ $carriers['cjgls'] = Mage::helper('sales')->__('CJGLS');
91
+ $carriers['yellow'] = Mage::helper('sales')->__('옐로우캡');
92
+ $carriers['kgb'] = Mage::helper('sales')->__('로젠택배');
93
+ $carriers['epost'] = Mage::helper('sales')->__('우체국택배');
94
+ $carriers['etc'] = Mage::helper('sales')->__('한덱스택배');
95
+ $carriers['etc'] = Mage::helper('sales')->__('호남택배');
96
+ $carriers['etc'] = Mage::helper('sales')->__('DHL택배');
97
+ $carriers['etc'] = Mage::helper('sales')->__('KGB택배');
98
+
99
+
100
+ return $carriers;
101
+ }
102
+ }
app/code/community/Mage/Adminhtml/Block/Sales/Order/Shipment/View/Tracking.php ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Shipment tracking control form
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Mage_Adminhtml_Block_Sales_Order_Shipment_View_Tracking extends Mage_Adminhtml_Block_Template
35
+ {
36
+ /**
37
+ * Prepares layout of block
38
+ *
39
+ * @return Mage_Adminhtml_Block_Sales_Order_View_Giftmessage
40
+ */
41
+ protected function _prepareLayout()
42
+ {
43
+ $onclick = "submitAndReloadArea($('shipment_tracking_info').parentNode, '".$this->getSubmitUrl()."')";
44
+ $this->setChild('save_button',
45
+ $this->getLayout()->createBlock('adminhtml/widget_button')
46
+ ->setData(array(
47
+ 'label' => Mage::helper('sales')->__('Add'),
48
+ 'class' => 'save',
49
+ 'onclick' => $onclick
50
+ ))
51
+
52
+ );
53
+ }
54
+
55
+ /**
56
+ * Retrieve shipment model instance
57
+ *
58
+ * @return Mage_Sales_Model_Order_Shipment
59
+ */
60
+ public function getShipment()
61
+ {
62
+ return Mage::registry('current_shipment');
63
+ }
64
+
65
+ /**
66
+ * Retrieve save url
67
+ *
68
+ * @return string
69
+ */
70
+ public function getSubmitUrl()
71
+ {
72
+ return $this->getUrl('ipay/sales_order_shipment/addTrack/', array('shipment_id'=>$this->getShipment()->getId()));
73
+ }
74
+
75
+ /**
76
+ * Retrive save button html
77
+ *
78
+ * @return string
79
+ */
80
+ public function getSaveButtonHtml()
81
+ {
82
+ return $this->getChildHtml('save_button');
83
+ }
84
+
85
+ /**
86
+ * Retrieve remove url
87
+ *
88
+ * @return string
89
+ */
90
+ public function getRemoveUrl($track)
91
+ {
92
+ return $this->getUrl('*/*/removeTrack/', array(
93
+ 'shipment_id' => $this->getShipment()->getId(),
94
+ 'track_id' => $track->getId()
95
+ ));
96
+ }
97
+
98
+ /**
99
+ * Retrieve remove url
100
+ *
101
+ * @return string
102
+ */
103
+ public function getTrackInfoUrl($track)
104
+ {
105
+ return $this->getUrl('*/*/viewTrack/', array(
106
+ 'shipment_id' => $this->getShipment()->getId(),
107
+ 'track_id' => $track->getId()
108
+ ));
109
+ }
110
+
111
+ /**
112
+ * Retrieve
113
+ *
114
+ * @return unknown
115
+ */
116
+ public function getCarriers()
117
+ {
118
+ $carriers = array();
119
+ $carrierInstances = Mage::getSingleton('shipping/config')->getAllCarriers(
120
+ $this->getShipment()->getStoreId()
121
+ );
122
+ $carriers['custom'] = Mage::helper('sales')->__('Custom Value');
123
+ foreach ($carrierInstances as $code => $carrier) {
124
+ if ($carrier->isTrackingAvailable()) {
125
+ $carriers[$code] = $carrier->getConfigData('title');
126
+ }
127
+ }
128
+
129
+ $carriers['hanjin'] = Mage::helper('sales')->__('한진택배');
130
+ $carriers['kyungdong'] = Mage::helper('sales')->__('경동택배');
131
+ $carriers['korex'] = Mage::helper('sales')->__('대한통운');
132
+ $carriers['dongbu'] = Mage::helper('sales')->__('동부익스프레스');
133
+ $carriers['innogis'] = Mage::helper('sales')->__('이노지스');
134
+ $carriers['hanaro'] = Mage::helper('sales')->__('하나로택배');
135
+ $carriers['hyundai'] = Mage::helper('sales')->__('현대로지엠');
136
+ $carriers['cjgls'] = Mage::helper('sales')->__('CJGLS');
137
+ $carriers['yellow'] = Mage::helper('sales')->__('옐로우캡');
138
+ $carriers['kgb'] = Mage::helper('sales')->__('로젠택배');
139
+ $carriers['epost'] = Mage::helper('sales')->__('우체국택배');
140
+ $carriers['etc'] = Mage::helper('sales')->__('한덱스택배');
141
+ $carriers['etc'] = Mage::helper('sales')->__('호남택배');
142
+ $carriers['etc'] = Mage::helper('sales')->__('DHL택배');
143
+ $carriers['etc'] = Mage::helper('sales')->__('KGB택배');
144
+
145
+ return $carriers;
146
+ }
147
+
148
+ public function getCarrierTitle($code)
149
+ {
150
+ if ($carrier = Mage::getSingleton('shipping/config')->getCarrierInstance($code)) {
151
+ return $carrier->getConfigData('title');
152
+ }
153
+ else {
154
+ return Mage::helper('sales')->__('Custom Value');
155
+ }
156
+ return false;
157
+ }
158
+ }
app/code/community/Mage/Adminhtml/Controller/Action.php ADDED
@@ -0,0 +1,387 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Base adminhtml controller
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Mage_Adminhtml_Controller_Action extends Mage_Core_Controller_Varien_Action
35
+ {
36
+ /**
37
+ * Name of "is URLs checked" flag
38
+ */
39
+ const FLAG_IS_URLS_CHECKED = 'check_url_settings';
40
+
41
+ /**
42
+ * Session namespace to refer in other places
43
+ */
44
+ const SESSION_NAMESPACE = 'adminhtml';
45
+
46
+ /**
47
+ * Array of actions which can be processed without secret key validation
48
+ *
49
+ * @var array
50
+ */
51
+ protected $_publicActions = array();
52
+
53
+ /**
54
+ * Used module name in current adminhtml controller
55
+ */
56
+ protected $_usedModuleName = 'adminhtml';
57
+
58
+ /**
59
+ * Currently used area
60
+ *
61
+ * @var string
62
+ */
63
+ protected $_currentArea = 'adminhtml';
64
+
65
+ /**
66
+ * Namespace for session.
67
+ *
68
+ * @var string
69
+ */
70
+ protected $_sessionNamespace = self::SESSION_NAMESPACE;
71
+
72
+ protected function _isAllowed()
73
+ {
74
+ return true;
75
+ }
76
+
77
+ /**
78
+ * Retrieve adminhtml session model object
79
+ *
80
+ * @return Mage_Adminhtml_Model_Session
81
+ */
82
+ protected function _getSession()
83
+ {
84
+ return Mage::getSingleton('adminhtml/session');
85
+ }
86
+
87
+ /**
88
+ * Retrieve base admihtml helper
89
+ *
90
+ * @return Mage_Adminhtml_Helper_Data
91
+ */
92
+ protected function _getHelper()
93
+ {
94
+ return Mage::helper('adminhtml');
95
+ }
96
+
97
+ /**
98
+ * Define active menu item in menu block
99
+ *
100
+ * @return Mage_Adminhtml_Controller_Action
101
+ */
102
+ protected function _setActiveMenu($menuPath)
103
+ {
104
+ $this->getLayout()->getBlock('menu')->setActive($menuPath);
105
+ return $this;
106
+ }
107
+
108
+ /**
109
+ * @return Mage_Adminhtml_Controller_Action
110
+ */
111
+ protected function _addBreadcrumb($label, $title, $link=null)
112
+ {
113
+ $this->getLayout()->getBlock('breadcrumbs')->addLink($label, $title, $link);
114
+ return $this;
115
+ }
116
+
117
+ /**
118
+ * @return Mage_Adminhtml_Controller_Action
119
+ */
120
+ protected function _addContent(Mage_Core_Block_Abstract $block)
121
+ {
122
+ $this->getLayout()->getBlock('content')->append($block);
123
+ return $this;
124
+ }
125
+
126
+ protected function _addLeft(Mage_Core_Block_Abstract $block)
127
+ {
128
+ $this->getLayout()->getBlock('left')->append($block);
129
+ return $this;
130
+ }
131
+
132
+ protected function _addJs(Mage_Core_Block_Abstract $block)
133
+ {
134
+ $this->getLayout()->getBlock('js')->append($block);
135
+ return $this;
136
+ }
137
+
138
+ /**
139
+ * Controller predispatch method
140
+ *
141
+ * @return Mage_Adminhtml_Controller_Action
142
+ */
143
+ public function preDispatch()
144
+ {
145
+ // override admin store design settings via stores section
146
+ Mage::getDesign()
147
+ ->setArea($this->_currentArea)
148
+ ->setPackageName((string)Mage::getConfig()->getNode('stores/admin/design/package/name'))
149
+ ->setTheme((string)Mage::getConfig()->getNode('stores/admin/design/theme/default'))
150
+ ;
151
+ foreach (array('layout', 'template', 'skin', 'locale') as $type) {
152
+ if ($value = (string)Mage::getConfig()->getNode("stores/admin/design/theme/{$type}")) {
153
+ Mage::getDesign()->setTheme($type, $value);
154
+ }
155
+ }
156
+
157
+ $this->getLayout()->setArea($this->_currentArea);
158
+
159
+ Mage::dispatchEvent('adminhtml_controller_action_predispatch_start', array());
160
+ parent::preDispatch();
161
+ $_isValidFormKey = true;
162
+ $_isValidSecretKey = true;
163
+ $_keyErrorMsg = '';
164
+ if (Mage::getSingleton('admin/session')->isLoggedIn()) {
165
+ if ($this->getRequest()->isPost()) {
166
+ $_isValidFormKey = $this->_validateFormKey();
167
+ $_keyErrorMsg = Mage::helper('adminhtml')->__('Invalid Form Key. Please refresh the page.');
168
+ } elseif (Mage::getSingleton('adminhtml/url')->useSecretKey()) {
169
+ $_isValidSecretKey = $this->_validateSecretKey();
170
+ $_keyErrorMsg = Mage::helper('adminhtml')->__('Invalid Secret Key. Please refresh the page.');
171
+ }
172
+ }
173
+ if (!$_isValidFormKey || !$_isValidSecretKey) {
174
+ $this->setFlag('', self::FLAG_NO_DISPATCH, true);
175
+ $this->setFlag('', self::FLAG_NO_POST_DISPATCH, true);
176
+ if ($this->getRequest()->getQuery('isAjax', false) || $this->getRequest()->getQuery('ajax', false)) {
177
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array(
178
+ 'error' => true,
179
+ 'message' => $_keyErrorMsg
180
+ )));
181
+ } else {
182
+ $this->_redirect( Mage::getSingleton('admin/session')->getUser()->getStartupPageUrl() );
183
+ }
184
+ return $this;
185
+ }
186
+
187
+ if ($this->getRequest()->isDispatched()
188
+ && $this->getRequest()->getActionName() !== 'denied'
189
+ && !$this->_isAllowed()) {
190
+ $this->_forward('denied');
191
+ $this->setFlag('', self::FLAG_NO_DISPATCH, true);
192
+ return $this;
193
+ }
194
+
195
+ if (!$this->getFlag('', self::FLAG_IS_URLS_CHECKED)
196
+ && !$this->getRequest()->getParam('forwarded')
197
+ && !$this->_getSession()->getIsUrlNotice(true)
198
+ && !Mage::getConfig()->getNode('global/can_use_base_url')) {
199
+ //$this->_checkUrlSettings();
200
+ $this->setFlag('', self::FLAG_IS_URLS_CHECKED, true);
201
+ }
202
+ if (is_null(Mage::getSingleton('adminhtml/session')->getLocale())) {
203
+ Mage::getSingleton('adminhtml/session')->setLocale(Mage::app()->getLocale()->getLocaleCode());
204
+ }
205
+
206
+ return $this;
207
+ }
208
+
209
+ /**
210
+ * @deprecated after 1.4.0.0 alpha, logic moved to Mage_Adminhtml_Block_Notification_Baseurl
211
+ * @return Mage_Adminhtml_Controller_Action
212
+ */
213
+ protected function _checkUrlSettings()
214
+ {
215
+ /**
216
+ * Don't check for data saving actions
217
+ */
218
+ if ($this->getRequest()->getPost() || $this->getRequest()->getQuery('isAjax')) {
219
+ return $this;
220
+ }
221
+
222
+ $configData = Mage::getModel('core/config_data');
223
+
224
+ $defaultUnsecure = (string)Mage::getConfig()->getNode(
225
+ 'default/' . Mage_Core_Model_Store::XML_PATH_UNSECURE_BASE_URL
226
+ );
227
+ $defaultSecure = (string)Mage::getConfig()->getNode(
228
+ 'default/' . Mage_Core_Model_Store::XML_PATH_SECURE_BASE_URL
229
+ );
230
+
231
+ if ($defaultSecure == '{{base_url}}' || $defaultUnsecure == '{{base_url}}') {
232
+ $this->_getSession()->addNotice(
233
+ $this->__('{{base_url}} is not recommended to use in a production environment to declare the Base Unsecure URL / Base Secure URL. It is highly recommended to change this value in your Magento <a href="%s">configuration</a>.', $this->getUrl('adminhtml/system_config/edit', array('section'=>'web')))
234
+ );
235
+ return $this;
236
+ }
237
+
238
+ $dataCollection = $configData->getCollection()
239
+ ->addValueFilter('{{base_url}}');
240
+
241
+ $url = false;
242
+ foreach ($dataCollection as $data) {
243
+ if ($data->getScope() == 'stores') {
244
+ $code = Mage::app()->getStore($data->getScopeId())->getCode();
245
+ $url = $this->getUrl('adminhtml/system_config/edit', array('section'=>'web', 'store'=>$code));
246
+ }
247
+ if ($data->getScope() == 'websites') {
248
+ $code = Mage::app()->getWebsite($data->getScopeId())->getCode();
249
+ $url = $this->getUrl('adminhtml/system_config/edit', array('section'=>'web', 'website'=>$code));
250
+ }
251
+
252
+ if ($url) {
253
+ $this->_getSession()->addNotice(
254
+ $this->__('{{base_url}} is not recommended to use in a production environment to declare the Base Unsecure URL / Base Secure URL. It is highly recommended to change this value in your Magento <a href="%s">configuration</a>.', $url)
255
+ );
256
+ return $this;
257
+ }
258
+ }
259
+ return $this;
260
+ }
261
+
262
+ public function deniedAction()
263
+ {
264
+ $this->getResponse()->setHeader('HTTP/1.1','403 Forbidden');
265
+ if (!Mage::getSingleton('admin/session')->isLoggedIn()) {
266
+ $this->_redirect('*/index/login');
267
+ return;
268
+ }
269
+ $this->loadLayout(array('default', 'adminhtml_denied'));
270
+ $this->renderLayout();
271
+ }
272
+
273
+ public function loadLayout($ids=null, $generateBlocks=true, $generateXml=true)
274
+ {
275
+ parent::loadLayout($ids, $generateBlocks, $generateXml);
276
+ $this->_initLayoutMessages('adminhtml/session');
277
+ return $this;
278
+ }
279
+
280
+ public function norouteAction($coreRoute = null)
281
+ {
282
+ $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
283
+ $this->getResponse()->setHeader('Status','404 File not found');
284
+ $this->loadLayout(array('default', 'adminhtml_noroute'));
285
+ $this->renderLayout();
286
+ }
287
+
288
+
289
+ /**
290
+ * Retrieve currently used module name
291
+ *
292
+ * @return string
293
+ */
294
+ public function getUsedModuleName()
295
+ {
296
+ return $this->_usedModuleName;
297
+ }
298
+
299
+ /**
300
+ * Set currently used module name
301
+ *
302
+ * @param string $moduleName
303
+ * @return Mage_Adminhtml_Controller_Action
304
+ */
305
+ public function setUsedModuleName($moduleName)
306
+ {
307
+ $this->_usedModuleName = $moduleName;
308
+ return $this;
309
+ }
310
+
311
+ /**
312
+ * Translate a phrase
313
+ *
314
+ * @return string
315
+ */
316
+ public function __()
317
+ {
318
+ $args = func_get_args();
319
+ $expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->getUsedModuleName());
320
+ array_unshift($args, $expr);
321
+ return Mage::app()->getTranslator()->translate($args);
322
+ }
323
+
324
+ /**
325
+ * Set referer url for redirect in responce
326
+ *
327
+ * Is overriden here to set defaultUrl to admin url
328
+ *
329
+ * @param string $defaultUrl
330
+ * @return Mage_Adminhtml_Controller_Action
331
+ */
332
+ protected function _redirectReferer($defaultUrl=null)
333
+ {
334
+ $defaultUrl = empty($defaultUrl) ? $this->getUrl('*') : $defaultUrl;
335
+ parent::_redirectReferer($defaultUrl);
336
+ return $this;
337
+ }
338
+
339
+ /**
340
+ * Set redirect into responce
341
+ *
342
+ * @param string $path
343
+ * @param array $arguments
344
+ */
345
+ protected function _redirect($path, $arguments=array())
346
+ {
347
+ $this->_getSession()->setIsUrlNotice($this->getFlag('', self::FLAG_IS_URLS_CHECKED));
348
+ $this->getResponse()->setRedirect($this->getUrl($path, $arguments));
349
+ return $this;
350
+ }
351
+
352
+ protected function _forward($action, $controller = null, $module = null, array $params = null)
353
+ {
354
+ $this->_getSession()->setIsUrlNotice($this->getFlag('', self::FLAG_IS_URLS_CHECKED));
355
+ return parent::_forward($action, $controller, $module, $params);
356
+ }
357
+
358
+ /**
359
+ * Generate url by route and parameters
360
+ *
361
+ * @param string $route
362
+ * @param array $params
363
+ * @return string
364
+ */
365
+ public function getUrl($route='', $params=array())
366
+ {
367
+ return Mage::helper('adminhtml')->getUrl($route, $params);
368
+ }
369
+
370
+ /**
371
+ * Validate Secret Key
372
+ *
373
+ * @return bool
374
+ */
375
+ protected function _validateSecretKey()
376
+ {
377
+ if (is_array($this->_publicActions) && in_array($this->getRequest()->getActionName(), $this->_publicActions)) {
378
+ return true;
379
+ }
380
+
381
+ if (!($secretKey = $this->getRequest()->getParam(Mage_Adminhtml_Model_Url::SECRET_KEY_PARAM_NAME, null))
382
+ || $secretKey != Mage::getSingleton('adminhtml/url')->getSecretKey()) {
383
+ return false;
384
+ }
385
+ return true;
386
+ }
387
+ }
app/code/community/Mage/Adminhtml/Controller/Report/Abstract.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+
28
+ /**
29
+ * Admin abstract reports controller
30
+ *
31
+ * @category Mage
32
+ * @package Mage_Adminhtml
33
+ * @author Magento Core Team <core@magentocommerce.com>
34
+ */
35
+ abstract class Mage_Adminhtml_Controller_Report_Abstract extends Mage_Adminhtml_Controller_Action
36
+ {
37
+ /**
38
+ * Admin session model
39
+ *
40
+ * @var null|Mage_Admin_Model_Session
41
+ */
42
+ protected $_adminSession = null;
43
+
44
+ /**
45
+ * Retrieve admin session model
46
+ *
47
+ * @return Mage_Admin_Model_Session
48
+ */
49
+ protected function _getSession()
50
+ {
51
+ if (is_null($this->_adminSession)) {
52
+ $this->_adminSession = Mage::getSingleton('admin/session');
53
+ }
54
+ return $this->_adminSession;
55
+ }
56
+
57
+ /**
58
+ * Add report breadcrumbs
59
+ *
60
+ * @return Mage_Adminhtml_Controller_Report_Abstract
61
+ */
62
+ public function _initAction()
63
+ {
64
+ $this->loadLayout()
65
+ ->_addBreadcrumb(Mage::helper('reports')->__('Reports'), Mage::helper('reports')->__('Reports'));
66
+ return $this;
67
+ }
68
+
69
+ /**
70
+ * Report action init operations
71
+ *
72
+ * @param array|Varien_Object $blocks
73
+ * @return Mage_Adminhtml_Controller_Report_Abstract
74
+ */
75
+ public function _initReportAction($blocks)
76
+ {
77
+ if (!is_array($blocks)) {
78
+ $blocks = array($blocks);
79
+ }
80
+
81
+ $requestData = Mage::helper('adminhtml')->prepareFilterString($this->getRequest()->getParam('filter'));
82
+ $requestData = $this->_filterDates($requestData, array('from', 'to'));
83
+ $requestData['store_ids'] = $this->getRequest()->getParam('store_ids');
84
+ $params = new Varien_Object();
85
+
86
+ foreach ($requestData as $key => $value) {
87
+ if (!empty($value)) {
88
+ $params->setData($key, $value);
89
+ }
90
+ }
91
+
92
+ foreach ($blocks as $block) {
93
+ if ($block) {
94
+ $block->setPeriodType($params->getData('period_type'));
95
+ $block->setFilterData($params);
96
+ }
97
+ }
98
+
99
+ return $this;
100
+ }
101
+
102
+ /**
103
+ * Add refresh statistics links
104
+ *
105
+ * @param string $flagCode
106
+ * @param string $refreshCode
107
+ * @return Mage_Adminhtml_Controller_Report_Abstract
108
+ */
109
+ protected function _showLastExecutionTime($flagCode, $refreshCode)
110
+ {
111
+ $flag = Mage::getModel('reports/flag')->setReportFlagCode($flagCode)->loadSelf();
112
+ $updatedAt = ($flag->hasData())
113
+ ? Mage::app()->getLocale()->storeDate(
114
+ 0, new Zend_Date($flag->getLastUpdate(), Varien_Date::DATETIME_INTERNAL_FORMAT), true
115
+ )
116
+ : 'undefined';
117
+
118
+ $refreshStatsLink = $this->getUrl('*/report_statistics');
119
+ $directRefreshLink = $this->getUrl('*/report_statistics/refreshRecent', array('code' => $refreshCode));
120
+
121
+ Mage::getSingleton('adminhtml/session')->addNotice(Mage::helper('adminhtml')->__('Last updated: %s. To refresh last day\'s <a href="%s">statistics</a>, click <a href="%s">here</a>.', $updatedAt, $refreshStatsLink, $directRefreshLink));
122
+ return $this;
123
+ }
124
+ }
app/code/community/Mage/Adminhtml/Controller/Sales/Creditmemo.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders controller
29
+ *
30
+ * @author Magento Core Team <core@magentocommerce.com>
31
+ */
32
+ class Mage_Adminhtml_Controller_Sales_Creditmemo extends Mage_Adminhtml_Controller_Action
33
+ {
34
+ /**
35
+ * Additional initialization
36
+ *
37
+ */
38
+ protected function _construct()
39
+ {
40
+ $this->setUsedModuleName('Mage_Sales');
41
+ }
42
+
43
+ /**
44
+ * Init layout, menu and breadcrumb
45
+ *
46
+ * @return Mage_Adminhtml_Sales_CreditmemoController
47
+ */
48
+ protected function _initAction()
49
+ {
50
+ $this->loadLayout()
51
+ ->_setActiveMenu('sales/order')
52
+ ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
53
+ ->_addBreadcrumb($this->__('Credit Memos'),$this->__('Credit Memos'));
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Creditmemos grid
59
+ */
60
+ public function indexAction()
61
+ {
62
+ $this->_initAction()
63
+ ->_addContent($this->getLayout()->createBlock('adminhtml/sales_creditmemo'))
64
+ ->renderLayout();
65
+ }
66
+
67
+ /**
68
+ * Creditmemo information page
69
+ */
70
+ public function viewAction()
71
+ {
72
+ if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
73
+ $this->_forward('view', 'sales_order_creditmemo', null, array('come_from' => 'sales_creditmemo'));
74
+ } else {
75
+ $this->_forward('noRoute');
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Notify user
81
+ */
82
+ public function emailAction()
83
+ {
84
+ if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
85
+ if ($creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId)) {
86
+ $creditmemo->sendEmail();
87
+ $historyItem = Mage::getResourceModel('sales/order_status_history_collection')
88
+ ->getUnnotifiedForInstance($creditmemo, Mage_Sales_Model_Order_Creditmemo::HISTORY_ENTITY_NAME);
89
+ if ($historyItem) {
90
+ $historyItem->setIsCustomerNotified(1);
91
+ $historyItem->save();
92
+ }
93
+
94
+ $this->_getSession()->addSuccess(Mage::helper('sales')->__('The message was sent.'));
95
+ $this->_redirect('*/sales_order_creditmemo/view', array(
96
+ 'creditmemo_id' => $creditmemoId
97
+ ));
98
+ }
99
+ }
100
+ }
101
+
102
+ public function pdfcreditmemosAction(){
103
+ $creditmemosIds = $this->getRequest()->getPost('creditmemo_ids');
104
+ if (!empty($creditmemosIds)) {
105
+ $invoices = Mage::getResourceModel('sales/order_creditmemo_collection')
106
+ ->addAttributeToSelect('*')
107
+ ->addAttributeToFilter('entity_id', array('in' => $creditmemosIds))
108
+ ->load();
109
+ if (!isset($pdf)){
110
+ $pdf = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($invoices);
111
+ } else {
112
+ $pages = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($invoices);
113
+ $pdf->pages = array_merge ($pdf->pages, $pages->pages);
114
+ }
115
+
116
+ return $this->_prepareDownloadResponse('creditmemo'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
117
+ '.pdf', $pdf->render(), 'application/pdf');
118
+ }
119
+ $this->_redirect('*/*/');
120
+ }
121
+
122
+ public function printAction()
123
+ {
124
+ /** @see Mage_Adminhtml_Sales_Order_InvoiceController */
125
+ if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
126
+ if ($creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId)) {
127
+ $pdf = Mage::getModel('sales/order_pdf_creditmemo')->getPdf(array($creditmemo));
128
+ $this->_prepareDownloadResponse('creditmemo'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
129
+ '.pdf', $pdf->render(), 'application/pdf');
130
+ }
131
+ }
132
+ else {
133
+ $this->_forward('noRoute');
134
+ }
135
+ }
136
+
137
+ protected function _isAllowed()
138
+ {
139
+ return Mage::getSingleton('admin/session')->isAllowed('sales/creditmemo');
140
+ }
141
+ }
app/code/community/Mage/Adminhtml/Controller/Sales/Invoice.php ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders controller
29
+ *
30
+ * @author Magento Core Team <core@magentocommerce.com>
31
+ */
32
+ class Mage_Adminhtml_Controller_Sales_Invoice extends Mage_Adminhtml_Controller_Action
33
+ {
34
+ /**
35
+ * Additional initialization
36
+ *
37
+ */
38
+ protected function _construct()
39
+ {
40
+ $this->setUsedModuleName('Mage_Sales');
41
+ }
42
+
43
+ /**
44
+ * Init layout, menu and breadcrumb
45
+ *
46
+ * @return Mage_Adminhtml_Sales_InvoiceController
47
+ */
48
+ protected function _initAction()
49
+ {
50
+ $this->loadLayout()
51
+ ->_setActiveMenu('sales/order')
52
+ ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
53
+ ->_addBreadcrumb($this->__('Invoices'),$this->__('Invoices'));
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Order grid
59
+ */
60
+ public function gridAction()
61
+ {
62
+ $this->loadLayout();
63
+ $this->getResponse()->setBody(
64
+ $this->getLayout()->createBlock('adminhtml/sales_invoice_grid')->toHtml()
65
+ );
66
+ }
67
+
68
+ /**
69
+ * Invoices grid
70
+ */
71
+ public function indexAction()
72
+ {
73
+ $this->_title($this->__('Sales'))->_title($this->__('Invoices'));
74
+
75
+ $this->_initAction()
76
+ ->_addContent($this->getLayout()->createBlock('adminhtml/sales_invoice'))
77
+ ->renderLayout();
78
+ }
79
+
80
+ /**
81
+ * Invoice information page
82
+ */
83
+ public function viewAction()
84
+ {
85
+ if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
86
+ $this->_forward('view', 'sales_order_invoice', null, array('come_from'=>'invoice'));
87
+ } else {
88
+ $this->_forward('noRoute');
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Notify user
94
+ */
95
+ public function emailAction()
96
+ {
97
+ if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
98
+ if ($invoice = Mage::getModel('sales/order_invoice')->load($invoiceId)) {
99
+ $invoice->sendEmail();
100
+ $historyItem = Mage::getResourceModel('sales/order_status_history_collection')
101
+ ->getUnnotifiedForInstance($invoice, Mage_Sales_Model_Order_Invoice::HISTORY_ENTITY_NAME);
102
+ if ($historyItem) {
103
+ $historyItem->setIsCustomerNotified(1);
104
+ $historyItem->save();
105
+ }
106
+ $this->_getSession()->addSuccess(Mage::helper('sales')->__('The message has been sent.'));
107
+ $this->_redirect('*/sales_invoice/view', array(
108
+ 'order_id' => $invoice->getOrder()->getId(),
109
+ 'invoice_id'=> $invoiceId,
110
+ ));
111
+ }
112
+ }
113
+ }
114
+
115
+ public function printAction()
116
+ {
117
+ if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
118
+ if ($invoice = Mage::getModel('sales/order_invoice')->load($invoiceId)) {
119
+ $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf(array($invoice));
120
+ $this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
121
+ '.pdf', $pdf->render(), 'application/pdf');
122
+ }
123
+ }
124
+ else {
125
+ $this->_forward('noRoute');
126
+ }
127
+ }
128
+
129
+ public function pdfinvoicesAction(){
130
+ $invoicesIds = $this->getRequest()->getPost('invoice_ids');
131
+ if (!empty($invoicesIds)) {
132
+ $invoices = Mage::getResourceModel('sales/order_invoice_collection')
133
+ ->addAttributeToSelect('*')
134
+ ->addAttributeToFilter('entity_id', array('in' => $invoicesIds))
135
+ ->load();
136
+ if (!isset($pdf)){
137
+ $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
138
+ } else {
139
+ $pages = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
140
+ $pdf->pages = array_merge ($pdf->pages, $pages->pages);
141
+ }
142
+
143
+ return $this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
144
+ '.pdf', $pdf->render(), 'application/pdf');
145
+ }
146
+ $this->_redirect('*/*/');
147
+ }
148
+
149
+ protected function _isAllowed()
150
+ {
151
+ return Mage::getSingleton('admin/session')->isAllowed('sales/invoice');
152
+ }
153
+
154
+ }
app/code/community/Mage/Adminhtml/Controller/Sales/Shipment.php ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders controller
29
+ *
30
+ * @author Magento Core Team <core@magentocommerce.com>
31
+ */
32
+ class Mage_Adminhtml_Controller_Sales_Shipment extends Mage_Adminhtml_Controller_Action
33
+ {
34
+ /**
35
+ * Additional initialization
36
+ *
37
+ */
38
+ protected function _construct()
39
+ {
40
+ $this->setUsedModuleName('Mage_Sales');
41
+ }
42
+
43
+ /**
44
+ * Init layout, menu and breadcrumb
45
+ *
46
+ * @return Mage_Adminhtml_Sales_ShipmentController
47
+ */
48
+ protected function _initAction()
49
+ {
50
+ $this->loadLayout()
51
+ ->_setActiveMenu('sales/order')
52
+ ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
53
+ ->_addBreadcrumb($this->__('Shipments'),$this->__('Shipments'));
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Shipments grid
59
+ */
60
+ public function indexAction()
61
+ {
62
+ $this->_title($this->__('Sales'))->_title($this->__('Shipments'));
63
+
64
+ $this->_initAction()
65
+ ->_addContent($this->getLayout()->createBlock('adminhtml/sales_shipment'))
66
+ ->renderLayout();
67
+ }
68
+
69
+ /**
70
+ * Shipment information page
71
+ */
72
+ public function viewAction()
73
+ {
74
+ if ($shipmentId = $this->getRequest()->getParam('shipment_id')) {
75
+ $this->_forward('view', 'sales_order_shipment', null, array('come_from'=>'shipment'));
76
+ } else {
77
+ $this->_forward('noRoute');
78
+ }
79
+ }
80
+
81
+ public function pdfshipmentsAction(){
82
+ $shipmentIds = $this->getRequest()->getPost('shipment_ids');
83
+ if (!empty($shipmentIds)) {
84
+ $shipments = Mage::getResourceModel('sales/order_shipment_collection')
85
+ ->addAttributeToSelect('*')
86
+ ->addAttributeToFilter('entity_id', array('in' => $shipmentIds))
87
+ ->load();
88
+ if (!isset($pdf)){
89
+ $pdf = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
90
+ } else {
91
+ $pages = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
92
+ $pdf->pages = array_merge ($pdf->pages, $pages->pages);
93
+ }
94
+
95
+ return $this->_prepareDownloadResponse('packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $pdf->render(), 'application/pdf');
96
+ }
97
+ $this->_redirect('*/*/');
98
+ }
99
+
100
+
101
+ public function printAction()
102
+ {
103
+ /** @see Mage_Adminhtml_Sales_Order_InvoiceController */
104
+ if ($shipmentId = $this->getRequest()->getParam('invoice_id')) { // invoice_id o_0
105
+ if ($shipment = Mage::getModel('sales/order_shipment')->load($shipmentId)) {
106
+ $pdf = Mage::getModel('sales/order_pdf_shipment')->getPdf(array($shipment));
107
+ $this->_prepareDownloadResponse('packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $pdf->render(), 'application/pdf');
108
+ }
109
+ }
110
+ else {
111
+ $this->_forward('noRoute');
112
+ }
113
+ }
114
+
115
+ protected function _isAllowed()
116
+ {
117
+ return Mage::getSingleton('admin/session')->isAllowed('sales/shipment');
118
+ }
119
+ }
app/code/community/Mage/Adminhtml/controllers/Action.php ADDED
@@ -0,0 +1,387 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Base adminhtml controller
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Mage_Adminhtml_Controller_Action extends Mage_Core_Controller_Varien_Action
35
+ {
36
+ /**
37
+ * Name of "is URLs checked" flag
38
+ */
39
+ const FLAG_IS_URLS_CHECKED = 'check_url_settings';
40
+
41
+ /**
42
+ * Session namespace to refer in other places
43
+ */
44
+ const SESSION_NAMESPACE = 'adminhtml';
45
+
46
+ /**
47
+ * Array of actions which can be processed without secret key validation
48
+ *
49
+ * @var array
50
+ */
51
+ protected $_publicActions = array();
52
+
53
+ /**
54
+ * Used module name in current adminhtml controller
55
+ */
56
+ protected $_usedModuleName = 'adminhtml';
57
+
58
+ /**
59
+ * Currently used area
60
+ *
61
+ * @var string
62
+ */
63
+ protected $_currentArea = 'adminhtml';
64
+
65
+ /**
66
+ * Namespace for session.
67
+ *
68
+ * @var string
69
+ */
70
+ protected $_sessionNamespace = self::SESSION_NAMESPACE;
71
+
72
+ protected function _isAllowed()
73
+ {
74
+ return true;
75
+ }
76
+
77
+ /**
78
+ * Retrieve adminhtml session model object
79
+ *
80
+ * @return Mage_Adminhtml_Model_Session
81
+ */
82
+ protected function _getSession()
83
+ {
84
+ return Mage::getSingleton('adminhtml/session');
85
+ }
86
+
87
+ /**
88
+ * Retrieve base admihtml helper
89
+ *
90
+ * @return Mage_Adminhtml_Helper_Data
91
+ */
92
+ protected function _getHelper()
93
+ {
94
+ return Mage::helper('adminhtml');
95
+ }
96
+
97
+ /**
98
+ * Define active menu item in menu block
99
+ *
100
+ * @return Mage_Adminhtml_Controller_Action
101
+ */
102
+ protected function _setActiveMenu($menuPath)
103
+ {
104
+ $this->getLayout()->getBlock('menu')->setActive($menuPath);
105
+ return $this;
106
+ }
107
+
108
+ /**
109
+ * @return Mage_Adminhtml_Controller_Action
110
+ */
111
+ protected function _addBreadcrumb($label, $title, $link=null)
112
+ {
113
+ $this->getLayout()->getBlock('breadcrumbs')->addLink($label, $title, $link);
114
+ return $this;
115
+ }
116
+
117
+ /**
118
+ * @return Mage_Adminhtml_Controller_Action
119
+ */
120
+ protected function _addContent(Mage_Core_Block_Abstract $block)
121
+ {
122
+ $this->getLayout()->getBlock('content')->append($block);
123
+ return $this;
124
+ }
125
+
126
+ protected function _addLeft(Mage_Core_Block_Abstract $block)
127
+ {
128
+ $this->getLayout()->getBlock('left')->append($block);
129
+ return $this;
130
+ }
131
+
132
+ protected function _addJs(Mage_Core_Block_Abstract $block)
133
+ {
134
+ $this->getLayout()->getBlock('js')->append($block);
135
+ return $this;
136
+ }
137
+
138
+ /**
139
+ * Controller predispatch method
140
+ *
141
+ * @return Mage_Adminhtml_Controller_Action
142
+ */
143
+ public function preDispatch()
144
+ {
145
+ // override admin store design settings via stores section
146
+ Mage::getDesign()
147
+ ->setArea($this->_currentArea)
148
+ ->setPackageName((string)Mage::getConfig()->getNode('stores/admin/design/package/name'))
149
+ ->setTheme((string)Mage::getConfig()->getNode('stores/admin/design/theme/default'))
150
+ ;
151
+ foreach (array('layout', 'template', 'skin', 'locale') as $type) {
152
+ if ($value = (string)Mage::getConfig()->getNode("stores/admin/design/theme/{$type}")) {
153
+ Mage::getDesign()->setTheme($type, $value);
154
+ }
155
+ }
156
+
157
+ $this->getLayout()->setArea($this->_currentArea);
158
+
159
+ Mage::dispatchEvent('adminhtml_controller_action_predispatch_start', array());
160
+ parent::preDispatch();
161
+ $_isValidFormKey = true;
162
+ $_isValidSecretKey = true;
163
+ $_keyErrorMsg = '';
164
+ if (Mage::getSingleton('admin/session')->isLoggedIn()) {
165
+ if ($this->getRequest()->isPost()) {
166
+ $_isValidFormKey = $this->_validateFormKey();
167
+ $_keyErrorMsg = Mage::helper('adminhtml')->__('Invalid Form Key. Please refresh the page.');
168
+ } elseif (Mage::getSingleton('adminhtml/url')->useSecretKey()) {
169
+ $_isValidSecretKey = $this->_validateSecretKey();
170
+ $_keyErrorMsg = Mage::helper('adminhtml')->__('Invalid Secret Key. Please refresh the page.');
171
+ }
172
+ }
173
+ if (!$_isValidFormKey || !$_isValidSecretKey) {
174
+ $this->setFlag('', self::FLAG_NO_DISPATCH, true);
175
+ $this->setFlag('', self::FLAG_NO_POST_DISPATCH, true);
176
+ if ($this->getRequest()->getQuery('isAjax', false) || $this->getRequest()->getQuery('ajax', false)) {
177
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array(
178
+ 'error' => true,
179
+ 'message' => $_keyErrorMsg
180
+ )));
181
+ } else {
182
+ $this->_redirect( Mage::getSingleton('admin/session')->getUser()->getStartupPageUrl() );
183
+ }
184
+ return $this;
185
+ }
186
+
187
+ if ($this->getRequest()->isDispatched()
188
+ && $this->getRequest()->getActionName() !== 'denied'
189
+ && !$this->_isAllowed()) {
190
+ $this->_forward('denied');
191
+ $this->setFlag('', self::FLAG_NO_DISPATCH, true);
192
+ return $this;
193
+ }
194
+
195
+ if (!$this->getFlag('', self::FLAG_IS_URLS_CHECKED)
196
+ && !$this->getRequest()->getParam('forwarded')
197
+ && !$this->_getSession()->getIsUrlNotice(true)
198
+ && !Mage::getConfig()->getNode('global/can_use_base_url')) {
199
+ //$this->_checkUrlSettings();
200
+ $this->setFlag('', self::FLAG_IS_URLS_CHECKED, true);
201
+ }
202
+ if (is_null(Mage::getSingleton('adminhtml/session')->getLocale())) {
203
+ Mage::getSingleton('adminhtml/session')->setLocale(Mage::app()->getLocale()->getLocaleCode());
204
+ }
205
+
206
+ return $this;
207
+ }
208
+
209
+ /**
210
+ * @deprecated after 1.4.0.0 alpha, logic moved to Mage_Adminhtml_Block_Notification_Baseurl
211
+ * @return Mage_Adminhtml_Controller_Action
212
+ */
213
+ protected function _checkUrlSettings()
214
+ {
215
+ /**
216
+ * Don't check for data saving actions
217
+ */
218
+ if ($this->getRequest()->getPost() || $this->getRequest()->getQuery('isAjax')) {
219
+ return $this;
220
+ }
221
+
222
+ $configData = Mage::getModel('core/config_data');
223
+
224
+ $defaultUnsecure = (string)Mage::getConfig()->getNode(
225
+ 'default/' . Mage_Core_Model_Store::XML_PATH_UNSECURE_BASE_URL
226
+ );
227
+ $defaultSecure = (string)Mage::getConfig()->getNode(
228
+ 'default/' . Mage_Core_Model_Store::XML_PATH_SECURE_BASE_URL
229
+ );
230
+
231
+ if ($defaultSecure == '{{base_url}}' || $defaultUnsecure == '{{base_url}}') {
232
+ $this->_getSession()->addNotice(
233
+ $this->__('{{base_url}} is not recommended to use in a production environment to declare the Base Unsecure URL / Base Secure URL. It is highly recommended to change this value in your Magento <a href="%s">configuration</a>.', $this->getUrl('adminhtml/system_config/edit', array('section'=>'web')))
234
+ );
235
+ return $this;
236
+ }
237
+
238
+ $dataCollection = $configData->getCollection()
239
+ ->addValueFilter('{{base_url}}');
240
+
241
+ $url = false;
242
+ foreach ($dataCollection as $data) {
243
+ if ($data->getScope() == 'stores') {
244
+ $code = Mage::app()->getStore($data->getScopeId())->getCode();
245
+ $url = $this->getUrl('adminhtml/system_config/edit', array('section'=>'web', 'store'=>$code));
246
+ }
247
+ if ($data->getScope() == 'websites') {
248
+ $code = Mage::app()->getWebsite($data->getScopeId())->getCode();
249
+ $url = $this->getUrl('adminhtml/system_config/edit', array('section'=>'web', 'website'=>$code));
250
+ }
251
+
252
+ if ($url) {
253
+ $this->_getSession()->addNotice(
254
+ $this->__('{{base_url}} is not recommended to use in a production environment to declare the Base Unsecure URL / Base Secure URL. It is highly recommended to change this value in your Magento <a href="%s">configuration</a>.', $url)
255
+ );
256
+ return $this;
257
+ }
258
+ }
259
+ return $this;
260
+ }
261
+
262
+ public function deniedAction()
263
+ {
264
+ $this->getResponse()->setHeader('HTTP/1.1','403 Forbidden');
265
+ if (!Mage::getSingleton('admin/session')->isLoggedIn()) {
266
+ $this->_redirect('*/index/login');
267
+ return;
268
+ }
269
+ $this->loadLayout(array('default', 'adminhtml_denied'));
270
+ $this->renderLayout();
271
+ }
272
+
273
+ public function loadLayout($ids=null, $generateBlocks=true, $generateXml=true)
274
+ {
275
+ parent::loadLayout($ids, $generateBlocks, $generateXml);
276
+ $this->_initLayoutMessages('adminhtml/session');
277
+ return $this;
278
+ }
279
+
280
+ public function norouteAction($coreRoute = null)
281
+ {
282
+ $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
283
+ $this->getResponse()->setHeader('Status','404 File not found');
284
+ $this->loadLayout(array('default', 'adminhtml_noroute'));
285
+ $this->renderLayout();
286
+ }
287
+
288
+
289
+ /**
290
+ * Retrieve currently used module name
291
+ *
292
+ * @return string
293
+ */
294
+ public function getUsedModuleName()
295
+ {
296
+ return $this->_usedModuleName;
297
+ }
298
+
299
+ /**
300
+ * Set currently used module name
301
+ *
302
+ * @param string $moduleName
303
+ * @return Mage_Adminhtml_Controller_Action
304
+ */
305
+ public function setUsedModuleName($moduleName)
306
+ {
307
+ $this->_usedModuleName = $moduleName;
308
+ return $this;
309
+ }
310
+
311
+ /**
312
+ * Translate a phrase
313
+ *
314
+ * @return string
315
+ */
316
+ public function __()
317
+ {
318
+ $args = func_get_args();
319
+ $expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->getUsedModuleName());
320
+ array_unshift($args, $expr);
321
+ return Mage::app()->getTranslator()->translate($args);
322
+ }
323
+
324
+ /**
325
+ * Set referer url for redirect in responce
326
+ *
327
+ * Is overriden here to set defaultUrl to admin url
328
+ *
329
+ * @param string $defaultUrl
330
+ * @return Mage_Adminhtml_Controller_Action
331
+ */
332
+ protected function _redirectReferer($defaultUrl=null)
333
+ {
334
+ $defaultUrl = empty($defaultUrl) ? $this->getUrl('*') : $defaultUrl;
335
+ parent::_redirectReferer($defaultUrl);
336
+ return $this;
337
+ }
338
+
339
+ /**
340
+ * Set redirect into responce
341
+ *
342
+ * @param string $path
343
+ * @param array $arguments
344
+ */
345
+ protected function _redirect($path, $arguments=array())
346
+ {
347
+ $this->_getSession()->setIsUrlNotice($this->getFlag('', self::FLAG_IS_URLS_CHECKED));
348
+ $this->getResponse()->setRedirect($this->getUrl($path, $arguments));
349
+ return $this;
350
+ }
351
+
352
+ protected function _forward($action, $controller = null, $module = null, array $params = null)
353
+ {
354
+ $this->_getSession()->setIsUrlNotice($this->getFlag('', self::FLAG_IS_URLS_CHECKED));
355
+ return parent::_forward($action, $controller, $module, $params);
356
+ }
357
+
358
+ /**
359
+ * Generate url by route and parameters
360
+ *
361
+ * @param string $route
362
+ * @param array $params
363
+ * @return string
364
+ */
365
+ public function getUrl($route='', $params=array())
366
+ {
367
+ return Mage::helper('adminhtml')->getUrl($route, $params);
368
+ }
369
+
370
+ /**
371
+ * Validate Secret Key
372
+ *
373
+ * @return bool
374
+ */
375
+ protected function _validateSecretKey()
376
+ {
377
+ if (is_array($this->_publicActions) && in_array($this->getRequest()->getActionName(), $this->_publicActions)) {
378
+ return true;
379
+ }
380
+
381
+ if (!($secretKey = $this->getRequest()->getParam(Mage_Adminhtml_Model_Url::SECRET_KEY_PARAM_NAME, null))
382
+ || $secretKey != Mage::getSingleton('adminhtml/url')->getSecretKey()) {
383
+ return false;
384
+ }
385
+ return true;
386
+ }
387
+ }
app/code/community/Mage/Adminhtml/controllers/Block/Sales/Order/Shipment/Create/Tracking.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Shipment tracking control form
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Mage_Adminhtml_Block_Sales_Order_Shipment_Create_Tracking extends Mage_Adminhtml_Block_Template
35
+ {
36
+ /**
37
+ * Prepares layout of block
38
+ *
39
+ * @return Mage_Adminhtml_Block_Sales_Order_View_Giftmessage
40
+ */
41
+ protected function _prepareLayout()
42
+ {
43
+ $this->setChild('add_button',
44
+ $this->getLayout()->createBlock('adminhtml/widget_button')
45
+ ->setData(array(
46
+ 'label' => Mage::helper('sales')->__('Add Tracking Number'),
47
+ 'class' => '',
48
+ 'onclick' => 'trackingControl.add()'
49
+ ))
50
+
51
+ );
52
+
53
+ }
54
+
55
+ /**
56
+ * Retrieve shipment model instance
57
+ *
58
+ * @return Mage_Sales_Model_Order_Shipment
59
+ */
60
+ public function getShipment()
61
+ {
62
+ return Mage::registry('current_shipment');
63
+ }
64
+
65
+ /**
66
+ * Retrieve
67
+ *
68
+ * @return unknown
69
+ */
70
+ public function getCarriers()
71
+ {
72
+ $carriers = array();
73
+ $carrierInstances = Mage::getSingleton('shipping/config')->getAllCarriers(
74
+ $this->getShipment()->getStoreId()
75
+ );
76
+ $carriers['custom'] = Mage::helper('sales')->__('Custom Value');
77
+ foreach ($carrierInstances as $code => $carrier) {
78
+ if ($carrier->isTrackingAvailable()) {
79
+ $carriers[$code] = $carrier->getConfigData('title');
80
+ }
81
+ }
82
+
83
+ $carriers['hanjin'] = Mage::helper('sales')->__('한진택배');
84
+ $carriers['kyungdong'] = Mage::helper('sales')->__('경동택배');
85
+ $carriers['korex'] = Mage::helper('sales')->__('대한통운');
86
+ $carriers['dongbu'] = Mage::helper('sales')->__('동부익스프레스');
87
+ $carriers['innogis'] = Mage::helper('sales')->__('이노지스');
88
+ $carriers['hanaro'] = Mage::helper('sales')->__('하나로택배');
89
+ $carriers['hyundai'] = Mage::helper('sales')->__('현대로지엠');
90
+ $carriers['cjgls'] = Mage::helper('sales')->__('CJGLS');
91
+ $carriers['yellow'] = Mage::helper('sales')->__('KG옐로우캡');
92
+ $carriers['kgb'] = Mage::helper('sales')->__('로젠택배');
93
+ $carriers['epost'] = Mage::helper('sales')->__('우체국택배');
94
+ $carriers['etc'] = Mage::helper('sales')->__('한덱스택배');
95
+ $carriers['etc'] = Mage::helper('sales')->__('호남택배');
96
+ $carriers['etc'] = Mage::helper('sales')->__('DHL택배');
97
+ $carriers['etc'] = Mage::helper('sales')->__('KGB택배');
98
+
99
+
100
+ return $carriers;
101
+ }
102
+ }
app/code/community/Mage/Adminhtml/controllers/Controller/Action.php ADDED
@@ -0,0 +1,387 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Base adminhtml controller
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Mage_Adminhtml_Controller_Action extends Mage_Core_Controller_Varien_Action
35
+ {
36
+ /**
37
+ * Name of "is URLs checked" flag
38
+ */
39
+ const FLAG_IS_URLS_CHECKED = 'check_url_settings';
40
+
41
+ /**
42
+ * Session namespace to refer in other places
43
+ */
44
+ const SESSION_NAMESPACE = 'adminhtml';
45
+
46
+ /**
47
+ * Array of actions which can be processed without secret key validation
48
+ *
49
+ * @var array
50
+ */
51
+ protected $_publicActions = array();
52
+
53
+ /**
54
+ * Used module name in current adminhtml controller
55
+ */
56
+ protected $_usedModuleName = 'adminhtml';
57
+
58
+ /**
59
+ * Currently used area
60
+ *
61
+ * @var string
62
+ */
63
+ protected $_currentArea = 'adminhtml';
64
+
65
+ /**
66
+ * Namespace for session.
67
+ *
68
+ * @var string
69
+ */
70
+ protected $_sessionNamespace = self::SESSION_NAMESPACE;
71
+
72
+ protected function _isAllowed()
73
+ {
74
+ return true;
75
+ }
76
+
77
+ /**
78
+ * Retrieve adminhtml session model object
79
+ *
80
+ * @return Mage_Adminhtml_Model_Session
81
+ */
82
+ protected function _getSession()
83
+ {
84
+ return Mage::getSingleton('adminhtml/session');
85
+ }
86
+
87
+ /**
88
+ * Retrieve base admihtml helper
89
+ *
90
+ * @return Mage_Adminhtml_Helper_Data
91
+ */
92
+ protected function _getHelper()
93
+ {
94
+ return Mage::helper('adminhtml');
95
+ }
96
+
97
+ /**
98
+ * Define active menu item in menu block
99
+ *
100
+ * @return Mage_Adminhtml_Controller_Action
101
+ */
102
+ protected function _setActiveMenu($menuPath)
103
+ {
104
+ $this->getLayout()->getBlock('menu')->setActive($menuPath);
105
+ return $this;
106
+ }
107
+
108
+ /**
109
+ * @return Mage_Adminhtml_Controller_Action
110
+ */
111
+ protected function _addBreadcrumb($label, $title, $link=null)
112
+ {
113
+ $this->getLayout()->getBlock('breadcrumbs')->addLink($label, $title, $link);
114
+ return $this;
115
+ }
116
+
117
+ /**
118
+ * @return Mage_Adminhtml_Controller_Action
119
+ */
120
+ protected function _addContent(Mage_Core_Block_Abstract $block)
121
+ {
122
+ $this->getLayout()->getBlock('content')->append($block);
123
+ return $this;
124
+ }
125
+
126
+ protected function _addLeft(Mage_Core_Block_Abstract $block)
127
+ {
128
+ $this->getLayout()->getBlock('left')->append($block);
129
+ return $this;
130
+ }
131
+
132
+ protected function _addJs(Mage_Core_Block_Abstract $block)
133
+ {
134
+ $this->getLayout()->getBlock('js')->append($block);
135
+ return $this;
136
+ }
137
+
138
+ /**
139
+ * Controller predispatch method
140
+ *
141
+ * @return Mage_Adminhtml_Controller_Action
142
+ */
143
+ public function preDispatch()
144
+ {
145
+ // override admin store design settings via stores section
146
+ Mage::getDesign()
147
+ ->setArea($this->_currentArea)
148
+ ->setPackageName((string)Mage::getConfig()->getNode('stores/admin/design/package/name'))
149
+ ->setTheme((string)Mage::getConfig()->getNode('stores/admin/design/theme/default'))
150
+ ;
151
+ foreach (array('layout', 'template', 'skin', 'locale') as $type) {
152
+ if ($value = (string)Mage::getConfig()->getNode("stores/admin/design/theme/{$type}")) {
153
+ Mage::getDesign()->setTheme($type, $value);
154
+ }
155
+ }
156
+
157
+ $this->getLayout()->setArea($this->_currentArea);
158
+
159
+ Mage::dispatchEvent('adminhtml_controller_action_predispatch_start', array());
160
+ parent::preDispatch();
161
+ $_isValidFormKey = true;
162
+ $_isValidSecretKey = true;
163
+ $_keyErrorMsg = '';
164
+ if (Mage::getSingleton('admin/session')->isLoggedIn()) {
165
+ if ($this->getRequest()->isPost()) {
166
+ $_isValidFormKey = $this->_validateFormKey();
167
+ $_keyErrorMsg = Mage::helper('adminhtml')->__('Invalid Form Key. Please refresh the page.');
168
+ } elseif (Mage::getSingleton('adminhtml/url')->useSecretKey()) {
169
+ $_isValidSecretKey = $this->_validateSecretKey();
170
+ $_keyErrorMsg = Mage::helper('adminhtml')->__('Invalid Secret Key. Please refresh the page.');
171
+ }
172
+ }
173
+ if (!$_isValidFormKey || !$_isValidSecretKey) {
174
+ $this->setFlag('', self::FLAG_NO_DISPATCH, true);
175
+ $this->setFlag('', self::FLAG_NO_POST_DISPATCH, true);
176
+ if ($this->getRequest()->getQuery('isAjax', false) || $this->getRequest()->getQuery('ajax', false)) {
177
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array(
178
+ 'error' => true,
179
+ 'message' => $_keyErrorMsg
180
+ )));
181
+ } else {
182
+ $this->_redirect( Mage::getSingleton('admin/session')->getUser()->getStartupPageUrl() );
183
+ }
184
+ return $this;
185
+ }
186
+
187
+ if ($this->getRequest()->isDispatched()
188
+ && $this->getRequest()->getActionName() !== 'denied'
189
+ && !$this->_isAllowed()) {
190
+ $this->_forward('denied');
191
+ $this->setFlag('', self::FLAG_NO_DISPATCH, true);
192
+ return $this;
193
+ }
194
+
195
+ if (!$this->getFlag('', self::FLAG_IS_URLS_CHECKED)
196
+ && !$this->getRequest()->getParam('forwarded')
197
+ && !$this->_getSession()->getIsUrlNotice(true)
198
+ && !Mage::getConfig()->getNode('global/can_use_base_url')) {
199
+ //$this->_checkUrlSettings();
200
+ $this->setFlag('', self::FLAG_IS_URLS_CHECKED, true);
201
+ }
202
+ if (is_null(Mage::getSingleton('adminhtml/session')->getLocale())) {
203
+ Mage::getSingleton('adminhtml/session')->setLocale(Mage::app()->getLocale()->getLocaleCode());
204
+ }
205
+
206
+ return $this;
207
+ }
208
+
209
+ /**
210
+ * @deprecated after 1.4.0.0 alpha, logic moved to Mage_Adminhtml_Block_Notification_Baseurl
211
+ * @return Mage_Adminhtml_Controller_Action
212
+ */
213
+ protected function _checkUrlSettings()
214
+ {
215
+ /**
216
+ * Don't check for data saving actions
217
+ */
218
+ if ($this->getRequest()->getPost() || $this->getRequest()->getQuery('isAjax')) {
219
+ return $this;
220
+ }
221
+
222
+ $configData = Mage::getModel('core/config_data');
223
+
224
+ $defaultUnsecure = (string)Mage::getConfig()->getNode(
225
+ 'default/' . Mage_Core_Model_Store::XML_PATH_UNSECURE_BASE_URL
226
+ );
227
+ $defaultSecure = (string)Mage::getConfig()->getNode(
228
+ 'default/' . Mage_Core_Model_Store::XML_PATH_SECURE_BASE_URL
229
+ );
230
+
231
+ if ($defaultSecure == '{{base_url}}' || $defaultUnsecure == '{{base_url}}') {
232
+ $this->_getSession()->addNotice(
233
+ $this->__('{{base_url}} is not recommended to use in a production environment to declare the Base Unsecure URL / Base Secure URL. It is highly recommended to change this value in your Magento <a href="%s">configuration</a>.', $this->getUrl('adminhtml/system_config/edit', array('section'=>'web')))
234
+ );
235
+ return $this;
236
+ }
237
+
238
+ $dataCollection = $configData->getCollection()
239
+ ->addValueFilter('{{base_url}}');
240
+
241
+ $url = false;
242
+ foreach ($dataCollection as $data) {
243
+ if ($data->getScope() == 'stores') {
244
+ $code = Mage::app()->getStore($data->getScopeId())->getCode();
245
+ $url = $this->getUrl('adminhtml/system_config/edit', array('section'=>'web', 'store'=>$code));
246
+ }
247
+ if ($data->getScope() == 'websites') {
248
+ $code = Mage::app()->getWebsite($data->getScopeId())->getCode();
249
+ $url = $this->getUrl('adminhtml/system_config/edit', array('section'=>'web', 'website'=>$code));
250
+ }
251
+
252
+ if ($url) {
253
+ $this->_getSession()->addNotice(
254
+ $this->__('{{base_url}} is not recommended to use in a production environment to declare the Base Unsecure URL / Base Secure URL. It is highly recommended to change this value in your Magento <a href="%s">configuration</a>.', $url)
255
+ );
256
+ return $this;
257
+ }
258
+ }
259
+ return $this;
260
+ }
261
+
262
+ public function deniedAction()
263
+ {
264
+ $this->getResponse()->setHeader('HTTP/1.1','403 Forbidden');
265
+ if (!Mage::getSingleton('admin/session')->isLoggedIn()) {
266
+ $this->_redirect('*/index/login');
267
+ return;
268
+ }
269
+ $this->loadLayout(array('default', 'adminhtml_denied'));
270
+ $this->renderLayout();
271
+ }
272
+
273
+ public function loadLayout($ids=null, $generateBlocks=true, $generateXml=true)
274
+ {
275
+ parent::loadLayout($ids, $generateBlocks, $generateXml);
276
+ $this->_initLayoutMessages('adminhtml/session');
277
+ return $this;
278
+ }
279
+
280
+ public function norouteAction($coreRoute = null)
281
+ {
282
+ $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
283
+ $this->getResponse()->setHeader('Status','404 File not found');
284
+ $this->loadLayout(array('default', 'adminhtml_noroute'));
285
+ $this->renderLayout();
286
+ }
287
+
288
+
289
+ /**
290
+ * Retrieve currently used module name
291
+ *
292
+ * @return string
293
+ */
294
+ public function getUsedModuleName()
295
+ {
296
+ return $this->_usedModuleName;
297
+ }
298
+
299
+ /**
300
+ * Set currently used module name
301
+ *
302
+ * @param string $moduleName
303
+ * @return Mage_Adminhtml_Controller_Action
304
+ */
305
+ public function setUsedModuleName($moduleName)
306
+ {
307
+ $this->_usedModuleName = $moduleName;
308
+ return $this;
309
+ }
310
+
311
+ /**
312
+ * Translate a phrase
313
+ *
314
+ * @return string
315
+ */
316
+ public function __()
317
+ {
318
+ $args = func_get_args();
319
+ $expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->getUsedModuleName());
320
+ array_unshift($args, $expr);
321
+ return Mage::app()->getTranslator()->translate($args);
322
+ }
323
+
324
+ /**
325
+ * Set referer url for redirect in responce
326
+ *
327
+ * Is overriden here to set defaultUrl to admin url
328
+ *
329
+ * @param string $defaultUrl
330
+ * @return Mage_Adminhtml_Controller_Action
331
+ */
332
+ protected function _redirectReferer($defaultUrl=null)
333
+ {
334
+ $defaultUrl = empty($defaultUrl) ? $this->getUrl('*') : $defaultUrl;
335
+ parent::_redirectReferer($defaultUrl);
336
+ return $this;
337
+ }
338
+
339
+ /**
340
+ * Set redirect into responce
341
+ *
342
+ * @param string $path
343
+ * @param array $arguments
344
+ */
345
+ protected function _redirect($path, $arguments=array())
346
+ {
347
+ $this->_getSession()->setIsUrlNotice($this->getFlag('', self::FLAG_IS_URLS_CHECKED));
348
+ $this->getResponse()->setRedirect($this->getUrl($path, $arguments));
349
+ return $this;
350
+ }
351
+
352
+ protected function _forward($action, $controller = null, $module = null, array $params = null)
353
+ {
354
+ $this->_getSession()->setIsUrlNotice($this->getFlag('', self::FLAG_IS_URLS_CHECKED));
355
+ return parent::_forward($action, $controller, $module, $params);
356
+ }
357
+
358
+ /**
359
+ * Generate url by route and parameters
360
+ *
361
+ * @param string $route
362
+ * @param array $params
363
+ * @return string
364
+ */
365
+ public function getUrl($route='', $params=array())
366
+ {
367
+ return Mage::helper('adminhtml')->getUrl($route, $params);
368
+ }
369
+
370
+ /**
371
+ * Validate Secret Key
372
+ *
373
+ * @return bool
374
+ */
375
+ protected function _validateSecretKey()
376
+ {
377
+ if (is_array($this->_publicActions) && in_array($this->getRequest()->getActionName(), $this->_publicActions)) {
378
+ return true;
379
+ }
380
+
381
+ if (!($secretKey = $this->getRequest()->getParam(Mage_Adminhtml_Model_Url::SECRET_KEY_PARAM_NAME, null))
382
+ || $secretKey != Mage::getSingleton('adminhtml/url')->getSecretKey()) {
383
+ return false;
384
+ }
385
+ return true;
386
+ }
387
+ }
app/code/community/Mage/Adminhtml/controllers/Controller/Report/Abstract.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+
28
+ /**
29
+ * Admin abstract reports controller
30
+ *
31
+ * @category Mage
32
+ * @package Mage_Adminhtml
33
+ * @author Magento Core Team <core@magentocommerce.com>
34
+ */
35
+ abstract class Mage_Adminhtml_Controller_Report_Abstract extends Mage_Adminhtml_Controller_Action
36
+ {
37
+ /**
38
+ * Admin session model
39
+ *
40
+ * @var null|Mage_Admin_Model_Session
41
+ */
42
+ protected $_adminSession = null;
43
+
44
+ /**
45
+ * Retrieve admin session model
46
+ *
47
+ * @return Mage_Admin_Model_Session
48
+ */
49
+ protected function _getSession()
50
+ {
51
+ if (is_null($this->_adminSession)) {
52
+ $this->_adminSession = Mage::getSingleton('admin/session');
53
+ }
54
+ return $this->_adminSession;
55
+ }
56
+
57
+ /**
58
+ * Add report breadcrumbs
59
+ *
60
+ * @return Mage_Adminhtml_Controller_Report_Abstract
61
+ */
62
+ public function _initAction()
63
+ {
64
+ $this->loadLayout()
65
+ ->_addBreadcrumb(Mage::helper('reports')->__('Reports'), Mage::helper('reports')->__('Reports'));
66
+ return $this;
67
+ }
68
+
69
+ /**
70
+ * Report action init operations
71
+ *
72
+ * @param array|Varien_Object $blocks
73
+ * @return Mage_Adminhtml_Controller_Report_Abstract
74
+ */
75
+ public function _initReportAction($blocks)
76
+ {
77
+ if (!is_array($blocks)) {
78
+ $blocks = array($blocks);
79
+ }
80
+
81
+ $requestData = Mage::helper('adminhtml')->prepareFilterString($this->getRequest()->getParam('filter'));
82
+ $requestData = $this->_filterDates($requestData, array('from', 'to'));
83
+ $requestData['store_ids'] = $this->getRequest()->getParam('store_ids');
84
+ $params = new Varien_Object();
85
+
86
+ foreach ($requestData as $key => $value) {
87
+ if (!empty($value)) {
88
+ $params->setData($key, $value);
89
+ }
90
+ }
91
+
92
+ foreach ($blocks as $block) {
93
+ if ($block) {
94
+ $block->setPeriodType($params->getData('period_type'));
95
+ $block->setFilterData($params);
96
+ }
97
+ }
98
+
99
+ return $this;
100
+ }
101
+
102
+ /**
103
+ * Add refresh statistics links
104
+ *
105
+ * @param string $flagCode
106
+ * @param string $refreshCode
107
+ * @return Mage_Adminhtml_Controller_Report_Abstract
108
+ */
109
+ protected function _showLastExecutionTime($flagCode, $refreshCode)
110
+ {
111
+ $flag = Mage::getModel('reports/flag')->setReportFlagCode($flagCode)->loadSelf();
112
+ $updatedAt = ($flag->hasData())
113
+ ? Mage::app()->getLocale()->storeDate(
114
+ 0, new Zend_Date($flag->getLastUpdate(), Varien_Date::DATETIME_INTERNAL_FORMAT), true
115
+ )
116
+ : 'undefined';
117
+
118
+ $refreshStatsLink = $this->getUrl('*/report_statistics');
119
+ $directRefreshLink = $this->getUrl('*/report_statistics/refreshRecent', array('code' => $refreshCode));
120
+
121
+ Mage::getSingleton('adminhtml/session')->addNotice(Mage::helper('adminhtml')->__('Last updated: %s. To refresh last day\'s <a href="%s">statistics</a>, click <a href="%s">here</a>.', $updatedAt, $refreshStatsLink, $directRefreshLink));
122
+ return $this;
123
+ }
124
+ }
app/code/community/Mage/Adminhtml/controllers/Controller/Sales/Creditmemo.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders controller
29
+ *
30
+ * @author Magento Core Team <core@magentocommerce.com>
31
+ */
32
+ class Mage_Adminhtml_Controller_Sales_Creditmemo extends Mage_Adminhtml_Controller_Action
33
+ {
34
+ /**
35
+ * Additional initialization
36
+ *
37
+ */
38
+ protected function _construct()
39
+ {
40
+ $this->setUsedModuleName('Mage_Sales');
41
+ }
42
+
43
+ /**
44
+ * Init layout, menu and breadcrumb
45
+ *
46
+ * @return Mage_Adminhtml_Sales_CreditmemoController
47
+ */
48
+ protected function _initAction()
49
+ {
50
+ $this->loadLayout()
51
+ ->_setActiveMenu('sales/order')
52
+ ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
53
+ ->_addBreadcrumb($this->__('Credit Memos'),$this->__('Credit Memos'));
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Creditmemos grid
59
+ */
60
+ public function indexAction()
61
+ {
62
+ $this->_initAction()
63
+ ->_addContent($this->getLayout()->createBlock('adminhtml/sales_creditmemo'))
64
+ ->renderLayout();
65
+ }
66
+
67
+ /**
68
+ * Creditmemo information page
69
+ */
70
+ public function viewAction()
71
+ {
72
+ if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
73
+ $this->_forward('view', 'sales_order_creditmemo', null, array('come_from' => 'sales_creditmemo'));
74
+ } else {
75
+ $this->_forward('noRoute');
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Notify user
81
+ */
82
+ public function emailAction()
83
+ {
84
+ if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
85
+ if ($creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId)) {
86
+ $creditmemo->sendEmail();
87
+ $historyItem = Mage::getResourceModel('sales/order_status_history_collection')
88
+ ->getUnnotifiedForInstance($creditmemo, Mage_Sales_Model_Order_Creditmemo::HISTORY_ENTITY_NAME);
89
+ if ($historyItem) {
90
+ $historyItem->setIsCustomerNotified(1);
91
+ $historyItem->save();
92
+ }
93
+
94
+ $this->_getSession()->addSuccess(Mage::helper('sales')->__('The message was sent.'));
95
+ $this->_redirect('*/sales_order_creditmemo/view', array(
96
+ 'creditmemo_id' => $creditmemoId
97
+ ));
98
+ }
99
+ }
100
+ }
101
+
102
+ public function pdfcreditmemosAction(){
103
+ $creditmemosIds = $this->getRequest()->getPost('creditmemo_ids');
104
+ if (!empty($creditmemosIds)) {
105
+ $invoices = Mage::getResourceModel('sales/order_creditmemo_collection')
106
+ ->addAttributeToSelect('*')
107
+ ->addAttributeToFilter('entity_id', array('in' => $creditmemosIds))
108
+ ->load();
109
+ if (!isset($pdf)){
110
+ $pdf = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($invoices);
111
+ } else {
112
+ $pages = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($invoices);
113
+ $pdf->pages = array_merge ($pdf->pages, $pages->pages);
114
+ }
115
+
116
+ return $this->_prepareDownloadResponse('creditmemo'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
117
+ '.pdf', $pdf->render(), 'application/pdf');
118
+ }
119
+ $this->_redirect('*/*/');
120
+ }
121
+
122
+ public function printAction()
123
+ {
124
+ /** @see Mage_Adminhtml_Sales_Order_InvoiceController */
125
+ if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
126
+ if ($creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId)) {
127
+ $pdf = Mage::getModel('sales/order_pdf_creditmemo')->getPdf(array($creditmemo));
128
+ $this->_prepareDownloadResponse('creditmemo'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
129
+ '.pdf', $pdf->render(), 'application/pdf');
130
+ }
131
+ }
132
+ else {
133
+ $this->_forward('noRoute');
134
+ }
135
+ }
136
+
137
+ protected function _isAllowed()
138
+ {
139
+ return Mage::getSingleton('admin/session')->isAllowed('sales/creditmemo');
140
+ }
141
+ }
app/code/community/Mage/Adminhtml/controllers/Controller/Sales/Invoice.php ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders controller
29
+ *
30
+ * @author Magento Core Team <core@magentocommerce.com>
31
+ */
32
+ class Mage_Adminhtml_Controller_Sales_Invoice extends Mage_Adminhtml_Controller_Action
33
+ {
34
+ /**
35
+ * Additional initialization
36
+ *
37
+ */
38
+ protected function _construct()
39
+ {
40
+ $this->setUsedModuleName('Mage_Sales');
41
+ }
42
+
43
+ /**
44
+ * Init layout, menu and breadcrumb
45
+ *
46
+ * @return Mage_Adminhtml_Sales_InvoiceController
47
+ */
48
+ protected function _initAction()
49
+ {
50
+ $this->loadLayout()
51
+ ->_setActiveMenu('sales/order')
52
+ ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
53
+ ->_addBreadcrumb($this->__('Invoices'),$this->__('Invoices'));
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Order grid
59
+ */
60
+ public function gridAction()
61
+ {
62
+ $this->loadLayout();
63
+ $this->getResponse()->setBody(
64
+ $this->getLayout()->createBlock('adminhtml/sales_invoice_grid')->toHtml()
65
+ );
66
+ }
67
+
68
+ /**
69
+ * Invoices grid
70
+ */
71
+ public function indexAction()
72
+ {
73
+ $this->_title($this->__('Sales'))->_title($this->__('Invoices'));
74
+
75
+ $this->_initAction()
76
+ ->_addContent($this->getLayout()->createBlock('adminhtml/sales_invoice'))
77
+ ->renderLayout();
78
+ }
79
+
80
+ /**
81
+ * Invoice information page
82
+ */
83
+ public function viewAction()
84
+ {
85
+ if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
86
+ $this->_forward('view', 'sales_order_invoice', null, array('come_from'=>'invoice'));
87
+ } else {
88
+ $this->_forward('noRoute');
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Notify user
94
+ */
95
+ public function emailAction()
96
+ {
97
+ if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
98
+ if ($invoice = Mage::getModel('sales/order_invoice')->load($invoiceId)) {
99
+ $invoice->sendEmail();
100
+ $historyItem = Mage::getResourceModel('sales/order_status_history_collection')
101
+ ->getUnnotifiedForInstance($invoice, Mage_Sales_Model_Order_Invoice::HISTORY_ENTITY_NAME);
102
+ if ($historyItem) {
103
+ $historyItem->setIsCustomerNotified(1);
104
+ $historyItem->save();
105
+ }
106
+ $this->_getSession()->addSuccess(Mage::helper('sales')->__('The message has been sent.'));
107
+ $this->_redirect('*/sales_invoice/view', array(
108
+ 'order_id' => $invoice->getOrder()->getId(),
109
+ 'invoice_id'=> $invoiceId,
110
+ ));
111
+ }
112
+ }
113
+ }
114
+
115
+ public function printAction()
116
+ {
117
+ if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
118
+ if ($invoice = Mage::getModel('sales/order_invoice')->load($invoiceId)) {
119
+ $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf(array($invoice));
120
+ $this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
121
+ '.pdf', $pdf->render(), 'application/pdf');
122
+ }
123
+ }
124
+ else {
125
+ $this->_forward('noRoute');
126
+ }
127
+ }
128
+
129
+ public function pdfinvoicesAction(){
130
+ $invoicesIds = $this->getRequest()->getPost('invoice_ids');
131
+ if (!empty($invoicesIds)) {
132
+ $invoices = Mage::getResourceModel('sales/order_invoice_collection')
133
+ ->addAttributeToSelect('*')
134
+ ->addAttributeToFilter('entity_id', array('in' => $invoicesIds))
135
+ ->load();
136
+ if (!isset($pdf)){
137
+ $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
138
+ } else {
139
+ $pages = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
140
+ $pdf->pages = array_merge ($pdf->pages, $pages->pages);
141
+ }
142
+
143
+ return $this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
144
+ '.pdf', $pdf->render(), 'application/pdf');
145
+ }
146
+ $this->_redirect('*/*/');
147
+ }
148
+
149
+ protected function _isAllowed()
150
+ {
151
+ return Mage::getSingleton('admin/session')->isAllowed('sales/invoice');
152
+ }
153
+
154
+ }
app/code/community/Mage/Adminhtml/controllers/Controller/Sales/Shipment.php ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders controller
29
+ *
30
+ * @author Magento Core Team <core@magentocommerce.com>
31
+ */
32
+ class Mage_Adminhtml_Controller_Sales_Shipment extends Mage_Adminhtml_Controller_Action
33
+ {
34
+ /**
35
+ * Additional initialization
36
+ *
37
+ */
38
+ protected function _construct()
39
+ {
40
+ $this->setUsedModuleName('Mage_Sales');
41
+ }
42
+
43
+ /**
44
+ * Init layout, menu and breadcrumb
45
+ *
46
+ * @return Mage_Adminhtml_Sales_ShipmentController
47
+ */
48
+ protected function _initAction()
49
+ {
50
+ $this->loadLayout()
51
+ ->_setActiveMenu('sales/order')
52
+ ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
53
+ ->_addBreadcrumb($this->__('Shipments'),$this->__('Shipments'));
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Shipments grid
59
+ */
60
+ public function indexAction()
61
+ {
62
+ $this->_title($this->__('Sales'))->_title($this->__('Shipments'));
63
+
64
+ $this->_initAction()
65
+ ->_addContent($this->getLayout()->createBlock('adminhtml/sales_shipment'))
66
+ ->renderLayout();
67
+ }
68
+
69
+ /**
70
+ * Shipment information page
71
+ */
72
+ public function viewAction()
73
+ {
74
+ if ($shipmentId = $this->getRequest()->getParam('shipment_id')) {
75
+ $this->_forward('view', 'sales_order_shipment', null, array('come_from'=>'shipment'));
76
+ } else {
77
+ $this->_forward('noRoute');
78
+ }
79
+ }
80
+
81
+ public function pdfshipmentsAction(){
82
+ $shipmentIds = $this->getRequest()->getPost('shipment_ids');
83
+ if (!empty($shipmentIds)) {
84
+ $shipments = Mage::getResourceModel('sales/order_shipment_collection')
85
+ ->addAttributeToSelect('*')
86
+ ->addAttributeToFilter('entity_id', array('in' => $shipmentIds))
87
+ ->load();
88
+ if (!isset($pdf)){
89
+ $pdf = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
90
+ } else {
91
+ $pages = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
92
+ $pdf->pages = array_merge ($pdf->pages, $pages->pages);
93
+ }
94
+
95
+ return $this->_prepareDownloadResponse('packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $pdf->render(), 'application/pdf');
96
+ }
97
+ $this->_redirect('*/*/');
98
+ }
99
+
100
+
101
+ public function printAction()
102
+ {
103
+ /** @see Mage_Adminhtml_Sales_Order_InvoiceController */
104
+ if ($shipmentId = $this->getRequest()->getParam('invoice_id')) { // invoice_id o_0
105
+ if ($shipment = Mage::getModel('sales/order_shipment')->load($shipmentId)) {
106
+ $pdf = Mage::getModel('sales/order_pdf_shipment')->getPdf(array($shipment));
107
+ $this->_prepareDownloadResponse('packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $pdf->render(), 'application/pdf');
108
+ }
109
+ }
110
+ else {
111
+ $this->_forward('noRoute');
112
+ }
113
+ }
114
+
115
+ protected function _isAllowed()
116
+ {
117
+ return Mage::getSingleton('admin/session')->isAllowed('sales/shipment');
118
+ }
119
+ }
app/code/community/Mage/Adminhtml/controllers/Report/Abstract.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+
28
+ /**
29
+ * Admin abstract reports controller
30
+ *
31
+ * @category Mage
32
+ * @package Mage_Adminhtml
33
+ * @author Magento Core Team <core@magentocommerce.com>
34
+ */
35
+ abstract class Mage_Adminhtml_Controller_Report_Abstract extends Mage_Adminhtml_Controller_Action
36
+ {
37
+ /**
38
+ * Admin session model
39
+ *
40
+ * @var null|Mage_Admin_Model_Session
41
+ */
42
+ protected $_adminSession = null;
43
+
44
+ /**
45
+ * Retrieve admin session model
46
+ *
47
+ * @return Mage_Admin_Model_Session
48
+ */
49
+ protected function _getSession()
50
+ {
51
+ if (is_null($this->_adminSession)) {
52
+ $this->_adminSession = Mage::getSingleton('admin/session');
53
+ }
54
+ return $this->_adminSession;
55
+ }
56
+
57
+ /**
58
+ * Add report breadcrumbs
59
+ *
60
+ * @return Mage_Adminhtml_Controller_Report_Abstract
61
+ */
62
+ public function _initAction()
63
+ {
64
+ $this->loadLayout()
65
+ ->_addBreadcrumb(Mage::helper('reports')->__('Reports'), Mage::helper('reports')->__('Reports'));
66
+ return $this;
67
+ }
68
+
69
+ /**
70
+ * Report action init operations
71
+ *
72
+ * @param array|Varien_Object $blocks
73
+ * @return Mage_Adminhtml_Controller_Report_Abstract
74
+ */
75
+ public function _initReportAction($blocks)
76
+ {
77
+ if (!is_array($blocks)) {
78
+ $blocks = array($blocks);
79
+ }
80
+
81
+ $requestData = Mage::helper('adminhtml')->prepareFilterString($this->getRequest()->getParam('filter'));
82
+ $requestData = $this->_filterDates($requestData, array('from', 'to'));
83
+ $requestData['store_ids'] = $this->getRequest()->getParam('store_ids');
84
+ $params = new Varien_Object();
85
+
86
+ foreach ($requestData as $key => $value) {
87
+ if (!empty($value)) {
88
+ $params->setData($key, $value);
89
+ }
90
+ }
91
+
92
+ foreach ($blocks as $block) {
93
+ if ($block) {
94
+ $block->setPeriodType($params->getData('period_type'));
95
+ $block->setFilterData($params);
96
+ }
97
+ }
98
+
99
+ return $this;
100
+ }
101
+
102
+ /**
103
+ * Add refresh statistics links
104
+ *
105
+ * @param string $flagCode
106
+ * @param string $refreshCode
107
+ * @return Mage_Adminhtml_Controller_Report_Abstract
108
+ */
109
+ protected function _showLastExecutionTime($flagCode, $refreshCode)
110
+ {
111
+ $flag = Mage::getModel('reports/flag')->setReportFlagCode($flagCode)->loadSelf();
112
+ $updatedAt = ($flag->hasData())
113
+ ? Mage::app()->getLocale()->storeDate(
114
+ 0, new Zend_Date($flag->getLastUpdate(), Varien_Date::DATETIME_INTERNAL_FORMAT), true
115
+ )
116
+ : 'undefined';
117
+
118
+ $refreshStatsLink = $this->getUrl('*/report_statistics');
119
+ $directRefreshLink = $this->getUrl('*/report_statistics/refreshRecent', array('code' => $refreshCode));
120
+
121
+ Mage::getSingleton('adminhtml/session')->addNotice(Mage::helper('adminhtml')->__('Last updated: %s. To refresh last day\'s <a href="%s">statistics</a>, click <a href="%s">here</a>.', $updatedAt, $refreshStatsLink, $directRefreshLink));
122
+ return $this;
123
+ }
124
+ }
app/code/community/Mage/Adminhtml/controllers/Sales/Creditmemo.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders controller
29
+ *
30
+ * @author Magento Core Team <core@magentocommerce.com>
31
+ */
32
+ class Mage_Adminhtml_Controller_Sales_Creditmemo extends Mage_Adminhtml_Controller_Action
33
+ {
34
+ /**
35
+ * Additional initialization
36
+ *
37
+ */
38
+ protected function _construct()
39
+ {
40
+ $this->setUsedModuleName('Mage_Sales');
41
+ }
42
+
43
+ /**
44
+ * Init layout, menu and breadcrumb
45
+ *
46
+ * @return Mage_Adminhtml_Sales_CreditmemoController
47
+ */
48
+ protected function _initAction()
49
+ {
50
+ $this->loadLayout()
51
+ ->_setActiveMenu('sales/order')
52
+ ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
53
+ ->_addBreadcrumb($this->__('Credit Memos'),$this->__('Credit Memos'));
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Creditmemos grid
59
+ */
60
+ public function indexAction()
61
+ {
62
+ $this->_initAction()
63
+ ->_addContent($this->getLayout()->createBlock('adminhtml/sales_creditmemo'))
64
+ ->renderLayout();
65
+ }
66
+
67
+ /**
68
+ * Creditmemo information page
69
+ */
70
+ public function viewAction()
71
+ {
72
+ if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
73
+ $this->_forward('view', 'sales_order_creditmemo', null, array('come_from' => 'sales_creditmemo'));
74
+ } else {
75
+ $this->_forward('noRoute');
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Notify user
81
+ */
82
+ public function emailAction()
83
+ {
84
+ if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
85
+ if ($creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId)) {
86
+ $creditmemo->sendEmail();
87
+ $historyItem = Mage::getResourceModel('sales/order_status_history_collection')
88
+ ->getUnnotifiedForInstance($creditmemo, Mage_Sales_Model_Order_Creditmemo::HISTORY_ENTITY_NAME);
89
+ if ($historyItem) {
90
+ $historyItem->setIsCustomerNotified(1);
91
+ $historyItem->save();
92
+ }
93
+
94
+ $this->_getSession()->addSuccess(Mage::helper('sales')->__('The message was sent.'));
95
+ $this->_redirect('*/sales_order_creditmemo/view', array(
96
+ 'creditmemo_id' => $creditmemoId
97
+ ));
98
+ }
99
+ }
100
+ }
101
+
102
+ public function pdfcreditmemosAction(){
103
+ $creditmemosIds = $this->getRequest()->getPost('creditmemo_ids');
104
+ if (!empty($creditmemosIds)) {
105
+ $invoices = Mage::getResourceModel('sales/order_creditmemo_collection')
106
+ ->addAttributeToSelect('*')
107
+ ->addAttributeToFilter('entity_id', array('in' => $creditmemosIds))
108
+ ->load();
109
+ if (!isset($pdf)){
110
+ $pdf = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($invoices);
111
+ } else {
112
+ $pages = Mage::getModel('sales/order_pdf_creditmemo')->getPdf($invoices);
113
+ $pdf->pages = array_merge ($pdf->pages, $pages->pages);
114
+ }
115
+
116
+ return $this->_prepareDownloadResponse('creditmemo'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
117
+ '.pdf', $pdf->render(), 'application/pdf');
118
+ }
119
+ $this->_redirect('*/*/');
120
+ }
121
+
122
+ public function printAction()
123
+ {
124
+ /** @see Mage_Adminhtml_Sales_Order_InvoiceController */
125
+ if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
126
+ if ($creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId)) {
127
+ $pdf = Mage::getModel('sales/order_pdf_creditmemo')->getPdf(array($creditmemo));
128
+ $this->_prepareDownloadResponse('creditmemo'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
129
+ '.pdf', $pdf->render(), 'application/pdf');
130
+ }
131
+ }
132
+ else {
133
+ $this->_forward('noRoute');
134
+ }
135
+ }
136
+
137
+ protected function _isAllowed()
138
+ {
139
+ return Mage::getSingleton('admin/session')->isAllowed('sales/creditmemo');
140
+ }
141
+ }
app/code/community/Mage/Adminhtml/controllers/Sales/Invoice.php ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders controller
29
+ *
30
+ * @author Magento Core Team <core@magentocommerce.com>
31
+ */
32
+ class Mage_Adminhtml_Controller_Sales_Invoice extends Mage_Adminhtml_Controller_Action
33
+ {
34
+ /**
35
+ * Additional initialization
36
+ *
37
+ */
38
+ protected function _construct()
39
+ {
40
+ $this->setUsedModuleName('Mage_Sales');
41
+ }
42
+
43
+ /**
44
+ * Init layout, menu and breadcrumb
45
+ *
46
+ * @return Mage_Adminhtml_Sales_InvoiceController
47
+ */
48
+ protected function _initAction()
49
+ {
50
+ $this->loadLayout()
51
+ ->_setActiveMenu('sales/order')
52
+ ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
53
+ ->_addBreadcrumb($this->__('Invoices'),$this->__('Invoices'));
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Order grid
59
+ */
60
+ public function gridAction()
61
+ {
62
+ $this->loadLayout();
63
+ $this->getResponse()->setBody(
64
+ $this->getLayout()->createBlock('adminhtml/sales_invoice_grid')->toHtml()
65
+ );
66
+ }
67
+
68
+ /**
69
+ * Invoices grid
70
+ */
71
+ public function indexAction()
72
+ {
73
+ $this->_title($this->__('Sales'))->_title($this->__('Invoices'));
74
+
75
+ $this->_initAction()
76
+ ->_addContent($this->getLayout()->createBlock('adminhtml/sales_invoice'))
77
+ ->renderLayout();
78
+ }
79
+
80
+ /**
81
+ * Invoice information page
82
+ */
83
+ public function viewAction()
84
+ {
85
+ if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
86
+ $this->_forward('view', 'sales_order_invoice', null, array('come_from'=>'invoice'));
87
+ } else {
88
+ $this->_forward('noRoute');
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Notify user
94
+ */
95
+ public function emailAction()
96
+ {
97
+ if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
98
+ if ($invoice = Mage::getModel('sales/order_invoice')->load($invoiceId)) {
99
+ $invoice->sendEmail();
100
+ $historyItem = Mage::getResourceModel('sales/order_status_history_collection')
101
+ ->getUnnotifiedForInstance($invoice, Mage_Sales_Model_Order_Invoice::HISTORY_ENTITY_NAME);
102
+ if ($historyItem) {
103
+ $historyItem->setIsCustomerNotified(1);
104
+ $historyItem->save();
105
+ }
106
+ $this->_getSession()->addSuccess(Mage::helper('sales')->__('The message has been sent.'));
107
+ $this->_redirect('*/sales_invoice/view', array(
108
+ 'order_id' => $invoice->getOrder()->getId(),
109
+ 'invoice_id'=> $invoiceId,
110
+ ));
111
+ }
112
+ }
113
+ }
114
+
115
+ public function printAction()
116
+ {
117
+ if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
118
+ if ($invoice = Mage::getModel('sales/order_invoice')->load($invoiceId)) {
119
+ $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf(array($invoice));
120
+ $this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
121
+ '.pdf', $pdf->render(), 'application/pdf');
122
+ }
123
+ }
124
+ else {
125
+ $this->_forward('noRoute');
126
+ }
127
+ }
128
+
129
+ public function pdfinvoicesAction(){
130
+ $invoicesIds = $this->getRequest()->getPost('invoice_ids');
131
+ if (!empty($invoicesIds)) {
132
+ $invoices = Mage::getResourceModel('sales/order_invoice_collection')
133
+ ->addAttributeToSelect('*')
134
+ ->addAttributeToFilter('entity_id', array('in' => $invoicesIds))
135
+ ->load();
136
+ if (!isset($pdf)){
137
+ $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
138
+ } else {
139
+ $pages = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoices);
140
+ $pdf->pages = array_merge ($pdf->pages, $pages->pages);
141
+ }
142
+
143
+ return $this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
144
+ '.pdf', $pdf->render(), 'application/pdf');
145
+ }
146
+ $this->_redirect('*/*/');
147
+ }
148
+
149
+ protected function _isAllowed()
150
+ {
151
+ return Mage::getSingleton('admin/session')->isAllowed('sales/invoice');
152
+ }
153
+
154
+ }
app/code/community/Mage/Adminhtml/controllers/Sales/Order/ShipmentController.php ADDED
@@ -0,0 +1,787 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales order shipment controller
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Mage_Adminhtml_Sales_Order_ShipmentController extends Mage_Adminhtml_Controller_Sales_Shipment
35
+ {
36
+ /**
37
+ * Initialize shipment items QTY
38
+ */
39
+ protected function _getItemQtys()
40
+ {
41
+ $data = $this->getRequest()->getParam('shipment');
42
+ if (isset($data['items'])) {
43
+ $qtys = $data['items'];
44
+ } else {
45
+ $qtys = array();
46
+ }
47
+ return $qtys;
48
+ }
49
+
50
+ /**
51
+ * Initialize shipment model instance
52
+ *
53
+ * @return Mage_Sales_Model_Order_Shipment|bool
54
+ */
55
+ protected function _initShipment()
56
+ {
57
+ $this->_title($this->__('Sales'))->_title($this->__('Shipments'));
58
+
59
+ $shipment = false;
60
+ $shipmentId = $this->getRequest()->getParam('shipment_id');
61
+ $orderId = $this->getRequest()->getParam('order_id');
62
+ if ($shipmentId) {
63
+ $shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
64
+ } elseif ($orderId) {
65
+ $order = Mage::getModel('sales/order')->load($orderId);
66
+
67
+ /**
68
+ * Check order existing
69
+ */
70
+ if (!$order->getId()) {
71
+ $this->_getSession()->addError($this->__('The order no longer exists.'));
72
+ return false;
73
+ }
74
+ /**
75
+ * Check shipment is available to create separate from invoice
76
+ */
77
+ if ($order->getForcedDoShipmentWithInvoice()) {
78
+ $this->_getSession()->addError($this->__('Cannot do shipment for the order separately from invoice.'));
79
+ return false;
80
+ }
81
+ /**
82
+ * Check shipment create availability
83
+ */
84
+ if (!$order->canShip()) {
85
+ $this->_getSession()->addError($this->__('Cannot do shipment for the order.'));
86
+ return false;
87
+ }
88
+ $savedQtys = $this->_getItemQtys();
89
+ $shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($savedQtys);
90
+
91
+ $tracks = $this->getRequest()->getPost('tracking');
92
+ if ($tracks) {
93
+ foreach ($tracks as $data) {
94
+ if (empty($data['number'])) {
95
+ Mage::throwException($this->__('Tracking number cannot be empty.'));
96
+ }
97
+ $track = Mage::getModel('sales/order_shipment_track')
98
+ ->addData($data);
99
+ $shipment->addTrack($track);
100
+ }
101
+ }
102
+ }
103
+
104
+ Mage::register('current_shipment', $shipment);
105
+ return $shipment;
106
+ }
107
+
108
+ /**
109
+ * Save shipment and order in one transaction
110
+ *
111
+ * @param Mage_Sales_Model_Order_Shipment $shipment
112
+ * @return Mage_Adminhtml_Sales_Order_ShipmentController
113
+ */
114
+ protected function _saveShipment($shipment)
115
+ {
116
+ $shipment->getOrder()->setIsInProcess(true);
117
+ $transactionSave = Mage::getModel('core/resource_transaction')
118
+ ->addObject($shipment)
119
+ ->addObject($shipment->getOrder())
120
+ ->save();
121
+
122
+ return $this;
123
+ }
124
+
125
+ /**
126
+ * Shipment information page
127
+ */
128
+ public function viewAction()
129
+ {
130
+ if ($this->_initShipment()) {
131
+ $this->_title($this->__('View Shipment'));
132
+
133
+ $this->loadLayout();
134
+ $this->getLayout()->getBlock('sales_shipment_view')
135
+ ->updateBackButtonUrl($this->getRequest()->getParam('come_from'));
136
+ $this->_setActiveMenu('sales/order')
137
+ ->renderLayout();
138
+ } else {
139
+ $this->_forward('noRoute');
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Start create shipment action
145
+ */
146
+ public function startAction()
147
+ {
148
+ /**
149
+ * Clear old values for shipment qty's
150
+ */
151
+ $this->_redirect('*/*/new', array('order_id'=>$this->getRequest()->getParam('order_id')));
152
+ }
153
+
154
+ /**
155
+ * Shipment create page
156
+ */
157
+ public function newAction()
158
+ {
159
+ if ($shipment = $this->_initShipment()) {
160
+ $this->_title($this->__('New Shipment'));
161
+
162
+ $comment = Mage::getSingleton('adminhtml/session')->getCommentText(true);
163
+ if ($comment) {
164
+ $shipment->setCommentText($comment);
165
+ }
166
+
167
+ $this->loadLayout()
168
+ ->_setActiveMenu('sales/order')
169
+ ->renderLayout();
170
+ } else {
171
+ $this->_redirect('*/sales_order/view', array('order_id'=>$this->getRequest()->getParam('order_id')));
172
+ }
173
+ }
174
+
175
+ /**
176
+ * Save shipment
177
+ * We can save only new shipment. Existing shipments are not editable
178
+ *
179
+ * @return null
180
+ */
181
+ public function saveAction()
182
+ {
183
+ $data = $this->getRequest()->getPost('shipment');
184
+ if (!empty($data['comment_text'])) {
185
+ Mage::getSingleton('adminhtml/session')->setCommentText($data['comment_text']);
186
+ }
187
+
188
+ try {
189
+ $shipment = $this->_initShipment();
190
+ if (!$shipment) {
191
+ $this->_forward('noRoute');
192
+ return;
193
+ }
194
+
195
+ $shipment->register();
196
+ $comment = '';
197
+ if (!empty($data['comment_text'])) {
198
+ $shipment->addComment(
199
+ $data['comment_text'],
200
+ isset($data['comment_customer_notify']),
201
+ isset($data['is_visible_on_front'])
202
+ );
203
+ if (isset($data['comment_customer_notify'])) {
204
+ $comment = $data['comment_text'];
205
+ }
206
+ }
207
+
208
+ if (!empty($data['send_email'])) {
209
+ $shipment->setEmailSent(true);
210
+ }
211
+
212
+ $shipment->getOrder()->setCustomerNoteNotify(!empty($data['send_email']));
213
+ $responseAjax = new Varien_Object();
214
+ $isNeedCreateLabel = isset($data['create_shipping_label']) && $data['create_shipping_label'];
215
+
216
+ if ($isNeedCreateLabel && $this->_createShippingLabel($shipment)) {
217
+ $responseAjax->setOk(true);
218
+ }
219
+
220
+ $this->_saveShipment($shipment);
221
+
222
+ $shipment->sendEmail(!empty($data['send_email']), $comment);
223
+
224
+ $shipmentCreatedMessage = $this->__('The shipment has been created.');
225
+ $labelCreatedMessage = $this->__('The shipping label has been created.');
226
+
227
+ $this->_getSession()->addSuccess($isNeedCreateLabel ? $shipmentCreatedMessage . ' ' . $labelCreatedMessage
228
+ : $shipmentCreatedMessage);
229
+ Mage::getSingleton('adminhtml/session')->getCommentText(true);
230
+ } catch (Mage_Core_Exception $e) {
231
+ if ($isNeedCreateLabel) {
232
+ $responseAjax->setError(true);
233
+ $responseAjax->setMessage($e->getMessage());
234
+ } else {
235
+ $this->_getSession()->addError($e->getMessage());
236
+ $this->_redirect('*/*/new', array('order_id' => $this->getRequest()->getParam('order_id')));
237
+ }
238
+ } catch (Exception $e) {
239
+ Mage::logException($e);
240
+ if ($isNeedCreateLabel) {
241
+ $responseAjax->setError(true);
242
+ $responseAjax->setMessage(
243
+ Mage::helper('sales')->__('An error occurred while creating shipping label.'));
244
+ } else {
245
+ $this->_getSession()->addError($this->__('Cannot save shipment.'));
246
+ $this->_redirect('*/*/new', array('order_id' => $this->getRequest()->getParam('order_id')));
247
+ }
248
+
249
+ }
250
+ if ($isNeedCreateLabel) {
251
+ $this->getResponse()->setBody($responseAjax->toJson());
252
+ } else {
253
+ $this->_redirect('*/sales_order/view', array('order_id' => $shipment->getOrderId()));
254
+ }
255
+ }
256
+
257
+ /**
258
+ * Send email with shipment data to customer
259
+ */
260
+ public function emailAction()
261
+ {
262
+ try {
263
+ $shipment = $this->_initShipment();
264
+ if ($shipment) {
265
+ $shipment->sendEmail(true)
266
+ ->setEmailSent(true)
267
+ ->save();
268
+ $historyItem = Mage::getResourceModel('sales/order_status_history_collection')
269
+ ->getUnnotifiedForInstance($shipment, Mage_Sales_Model_Order_Shipment::HISTORY_ENTITY_NAME);
270
+ if ($historyItem) {
271
+ $historyItem->setIsCustomerNotified(1);
272
+ $historyItem->save();
273
+ }
274
+ $this->_getSession()->addSuccess($this->__('The shipment has been sent.'));
275
+ }
276
+ } catch (Mage_Core_Exception $e) {
277
+ $this->_getSession()->addError($e->getMessage());
278
+ } catch (Exception $e) {
279
+ $this->_getSession()->addError($this->__('Cannot send shipment information.'));
280
+ }
281
+ $this->_redirect('*/*/view', array(
282
+ 'shipment_id' => $this->getRequest()->getParam('shipment_id')
283
+ ));
284
+ }
285
+
286
+ /**
287
+ * Add new tracking number action
288
+ */
289
+ public function addTrackAction()
290
+ {
291
+ try {
292
+ $carrier = $this->getRequest()->getPost('carrier');
293
+ $number = $this->getRequest()->getPost('number');
294
+ $title = $this->getRequest()->getPost('title');
295
+ if (empty($carrier)) {
296
+ Mage::throwException($this->__('The carrier needs to be specified.'));
297
+ }
298
+
299
+ if (empty($number)) {
300
+ Mage::throwException($this->__('Tracking4 number cannot be empty.'));
301
+ }
302
+ $shipment = $this->_initShipment();
303
+ if ($shipment) {
304
+ $track = Mage::getModel('sales/order_shipment_track')
305
+ ->setNumber($number)
306
+ ->setCarrierCode($carrier)
307
+ ->setTitle($title);
308
+ $shipment->addTrack($track)
309
+ ->save();
310
+
311
+ $this->loadLayout();
312
+ $response = $this->getLayout()->getBlock('shipment_tracking')->toHtml();
313
+ } else {
314
+ $response = array(
315
+ 'error' => true,
316
+ 'message' => $this->__('Cannot initialize shipment for adding tracking number.'),
317
+ );
318
+ }
319
+ } catch (Mage_Core_Exception $e) {
320
+ $response = array(
321
+ 'error' => true,
322
+ 'message' => $e->getMessage(),
323
+ );
324
+ } catch (Exception $e) {
325
+ $response = array(
326
+ 'error' => true,
327
+ 'message' => $this->__('Cannot add tracking number.'),
328
+ );
329
+ }
330
+ if (is_array($response)) {
331
+ $response = Mage::helper('core')->jsonEncode($response);
332
+ }
333
+ $this->getResponse()->setBody($response);
334
+ }
335
+
336
+ /**
337
+ * Remove tracking number from shipment
338
+ */
339
+ public function removeTrackAction()
340
+ {
341
+ $trackId = $this->getRequest()->getParam('track_id');
342
+ $shipmentId = $this->getRequest()->getParam('shipment_id');
343
+ $track = Mage::getModel('sales/order_shipment_track')->load($trackId);
344
+ if ($track->getId()) {
345
+ try {
346
+ if ($this->_initShipment()) {
347
+ $track->delete();
348
+
349
+ $this->loadLayout();
350
+ $response = $this->getLayout()->getBlock('shipment_tracking')->toHtml();
351
+ } else {
352
+ $response = array(
353
+ 'error' => true,
354
+ 'message' => $this->__('Cannot initialize shipment for delete tracking number.'),
355
+ );
356
+ }
357
+ } catch (Exception $e) {
358
+ $response = array(
359
+ 'error' => true,
360
+ 'message' => $this->__('Cannot delete tracking number.'),
361
+ );
362
+ }
363
+ } else {
364
+ $response = array(
365
+ 'error' => true,
366
+ 'message' => $this->__('Cannot load track with retrieving identifier.'),
367
+ );
368
+ }
369
+ if (is_array($response)) {
370
+ $response = Mage::helper('core')->jsonEncode($response);
371
+ }
372
+ $this->getResponse()->setBody($response);
373
+ }
374
+
375
+ /**
376
+ * View shipment tracking information
377
+ */
378
+ public function viewTrackAction()
379
+ {
380
+ $trackId = $this->getRequest()->getParam('track_id');
381
+ $shipmentId = $this->getRequest()->getParam('shipment_id');
382
+ $track = Mage::getModel('sales/order_shipment_track')->load($trackId);
383
+ if ($track->getId()) {
384
+ try {
385
+ $response = $track->getNumberDetail();
386
+ } catch (Exception $e) {
387
+ $response = array(
388
+ 'error' => true,
389
+ 'message' => $this->__('Cannot retrieve tracking number detail.'),
390
+ );
391
+ }
392
+ } else {
393
+ $response = array(
394
+ 'error' => true,
395
+ 'message' => $this->__('Cannot load track with retrieving identifier.'),
396
+ );
397
+ }
398
+
399
+ if ( is_object($response)){
400
+ $className = Mage::getConfig()->getBlockClassName('adminhtml/template');
401
+ $block = new $className();
402
+ $block->setType('adminhtml/template')
403
+ ->setIsAnonymous(true)
404
+ ->setTemplate('sales/order/shipment/tracking/info.phtml');
405
+
406
+ $block->setTrackingInfo($response);
407
+
408
+ $this->getResponse()->setBody($block->toHtml());
409
+ } else {
410
+ if (is_array($response)) {
411
+ $response = Mage::helper('core')->jsonEncode($response);
412
+ }
413
+
414
+ $this->getResponse()->setBody($response);
415
+ }
416
+ }
417
+
418
+ /**
419
+ * Add comment to shipment history
420
+ */
421
+ public function addCommentAction()
422
+ {
423
+ try {
424
+ $this->getRequest()->setParam(
425
+ 'shipment_id',
426
+ $this->getRequest()->getParam('id')
427
+ );
428
+ $data = $this->getRequest()->getPost('comment');
429
+ if (empty($data['comment'])) {
430
+ Mage::throwException($this->__('Comment text field cannot be empty.'));
431
+ }
432
+ $shipment = $this->_initShipment();
433
+ $shipment->addComment(
434
+ $data['comment'],
435
+ isset($data['is_customer_notified']),
436
+ isset($data['is_visible_on_front'])
437
+ );
438
+ $shipment->sendUpdateEmail(!empty($data['is_customer_notified']), $data['comment']);
439
+ $shipment->save();
440
+
441
+ $this->loadLayout(false);
442
+ $response = $this->getLayout()->getBlock('shipment_comments')->toHtml();
443
+ } catch (Mage_Core_Exception $e) {
444
+ $response = array(
445
+ 'error' => true,
446
+ 'message' => $e->getMessage()
447
+ );
448
+ $response = Mage::helper('core')->jsonEncode($response);
449
+ } catch (Exception $e) {
450
+ $response = array(
451
+ 'error' => true,
452
+ 'message' => $this->__('Cannot add new comment.')
453
+ );
454
+ $response = Mage::helper('core')->jsonEncode($response);
455
+ }
456
+ $this->getResponse()->setBody($response);
457
+ }
458
+
459
+
460
+
461
+ /**
462
+ * Decides if we need to create dummy shipment item or not
463
+ * for eaxample we don't need create dummy parent if all
464
+ * children are not in process
465
+ *
466
+ * @deprecated after 1.4, Mage_Sales_Model_Service_Order used
467
+ * @param Mage_Sales_Model_Order_Item $item
468
+ * @param array $qtys
469
+ * @return bool
470
+ */
471
+ protected function _needToAddDummy($item, $qtys) {
472
+ if ($item->getHasChildren()) {
473
+ foreach ($item->getChildrenItems() as $child) {
474
+ if ($child->getIsVirtual()) {
475
+ continue;
476
+ }
477
+ if ((isset($qtys[$child->getId()]) && $qtys[$child->getId()] > 0)
478
+ || (!isset($qtys[$child->getId()]) && $child->getQtyToShip())) {
479
+ return true;
480
+ }
481
+ }
482
+ return false;
483
+ } else if($item->getParentItem()) {
484
+ if ($item->getIsVirtual()) {
485
+ return false;
486
+ }
487
+ if ((isset($qtys[$item->getParentItem()->getId()]) && $qtys[$item->getParentItem()->getId()] > 0)
488
+ || (!isset($qtys[$item->getParentItem()->getId()]) && $item->getParentItem()->getQtyToShip())) {
489
+ return true;
490
+ }
491
+ return false;
492
+ }
493
+ }
494
+
495
+ /**
496
+ * Create shipping label for specific shipment with validation.
497
+ *
498
+ * @param Mage_Sales_Model_Order_Shipment $shipment
499
+ * @return bool
500
+ */
501
+ protected function _createShippingLabel(Mage_Sales_Model_Order_Shipment $shipment)
502
+ {
503
+ if (!$shipment) {
504
+ return false;
505
+ }
506
+ $carrier = $shipment->getOrder()->getShippingCarrier();
507
+ if (!$carrier->isShippingLabelsAvailable()) {
508
+ return false;
509
+ }
510
+ $shipment->setPackages($this->getRequest()->getParam('packages'));
511
+ $response = Mage::getModel('shipping/shipping')->requestToShipment($shipment);
512
+ if ($response->hasErrors()) {
513
+ Mage::throwException($response->getErrors());
514
+ }
515
+ if (!$response->hasInfo()) {
516
+ return false;
517
+ }
518
+ $labelsContent = array();
519
+ $trackingNumbers = array();
520
+ $info = $response->getInfo();
521
+ foreach ($info as $inf) {
522
+ if (!empty($inf['tracking_number']) && !empty($inf['label_content'])) {
523
+ $labelsContent[] = $inf['label_content'];
524
+ $trackingNumbers[] = $inf['tracking_number'];
525
+ }
526
+ }
527
+ $outputPdf = $this->_combineLabelsPdf($labelsContent);
528
+ $shipment->setShippingLabel($outputPdf->render());
529
+ $carrierCode = $carrier->getCarrierCode();
530
+ $carrierTitle = Mage::getStoreConfig('carriers/'.$carrierCode.'/title', $shipment->getStoreId());
531
+ if ($trackingNumbers) {
532
+ foreach ($trackingNumbers as $trackingNumber) {
533
+ $track = Mage::getModel('sales/order_shipment_track')
534
+ ->setNumber($trackingNumber)
535
+ ->setCarrierCode($carrierCode)
536
+ ->setTitle($carrierTitle);
537
+ $shipment->addTrack($track);
538
+ }
539
+ }
540
+ return true;
541
+ }
542
+
543
+ /**
544
+ * Create shipping label action for specific shipment
545
+ *
546
+ */
547
+ public function createLabelAction()
548
+ {
549
+ $response = new Varien_Object();
550
+ try {
551
+ $shipment = $this->_initShipment();
552
+ if ($this->_createShippingLabel($shipment)) {
553
+ $shipment->save();
554
+ $this->_getSession()->addSuccess(Mage::helper('sales')->__('The shipping label has been created.'));
555
+ $response->setOk(true);
556
+ }
557
+ } catch (Mage_Core_Exception $e) {
558
+ $response->setError(true);
559
+ $response->setMessage($e->getMessage());
560
+ } catch (Exception $e) {
561
+ Mage::logException($e);
562
+ $response->setError(true);
563
+ $response->setMessage(Mage::helper('sales')->__('An error occurred while creating shipping label.'));
564
+ }
565
+
566
+ $this->getResponse()->setBody($response->toJson());
567
+ }
568
+
569
+ /**
570
+ * Print label for one specific shipment
571
+ *
572
+ */
573
+ public function printLabelAction()
574
+ {
575
+ try {
576
+ $shipment = $this->_initShipment();
577
+ $labelContent = $shipment->getShippingLabel();
578
+ if ($labelContent) {
579
+ $pdfContent = null;
580
+ if (stripos($labelContent, '%PDF-') !== false) {
581
+ $pdfContent = $labelContent;
582
+ } else {
583
+ $pdf = new Zend_Pdf();
584
+ $page = $this->_createPdfPageFromImageString($labelContent);
585
+ if (!$page) {
586
+ $this->_getSession()->addError(Mage::helper('sales')->__('File extension not known or unsupported type in the following shipment: %s', $shipment->getIncrementId()));
587
+ }
588
+ $pdf->pages[] = $page;
589
+ $pdfContent = $pdf->render();
590
+ }
591
+
592
+ return $this->_prepareDownloadResponse(
593
+ 'ShippingLabel(' . $shipment->getIncrementId() . ').pdf',
594
+ $pdfContent,
595
+ 'application/pdf'
596
+ );
597
+ }
598
+ } catch (Mage_Core_Exception $e) {
599
+ $this->_getSession()->addError($e->getMessage());
600
+ } catch (Exception $e) {
601
+ Mage::logException($e);
602
+ $this->_getSession()
603
+ ->addError(Mage::helper('sales')->__('An error occurred while creating shipping label.'));
604
+ }
605
+ $this->_redirect('*/sales_order_shipment/view', array(
606
+ 'shipment_id' => $this->getRequest()->getParam('shipment_id')
607
+ ));
608
+ }
609
+
610
+ /**
611
+ * Create pdf document with information about packages
612
+ *
613
+ * @return void
614
+ */
615
+ public function printPackageAction()
616
+ {
617
+ $shipment = $this->_initShipment();
618
+
619
+ if ($shipment) {
620
+ $pdf = Mage::getModel('sales/order_pdf_shipment_packaging')->getPdf($shipment);
621
+ $this->_prepareDownloadResponse('packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf',
622
+ $pdf->render(), 'application/pdf'
623
+ );
624
+ }
625
+ else {
626
+ $this->_forward('noRoute');
627
+ }
628
+ }
629
+
630
+ /**
631
+ * Batch print shipping labels for whole shipments.
632
+ * Push pdf document with shipping labels to user browser
633
+ *
634
+ * @return null
635
+ */
636
+ public function massPrintShippingLabelAction()
637
+ {
638
+ $request = $this->getRequest();
639
+ $ids = $request->getParam('order_ids');
640
+ $createdFromOrders = !empty($ids);
641
+ $shipments = null;
642
+ $labelsContent = array();
643
+ switch ($request->getParam('massaction_prepare_key')) {
644
+ case 'shipment_ids':
645
+ $ids = $request->getParam('shipment_ids');
646
+ array_filter($ids, 'intval');
647
+ if (!empty($ids)) {
648
+ $shipments = Mage::getResourceModel('sales/order_shipment_collection')
649
+ ->addFieldToFilter('entity_id', array('in' => $ids));
650
+ }
651
+ break;
652
+ case 'order_ids':
653
+ $ids = $request->getParam('order_ids');
654
+ array_filter($ids, 'intval');
655
+ if (!empty($ids)) {
656
+ $shipments = Mage::getResourceModel('sales/order_shipment_collection')
657
+ ->setOrderFilter(array('in' => $ids));
658
+ }
659
+ break;
660
+ }
661
+
662
+ if ($shipments && $shipments->getSize()) {
663
+ foreach ($shipments as $shipment) {
664
+ $labelContent = $shipment->getShippingLabel();
665
+ if ($labelContent) {
666
+ $labelsContent[] = $labelContent;
667
+ }
668
+ }
669
+ }
670
+
671
+ if (!empty($labelsContent)) {
672
+ $outputPdf = $this->_combineLabelsPdf($labelsContent);
673
+ $this->_prepareDownloadResponse('ShippingLabels.pdf', $outputPdf->render(), 'application/pdf');
674
+ return;
675
+ } else {
676
+ $createdFromPartErrorMsg = $createdFromOrders ? 'orders' : 'shipments';
677
+ $this->_getSession()
678
+ ->addError(Mage::helper('sales')->__('There are no shipping labels related to selected %s.', $createdFromPartErrorMsg));
679
+ }
680
+ if ($createdFromOrders) {
681
+ $this->_redirect('*/sales_order/index');
682
+ } else {
683
+ $this->_redirect('*/sales_order_shipment/index');
684
+ }
685
+ }
686
+
687
+ /**
688
+ * Combine array of labels as instance PDF
689
+ *
690
+ * @param array $labelsContent
691
+ * @return Zend_Pdf
692
+ */
693
+ protected function _combineLabelsPdf(array $labelsContent)
694
+ {
695
+ $outputPdf = new Zend_Pdf();
696
+ foreach ($labelsContent as $content) {
697
+ if (stripos($content, '%PDF-') !== false) {
698
+ $pdfLabel = Zend_Pdf::parse($content);
699
+ foreach ($pdfLabel->pages as $page) {
700
+ $outputPdf->pages[] = clone $page;
701
+ }
702
+ } else {
703
+ $page = $this->_createPdfPageFromImageString($content);
704
+ if ($page) {
705
+ $outputPdf->pages[] = $page;
706
+ }
707
+ }
708
+ }
709
+ return $outputPdf;
710
+ }
711
+
712
+ /**
713
+ * Create Zend_Pdf_Page instance with image from $imageString. Supports JPEG, PNG, GIF, WBMP, and GD2 formats.
714
+ *
715
+ * @param string $imageString
716
+ * @return Zend_Pdf_Page|bool
717
+ */
718
+ protected function _createPdfPageFromImageString($imageString)
719
+ {
720
+ $image = imagecreatefromstring($imageString);
721
+ if (!$image) {
722
+ return false;
723
+ }
724
+
725
+ $xSize = imagesx($image);
726
+ $ySize = imagesy($image);
727
+ $page = new Zend_Pdf_Page($xSize, $ySize);
728
+
729
+ imageinterlace($image, 0);
730
+ $tmpFileName = sys_get_temp_dir() . DS . 'shipping_labels_'
731
+ . uniqid(mt_rand()) . time() . '.png';
732
+ imagepng($image, $tmpFileName);
733
+ $pdfImage = Zend_Pdf_Image::imageWithPath($tmpFileName);
734
+ $page->drawImage($pdfImage, 0, 0, $xSize, $ySize);
735
+ unlink($tmpFileName);
736
+ return $page;
737
+ }
738
+
739
+ /**
740
+ * Return grid with shipping items for Ajax request
741
+ *
742
+ * @return Mage_Core_Controller_Response_Http
743
+ */
744
+ public function getShippingItemsGridAction()
745
+ {
746
+ $this->_initShipment();
747
+ return $this->getResponse()->setBody(
748
+ $this->getLayout()
749
+ ->createBlock('adminhtml/sales_order_shipment_packaging_grid')
750
+ ->setIndex($this->getRequest()->getParam('index'))
751
+ ->toHtml()
752
+ );
753
+ }
754
+
755
+ public function invoiceNoLength(){
756
+ return array( "한진택배" => array(10,12),
757
+ "CJGLS" => array(10,11,12),
758
+ "경동택배" => array(8,9,10,11,12,13,14,15,16),
759
+ "대한통운" => array(10),
760
+ "동부익스프레스" => array(12),
761
+ "이노지스" => array(10,11,12,13),
762
+ "하나로택배" => array(10),
763
+ "현대로지엠" => array(10,12),
764
+ "CJGLS" => array(10,11,12),
765
+ "KG옐로우캡" => array(11),
766
+ "로젠택배" => array(11),
767
+ "우체국택배" => array(13),
768
+ "KGB택배" => array(10),
769
+ );
770
+
771
+ }
772
+
773
+ public function chk1($invoiceNo){
774
+ //가장 보편적인 체크 방법
775
+ //마지막 수를 제외한 숫자를 7로 나눈 나머지가 마지막 숫자와 같은지 검토
776
+ $lastNum = substr($invoiceNo,-1);
777
+ $firstNum = substr($invoiceNo,0,-1);
778
+
779
+ if($firstNum % 7 == $lastNum)
780
+ return true;
781
+ else
782
+ return false;
783
+ }
784
+ public function invoicdNoValidation($deliveryName, $invoiceNo){
785
+
786
+ }
787
+ }
app/code/community/Mage/Adminhtml/controllers/Sales/Shipment.php ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Adminhtml sales orders controller
29
+ *
30
+ * @author Magento Core Team <core@magentocommerce.com>
31
+ */
32
+ class Mage_Adminhtml_Controller_Sales_Shipment extends Mage_Adminhtml_Controller_Action
33
+ {
34
+ /**
35
+ * Additional initialization
36
+ *
37
+ */
38
+ protected function _construct()
39
+ {
40
+ $this->setUsedModuleName('Mage_Sales');
41
+ }
42
+
43
+ /**
44
+ * Init layout, menu and breadcrumb
45
+ *
46
+ * @return Mage_Adminhtml_Sales_ShipmentController
47
+ */
48
+ protected function _initAction()
49
+ {
50
+ $this->loadLayout()
51
+ ->_setActiveMenu('sales/order')
52
+ ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
53
+ ->_addBreadcrumb($this->__('Shipments'),$this->__('Shipments'));
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Shipments grid
59
+ */
60
+ public function indexAction()
61
+ {
62
+ $this->_title($this->__('Sales'))->_title($this->__('Shipments'));
63
+
64
+ $this->_initAction()
65
+ ->_addContent($this->getLayout()->createBlock('adminhtml/sales_shipment'))
66
+ ->renderLayout();
67
+ }
68
+
69
+ /**
70
+ * Shipment information page
71
+ */
72
+ public function viewAction()
73
+ {
74
+ if ($shipmentId = $this->getRequest()->getParam('shipment_id')) {
75
+ $this->_forward('view', 'sales_order_shipment', null, array('come_from'=>'shipment'));
76
+ } else {
77
+ $this->_forward('noRoute');
78
+ }
79
+ }
80
+
81
+ public function pdfshipmentsAction(){
82
+ $shipmentIds = $this->getRequest()->getPost('shipment_ids');
83
+ if (!empty($shipmentIds)) {
84
+ $shipments = Mage::getResourceModel('sales/order_shipment_collection')
85
+ ->addAttributeToSelect('*')
86
+ ->addAttributeToFilter('entity_id', array('in' => $shipmentIds))
87
+ ->load();
88
+ if (!isset($pdf)){
89
+ $pdf = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
90
+ } else {
91
+ $pages = Mage::getModel('sales/order_pdf_shipment')->getPdf($shipments);
92
+ $pdf->pages = array_merge ($pdf->pages, $pages->pages);
93
+ }
94
+
95
+ return $this->_prepareDownloadResponse('packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $pdf->render(), 'application/pdf');
96
+ }
97
+ $this->_redirect('*/*/');
98
+ }
99
+
100
+
101
+ public function printAction()
102
+ {
103
+ /** @see Mage_Adminhtml_Sales_Order_InvoiceController */
104
+ if ($shipmentId = $this->getRequest()->getParam('invoice_id')) { // invoice_id o_0
105
+ if ($shipment = Mage::getModel('sales/order_shipment')->load($shipmentId)) {
106
+ $pdf = Mage::getModel('sales/order_pdf_shipment')->getPdf(array($shipment));
107
+ $this->_prepareDownloadResponse('packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $pdf->render(), 'application/pdf');
108
+ }
109
+ }
110
+ else {
111
+ $this->_forward('noRoute');
112
+ }
113
+ }
114
+
115
+ protected function _isAllowed()
116
+ {
117
+ return Mage::getSingleton('admin/session')->isAllowed('sales/shipment');
118
+ }
119
+ }
app/code/community/Mage/Directory/Model/Currency.php ADDED
@@ -0,0 +1,312 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Directory
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Currency model
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Directory
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Mage_Directory_Model_Currency extends Mage_Core_Model_Abstract
35
+ {
36
+ /**
37
+ * CONFIG path constants
38
+ */
39
+ const XML_PATH_CURRENCY_ALLOW = 'currency/options/allow';
40
+ const XML_PATH_CURRENCY_DEFAULT = 'currency/options/default';
41
+ const XML_PATH_CURRENCY_BASE = 'currency/options/base';
42
+
43
+ protected $_filter;
44
+
45
+ /**
46
+ * Currency Rates
47
+ *
48
+ * @var array
49
+ */
50
+ protected $_rates;
51
+
52
+
53
+ protected function _construct()
54
+ {
55
+ $this->_init('directory/currency');
56
+ }
57
+
58
+ /**
59
+ * Get currency code
60
+ *
61
+ * @return string
62
+ */
63
+ public function getCode()
64
+ {
65
+ return $this->_getData('currency_code');
66
+ }
67
+
68
+ public function getCurrencyCode()
69
+ {
70
+ return $this->_getData('currency_code');
71
+ }
72
+
73
+ /**
74
+ * Currency Rates getter
75
+ *
76
+ * @return array
77
+ */
78
+ public function getRates()
79
+ {
80
+ return $this->_rates;
81
+ }
82
+
83
+ /**
84
+ * Currency Rates setter
85
+ *
86
+ * @param array Currency Rates
87
+ * @return Mage_Directory_Model_Currency
88
+ */
89
+ public function setRates(array $rates)
90
+ {
91
+ $this->_rates = $rates;
92
+ return $this;
93
+ }
94
+
95
+ /**
96
+ * Loading currency data
97
+ *
98
+ * @param string $id
99
+ * @param string $field
100
+ * @return Mage_Directory_Model_Currency
101
+ */
102
+ public function load($id, $field=null)
103
+ {
104
+ $this->unsRate();
105
+ $this->setData('currency_code', $id);
106
+ return $this;
107
+ }
108
+
109
+ /**
110
+ * Get currency rate (only base=>allowed)
111
+ *
112
+ * @param string $toCurrency
113
+ * @return double
114
+ */
115
+ public function getRate($toCurrency)
116
+ {
117
+ if (is_string($toCurrency)) {
118
+ $code = $toCurrency;
119
+ } elseif ($toCurrency instanceof Mage_Directory_Model_Currency) {
120
+ $code = $toCurrency->getCurrencyCode();
121
+ } else {
122
+ throw Mage::exception('Mage_Directory', Mage::helper('directory')->__('Invalid target currency.'));
123
+ }
124
+ $rates = $this->getRates();
125
+ if (!isset($rates[$code])) {
126
+ $rates[$code] = $this->_getResource()->getRate($this->getCode(), $toCurrency);
127
+ $this->setRates($rates);
128
+ }
129
+ return $rates[$code];
130
+ }
131
+
132
+ /**
133
+ * Get currency rate (base=>allowed or allowed=>base)
134
+ *
135
+ * @param string $toCurrency
136
+ * @return double
137
+ */
138
+ public function getAnyRate($toCurrency)
139
+ {
140
+ if (is_string($toCurrency)) {
141
+ $code = $toCurrency;
142
+ } elseif ($toCurrency instanceof Mage_Directory_Model_Currency) {
143
+ $code = $toCurrency->getCurrencyCode();
144
+ } else {
145
+ throw Mage::exception('Mage_Directory', Mage::helper('directory')->__('Invalid target currency.'));
146
+ }
147
+ $rates = $this->getRates();
148
+ if (!isset($rates[$code])) {
149
+ $rates[$code] = $this->_getResource()->getAnyRate($this->getCode(), $toCurrency);
150
+ $this->setRates($rates);
151
+ }
152
+ return $rates[$code];
153
+ }
154
+
155
+ /**
156
+ * Convert price to currency format
157
+ *
158
+ * @param double $price
159
+ * @param string $toCurrency
160
+ * @return double
161
+ */
162
+ public function convert($price, $toCurrency=null)
163
+ {
164
+ if (is_null($toCurrency)) {
165
+ return $price;
166
+ }
167
+ elseif ($rate = $this->getRate($toCurrency)) {
168
+ return $price*$rate;
169
+ }
170
+
171
+ throw new Exception(Mage::helper('directory')->__('Undefined rate from "%s-%s".', $this->getCode(), $toCurrency->getCode()));
172
+ }
173
+
174
+ /**
175
+ * Get currency filter
176
+ *
177
+ * @return Mage_Directory_Model_Currency_Filter
178
+ */
179
+ public function getFilter()
180
+ {
181
+ if (!$this->_filter) {
182
+ $this->_filter = new Mage_Directory_Model_Currency_Filter($this->getCode());
183
+ }
184
+
185
+ return $this->_filter;
186
+ }
187
+
188
+ /**
189
+ * Format price to currency format
190
+ *
191
+ * @param double $price
192
+ * @param bool $includeContainer
193
+ * @return string
194
+ */
195
+ public function format($price, $options=array(), $includeContainer = true, $addBrackets = false)
196
+ {
197
+ $CurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
198
+ if($CurrencyCode=="KRW" && Mage::getStoreConfig("payment/ipay/active")==1){
199
+ return $this->formatPrecision(floor($price), 0, $options, $includeContainer, $addBrackets);
200
+ }else
201
+ return $this->formatPrecision($price, 2, $options, $includeContainer, $addBrackets);
202
+ }
203
+
204
+ /**
205
+ * Apply currency format to number with specific rounding precision
206
+ *
207
+ * @param float $price
208
+ * @param int $precision
209
+ * @param array $options
210
+ * @param bool $includeContainer
211
+ * @param bool $addBrackets
212
+ * @return string
213
+ */
214
+ public function formatPrecision($price, $precision, $options=array(), $includeContainer = true, $addBrackets = false)
215
+ {
216
+ if (!isset($options['precision'])) {
217
+ $options['precision'] = $precision;
218
+ }
219
+ if ($includeContainer) {
220
+ return '<span class="price">' . ($addBrackets ? '[' : '') . $this->formatTxt($price, $options) . ($addBrackets ? ']' : '') . '</span>';
221
+ }
222
+ return $this->formatTxt($price, $options);
223
+ }
224
+
225
+ public function formatTxt($price, $options=array())
226
+ {
227
+ if (!is_numeric($price)) {
228
+ $price = Mage::app()->getLocale()->getNumber($price);
229
+ }
230
+ /**
231
+ * Fix problem with 12 000 000, 1 200 000
232
+ *
233
+ * %f - the argument is treated as a float, and presented as a floating-point number (locale aware).
234
+ * %F - the argument is treated as a float, and presented as a floating-point number (non-locale aware).
235
+ */
236
+ $price = sprintf("%F", $price);
237
+ return Mage::app()->getLocale()->currency($this->getCode())->toCurrency($price, $options);
238
+ }
239
+
240
+ public function getOutputFormat()
241
+ {
242
+ $formated = $this->formatTxt(0);
243
+ $number = $this->formatTxt(0, array('display'=>Zend_Currency::NO_SYMBOL));
244
+ return str_replace($number, '%s', $formated);
245
+ }
246
+
247
+ /**
248
+ * Retrieve allowed currencies according to config
249
+ *
250
+ */
251
+ public function getConfigAllowCurrencies()
252
+ {
253
+ $allowedCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_ALLOW);
254
+ $appBaseCurrencyCode = Mage::app()->getBaseCurrencyCode();
255
+ if (!in_array($appBaseCurrencyCode, $allowedCurrencies)) {
256
+ $allowedCurrencies[] = $appBaseCurrencyCode;
257
+ }
258
+ foreach (Mage::app()->getStores() as $store) {
259
+ $code = $store->getBaseCurrencyCode();
260
+ if (!in_array($code, $allowedCurrencies)) {
261
+ $allowedCurrencies[] = $code;
262
+ }
263
+ }
264
+
265
+ return $allowedCurrencies;
266
+ }
267
+
268
+ /**
269
+ * Retrieve default currencies according to config
270
+ *
271
+ */
272
+ public function getConfigDefaultCurrencies()
273
+ {
274
+ $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_DEFAULT);
275
+ return $defaultCurrencies;
276
+ }
277
+
278
+
279
+ public function getConfigBaseCurrencies()
280
+ {
281
+ $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_BASE);
282
+ return $defaultCurrencies;
283
+ }
284
+
285
+ /**
286
+ * Retrieve currency rates to other currencies
287
+ *
288
+ * @param string $currency
289
+ * @param array $toCurrencies
290
+ * @return array
291
+ */
292
+ public function getCurrencyRates($currency, $toCurrencies=null)
293
+ {
294
+ if ($currency instanceof Mage_Directory_Model_Currency) {
295
+ $currency = $currency->getCode();
296
+ }
297
+ $data = $this->_getResource()->getCurrencyRates($currency, $toCurrencies);
298
+ return $data;
299
+ }
300
+
301
+ /**
302
+ * Save currency rates
303
+ *
304
+ * @param array $rates
305
+ * @return object
306
+ */
307
+ public function saveRates($rates)
308
+ {
309
+ $this->_getResource()->saveRates($rates);
310
+ return $this;
311
+ }
312
+ }
app/code/community/Mage/Directory/Model/Currency.php.bak ADDED
@@ -0,0 +1,309 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-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 Mage
22
+ * @package Mage_Directory
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Currency model
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Directory
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Mage_Directory_Model_Currency extends Mage_Core_Model_Abstract
35
+ {
36
+ /**
37
+ * CONFIG path constants
38
+ */
39
+ const XML_PATH_CURRENCY_ALLOW = 'currency/options/allow';
40
+ const XML_PATH_CURRENCY_DEFAULT = 'currency/options/default';
41
+ const XML_PATH_CURRENCY_BASE = 'currency/options/base';
42
+
43
+ protected $_filter;
44
+
45
+ /**
46
+ * Currency Rates
47
+ *
48
+ * @var array
49
+ */
50
+ protected $_rates;
51
+
52
+
53
+ protected function _construct()
54
+ {
55
+ $this->_init('directory/currency');
56
+ }
57
+
58
+ /**
59
+ * Get currency code
60
+ *
61
+ * @return string
62
+ */
63
+ public function getCode()
64
+ {
65
+ return $this->_getData('currency_code');
66
+ }
67
+
68
+ public function getCurrencyCode()
69
+ {
70
+ return $this->_getData('currency_code');
71
+ }
72
+
73
+ /**
74
+ * Currency Rates getter
75
+ *
76
+ * @return array
77
+ */
78
+ public function getRates()
79
+ {
80
+ return $this->_rates;
81
+ }
82
+
83
+ /**
84
+ * Currency Rates setter
85
+ *
86
+ * @param array Currency Rates
87
+ * @return Mage_Directory_Model_Currency
88
+ */
89
+ public function setRates(array $rates)
90
+ {
91
+ $this->_rates = $rates;
92
+ return $this;
93
+ }
94
+
95
+ /**
96
+ * Loading currency data
97
+ *
98
+ * @param string $id
99
+ * @param string $field
100
+ * @return Mage_Directory_Model_Currency
101
+ */
102
+ public function load($id, $field=null)
103
+ {
104
+ $this->unsRate();
105
+ $this->setData('currency_code', $id);
106
+ return $this;
107
+ }
108
+
109
+ /**
110
+ * Get currency rate (only base=>allowed)
111
+ *
112
+ * @param string $toCurrency
113
+ * @return double
114
+ */
115
+ public function getRate($toCurrency)
116
+ {
117
+ if (is_string($toCurrency)) {
118
+ $code = $toCurrency;
119
+ } elseif ($toCurrency instanceof Mage_Directory_Model_Currency) {
120
+ $code = $toCurrency->getCurrencyCode();
121
+ } else {
122
+ throw Mage::exception('Mage_Directory', Mage::helper('directory')->__('Invalid target currency.'));
123
+ }
124
+ $rates = $this->getRates();
125
+ if (!isset($rates[$code])) {
126
+ $rates[$code] = $this->_getResource()->getRate($this->getCode(), $toCurrency);
127
+ $this->setRates($rates);
128
+ }
129
+ return $rates[$code];
130
+ }
131
+
132
+ /**
133
+ * Get currency rate (base=>allowed or allowed=>base)
134
+ *
135
+ * @param string $toCurrency
136
+ * @return double
137
+ */
138
+ public function getAnyRate($toCurrency)
139
+ {
140
+ if (is_string($toCurrency)) {
141
+ $code = $toCurrency;
142
+ } elseif ($toCurrency instanceof Mage_Directory_Model_Currency) {
143
+ $code = $toCurrency->getCurrencyCode();
144
+ } else {
145
+ throw Mage::exception('Mage_Directory', Mage::helper('directory')->__('Invalid target currency.'));
146
+ }
147
+ $rates = $this->getRates();
148
+ if (!isset($rates[$code])) {
149
+ $rates[$code] = $this->_getResource()->getAnyRate($this->getCode(), $toCurrency);
150
+ $this->setRates($rates);
151
+ }
152
+ return $rates[$code];
153
+ }
154
+
155
+ /**
156
+ * Convert price to currency format
157
+ *
158
+ * @param double $price
159
+ * @param string $toCurrency
160
+ * @return double
161
+ */
162
+ public function convert($price, $toCurrency=null)
163
+ {
164
+ if (is_null($toCurrency)) {
165
+ return $price;
166
+ }
167
+ elseif ($rate = $this->getRate($toCurrency)) {
168
+ return $price*$rate;
169
+ }
170
+
171
+ throw new Exception(Mage::helper('directory')->__('Undefined rate from "%s-%s".', $this->getCode(), $toCurrency->getCode()));
172
+ }
173
+
174
+ /**
175
+ * Get currency filter
176
+ *
177
+ * @return Mage_Directory_Model_Currency_Filter
178
+ */
179
+ public function getFilter()
180
+ {
181
+ if (!$this->_filter) {
182
+ $this->_filter = new Mage_Directory_Model_Currency_Filter($this->getCode());
183
+ }
184
+
185
+ return $this->_filter;
186
+ }
187
+
188
+ /**
189
+ * Format price to currency format
190
+ *
191
+ * @param double $price
192
+ * @param bool $includeContainer
193
+ * @return string
194
+ */
195
+ public function format($price, $options=array(), $includeContainer = true, $addBrackets = false)
196
+ {
197
+ Mage::log("community code pool use");
198
+ return $this->formatPrecision($price, 0, $options, $includeContainer, $addBrackets);
199
+ }
200
+
201
+ /**
202
+ * Apply currency format to number with specific rounding precision
203
+ *
204
+ * @param float $price
205
+ * @param int $precision
206
+ * @param array $options
207
+ * @param bool $includeContainer
208
+ * @param bool $addBrackets
209
+ * @return string
210
+ */
211
+ public function formatPrecision($price, $precision, $options=array(), $includeContainer = true, $addBrackets = false)
212
+ {
213
+ if (!isset($options['precision'])) {
214
+ $options['precision'] = $precision;
215
+ }
216
+ if ($includeContainer) {
217
+ return '<span class="price">' . ($addBrackets ? '[' : '') . $this->formatTxt($price, $options) . ($addBrackets ? ']' : '') . '</span>';
218
+ }
219
+ return $this->formatTxt($price, $options);
220
+ }
221
+
222
+ public function formatTxt($price, $options=array())
223
+ {
224
+ if (!is_numeric($price)) {
225
+ $price = Mage::app()->getLocale()->getNumber($price);
226
+ }
227
+ /**
228
+ * Fix problem with 12 000 000, 1 200 000
229
+ *
230
+ * %f - the argument is treated as a float, and presented as a floating-point number (locale aware).
231
+ * %F - the argument is treated as a float, and presented as a floating-point number (non-locale aware).
232
+ */
233
+ $price = sprintf("%F", $price);
234
+ return Mage::app()->getLocale()->currency($this->getCode())->toCurrency($price, $options);
235
+ }
236
+
237
+ public function getOutputFormat()
238
+ {
239
+ $formated = $this->formatTxt(0);
240
+ $number = $this->formatTxt(0, array('display'=>Zend_Currency::NO_SYMBOL));
241
+ return str_replace($number, '%s', $formated);
242
+ }
243
+
244
+ /**
245
+ * Retrieve allowed currencies according to config
246
+ *
247
+ */
248
+ public function getConfigAllowCurrencies()
249
+ {
250
+ $allowedCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_ALLOW);
251
+ $appBaseCurrencyCode = Mage::app()->getBaseCurrencyCode();
252
+ if (!in_array($appBaseCurrencyCode, $allowedCurrencies)) {
253
+ $allowedCurrencies[] = $appBaseCurrencyCode;
254
+ }
255
+ foreach (Mage::app()->getStores() as $store) {
256
+ $code = $store->getBaseCurrencyCode();
257
+ if (!in_array($code, $allowedCurrencies)) {
258
+ $allowedCurrencies[] = $code;
259
+ }
260
+ }
261
+
262
+ return $allowedCurrencies;
263
+ }
264
+
265
+ /**
266
+ * Retrieve default currencies according to config
267
+ *
268
+ */
269
+ public function getConfigDefaultCurrencies()
270
+ {
271
+ $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_DEFAULT);
272
+ return $defaultCurrencies;
273
+ }
274
+
275
+
276
+ public function getConfigBaseCurrencies()
277
+ {
278
+ $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_BASE);
279
+ return $defaultCurrencies;
280
+ }
281
+
282
+ /**
283
+ * Retrieve currency rates to other currencies
284
+ *
285
+ * @param string $currency
286
+ * @param array $toCurrencies
287
+ * @return array
288
+ */
289
+ public function getCurrencyRates($currency, $toCurrencies=null)
290
+ {
291
+ if ($currency instanceof Mage_Directory_Model_Currency) {
292
+ $currency = $currency->getCode();
293
+ }
294
+ $data = $this->_getResource()->getCurrencyRates($currency, $toCurrencies);
295
+ return $data;
296
+ }
297
+
298
+ /**
299
+ * Save currency rates
300
+ *
301
+ * @param array $rates
302
+ * @return object
303
+ */
304
+ public function saveRates($rates)
305
+ {
306
+ $this->_getResource()->saveRates($rates);
307
+ return $this;
308
+ }
309
+ }
app/design/adminhtml/default/default/layout/ipay.xml ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_sales_order_shipment_new>
31
+ <reference name="order_items" as="order_items">
32
+ <action method="setTemplate" ifconfig="payment/ipay/active">
33
+ <template>ipay/items.phtml</template>
34
+ </action>
35
+ </reference>
36
+ </adminhtml_sales_order_shipment_new>
37
+ <adminhtml_sales_order_view>
38
+ <reference name="order_tab_info" as="order_tab_info">
39
+ <action method="setTemplate" ifconfig="payment/ipay/active">
40
+ <template>ipay/info.phtml</template>
41
+ </action>
42
+ </reference>
43
+ </adminhtml_sales_order_view>
44
+ <adminhtml_sales_order_shipment_view>
45
+ <reference name="form" as="form">
46
+ <action method="setTemplate" ifconfig="payment/ipay/active">
47
+ <template>ipay/form.phtml</template>
48
+ </action>
49
+ </reference>
50
+ </adminhtml_sales_order_shipment_view>
51
+ </layout>
app/design/adminhtml/default/default/locale/en_US/translate.csv ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Credit Card Type","Credit Card Type"
2
+ "Add New User","Add New User"
3
+ "Items that you don","Items that you don"
4
+ "State/Province","State/Province"
5
+ "Magento Commerce - Administrative Panel","Magento Commerce - Administrative Panel"
6
+ "3 stars","3 stars"
7
+ "Credit Memo Date","Credit Memo Date"
8
+ "Double click on a group to rename it","Double click on a group to rename it"
9
+ "Rating Not Available","Rating Not Available"
10
+ "Gift Certificate","Gift Certificate"
11
+ "Assigned Answers","Assigned Answers"
12
+ "Fax","Fax"
13
+ "Magento Admin","Magento Admin"
14
+ "Newsletter Message Preview","Newsletter Message Preview"
15
+ "4 stars","4 stars"
16
+ "Company","Company"
17
+ "Invoice Date","Invoice Date"
18
+ "Qty Returned","Qty Returned"
19
+ "Add New Customer Group","Add New Customer Group"
20
+ "Visitors","Visitors"
21
+ "Shipping Method","Shipping Method"
22
+ "Subtotal","Subtotal"
23
+ "5 stars","5 stars"
24
+ "Choose Store","Choose Store"
25
+ "Import Tax Rates","Import Tax Rates"
26
+ "Roles","Roles"
27
+ "If you do not specify an option value for a store then the default value will be used.","If you do not specify an option value for a store then the default value will be used."
28
+ "Shipping","Shipping"
29
+ "Select from existing customer addresses:","Select from existing customer addresses:"
30
+ "Products","Products"
31
+ "Edit User ","Edit User "
32
+ "Item Status","Item Status"
33
+ "Set as default billing address","Set as default billing address"
34
+ "Position","Position"
35
+ "Items Ordered","Items Ordered"
36
+ "Fixed","Fixed"
37
+ "%s","%s"
38
+ "Same as Billing Address","Same as Billing Address"
39
+ "Product In Stores","Product In Stores"
40
+ "Working...","Working..."
41
+ "Apply coupon code","Apply coupon code"
42
+ "per page","per page"
43
+ "Tax","Tax"
44
+ "Telephone","Telephone"
45
+ "Wishlist","Wishlist"
46
+ "Magento","Magento"
47
+ "Expiration Date","Expiration Date"
48
+ "Add New Class","Add New Class"
49
+ "Super product attributes configuration","Super product attributes configuration"
50
+ "Previus page","Previus page"
51
+ "Something went wrong...","Something went wrong..."
52
+ "Lifetime Sales","Lifetime Sales"
53
+ "SKU","SKU"
54
+ "Log Out","Log Out"
55
+ "Failed","Failed"
56
+ "Billing Address","Billing Address"
57
+ "Log into Magento Admin Page","Log into Magento Admin Page"
58
+ "Invoice Status","Invoice Status"
59
+ "CC Type","CC Type"
60
+ "Percentage","Percentage"
61
+ "Are you sure?","Are you sure?"
62
+ "Email","Email"
63
+ "Customer Group:","Customer Group:"
64
+ "Option","Option"
65
+ "Primary Billing Address","Primary Billing Address"
66
+ "Create Backup","Create Backup"
67
+ "Manage Options (values for your attribute)","Manage Options (values for your attribute)"
68
+ "Total Due","Total Due"
69
+ "Copyright 2007","Copyright 2007"
70
+ "Newsletter Subscribers","Newsletter Subscribers"
71
+ "CC Number","CC Number"
72
+ "Add New Tax Rate","Add New Tax Rate"
73
+ "Product Name","Product Name"
74
+ "Country","Country"
75
+ "Purchase order number","Purchase order number"
76
+ "Date and Time","Date and Time"
77
+ "Categories","Categories"
78
+ "Qty Cancelled","Qty Cancelled"
79
+ "Card Verification Number","Card Verification Number"
80
+ "Order Date","Order Date"
81
+ "This tab contains invalid data. Please correct before saving.","This tab contains invalid data. Please correct before saving."
82
+ "Customer Balance","Customer Balance"
83
+ "Update Qty","Update Qty"
84
+ "Customer Groups","Customer Groups"
85
+ "Export to","Export to"
86
+ "configuration","configuration"
87
+ "Sorry, no quotes are available for this order at this time.","Sorry, no quotes are available for this order at this time."
88
+ "Options","Options"
89
+ "Attribute Name","Attribute Name"
90
+ "Total <strong>%d</strong> records found","Total <strong>%d</strong> records found"
91
+ "Comment","Comment"
92
+ "Set as default shipping address","Set as default shipping address"
93
+ "Last Name","Last Name"
94
+ "of","of"
95
+ "Newsletter Problem Reports","Newsletter Problem Reports"
96
+ "Sales Statistics","Sales Statistics"
97
+ "Qty To Return","Qty To Return"
98
+ "New Customer Address","New Customer Address"
99
+ "Roles Resources","Roles Resources"
100
+ "Zip/Post Code","Zip/Post Code"
101
+ "Order Status","Order Status"
102
+ "Store","Store"
103
+ "Product Categories","Product Categories"
104
+ "Online Customers","Online Customers"
105
+ "Next page","Next page"
106
+ "Items Shipped","Items Shipped"
107
+ "Unassigned Attributes","Unassigned Attributes"
108
+ "Not Charged Yet","Not Charged Yet"
109
+ "This group contains system attributes.\nPlease, move system attributes to another group and try again.","This group contains system attributes.\nPlease, move system attributes to another group and try again."
110
+ "copy data from","copy data from"
111
+ "Add","Add"
112
+ "Total Payed","Total Payed"
113
+ "Shopping Cart","Shopping Cart"
114
+ "Order History","Order History"
115
+ "Empty","Empty"
116
+ "Unable to complete request. Please, try again later.","Unable to complete request. Please, try again later."
117
+ "Customers","Customers"
118
+ "Customer does not have any addresses","Customer does not have any addresses"
119
+ "Add New Role","Add New Role"
120
+ "Street Address","Street Address"
121
+ "Are You Sure?","Are You Sure?"
122
+ "Shipping Address","Shipping Address"
123
+ "Paid","Paid"
124
+ "Page","Page"
125
+ "Discount","Discount"
126
+ "Set root category for this store in","Set root category for this store in"
127
+ "Groups","Groups"
128
+ "View","View"
129
+ "Qty Ordered","Qty Ordered"
130
+ "Global Record Search","Global Record Search"
131
+ "Card Number","Card Number"
132
+ "PO Number","PO Number"
133
+ "Grand Total","Grand Total"
134
+ "Please select one or more attributes.","Please select one or more attributes."
135
+ "Dashboard","Dashboard"
136
+ "Are you sure you want to do this?","Are you sure you want to do this?"
137
+ "Please add one or more options","Please add one or more options"
138
+ "Role Users","Role Users"
139
+ "Add New Tax Rule","Add New Tax Rule"
140
+ "Subscribe to newsletter","Subscribe to newsletter"
141
+ "Dashboard Control","Dashboard Control"
142
+ "Default Shipping","Default Shipping"
143
+ "Qty","Qty"
144
+ "Add to Queue","Add to Queue"
145
+ "Average Sale","Average Sale"
146
+ "Cancel","Cancel"
147
+ "All stores","All stores"
148
+ "Personal Information","Personal Information"
149
+ "City","City"
150
+ "Export Tax Rates","Export Tax Rates"
151
+ "1 star","1 star"
152
+ "Current Configuration Scope","Current Configuration Scope"
153
+ "Add New Template","Add New Template"
154
+ "Move to:","Move to:"
155
+ "First Name","First Name"
156
+ "Change Order Status","Change Order Status"
157
+ "Are you sure you want to delete this address?","Are you sure you want to delete this address?"
158
+ "Are you sure you want to do it?","Are you sure you want to do it?"
159
+ "Add to Order","Add to Order"
160
+ "Product ID","Product ID"
161
+ "Payment Method","Payment Method"
162
+ "What is this?","What is this?"
163
+ "Users","Users"
164
+ "Customer Addresses","Customer Addresses"
165
+ "Qty Backordered","Qty Backordered"
166
+ "You can not remove system attribute from this set.","You can not remove system attribute from this set."
167
+ "Price","Price"
168
+ "Who","Who"
169
+ "Rating Not Alvailable","Rating Not Alvailable"
170
+ "Order Comment","Order Comment"
171
+ "Edit Role","Edit Role"
172
+ "Tax Rates Import / Export","Tax Rates Import / Export"
173
+ "Magento Logo","Magento Logo"
174
+ "A name is required","A name is required"
175
+ "Assigned options","Assigned options"
176
+ "Please Enter New Group Name","Please Enter New Group Name"
177
+ "Name","Name"
178
+ "Email Preview","Email Preview"
179
+ "Newsletter Queue","Newsletter Queue"
180
+ "Remove","Remove"
181
+ "Last Log In:","Last Log In:"
182
+ "Logged in as <strong>%s</strong>","Logged in as <strong>%s</strong>"
183
+ "Name on Card","Name on Card"
184
+ "All Stores","All Stores"
185
+ "Send comment to customer","Send comment to customer"
186
+ "Account Created on:","Account Created on:"
187
+ "Backups Control","Backups Control"
188
+ "Add New Address","Add New Address"
189
+ "Account Created in:","Account Created in:"
190
+ "Default Billing","Default Billing"
191
+ "Manage Titles (Size, Color, etc.)","Manage Titles (Size, Color, etc.)"
192
+ "Please confirm site switching. All data not saved will be lost.","Please confirm site switching. All data not saved will be lost."
193
+ "Please select from each ratings above","Please select from each ratings above"
194
+ "Qty Shipped","Qty Shipped"
195
+ "Are you sure you want to cancel add this address?","Are you sure you want to cancel add this address?"
196
+ "The information in this tab has been changed.","The information in this tab has been changed."
197
+ "2 stars","2 stars"
198
+ "Apply","Apply"
199
+ "Total","Total"
200
+ "User roles","User roles"
201
+ "Wishlist Report","Wishlist Report"
app/design/adminhtml/default/default/locale/ko_KR/translate.csv ADDED
@@ -0,0 +1,612 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Credit Card Type","신용 카드 타입"
2
+ "Add New User","새 사용자 추가"
3
+ "Items that you don","Items that you don"
4
+ "State/Province","시/도"
5
+ "Magento Commerce - Administrative Panel","Magento Commerce - Administrative Panel"
6
+ "3 stars","3 stars"
7
+ "Credit Memo Date","Credit Memo Date"
8
+ "Double click on a group to rename it","Double click on a group to rename it"
9
+ "Rating Not Available","Rating Not Available"
10
+ "Gift Certificate","상품권"
11
+ "Assigned Answers","Assigned Answers"
12
+ "Fax","팩스"
13
+ "Magento Admin","마젠토 관리자"
14
+ "Newsletter Message Preview","Newsletter Message Preview"
15
+ "4 stars","4 stars"
16
+ "Company","회사"
17
+ "Invoice Date","청구일"
18
+ "Qty Returned","Qty Returned"
19
+ "Add New Customer Group","새 고객그룹 추가"
20
+ "Visitors","방문객"
21
+ "Shipping Method","배송방법"
22
+ "Subtotal","소계"
23
+ "5 stars","5 stars"
24
+ "Choose Store","매장 선택"
25
+ "Import Tax Rates","Import Tax Rates"
26
+ "Roles","Roles"
27
+ "If you do not specify an option value for a store then the default value will be used.","If you do not specify an option value for a store then the default value will be used."
28
+ "Shipping","Shipping"
29
+ "Select from existing customer addresses:","Select from existing customer addresses:"
30
+ "Products","Products"
31
+ "Edit User ","Edit User "
32
+ "Item Status","Item Status"
33
+ "Set as default billing address","Set as default billing address"
34
+ "Position","Position"
35
+ "Items Ordered","Items Ordered"
36
+ "Fixed","Fixed"
37
+ "%s","%s"
38
+ "Same as Billing Address","Same as Billing Address"
39
+ "Product In Stores","Product In Stores"
40
+ "Working...","Working..."
41
+ "Apply coupon code","Apply coupon code"
42
+ "per page","per page"
43
+ "Tax","Tax"
44
+ "Telephone","전화"
45
+ "Wishlist","Wishlist"
46
+ "Magento","Magento"
47
+ "Expiration Date","Expiration Date"
48
+ "Add New Class","새 클래스 추가"
49
+ "Super product attributes configuration","Super product attributes configuration"
50
+ "Previus page","Previus page"
51
+ "Something went wrong...","Something went wrong..."
52
+ "Lifetime Sales","Lifetime Sales"
53
+ "SKU","SKU"
54
+ "Log Out","로그아웃"
55
+ "Failed","실패"
56
+ "Billing Address","Billing Address"
57
+ "Log into Magento Admin Page","Log into Magento Admin Page"
58
+ "Invoice Status","Invoice Status"
59
+ "CC Type","CC Type"
60
+ "Percentage","Percentage"
61
+ "Are you sure?","Are you sure?"
62
+ "Email","Email"
63
+ "Customer Group:","Customer Group:"
64
+ "Option","옵션"
65
+ "Primary Billing Address","Primary Billing Address"
66
+ "Create Backup","Create Backup"
67
+ "Manage Options (values for your attribute)","Manage Options (values for your attribute)"
68
+ "Total Due","Total Due"
69
+ "Copyright 2007","Copyright 2007"
70
+ "Newsletter Subscribers","Newsletter Subscribers"
71
+ "CC Number","CC Number"
72
+ "Add New Tax Rate","Add New Tax Rate"
73
+ "Product Name","Product Name"
74
+ "Country","Country"
75
+ "Purchase order number","Purchase order number"
76
+ "Date and Time","Date and Time"
77
+ "Categories","Categories"
78
+ "Qty Cancelled","Qty Cancelled"
79
+ "Card Verification Number","Card Verification Number"
80
+ "Order Date","Order Date"
81
+ "This tab contains invalid data. Please correct before saving.","This tab contains invalid data. Please correct before saving."
82
+ "Customer Balance","Customer Balance"
83
+ "Update Qty","Update Qty"
84
+ "Customer Groups","고객 그룹"
85
+ "Export to:","다음으로 내보내기"
86
+ "configuration","환경설정"
87
+ "Sorry, no quotes are available for this order at this time.","Sorry, no quotes are available for this order at this time."
88
+ "Options","옵션"
89
+ "Attribute Name","Attribute Name"
90
+ "Total <strong>%d</strong> records found","총 <strong>%d</strong> 자료"
91
+ "Comment","Comment"
92
+ "Set as default shipping address","Set as default shipping address"
93
+ "Last Name","성"
94
+ "of","of"
95
+ "Newsletter Problem Reports","Newsletter Problem Reports"
96
+ "Sales Statistics","Sales Statistics"
97
+ "Qty To Return","Qty To Return"
98
+ "New Customer Address","New Customer Address"
99
+ "Roles Resources","Roles Resources"
100
+ "Zip/Post Code","Zip/Post Code"
101
+ "Order Status","주문 상태"
102
+ "Store","스토어"
103
+ "Product Categories","Product Categories"
104
+ "Online Customers","온라인 고객"
105
+ "Next page","Next page"
106
+ "Items Shipped","Items Shipped"
107
+ "Unassigned Attributes","Unassigned Attributes"
108
+ "Not Charged Yet","Not Charged Yet"
109
+ "This group contains system attributes.\nPlease, move system attributes to another group and try again.","This group contains system attributes.\nPlease, move system attributes to another group and try again."
110
+ "copy data from","copy data from"
111
+ "Add","추가"
112
+ "Total Payed","Total Payed"
113
+ "Shopping Cart","장바구니"
114
+ "Order History","Order History"
115
+ "Empty","Empty"
116
+ "Unable to complete request. Please, try again later.","Unable to complete request. Please, try again later."
117
+ "Customers","고객"
118
+ "Customer does not have any addresses","Customer does not have any addresses"
119
+ "Add New Role","Add New Role"
120
+ "Street Address","Street Address"
121
+ "Are You Sure?","Are You Sure?"
122
+ "Shipping Address","Shipping Address"
123
+ "Paid","Paid"
124
+ "Page","페이지"
125
+ "Discount","Discount"
126
+ "Set root category for this store in","Set root category for this store in"
127
+ "Groups","그룹"
128
+ "View","보기"
129
+ "Qty Ordered","Qty Ordered"
130
+ "Global Record Search","Global Record Search"
131
+ "Card Number","카드번호"
132
+ "PO Number","PO Number"
133
+ "Grand Total","Grand Total"
134
+ "Please select one or more attributes.","Please select one or more attributes."
135
+ "Dashboard","대시보드"
136
+ "Are you sure you want to do this?","Are you sure you want to do this?"
137
+ "Please add one or more options","Please add one or more options"
138
+ "Role Users","Role Users"
139
+ "Add New Tax Rule","Add New Tax Rule"
140
+ "Subscribe to newsletter","Subscribe to newsletter"
141
+ "Dashboard Control","Dashboard Control"
142
+ "Default Shipping","Default Shipping"
143
+ "Qty","수량"
144
+ "Add to Queue","Add to Queue"
145
+ "Average Sale","Average Sale"
146
+ "Cancel","취소"
147
+ "All stores","모든 매장"
148
+ "Personal Information","Personal Information"
149
+ "City","City"
150
+ "Export Tax Rates","Export Tax Rates"
151
+ "1 star","1 star"
152
+ "Current Configuration Scope","Current Configuration Scope"
153
+ "Add New Template","Add New Template"
154
+ "Move to:","이동:"
155
+ "First Name","First Name"
156
+ "Change Order Status","Change Order Status"
157
+ "Are you sure you want to delete this address?","Are you sure you want to delete this address?"
158
+ "Are you sure you want to do it?","Are you sure you want to do it?"
159
+ "Add to Order","Add to Order"
160
+ "Product ID","제품ID"
161
+ "Payment Method","Payment Method"
162
+ "What is this?","What is this?"
163
+ "Users","사용자"
164
+ "Customer Addresses","Customer Addresses"
165
+ "Qty Backordered","Qty Backordered"
166
+ "You can not remove system attribute from this set.","You can not remove system attribute from this set."
167
+ "Price","가격"
168
+ "Who","Who"
169
+ "Rating Not Alvailable","Rating Not Alvailable"
170
+ "Order Comment","Order Comment"
171
+ "Edit Role","Edit Role"
172
+ "Tax Rates Import / Export","Tax Rates Import / Export"
173
+ "Magento Logo","Magento Logo"
174
+ "A name is required","A name is required"
175
+ "Assigned options","Assigned options"
176
+ "Please Enter New Group Name","Please Enter New Group Name"
177
+ "Name","이름"
178
+ "Email Preview","Email Preview"
179
+ "Newsletter Queue","Newsletter Queue"
180
+ "Remove","제거"
181
+ "Last Log In:","Last Log In:"
182
+ "Logged in as <strong>%s</strong>","<strong>%s</strong>로 로그인"
183
+ "Name on Card","Name on Card"
184
+ "All Stores","All Stores"
185
+ "Send comment to customer","Send comment to customer"
186
+ "Account Created on:","Account Created on:"
187
+ "Backups Control","Backups Control"
188
+ "Add New Address","Add New Address"
189
+ "Account Created in:","Account Created in:"
190
+ "Default Billing","Default Billing"
191
+ "Manage Titles (Size, Color, etc.)","Manage Titles (Size, Color, etc.)"
192
+ "Please confirm site switching. All data not saved will be lost.","Please confirm site switching. All data not saved will be lost."
193
+ "Please select from each ratings above","Please select from each ratings above"
194
+ "Qty Shipped","재고 수량"
195
+ "Are you sure you want to cancel add this address?","Are you sure you want to cancel add this address?"
196
+ "The information in this tab has been changed.","The information in this tab has been changed."
197
+ "2 stars","2 stars"
198
+ "Apply","신청"
199
+ "Total","합계"
200
+ "User roles","User roles"
201
+ "Wishlist Report","Wishlist Report"
202
+ "Select All","전체선택"
203
+ "Unselect All","전체해제"
204
+ "Reports","보고서"
205
+ "System","시스템"
206
+ "Newsletter","뉴스레터"
207
+ "Disabled","비활성화"
208
+ "Enabled","활성화"
209
+ "Sales","판매"
210
+ "Catalog","카타로그"
211
+ "Choose Store View:","스토어뷰 선택:"
212
+ "Orders","주문"
213
+ "No Data Found","데이터가 없습니다."
214
+ "Log Out ","로그아웃"
215
+ "Google Sitemap","구글 사이트맵"
216
+ "Mobile","모바일"
217
+ "Promotions","프로모션"
218
+ "Search Terms","검색어"
219
+ "Search Term","검색어"
220
+ "Top 5 Search Terms","인기 검색어(1~5위)"
221
+ "Last 5 Search Terms","최종 검색어"
222
+ "Average Orders","평균 주문"
223
+ "Amounts","총액"
224
+ "Select Range","범위 선택:"
225
+ "Help","도움말"
226
+ "Configuration","설정"
227
+ "Import/Export","가져오기/내보내기"
228
+ "Import","가져오기"
229
+ "Export","내보내기"
230
+ "Permissions","권한"
231
+ "My Account","내 계정"
232
+ "Account Information","계정 정보"
233
+ "Save Account","계정 저장"
234
+ "Reset","초기화"
235
+ "User Name","사용자 계정"
236
+ "First Name","이름"
237
+ "Last Name","성"
238
+ "Customer Last Name","성"
239
+ "Customer First Name","이름"
240
+ "Email","이메일"
241
+ "New Password","새로운 비밀번호"
242
+ "Password Confirmation","비밀번호 재 입력"
243
+ "Submit","확인"
244
+ "Search","검색"
245
+ "Actions","동작"
246
+ "No records found.","자료가 없습니다."
247
+ "Status","상태"
248
+ "Manage Products","상품 관리"
249
+ "Manage Categories","카테고리 관리"
250
+ "Invoices","발주확인"
251
+ "Tax","세금"
252
+ "Manage Apps","응용프로그램 관리"
253
+ "Add App","응용프로그램 추가"
254
+ "Reset Filter","필터 초기화"
255
+ "URL Rewrite Management","URL Rewrite 관리"
256
+ "Tags","태그"
257
+ "Manage Ratings","Manage Ratings"
258
+ "Shipments","배송"
259
+ "Transactions","거래"
260
+ "IP Address","IP주소"
261
+ "ID","아이디"
262
+ "Type","유형"
263
+ "Revenue","총 수입"
264
+ "Quantity","수량"
265
+ "Shipping","배송"
266
+ "Bestsellers","베스트 셀러"
267
+ "New Customers","신규 고객"
268
+ "Most Viewed Products","최고 많이 본 상품"
269
+ "Product Name","상품 명"
270
+ "Quantity Ordered","주문 수량"
271
+ "Results","결과"
272
+ "Items","물품"
273
+ "Grand Total","총 계"
274
+ "Customer","고객"
275
+ "Newsletter Subscribers","뉴스레터 가입자"
276
+ "Newsletter Queue","뉴스레터 대기열"
277
+ "Newsletter Problem Reports","뉴스레터 문제 보고서"
278
+ "Newsletter Templates","뉴스레터 견본"
279
+ "Manage Terms and Conditions","이용 약관 관리"
280
+ "Terms and conditions","이용 약관"
281
+ "Manage Attributes","속성 관리"
282
+ "Attribute Code","속성 코드"
283
+ "Attributes","속성"
284
+ "Create New Order","새 주문"
285
+ "Action","동작"
286
+ "Customer Reviews","고객 리뷰"
287
+ "Manage Ratings","평가 관리"
288
+ "Rating Name","평가명"
289
+ "Manage Customers","고객 관리"
290
+ "Reviews","리뷰"
291
+ "Products","상품"
292
+ "Listings","목록"
293
+ "Online Customers","온라인 고객"
294
+ "App Submission History","응용프로그램 제출 내역"
295
+ "Date Submitted","제출일"
296
+ "App Code","응용프로그램 코드"
297
+ "Activation Key","인증키"
298
+ "App Title","응용프로그램 제목"
299
+ "App Information","응용프로그램 정보"
300
+ "App Name","응용프로그램명"
301
+ "Store View","스토어 뷰"
302
+ "New App","새 응용프로그램"
303
+ "Device Information","장치 정보"
304
+ "Device Type","장치 종류"
305
+ "Device","장치"
306
+ "Manage Mobile App","모바일 응용프로그램 관리"
307
+ "Settings","설정"
308
+ "Please Select Device Type","장치를 선택해 주세요."
309
+ "Continue","계속"
310
+ "Back","뒤로"
311
+ "Save","저장"
312
+ "Save and Continue Edit","저장 후 계속 작성"
313
+ "iPad","아이패드"
314
+ "iPhone","아이폰"
315
+ "Android","안드로이드"
316
+ "General","일반"
317
+ "Design","디자인"
318
+ "Content","내용"
319
+ "Payment Methods","결제 방법"
320
+ "Submission History","제출 내역"
321
+ "Cache Management","캐시 관리"
322
+ "Social Networking","소셜 네트워킹"
323
+ "Yes","예"
324
+ "No","아니오"
325
+ "Push Notification","푸시 알림"
326
+ "Please Select a Customer","고객을 선택하세요"
327
+ "Country","나라"
328
+ "ZIP/Post Code","우편번호"
329
+ "Create New Customer","새 고객 만들기"
330
+ "Cancel","취소"
331
+ "Please Select a Store","매장을 선택하세요"
332
+ "Customer Group","고객 그룹"
333
+ "Product","상품"
334
+ "Discount","할인"
335
+ "Add Products","상품 추가"
336
+ "Items Ordered","주문 내역"
337
+ "Billing Address","청구서 배송지"
338
+ "Shipping Address","물건 배송지"
339
+ "Submit Order","주문 확인"
340
+ "Zip/Postal Code","우편 번호"
341
+ "Street Address","주소"
342
+ "City","도시"
343
+ "Order History","주문 내역"
344
+ "Order Totals","총 주문"
345
+ "Save in address book","주소록에 저장"
346
+ "Same As Billing Address","청구서 배송지와 동일"
347
+ "Payment Method","결제 방법"
348
+ "Select from existing customer addresses:","기존 고객 주소에서 선택:"
349
+ "Apply Coupon Code","쿠폰 코드 신청"
350
+ "Row Subtotal","소계"
351
+ "Add New Address","새 주소 추가"
352
+ "Total %d product(s)","총 %d 상품"
353
+ "Custom Price","사용자 정의 금액"
354
+ "Subtotal:","총 합계:"
355
+ "Update Items and Qty's","항목 및 수량 업데이트"
356
+ "Order Currency:","주문 화폐:"
357
+ "Order View","주문 내역"
358
+ "Information","정보"
359
+ "Customer Name","고객 이름"
360
+ "Order Date","주문 날짜"
361
+ "Order Status","주문 상태"
362
+ "Edit","수정"
363
+ "Payment Information","결제 정보"
364
+ "Send Email","메일 보내기"
365
+ "Comment","코멘트"
366
+ "Submit Comment","댓글 등록"
367
+ "Pending","보류중"
368
+ "Processing","처리중"
369
+ "Purchased On","구매일"
370
+ "Purchased From (Store)","구매 위치 (매장)"
371
+ "Bill to Name","청구인"
372
+ "Ship to Name","받는 사람"
373
+ "Tax Percent","세금 비율"
374
+ "Tax Amount","세금"
375
+ "Discount Amount","할인 금액 "
376
+ "Row Total","총 합계"
377
+ "Item Status","항목 상태"
378
+ "Original Price","원가"
379
+ "Shipping &amp; Handling","배송처리"
380
+ "Shipping &amp; Handling Information","배송처리 정보"
381
+ "Notify Customer by Email","Email로 고객에게 알림"
382
+ "Add Order Comments","주문 코멘트를 추가하십시오."
383
+ "Invoice","발주"
384
+ "Reorder","재 주문"
385
+ "Hold","잠금"
386
+ "Customer Email","이메일"
387
+ "Refunded","환급"
388
+ "Canceled","취소됨"
389
+ "Any","모두"
390
+ "per page","페이지 당"
391
+ "Total %d records found","총 %d 자료"
392
+ "items selected","항목 선택"
393
+ "Unhold","잠금 풀기"
394
+ "Print Invoices","송장 출력"
395
+ "Print All","모두 출력"
396
+ "Print Packingslips","포장 전표 출력"
397
+ "Group","그룹"
398
+ "ZIP","우편번호"
399
+ "Add New Customer","새 고객 추가"
400
+ "Select Visible","보이는 항목 선택"
401
+ "Paid","결제"
402
+ "Shipping Information","배송 정보"
403
+ "Print","인쇄"
404
+ "Are you sure you want to send Invoice email to customer?","고객에게 송장 메일을 보내시겠습니까?"
405
+ "Total Qty","총 수량"
406
+ "Unselect Visible","보이는 항목 해제"
407
+ "Model","모델"
408
+ "Weight","무게"
409
+ "Manufacturer","재조사"
410
+ "Prices","가격"
411
+ "Tax Class","세금 등급"]
412
+ "-- Please Select --","-- 선택해 주세요 --"
413
+ "Catalog, Search","카탈로그, 검색"
414
+ "default","기본"
415
+ "Descriptions","설명"
416
+ "Images","이미지"
417
+ "Create New Attribute","새 속성 추가"
418
+ "Country of Manufacture","제조 국가"
419
+ "add New Option","새 옵션 추가"
420
+ "Categories","카테고리"
421
+ "Product Categories","상품 카테고리"
422
+ "Product Reviews","상품 리뷰"
423
+ "Custom Options","사용자 정의 옵션"
424
+ "Product Information","상품 정보"
425
+ "All Store Views","모든 스토어 뷰"
426
+ "Add Product","상품 추가"
427
+ "Backups","백업"
428
+ "Compilation","편집"
429
+ "Disable","비활성화"
430
+ "Compilation State","편집 상태"
431
+ "No records found for this period.","이 기간 동안 기록을 찾을 수 없습니다."
432
+ "Order ID","주문 ID"
433
+ "Transaction ID","거래 ID"
434
+ "Payment Method Name","결제 방법"
435
+ "Transaction Type","거래 유형
436
+ "Attrib. Set Name","속성 이름"
437
+ "Visibility","보기"
438
+ "SKU","재고 코드"
439
+ "Approved","승인"
440
+ "Tag","태그"
441
+ "All Tags","전체 태그"
442
+ "Edit Attribute Set '%s'","속성 세트 편집 '%s'"
443
+ "Edit Set Name","세트 이름 편집"
444
+ "Add New","새로 추가"
445
+ "Delete Selected Group","선택된 그룹 제거"
446
+ "Delete Attribute Set","속성 세트 제거"
447
+ "Save Attribute Set","속성 세트 저장"
448
+ "Unassigned Attributes","비활당된 특성"
449
+ "Double click on a group to rename it","이름을 변경하려면 그룹을 더블클릭 하세요."
450
+ "Get help for this page ","이 페이지에 대한 도움말"
451
+ "Manage Attribute Sets","속성 세트 관리"
452
+ "Reviews and Ratings","리뷰 & 평가"
453
+ "Expired","만료됨"
454
+ "Suspended","보류됨"
455
+ "Payment Reference ID","지불 조회 ID"
456
+ "Terms and Conditions Information","이용 약관 안내"
457
+ "Condition Name","약관 이름"
458
+ "Tax Rate","세율"
459
+ "Product Tax Class","상품 세금 등급"
460
+ "Customer Tax Class","고객 상품 등급"
461
+ "Delete Rule","규칙 제거"
462
+ "Save Rule","규칙 저장"
463
+ "Tax Rule Information","세금 규칙 정보"
464
+ "Edit Rule","규칙 수정"
465
+ "Priority","우선 순위"
466
+ "Sort Order","정렬 순서"
467
+ "Manage Tax Rules","세금 규칙 관리"
468
+ "Manage Tax Zones & Rates","Manage Tax Zones & Rates"
469
+ "Catalog Price Rules","카탈로그 가격 정책"
470
+ "Shopping Cart Price Rules","쇼핑카트 가격 정책"
471
+ "Web Services","웹 서비스"
472
+ "Notifications","알림"
473
+ "Read Details","자세히"
474
+ "Mark as Read","읽은 상태로 표시"
475
+ "Tools","도구"
476
+ "Severity","심각성"
477
+ "Message","메시지"
478
+ "System Backup","시스템 백업"
479
+ "Database and Media Backup","데이터베이스 & 미디어 백업"
480
+ "Database Backup","데이터베이스 백업"
481
+ "Delete","제거"
482
+ "Number of Uses","사용 횟수"
483
+ "Print Credit Memos","신용정보 출력"
484
+ "Countries Options","국가별 설정"
485
+ "Default Country","기본 국가"
486
+ "Allow Countries","허용된 국가"
487
+ "Postal Code is Optional for the following countries","우편번호가 옵션으로 적용"
488
+ "European Union Countries","유럽연합 국가"
489
+ "Timezone","시간대"
490
+ "First Day of Week","시작요일"
491
+ "Weekend Days","주말"
492
+ "Url Options","Url 옵션"
493
+ "Secure","보안"
494
+ "Comments History","코멘트 내역"
495
+ "CMS","컨텐츠관리"
496
+ "Polls","투표"
497
+ "eBay","이베이관리"
498
+ "Manage Currency Rates","환율관리"
499
+ "States Options","States 정보가 필요한 국가"
500
+ "Search Engines Optimization","검색엔진 최적화"
501
+ "Developer","개발자"
502
+ "Inventory","재고관리"
503
+ "Decrease Stock When Order is Placed","주문이 되었을대 재고 수량 감소"
504
+ "Set Items' Status to be In Stock When Order is Cancelled","주문이 취소 되었을때 아이템 상태 변경"
505
+ "Lifetime Sales","총 판매액"
506
+ "Average Sale","평균 판매"
507
+ "Recent Orders","최근 주문"
508
+ "Last 5 Orders","최근 주문 5건"
509
+ "Manage Stores","스토어 관리"
510
+ "Manage Currency","화폐(통화) 관리"
511
+ "Enable Escrow Image","에스크로 이미지 활성화"
512
+ "Escrow Image","에스크로 이미지"
513
+ "Ipay Payment Use","iPay 사용"
514
+ "Customer Configuration","고객관리"
515
+ "Sales Emails","판매 이메일"
516
+ "Shipping Settings","배송정보 셋팅"
517
+ "Shipping Method","배송방법"
518
+ "Shipping Methods","배송방법"
519
+ "Transactional Emails","트랜잭션 이메일"
520
+ "Currency Setup","화폐(통화) 설정"
521
+ "Store Email Address","스토어 이메일 주소"
522
+ "Store Email Addresses","스토어 이메일 주소"
523
+ "Content Management","컨텐츠 관리"
524
+ "Sender Name","보내는 사람"
525
+ "Sender Email", "보내는 이메일"
526
+ "Index Management","인덱스 관리"
527
+ "Forgot your password?","비밀번호 찾기"
528
+ "Login","로그인"
529
+ "Log in to Admin Panel","관리자 페이지 로그인"
530
+ "Locale Options","지역 설정"
531
+ "Store Information","스토어 설정"
532
+ "Store Name","스토어 이름"
533
+ "Store Contact Telephone","스토어 고객센터 전화번호"
534
+ "Store Contact Address","스토어 고객센터 주소"
535
+ "Import Settings","가져오기 설정"
536
+ "Order Statuses", "주문상태 관리"
537
+ "New Rule","새 정책"
538
+ "General Information","일반 정보"
539
+ "Rule Name","정책 이름"
540
+ "Description","설명"
541
+ "Websites","웹사이트"
542
+ "Website","웹사이트"
543
+ "Coupon","쿠폰"
544
+ "From Date","시작일"
545
+ "To Date","종료일"
546
+ "Current Configuration Scope:","현재 설정 영역:"
547
+ "Template Name","템플릿 이름"
548
+ "Date Added","생성일"
549
+ "Date Updated","수정일"
550
+ "Template Type","템플릿 타입"
551
+ "Add New Template","새 템플릿 추가"
552
+ "Load default template","기본 템플릿 불러오기"
553
+ "Template","템플릿"
554
+ "Load Template","템플릿 불러오기"
555
+ "Locale","국가/지역"
556
+ "Template Subject","템플릿 제목"
557
+ "Template Content","템플릿 내용"
558
+ "Template Styles","템플릿 스타일"
559
+ "Preview Template","템플릿 미리보기"
560
+ "Save Template","템플릿 저장하기"
561
+ "New Email Template","새 이메일 템플릿"
562
+ "Convert to Plain Text","텍스트로 보기"
563
+ "Return to Html Version","Html 버전으로 보기"
564
+ "User Name:","이름"
565
+ "Password:","비밀번호"
566
+ "Web","웹"
567
+ "Admin User Emails","관리자 이메일"
568
+ "Startup Page","시작페이지"
569
+ "Admin Base URL","관리자 기본 URL"
570
+ "Security", "보안설정"
571
+ "CAPTCHA","자동로그인방지"
572
+ "Enable CAPTCHA in Admin","자동로그인방지 설정"
573
+ "Enable CAPTCHA in Frontend","자동로그인방지 설정"
574
+ "Font","글꼴"
575
+ "Forms","로그인 폼"
576
+ "Number of Unsuccessful Attempts to Login","로그인 실패 허용횟수"
577
+ "CAPTCHA Timeout (minutes)","자동로그인방지 시간(분)"
578
+ "Number of Symbols","문자 갯수"
579
+ "Symbols Used in CAPTCHA","사용 문자"
580
+ "Case Sensitive","대소문자 구분"
581
+ "Email to a Friend","친구에게 메일 보내기"
582
+ "Admin","관리자"
583
+ "Personal Information","고객 개인정보"
584
+ "Last Logged In:","최근 로그인:"
585
+ "Last Logged In (%s):","최근 로그인(%s):"
586
+ "Confirmed email:","이메일 인증"
587
+ "Customer View","고객 프로필"
588
+ "Customer Information","고객 정보"
589
+ "Addresses","주소"
590
+ "Customer Addresses","고객 주소"
591
+ "Edit Customer's Address","고객 주소 수정"
592
+ "Newsletter Information","뉴스레터 정보"
593
+ "Product Tags","상품태그"
594
+ "Tag Name","태그명"
595
+ "Account Created on:","계정생성:"
596
+ "Account Created on (%s):","계정생성 (%s)"
597
+ "Account Created in:","계정생성 (shop)"
598
+ "Customer Group:","고객관리"
599
+ "Default Billing Address","기본 청구 주소"
600
+ "Create Order","주문 생성"
601
+ "Delete Customer","고객 삭제"
602
+ "Save Customer","저장하기"
603
+ "Save Config","저장하기"
604
+ "Forgot Password Email Template","비밀번호 찾기 이메일 템플릿"
605
+ "Forgot Password Email Template","비밀번호 찾기 이메일 보내는 사람"
606
+ "Order # %s","주문 # %s"
607
+ "Invoice #","송장번호 #"
608
+ "Custom Variables","사용자 변수"
609
+ "Magento Connect", "익스텐션 관리"
610
+ "Magento Connect Manager","익스텐션 설정/추가/삭제"
611
+ "Package Extensions", "익스텐션 패키지 만들기"
612
+ "cancel restriction/auto place order", "구매자 취소 제한(자동발주처리)"
app/design/adminhtml/default/default/template/ipay/form.phtml ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package 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 default_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 $_order = $this->getShipment()->getOrder() ?>
28
+ <?php echo $this->getChildHtml('order_info') ?>
29
+
30
+ <div class="box-left">
31
+ <!--Billing Address-->
32
+ <div class="entry-edit">
33
+ <div class="entry-edit-head">
34
+ <h4 class="icon-head head-payment-method"><?php echo $this->helper('sales')->__('Payment Information') ?></h4>
35
+ </div>
36
+ <fieldset>
37
+ <div><?php echo $this->getChildHtml('order_payment') ?></div>
38
+ <div><?php echo Mage::helper('sales')->__('Order was placed using %s', $_order->getOrderCurrencyCode()) ?></div>
39
+ </fieldset>
40
+ </div>
41
+ </div>
42
+ <div class="box-right">
43
+ <!--Shipping Address-->
44
+ <div class="entry-edit">
45
+ <div class="entry-edit-head">
46
+ <h4 class="icon-head head-shipping-method"><?php echo $this->helper('sales')->__('Shipping and Tracking Information') ?></h4>
47
+ </div>
48
+ <fieldset>
49
+ <div>
50
+ <?php if($this->getShipment()->getTracksCollection()->count()): ?>
51
+ <?php if($_order->getPayment()->getMethod()=="ipay"):?>
52
+ <?php
53
+ $read = Mage::getSingleton("core/resource")->getConnection("core_read");
54
+ $query = "select * from ipay where order_id='".$_order->getIncrementId()."'";
55
+ $result = $read->query($query);
56
+ $order_info=$result->fetch();
57
+ $auctionOrderNo = explode("@",$order_info["auction_order_no"]);
58
+ ?>
59
+ <a href="#" id="linkId" onclick="popWin('http://ipay.auction.co.kr/seller/ShipmentDetail.aspx?OrderNo=<?=$auctionOrderNo[0]?>','trackorder','width=550,height=700,resizable=yes,scrollbars=yes')" title="<?php echo $this->__('Track this shipment') ?>"><?php echo $this->__('Track this shipment') ?></a>
60
+ <br/>
61
+ <?php else :?>
62
+ <a href="#" id="linkId" onclick="popWin('<?php echo $this->helper('shipping')->getTrackingPopupUrlBySalesModel($this->getShipment()) ?>','trackshipment','width=800,height=600,resizable=yes,scrollbars=yes')" title="<?php echo $this->__('Track this shipment') ?>"><?php echo $this->__('Track this shipment') ?></a>
63
+ <br/>
64
+ <?php endif?>
65
+ <?php endif; ?>
66
+ <strong><?php echo $this->escapeHtml($_order->getShippingDescription()) ?></strong>
67
+ <?php echo $this->helper('sales')->__('Total Shipping Charges'); ?>:
68
+
69
+ <?php if ($this->helper('tax')->displayShippingPriceIncludingTax()): ?>
70
+ <?php $_excl = $this->displayShippingPriceInclTax($_order); ?>
71
+ <?php else: ?>
72
+ <?php $_excl = $this->displayPriceAttribute('shipping_amount', false, ' '); ?>
73
+ <?php endif; ?>
74
+ <?php $_incl = $this->displayShippingPriceInclTax($_order); ?>
75
+
76
+ <?php echo $_excl; ?>
77
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
78
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
79
+ <?php endif; ?>
80
+ </div>
81
+ <?php if ($this->canCreateShippingLabel()): ?>
82
+ <div style="text-align: center; margin: 10px 0;">
83
+ <?php echo $this->getCreateLabelButton()?>
84
+ <?php if ($this->getShipment()->getShippingLabel()): ?>
85
+ <?php echo $this->getPrintLabelButton() ?>
86
+ <?php endif ?>
87
+ <?php if ($this->getShipment()->getPackages()): ?>
88
+ <?php echo $this->getShowPackagesButton() ?>
89
+ <?php endif ?>
90
+ </div>
91
+ <?php endif ?>
92
+ <div><?php echo $this->getChildHtml('shipment_tracking') ?></div>
93
+ </fieldset>
94
+ <?php echo $this->getChildHtml('shipment_packaging') ?>
95
+ <script type="text/javascript">
96
+ //<![CDATA[
97
+ document.observe("dom:loaded", function() {
98
+ setTimeout(function(){
99
+ packaging.setConfirmPackagingCallback(function(){
100
+ packaging.sendCreateLabelRequest();
101
+ });
102
+ packaging.setLabelCreatedCallback(function(response){
103
+ setLocation("<?php echo $this->getUrl(
104
+ '*/sales_order_shipment/view',
105
+ array('shipment_id' => $this->getShipment()->getId())
106
+ ); ?>");
107
+ });
108
+ }, 500);
109
+ });
110
+ //]]>
111
+ </script>
112
+ </div>
113
+ </div>
114
+ <div class="clear"></div>
115
+
116
+ <div class="entry-edit">
117
+ <div class="entry-edit-head">
118
+ <h4 class="icon-head head-products"><?php echo $this->helper('sales')->__('Items Shipped') ?></h4>
119
+ </div>
120
+ </div>
121
+
122
+ <?php echo $this->getChildHtml('shipment_items') ?>
123
+ <?php echo $this->getChildHtml('shipment_packed') ?>
124
+
125
+ <div class="box-left entry-edit">
126
+ <div class="entry-edit-head"><h4><?php echo $this->__('Shipment History') ?></h4></div>
127
+ <fieldset><?php echo $this->getChildHtml('order_comments') ?></fieldset>
128
+ </div>
129
+ <div class="clear"></div>
app/design/adminhtml/default/default/template/ipay/info.phtml ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package 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 default_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 /** @var $this Mage_Adminhtml_Block_Sales_Order_View_Tab_Info */ ?>
28
+ <?php $_order = $this->getOrder(); ?>
29
+
30
+ <div>
31
+ <div id="order-messages">
32
+ <?php echo $this->getChildHtml('order_messages') ?>
33
+ </div>
34
+ <?php echo $this->getChildHtml('order_info') ?>
35
+ <input type="hidden" name="order_id" value="<?php echo $_order->getId() ?>"/>
36
+ <?php if ($_order->getIsVirtual()): ?>
37
+ <div class="box-right">
38
+ <?php else: ?>
39
+ <div class="box-left">
40
+ <?php endif; ?>
41
+ <!--Payment Method-->
42
+ <div class="entry-edit">
43
+ <div class="entry-edit-head">
44
+ <h4 class="icon-head head-payment-method"><?php echo Mage::helper('sales')->__('Payment Information') ?></h4>
45
+ </div>
46
+ <fieldset>
47
+ <?php echo $this->getPaymentHtml() ?>
48
+ <div><?php echo Mage::helper('sales')->__('Order was placed using %s', $_order->getOrderCurrencyCode()) ?></div>
49
+ </fieldset>
50
+ </div>
51
+ </div>
52
+ <?php if (!$_order->getIsVirtual()): ?>
53
+ <div class="box-right">
54
+ <!--Shipping Method-->
55
+ <div class="entry-edit">
56
+ <div class="entry-edit-head">
57
+ <h4 class="icon-head head-shipping-method"><?php echo Mage::helper('sales')->__('Shipping &amp; Handling Information') ?></h4>
58
+ </div>
59
+ <fieldset>
60
+ <?php if ($_order->getTracksCollection()->count()) : ?>
61
+ <?php if($_order->getPayment()->getMethod()=="ipay"):?>
62
+ <?php
63
+ $read = Mage::getSingleton("core/resource")->getConnection("core_read");
64
+ $query = "select * from ipay where order_id='".$_order->getIncrementId()."'";
65
+ $result = $read->query($query);
66
+ $order_info=$result->fetch();
67
+ $auctionOrderNo = explode("@",$order_info["auction_order_no"]);
68
+ ?>
69
+ <a href="#" id="linkId" onclick="popWin('http://ipay.auction.co.kr/seller/ShipmentDetail.aspx?OrderNo=<?=$auctionOrderNo[0]?>','trackorder','width=550,height=700,resizable=yes,scrollbars=yes')" title="<?php echo $this->__('Track Order') ?>"><?php echo $this->__('Track Order') ?></a>
70
+ <br/>
71
+ <?php else :?>
72
+ <a href="#" id="linkId" onclick="popWin('<?php echo $this->helper('shipping')->getTrackingPopupUrlBySalesModel($_order) ?>','trackorder','width=800,height=600,resizable=yes,scrollbars=yes')" title="<?php echo $this->__('Track Order') ?>"><?php echo $this->__('Track Order') ?></a>
73
+ <br/>
74
+ <?php endif?>
75
+ <?php endif; ?>
76
+ <?php if ($_order->getShippingDescription()): ?>
77
+ <strong><?php echo $this->escapeHtml($_order->getShippingDescription()) ?></strong>
78
+
79
+ <?php if ($this->helper('tax')->displayShippingPriceIncludingTax()): ?>
80
+ <?php $_excl = $this->displayShippingPriceInclTax($_order); ?>
81
+ <?php else: ?>
82
+ <?php $_excl = $this->displayPriceAttribute('shipping_amount', false, ' '); ?>
83
+ <?php endif; ?>
84
+ <?php $_incl = $this->displayShippingPriceInclTax($_order); ?>
85
+
86
+ <?php echo $_excl; ?>
87
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
88
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
89
+ <?php endif; ?>
90
+ <?php else: ?>
91
+ <?php echo $this->helper('sales')->__('No shipping information available'); ?>
92
+ <?php endif; ?>
93
+ </fieldset>
94
+ </div>
95
+ </div>
96
+ <?php endif; ?>
97
+ <div class="clear"></div>
98
+ <?php echo $this->getGiftOptionsHtml() ?>
99
+ <div class="clear"></div>
100
+ <div class="entry-edit">
101
+ <div class="entry-edit-head">
102
+ <h4 class="icon-head head-products"><?php echo Mage::helper('sales')->__('Items Ordered') ?></h4>
103
+ </div>
104
+ </div>
105
+ <?php echo $this->getItemsHtml() ?>
106
+ <div class="clear"></div>
107
+
108
+ <div class="box-left">
109
+ <div class="entry-edit">
110
+ <div class="entry-edit-head">
111
+ <h4><?php echo Mage::helper('sales')->__('Comments History') ?></h4>
112
+ </div>
113
+ <fieldset><?php echo $this->getChildHtml('order_history') ?></fieldset>
114
+ </div>
115
+ </div>
116
+ <div class="box-right entry-edit">
117
+ <div class="entry-edit-head"><h4><?php echo Mage::helper('sales')->__('Order Totals') ?></h4></div>
118
+ <div class="order-totals"><?php echo $this->getChildHtml('order_totals') ?></div>
119
+ </div>
120
+ <div class="clear"></div>
121
+ </div>
122
+
123
+ <?php echo $this->getChildHtml('popup_window');?>
124
+ <script type="text/javascript">
125
+ //<![CDATA[
126
+ /**
127
+ * Retrieve gift options tooltip content
128
+ */
129
+ function getGiftOptionsTooltipContent(itemId) {
130
+ var contentLines = [];
131
+ var headerLine = null;
132
+ var contentLine = null;
133
+
134
+ $$('#gift_options_data_' + itemId + ' .gift-options-tooltip-content').each(function (element) {
135
+ if (element.down(0)) {
136
+ headerLine = element.down(0).innerHTML;
137
+ contentLine = element.down(0).next().innerHTML;
138
+ if (contentLine.length > 30) {
139
+ contentLine = contentLine.slice(0,30) + '...';
140
+ }
141
+ contentLines.push(headerLine + ' ' + contentLine);
142
+ }
143
+ });
144
+ return contentLines.join('<br/>');
145
+ }
146
+ giftOptionsTooltip.setTooltipContentLoaderFunction(getGiftOptionsTooltipContent);
147
+ //]]>
148
+ </script>
app/design/adminhtml/default/default/template/ipay/items.phtml ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package 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 default_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="grid np">
29
+ <div class="hor-scroll">
30
+ <table cellspacing="0" class="data order-tables">
31
+ <col />
32
+ <col width="1" />
33
+ <col width="1" />
34
+ <?php if (!$this->canShipPartiallyItem()): ?>
35
+ <col width="20" />
36
+ <?php endif; ?>
37
+ <thead>
38
+ <tr class="headings">
39
+ <th><?php echo $this->helper('sales')->__('Product') ?></th>
40
+ <th class="a-center"><?php echo $this->helper('sales')->__('Qty') ?></th>
41
+ <th<?php if ($this->isShipmentRegular()): ?> class="last"<?php endif; ?>><span class="nobr"><?php echo $this->helper('sales')->__('Qt to Ship') ?></span></th>
42
+
43
+ <?php if (!$this->canShipPartiallyItem()): ?>
44
+ <th class="a-center last"><span class="nobr"><?php echo $this->helper('sales')->__('Ship') ?></span></th>
45
+ <?php endif; ?>
46
+
47
+ </tr>
48
+ </thead>
49
+ <?php $_items = $this->getShipment()->getAllItems() ?>
50
+ <?php $_i=0;foreach ($_items as $_item): if ($_item->getOrderItem()->getIsVirtual() || $_item->getOrderItem()->getParentItem()): continue; endif; $_i++ ?>
51
+ <tbody class="<?php echo $_i%2?'odd':'even' ?>">
52
+ <?php echo $this->getItemHtml($_item) ?>
53
+ <?php echo $this->getItemExtraInfoHtml($_item->getOrderItem()) ?>
54
+ </tbody>
55
+ <?php endforeach; ?>
56
+ </table>
57
+ </div>
58
+ </div>
59
+ <br />
60
+ <div class="box-left entry-edit">
61
+ <div class="entry-edit-head"><h4><?php echo $this->__('Shipment Comments') ?></h4></div>
62
+ <fieldset>
63
+ <div id="order-history_form">
64
+ <span class="field-row">
65
+ <label class="normal" for="shipment_comment_text"><?php echo Mage::helper('sales')->__('Shipment Comments') ?></label>
66
+ <textarea id="shipment_comment_text" name="shipment[comment_text]" rows="3" cols="5" style="height:6em; width:99%;"><?php echo $this->getShipment()->getCommentText(); ?></textarea>
67
+ </span>
68
+ <div class="clear"></div>
69
+ </div>
70
+ </fieldset>
71
+ </div>
72
+
73
+ <div class="box-right entry-edit">
74
+ <div class="order-totals">
75
+ <div class="order-totals-bottom">
76
+ <?php if ($this->canCreateShippingLabel()): ?>
77
+ <p>
78
+ <label class="normal" for="create_shipping_label"><?php echo Mage::helper('sales')->__('Create Shipping Label') ?></label>
79
+ <input id="create_shipping_label" name="shipment[create_shipping_label]" value="1" type="checkbox" onclick="toggleCreateLabelCheckbox();" />
80
+ </p>
81
+ <?php endif ?>
82
+ <p>
83
+ <label class="normal" for="notify_customer"><?php echo Mage::helper('sales')->__('Append Comments') ?></label>
84
+ <input id="notify_customer" name="shipment[comment_customer_notify]" value="1" type="checkbox" />
85
+ </p>
86
+ <?php if ($this->canSendShipmentEmail()): ?>
87
+ <p>
88
+ <label class="normal" for="send_email"><?php echo Mage::helper('sales')->__('Email Copy of Shipment') ?></label>
89
+ <input id="send_email" name="shipment[send_email]" value="1" type="checkbox" />
90
+ </p>
91
+ <?php endif; ?>
92
+ <div class="a-right">
93
+ <?php echo $this->getChildHtml('submit_button') ?>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ </div>
98
+ <div class="clear"></div>
99
+ <script type="text/javascript">
100
+ //<![CDATA[
101
+ var sendEmailCheckbox = $('send_email');
102
+ if (sendEmailCheckbox) {
103
+ var notifyCustomerCheckbox = $('notify_customer');
104
+ var shipmentCommentText = $('shipment_comment_text');
105
+ Event.observe(sendEmailCheckbox, 'change', bindSendEmail);
106
+ bindSendEmail();
107
+ }
108
+ function bindSendEmail()
109
+ {
110
+ if (sendEmailCheckbox.checked == true) {
111
+ notifyCustomerCheckbox.disabled = false;
112
+ //shipmentCommentText.disabled = false;
113
+ }
114
+ else {
115
+ notifyCustomerCheckbox.disabled = true;
116
+ //shipmentCommentText.disabled = true;
117
+ }
118
+ }
119
+ function toggleCreateLabelCheckbox(){
120
+ var checkbox = $('create_shipping_label');
121
+ var submitButton = checkbox.up('.order-totals').select('.submit-button span')[0];
122
+ if (checkbox.checked) {
123
+ submitButton.innerText += '...';
124
+ } else {
125
+ submitButton.innerText = submitButton.innerText.replace(/\.\.\.$/, '');
126
+ }
127
+ }
128
+ function submitShipment(btn){
129
+ var checkbox = $(btn).up('.order-totals').select('#create_shipping_label')[0];
130
+
131
+ var carrierCode = $('trackingC1').value;
132
+ var carrierTitle = $('trackingT1').value;
133
+ var trackingNumber = $('trackingN1').value;
134
+ if(chk(trackingNumber,carrierCode)){
135
+ if (checkbox && checkbox.checked) {
136
+ packaging.showWindow();
137
+ } else if(editForm.submit()) {
138
+ disableElements('submit-button');
139
+ }
140
+ }else {
141
+ alert("invalid tracking number");
142
+ }
143
+ }
144
+
145
+ function chk(invoiceNo,company)
146
+ {
147
+ var digit=1;
148
+ if(company=="cjgls"){
149
+ if(invoiceNo.length==12)
150
+ digit=3;
151
+ else if(invoiceNo.length==11)
152
+ digit=4;
153
+ }
154
+
155
+ var hanjin = [true,10,12];
156
+ var cjgls = [true,10,11,12];
157
+ var kyungdong = [false,8,9,10,11,12,13,14,15,16];
158
+ var korex = [false,10];
159
+ var dongbu = [true,12];
160
+ var innogis = [false,10,11,12,13];
161
+ var hanaro = [true,10];
162
+ var hyundai = [true,10,12];
163
+ var yellow = [true,11];
164
+ var kgb = [true,11];
165
+ var epost = [false,13];
166
+ var etc = [10];
167
+ eval("var companyLength ="+ company);
168
+
169
+ if(!companyLength)
170
+ return true;
171
+
172
+ if(!array_search(invoiceNo.length,companyLength)){
173
+ return false;
174
+ }
175
+
176
+ if(companyLength[0]){
177
+ lastNum = invoiceNo.substring(invoiceNo.length-1);
178
+ firstNum = invoiceNo.substring(0+(digit-1),invoiceNo.length-1);
179
+ if(firstNum%7 == lastNum){
180
+ return true;
181
+ }else
182
+ return false;
183
+ }else{
184
+ if(company=="epost" ){
185
+ fnum = invoiceNo.substring(0,1);
186
+ keyArr = [6,7,8];
187
+ if(!array_search(fnum,keyArr)){
188
+ return false;
189
+ }
190
+ }
191
+ }
192
+ }
193
+
194
+ function array_search(str, arr){
195
+ for( var key in arr ){
196
+ if( arr[key] == str ) break;
197
+ key = false;
198
+ }
199
+ return false || key;
200
+ }
201
+
202
+ //]]>
203
+ </script>
app/design/frontend/base/default/template/ipay/available.phtml ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
72
+ hk/LIHF//PK0s+sRik/yVtphQgCRdHx0goSkMg4=
app/design/frontend/base/default/template/ipay/billing.phtml ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
157
+ hLZiLw2ZmzGhk9c3tEe+jgPsy74=
app/design/frontend/base/default/template/ipay/button.phtml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ HR+cPmFppTpqM3OJ+KPO/piANAEU1nzgW9p8IjrXP3hv4aNMpWVrByINp0JwerkINdwxHrDvajOa
5
+ lXIiHj9ToE+ZXfs0vGcnjIAJsb3l+xkThas/ifZoLR+KBAyxJM/XNrGLDmiGJat6fcaW7xe0rhLP
6
+ CoErHpTJADRgq4HRZUvFR8ViGfYAhIHJ/Nd40+fdmvebEexIn9cfm88tnvVBb50LYbFWDN8SVZWg
7
+ pfDNUN/NfLJBbiyzG1y/PGNNRhxSjTHeaeTrfaNa1gHOJlTS3e0EZzvVZAJpxBq8/ezyuUHSSF4D
8
+ nMmD2vXYIh489Ie7KonLBl3x8BT7wJywwYiBncCLtd9F/DbpjQj0XswdbOxjl0JBHy8YKdOWsl/M
9
+ d9EISz8+4qlcczWTUxLeZkDn+4NKlu524xJCPTtn0SG5n/6sEnKUZ/2Vv+O9YDgmjOnl/Hna6eME
10
+ AiZSQ/8s6TK9SvYGlpijz8PqsF090+Si57ZZvf8UY8bwSTCKJxh5MEGIuAYKYLNjUiVZQdaVRzMs
11
+ NmYtfmFf1VqSovhHyM9C6d6jMsVLZPk++i9WGnRQve75O+dR4QX7lWhK24TCHwfWIOit/9JTlP7G
12
+ DXRTzQyFPo6GxS6/Fu8mJoemp1sHMcR4zxpKA7qduRbaEX8W5q07yANFe4Gc/rDx7aOI8tTpc1VI
13
+ iV3a8bxoAhwKQpQY252pE1FlH6FZrGrSJCp2qkN4Q3vFc5XVbpM67ZkPV/N2CMyuNl27EPXNnLa9
14
+ g27G96WVCvxBkT6duzPvJqqQko7zIlDgxRFdSEhE/0p9oJGpXYVjPAc2OsZSa13XxMRDhY9jK9HG
15
+ 9THErL2EVKumkjo5pR/RMwK6lDrN5DiJkTf25qUB5+ewIiIoXdiO1cFbtG8+JI73+2/SEAHSgYBr
16
+ uvT7rXaVGTBZOPI5YoEznjCMxkkr6BTyuVml0m+Ie1rwQ/lc/qMYxkuNgMQBD/Ae0cNowvPkBASk
17
+ WNz40q+JYG06G8sxlHZ/C3B/G0zi747YqAo+Bm9u2hDxW0rJeO0qzrpM7kvJJsA5AzNXzIFRFeQF
18
+ Ml2paqei26eu3sdMjDvdjWpFQ4otha/z2JSiSYRyhyGcrAjev8qvNcVb8IFK75qjh8wZIVmj9ati
19
+ DKMU9dB62nFOaP63a/STZwyltrh1PqMnh5ee/Ske3ItcG8th+zSVCqp6nC2OgKaAoBRbjdlEsIFm
20
+ AqLBSEPVVO4gHaj0bvVC1DHrJqBHKjtPe+3o3IoaapJlAyPD/PIqlt0pEECYXPcsDpKArvkUiBc2
21
+ +ftrmDbPM6R3x0+dFWV34INHJDrLEHJ7mlyJSV9d849pz2l2K1DA/snhKOeaNIpREdE9hTIBzg9n
22
+ IU0rBlV6iMi2J5hEzc+vq0amUT9+I36U/qcFkU+LFsAg7PrNNMZm/ofHbwGOeAUgrMVjANi+gBOn
23
+ xDDAxYGqXZzGiQUBnkI/D7V4HKmFI944s4xSvQPItmhtuyK4yaD3g/6+ApAcpz8iZqIyHFHDA76w
24
+ UQ3hXkGCe0RkAmiT6qF3HR/bfBTEsHRIdYr+HwxSri5R
app/design/frontend/base/default/template/ipay/cart.phtml ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
242
+ qOp6KAFgesmh
app/design/frontend/base/default/template/ipay/cart.phtml_ ADDED
Binary file
app/design/frontend/base/default/template/ipay/cart.phtml_today ADDED
@@ -0,0 +1,407 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package 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) 2011 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
+
29
+ <?php
30
+ class auctionSession
31
+ {
32
+ private $serverUrl;
33
+ private $soapAuction;
34
+
35
+ public function __construct($serverUrl, $soapAuction)
36
+ {
37
+ $this->serverUrl = $serverUrl;
38
+ $this->soapAuction = $soapAuction;
39
+ }
40
+
41
+ /** sendHttpRequest
42
+ Sends a HTTP request to the server for this session
43
+ Input: $requestBody
44
+ Output: The HTTP Response as a String
45
+ */
46
+ public function sendHttpRequest($requestBody)
47
+ {
48
+ //build auction headers using variables passed via constructor
49
+ $headers = $this->buildAuctionHeaders(strlen($requestBody));
50
+
51
+ //initialise a CURL session
52
+ $connection = curl_init();
53
+
54
+
55
+ //set the server we are using (could be Sandbox or Production server)
56
+ curl_setopt($connection, CURLOPT_URL, $this->serverUrl);
57
+
58
+ //stop CURL from verifying the peer's certificate
59
+ curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 0);
60
+ curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 0);
61
+
62
+ //set the headers using the array of headers
63
+ curl_setopt($connection, CURLOPT_HTTPHEADER, $headers);
64
+
65
+ //set method as POST
66
+ curl_setopt($connection, CURLOPT_POST, 1);
67
+
68
+ //set the XML body of the request
69
+ curl_setopt($connection, CURLOPT_POSTFIELDS, $requestBody);
70
+
71
+ //set it to return the transfer as a string from curl_exec
72
+ curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1);
73
+
74
+ //Send the Request
75
+ $response = curl_exec($connection);
76
+
77
+ //close the connection
78
+ curl_close($connection);
79
+
80
+ //return the response
81
+ return $response;
82
+ }
83
+
84
+ private function buildAuctionHeaders($requestBodyLength)
85
+ {
86
+ $headers = array (
87
+ "Content-Type: text/xml; charset=utf-8",
88
+ "Content-Length: $requestBodyLength",
89
+ "SOAPAction: $this->soapAuction"
90
+ );
91
+
92
+ return $headers;
93
+ }
94
+ }
95
+ ?>
96
+ <?php
97
+
98
+ /*
99
+ * requestCartNo
100
+ * 상품정보를 전달하고 발급된 카트번호를 요청합니다.
101
+ * http://www.auction.co.kr/IpayService/Ipay/InsertIpayOrder
102
+ * 서비스 문의시에 Request SOAP과 Response SOAP을 보내주시면 됩니다.
103
+ * 옥션 API 개발자 커뮤니티 : http://api.auction.co.kr/developer
104
+ */
105
+ class requestCartNo
106
+ {
107
+ private $serverUrl = "https://api.auction.co.kr/ArcheSystem/IpayService.asmx"; //실제 운영 서버 주소
108
+ private $action = "http://www.auction.co.kr/IpayService/Ipay/InsertIpayOrder";
109
+ private $ticket;
110
+
111
+
112
+ public function __construct($ticket){
113
+ $this->ticket = $ticket;
114
+ }
115
+
116
+
117
+ /*** 서비스를 실행(호출)한다.*/
118
+ public function doService($orderQuery){
119
+
120
+ // Set Request SOAP Message
121
+ $requestXmlBody = '<?xml version="1.0" encoding="utf-8"?> ';
122
+ $requestXmlBody .= '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> ';
123
+ $requestXmlBody .= ' <soap:Header> ';
124
+ $requestXmlBody .= ' <EncryptedTicket xmlns="http://www.auction.co.kr/Security"> ';
125
+ $requestXmlBody .= ' <Value>' . $this->ticket . '</Value> ';
126
+ $requestXmlBody .= ' </EncryptedTicket> ';
127
+ $requestXmlBody .= ' </soap:Header> ';
128
+ $requestXmlBody .= ' <soap:Body> ';
129
+ $requestXmlBody .= ' <InsertIpayOrder xmlns="http://www.auction.co.kr/IpayService/Ipay">';
130
+ $requestXmlBody .= $orderQuery;
131
+ $requestXmlBody .= '</InsertIpayOrder> ';
132
+ $requestXmlBody .= '</soap:Body> ';
133
+ $requestXmlBody .= '</soap:Envelope> ';
134
+
135
+ //echo $requestXmlBody;
136
+
137
+
138
+ $requestXmlBody = str_replace("&", "&amp;", $requestXmlBody);
139
+
140
+
141
+ // Load the XML Document to Print Request SOAP
142
+ $requestDoc = new DomDocument();
143
+ $requestDoc->loadXML($requestXmlBody);
144
+
145
+ // Print Request SOAP
146
+ //echo "<PRE>";
147
+ //echo "<STRONG>* REQUEST SOAP</STRONG><BR>";
148
+ //echo htmlentities ($requestDoc->saveXML());
149
+ //echo "</PRE>";
150
+
151
+
152
+ //Create a new auction session with all details pulled in from included auctionSession.php
153
+ $session = new auctionSession($this->serverUrl, $this->action);
154
+
155
+
156
+ //send the request and get response
157
+ $responseXml = $session->sendHttpRequest($requestXmlBody);
158
+
159
+ // Process Response
160
+ return $this->processResponse ($responseXml);
161
+ }
162
+
163
+ /**
164
+ * Request SOAP Message를 서버에 요청하고 받아온 Response SOAP Message를 가지고 처리한다.
165
+ * $responseXml : Response SOAP Message
166
+ */
167
+ private function processResponse($responseXml){
168
+
169
+ if(stristr($responseXml, 'HTTP 404') || $responseXml == '') {
170
+ die('<P>$responseXml Error sending request');
171
+ } else {
172
+ //Xml string is parsed and creates a DOM Document object
173
+ $responseDoc = new DomDocument();
174
+ $responseDoc->loadXML($responseXml);
175
+
176
+
177
+
178
+ // Print Response SOAP
179
+ //echo "<PRE>";
180
+ //echo "<STRONG>* RESPONSE SOAP</STRONG><BR>";
181
+ //echo "<BR>".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($responseDoc->saveXML(), ENT_NOQUOTES, "UTF-8")) );
182
+ //echo "</PRE>";
183
+
184
+
185
+ // Error
186
+ $eleFaultcode = $responseDoc->getElementsByTagName('faultcode')->item(0);
187
+ $eleFaultstring = $responseDoc->getElementsByTagName('faultstring')->item(0);
188
+ $eleResult = $responseDoc->getElementsByTagName('InsertIpayOrderResult')->item(0);
189
+
190
+ if ((empty($eleFaultcode)) && (!empty($eleResult)))
191
+ {
192
+ return $eleResult->firstChild->nodeValue;
193
+ }
194
+ else{
195
+ $this->processError($eleFaultcode, $eleFaultstring);
196
+ }
197
+ }
198
+ return "";
199
+ }
200
+
201
+
202
+ /**
203
+ * 에러 처리를 한다.
204
+ * $eleFaultcode : 오류 코드 메시지
205
+ * $eleFaultstring : 오류 메시지
206
+ */
207
+ private function processError($eleFaultcode, $eleFaultstring){
208
+ if ($eleFaultcode != null) echo "faultcode : ".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($eleFaultcode->nodeValue, ENT_NOQUOTES, "UTF-8")))."<BR>";
209
+ if ($eleFaultstring != null) echo "faultstring : ".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($eleFaultstring->nodeValue, ENT_NOQUOTES, "UTF-8")))."<BR>";
210
+ }
211
+ }
212
+ ?>
213
+
214
+
215
+
216
+ <?php
217
+ /**
218
+ * Shopping cart template
219
+ *
220
+ * @see Mage_Checkout_Block_Cart
221
+ */
222
+ ?>
223
+
224
+
225
+
226
+
227
+ <div class="cart">
228
+ <div class="page-title title-buttons">
229
+ <?php if(!$this->hasError()): ?>
230
+ <ul class="checkout-types">
231
+ <?php foreach ($this->getMethods('top_methods') as $method): ?>
232
+ <?php if ($methodHtml = $this->getMethodHtml($method)): ?>
233
+ <li><?php echo $methodHtml; ?></li>
234
+ <?php endif; ?>
235
+ <?php endforeach; ?>
236
+ </ul>
237
+ <?php endif; ?>
238
+ </div>
239
+ <?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
240
+ <?php echo $this->getChildHtml('form_before') ?>
241
+ <form action="<?php echo $this->getUrl('checkout/cart/updatePost') ?>" method="post">
242
+ <fieldset>
243
+ <table id="shopping-cart-table" class="data-table cart-table">
244
+ <col width="1" />
245
+ <col />
246
+ <col width="1" />
247
+ <?php if ($this->helper('wishlist')->isAllowInCart()) : ?>
248
+ <col width="1" />
249
+ <?php endif ?>
250
+ <?php if ($this->helper('tax')->displayCartPriceExclTax() || $this->helper('tax')->displayCartBothPrices()): ?>
251
+ <col width="1" />
252
+ <?php endif; ?>
253
+ <?php if ($this->helper('tax')->displayCartPriceInclTax() || $this->helper('tax')->displayCartBothPrices()): ?>
254
+ <col width="1" />
255
+ <?php endif; ?>
256
+ <col width="1" />
257
+ <?php if ($this->helper('tax')->displayCartPriceExclTax() || $this->helper('tax')->displayCartBothPrices()): ?>
258
+ <col width="1" />
259
+ <?php endif; ?>
260
+ <?php if ($this->helper('tax')->displayCartPriceInclTax() || $this->helper('tax')->displayCartBothPrices()): ?>
261
+ <col width="1" />
262
+ <?php endif; ?>
263
+ <col width="1" />
264
+
265
+ <?php $mergedCells = ($this->helper('tax')->displayCartBothPrices() ? 2 : 1); ?>
266
+ <thead>
267
+ <?php if ($this->helper('tax')->displayCartBothPrices()): ?>
268
+ <tr>
269
+ <th class="a-right"><?php echo $this->helper('tax')->getIncExcTaxLabel(false) ?></th>
270
+ <th><?php echo $this->helper('tax')->getIncExcTaxLabel(true) ?></th>
271
+ <th class="a-right"><?php echo $this->helper('tax')->getIncExcTaxLabel(false) ?></th>
272
+ <th><?php echo $this->helper('tax')->getIncExcTaxLabel(true) ?></th>
273
+ </tr>
274
+ <?php endif; ?>
275
+ </thead>
276
+ <tbody>
277
+
278
+
279
+
280
+ <?
281
+
282
+ $itemsQuery = "<ITEMS>";
283
+
284
+
285
+ /*
286
+ ' 상품셋팅정보 작성
287
+ */
288
+ /*
289
+ $ticket = API 인증티켓;
290
+ $price = 상품가격;
291
+ $sellerid = 이용자 아이디
292
+ */
293
+
294
+ $quote = Mage::getSingleton('checkout/cart')->getQuote();
295
+ $address = $quote->getAddress();
296
+ $method = Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingMethod();
297
+ $shipfee = Ceil(Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingAmount());
298
+ $title=Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingMethod();
299
+
300
+ if($title=="ipay_ipay")
301
+ $shiptype=2;
302
+ else if($title=="freeshipping_freeshipping")
303
+ $shiptype=1;
304
+ else
305
+ $shiptype=3;
306
+
307
+ echo "aaaa".$title;
308
+
309
+ //$shipfee = Mage::getStoreConfig("carriers/ipay/handling_fee");
310
+ $shiptype = Mage::getStoreConfig("payment/ipay/shiptype");
311
+ $paymethod = Mage::getStoreConfig("payment/ipay/ipay_payment_method");
312
+ $ticket = Mage::getStoreConfig("payment/ipay/certification");
313
+ $sellerid = Mage::getStoreConfig("payment/ipay/auctionid");
314
+
315
+ if($ticket != "" && $sellerid !="" ){
316
+ if($shiptype==1 || $shiptype==2)
317
+ $shipfee=0;
318
+
319
+ $price=0;
320
+
321
+ foreach($this->getItems() as $_item){
322
+ $optionValue="";
323
+ $this->getItemHtml($_item);
324
+ $renderer = $this->getItemRenderer($_item->getProductType());
325
+ if ($_options = $renderer->getOptionList()){
326
+ foreach ($_options as $_option){
327
+ $_formatedOptionValue = $renderer->getFormatedOptionValue($_option);
328
+ $optionValue .= $renderer->htmlEscape($_option['label']);
329
+ $optionValue .= "(".$_formatedOptionValue['value'].")";
330
+
331
+ if (isset($_formatedOptionValue['full_view'])){
332
+ $optionValue .= $_option['label'] ;
333
+ $optionValue .= $_formatedOptionValue['full_view'];
334
+ }
335
+ }
336
+ }
337
+
338
+ $sum += (int)$_item->getCalculationPrice()*$_item->getQty();
339
+
340
+ //$price = Mage::getModel('directory/currency')->formatTxt($sum,array('display' => Zend_Currency::NO_SYMBOL));
341
+ //$item_price = (int)Mage::getModel('directory/currency')->formatTxt($_item->getCalculationPrice(),array('display' => Zend_Currency::NO_SYMBOL));
342
+ $price = (int)$sum;
343
+ $item_price = (int)$_item->getCalculationPrice();
344
+
345
+
346
+
347
+ $itemName = str_replace("'","",$_item->getProduct()->getName());
348
+ $itemName = str_replace("\"","",$_item->getProduct()->getName());
349
+ $itemName = $_item->getProduct()->getName();
350
+ $itemsQuery = $itemsQuery
351
+ . "<IpayServiceItems item_name=" . "\""."AAA"."\""
352
+ . " ipay_itemno=" . "'".$_item->getProduct()->getId()."'"
353
+ . " item_option_name=" . "'222'"
354
+ . " item_price='" . str_replace(",","",$item_price) . "'"
355
+ . " order_qty='". $_item->getQty() ."'"
356
+ . " item_url=" . "'".Mage::getStoreConfig("web/unsecure/base_url")."'"
357
+ . " partner_code='ESELLERS'"
358
+ . " thumbnail_url=" . "'".Mage::getBaseUrl('media')."catalog/product".Mage::getModel('catalog/product')->load($_item->getProductId())->getThumbnail()."'" . "/> ";
359
+ }
360
+ echo $itemQuery;
361
+ }else{
362
+ echo "<script>alert('There is no certified key or auction id');window.close()</script>";
363
+ }
364
+ ?>
365
+ </tbody>
366
+ </table>
367
+ <script type="text/javascript">decorateTable('shopping-cart-table')</script>
368
+ </fieldset>
369
+ </form>
370
+
371
+ </div>
372
+
373
+
374
+
375
+ <?php
376
+
377
+ $price = str_replace(",","",$price) + $shipfee;
378
+
379
+ /* 상품정보 xml 셋팅 */
380
+ $orderQuery = "<ORDER payment_rule='$paymethod' pay_price='$price' shipping_price='$shipfee' shipping_type='3' back_url='www.url.co.kr' service_url='www.url.com/receiveXml.asp' redirect_url='".Mage::getStoreConfig("web/unsecure/base_url")."index.php/ipay/payment/review' move_to_redirect_url='true'/>";
381
+
382
+ $orderQuery = $orderQuery . $itemsQuery . "</ITEMS>";
383
+
384
+ $requestCartNo = new requestCartNo ($ticket);
385
+
386
+ //echo "resultCode:".$requestCartNo."<BR>";
387
+ $requestResult = $requestCartNo->doService($orderQuery); // 서비스를 호출하고 새 카트번호를 가져온다
388
+
389
+ ?>
390
+ <html>
391
+ <body>
392
+ <form name="frm" method="get" action="https://ssl.auction.co.kr/ipay/IpayStdOrder.aspx">
393
+ <input type="hidden" name="cartnos" value="<?php echo $requestResult ?>">
394
+ <input type="hidden" name="sellerid" value="<?php echo $sellerid ?>">
395
+ <input type="hidden" name="price" value="<?php echo $price ?>">
396
+ <p align=center>
397
+ <img name=:myImg" src="loading.gif" style="border=0"/><br />
398
+
399
+ <b>Please Wait a Minute...</b>
400
+ </p>
401
+ </form>
402
+ <br /><br /><br /><br />
403
+ </body>
404
+ <script>
405
+ document.frm.submit();
406
+ </script>
407
+ </html>
app/design/frontend/base/default/template/ipay/footer.phtml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ HR+cPtKkWcGBz7PBgfeNHzLn9YmfI5L+K0OPDEwEy0qwxYxTRvln+FGOfzfJWf4Gl0Y0qg1QvLmm
5
+ kK7PUeBAwlRRFgFxPgytGA5Z8w7krlgGS54vvUwM8AbMJRsy/bPTAkT0NAIU6kYIDAqFIXrsEQ9i
6
+ 6XsLjcCvbuEyWhUr0IAtYtCYRiA/AExjpZR2HMdXQWqTcQ+DtSGiBRE/NTbMrKiLhUvmzq9JCoHj
7
+ Y+iYxQyLlLkJGy+87s9hqRi9/1WJSZKBuJzS+GcsD3wN0EXp3hiEZzvVZAJpxBq8/ezyuUJPRS7l
8
+ Nz6ysX/zNzW8NUu6MIpxoSdCO8YwwS0pL/Rj0VK8GDKoVg6hVDp+FvHN/HfDSQJOdI2ufcDw9OHc
9
+ Lvd7J1PTImb0rXDI5qOX+ltC7pW7hd2ANPqzZ50/krm79mNwbjCCZpd5JsZOvu+QpK+1Ar79ySkM
10
+ 7b+HmrMwBOzwQC7L1YZe68XA4rN+yYQ7qW27QB3+4VB+Fwfm+XC98euk1LxpaRMjE0tUXIn75eK9
11
+ rNEPBcX7FYEwqjOIdgyMlHtANbrQzTlelYOL5UDxkMKrL5bg6JQIdxdrN2AGZ/3gmMm0bdl+6fB6
12
+ sYN5qbeFmfVsGxG9dcR/EL8bTpdJh7zrQwj8AN+xjFqCaKHfS/4Q12yjogkNUn0H/mLklo9all0P
13
+ 4wPeKbdzMdmQNm2o5lFZg6/Irez1AtCsg7hRsT2rTIqpHcyYeKbThR8RsXeNJiGpswlRI8JY/cQj
14
+ 44M7Upvu9ePE5ZGGp0QIAzyZORo+Kk6X9s22fJ6+SVcpvU3sev1OBv7682xdgW8mb4W8nh1y0oyb
15
+ AIRl+TOzQFs8FZ5JGpI9DcLMMXyziuyK15isUVpkZFhVQoB3eBP+MsKUW1tyI2eD/VRKEx5dcNfx
16
+ QvW5twdxT5d5I0GaDJd2mAw5IO//k0sj3b5Cs8KdPP6CklbdUQb4EjJtYjzzSBwiDlFf1P+71RQH
17
+ 009ImWD/xfG1N9MhwENcvywIS2Xp0DEej/oioRa9NiL0SrLPWS1CABaDlaQXK5h4CBJCyNSgHJKS
18
+ SUgDKd/UzV3Kyt8b24Rx3y3qh0BxvRbzkbhaNTFCxAG2wcFUpPFANT/oenrW+r+hO+n33wOXBdMx
19
+ P37w6LSJhZTV5561jPEkqXeSEYapRRd+DndP
app/design/frontend/base/default/template/ipay/info.phtml ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
app/design/frontend/base/default/template/ipay/ipay.phtml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ HR+cPrjWi0T8jmWeRTib94vTDiU/9bI1domp9SXmMEpnQiaJsSSC4KBT61cTtzX1ZNh7footvjyP
5
+ 1V9oenq+VSEaujafQNwCCtnNS1qLcaU9ItJpmJGxXikMIOfibpd5wY7V85I0Ih8Vi4wP9wLv0Qz+
6
+ 7ToNM22qURkHFfMRp4scsNm1Y644garBnX5PjCb09+CCK+2QIlJOXbW41IIt3lTWanmfrN3jgUKO
7
+ nVfHD9kwVwrj9kCcQefuN6B2Eix4A6rHYrNgzBAbHTh6Xb+43eeEZzvVZAJpxBq8/ezyuUGDQ/ac
8
+ fv8Dw6LzFSy8fUm6NFz4tQAhmX+XsH9RR6vwPeeSn70H15zjYQ9QscQX6s++FcxAtxenBUbTKe14
9
+ Qec5wrHOIzRmAt/MK2ibvi/VJPGwPzNgVYQJPtqapUmEk2K4J1kEsTH4nKMKHy3dMXaunyxYPK4U
10
+ nyipK0cins9lTCWorSEP1hq3W4j/GhRasjOPNJACrcURVSP6xfCLiOjzLHnXq6bIdYDMdyL153Cs
11
+ HmnyhcKeRTBYW7MnOih3mmN8IvZk+SJHAQNjsLblvJvMUyYmRyHk8pxrJbJosQDDm42vlAG5zXwv
12
+ me+hLa5tMBXsW2/bVx40lEwN42khWftisj1b/U6QfgQkM/aurdtjDkba7F72C6MYA8birRm6v+6P
13
+ 82zgq/4b8oyrbPEkZ3Q4+15/so4r5sDpLGujx3Y7PbPbi7ZRUTop0WeQYyrqcoTWVjQ7krZLWYl+
14
+ 7eOU46wMwbBKQaBoU6WSnIjJJrjPxJOUOOacFj4/ZE8DKPoSdvQbaK0rCBS/P19TLdS+NS8VlIAn
15
+ 4fGau3tybDYiPyJTUk26ev6xTp7w8oUIRAO1EwXa5v6616Bwe4TnkGw2C2liIl3caOT+0taqRtkN
16
+ Dsa4xv62KqQSUG7RqXMGVbX7yo4Dx/qbQSuM9Z9usvIugGqFAq8C3Bqsp/xRWENdzPc8FpHU/Bhp
17
+ hw8/VpupInjIJ8J59E1uNPiYgIvQ9/V6zYF9lDyixEefazv3DxE8ykJq01lJFMg7pB1FBo5DQZjv
18
+ DvzvXxf9Frmt1ayfPaXKunfE5R4Z1Y1bjgkEZ3NsV4dly+as34F0GyMucj/+p2HQKKpONyQJlzGh
19
+ Gky=
app/design/frontend/base/default/template/ipay/ipayInfo.phtml ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
63
+ /lrasXciXmj5jBMb6+Kc1HwWN7ObgkZj5ga=
app/design/frontend/base/default/template/ipay/ipayInfo_.phtml ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
61
+ LTZBqm==
app/design/frontend/base/default/template/ipay/ipayservice.phtml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ HR+cPyXvY3k0td3/gYN37HWnbyyoziacHEDIjUYnvTTQtsjuYKnZ+40BL8W1iLErWcc5vfH+H5tA
5
+ bUKGeVhdEFjhkX4SwScK869ixv3/pZRbtpN6YRGo5TThSVRKNJwHoWV4V0cd0E39Ow5vHfm1gsVX
6
+ dj/6egHlDQ0pL9WU1GY+Vp9LiY6K5rFpBp+WndIXq5eG9l/y3WDrvlmONQF3nCnb1pSgQlzWxdc3
7
+ AxnYQnXPVnoqqb9E1ghOX0xcnVVQlBEMWOSh8JGlz72rVCCEW0wFtb+CfFFilGZ+ZtpXv9fnMGmS
8
+ +rvkG1aQH0YDgWSO4/9S97xS77Tp4udxvgNdeOYrw5EO27oNe3ddy82z9VddGJdBteHcx/921uu8
9
+ zUEQ6mp5J3ysLPvFt572rka2lLD4pMF9rXU4L7OYrEMZsNiEy/N3754Dl8aRjWa5T6eXr0hZm9Oi
10
+ L4mzjwWLcPs1iG6o1iT6V0R8TIxA8FF67paH4G6+8q/7taJPazWNlZkf1FklRyj49CSjqBRDEOxf
11
+ zOJzw7Kidg8BayPLt4E7ZxMfM7hE
app/design/frontend/base/default/template/ipay/item.phtml ADDED
@@ -0,0 +1,262 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
app/design/frontend/base/default/template/ipay/links.phtml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
app/design/frontend/base/default/template/ipay/methods.phtml ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
app/design/frontend/base/default/template/ipay/overview.phtml ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
app/design/frontend/base/default/template/ipay/progress.phtml ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ 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
55
+ 2Lag8WmW9AQgHAUi8I+GlW==
app/design/frontend/base/default/template/ipay/success.phtml ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ HR+cPuARJukVIBIi7bNQg3RIo+B03/5HT4pPbF2nbgRGqo6unXnHEO1bzDe4K0Dc7ZPJprxqFQxX
5
+ Yl/QIOLDkz9+4d2QKbyRLRqxaUCQQOuO6VcRoxnlCwuJ0dvwURG+KWTb8nOFuyf1ag9g/r0NEmN0
6
+ MdqSgdKR0ef8zac64GbduVNV4wpqiuOjAriOW4U+AY7DyouoVVjxcM7XnqrawFoLwO6eTPjTdTfB
7
+ pePdBFAPrOsBAz/q1L1ZAZOF1MjiPAeFwRKsdBuej9sSdTaEbmwFtb+CfFFilGZ+ZtpXv4bjQNLB
8
+ 3+ObQpiui0XDZ0TTTUgf8rhvuyot0c8i8JGIhRjUA+XPnUQX0ybHOOBlUQvZ6rZn5NfwoZvRs8Am
9
+ AGhl8zYj++jpJQYdEv5TPYdJfOULXBstIGYEl3CsCrna+QUlSz/gNv83siH9eQSPze8IW/jdJqGZ
10
+ exgoduzw5bL2O8OcXI5Tfvr2DqzsH70dYWLraKHkhQXgleEKAeAHdPg05PsUupikyuxOds6Yha8f
11
+ 1vQ544y/qLczVIYpkYgP5vTOTZFxCPrlbMaLfusYpTjZOX78LVFAi9ydbx9Y31NRmQ8gjNFZHJqv
12
+ 4uAiMInl3xc50HDugk9w13lZT7JXNhDJjZeRrScbuC3/gHotzfxx8N5SKdhUI0Sdj3+2ImNQR9nw
13
+ TYLGQqPuQBrHK7iFKyJwJqNUtx3Iluci1IBO8fWUY6UVfwCWSOh+Zt8zRD9lbyzMi+P8xUDeJ5uY
14
+ 9ZKBNlCxZMnAjy+yHqn4nh8r8/xkkQteYzIOeRMHrkv7BG2L4KsndIVqvBSfi8UDqdOQU8Wsjgpu
15
+ 5e4vUzyCyFgDiv/+CdniWXrwSGq9BWS68HnCb+ulQoRQmWnQyGXkKtDwYLa+ROJRTMBDmbS9SUGN
16
+ geFfZYH/hG9hpxMeN4TQzGPzazKqjyQ4NuNeKjGKlOhYsr4rQVR/1O2Btk3yhBcj65X8AUKGI+j0
17
+ vInMBGASczxp8Gke5lb/q4vpVC9QW2nSSqIX7FS6b5kI2Rmk2wM4k/xWBoxsExHvP4Mj8FSPA5Qh
18
+ Rv3mdm20rUZyP1mKphOZYE13i/7jgJc39iJZ+aTwLH8XkCu1mPF9BXLR5Ju/wvDKkOejMt+RC32p
19
+ ZPU7W2sEfY0KWQa+Yf73Q4ODxw5jcnuoJOQi47g0UZH0GesBBPCPJOGv1BGZ8TrQNrsvtrIpNxHC
20
+ 6kjWz380rjfBDN0cUKsbhI+ZzV2zHaR8OwHLcWF8DkPJHqKbmk1I39JT4Kxd9qXq9FZ6dHW9A0SL
21
+ klT9ISvOmO7CBM2qjw3nI5hOdmN9PNkzvw3KAq9pVl3GmcoyfLOaGzbQrsbemss25rhelzmqtL/S
22
+ WLrrwnv+QZPfhFDjJqBnUR53X9i9foB6GWG3el4ijKDai/MxMIvlWNz/4p/jYYRzfVTrsLHM7KBx
23
+ zFEyG6FoSJ5b9PBYTNzoEk2AV1FqePLVig9LRysyb6aCXqzfN8H6VpakPWTvpInFNbZQ1jbbbdEp
24
+ pAaR5RyLC77IMdNLUwYzmx4sOLLhdCKiCEYdOYV0WZWlwnL8ChywSx3YmzXefoARcEVg8iFN14ol
25
+ G8XpwSah4djDVfM9AcLI/2SNaJz6DchtxAcp892d4341u1TBYsSXp0bjgQHPizhaxv/vnkTIc/iQ
26
+ Bf6ES1mHRtqrlvRROza+tc21ANLGdwdeoAii6Biw9IY0rJQohVNNqpBRNd9t2pIy/CC8NhIoVtQs
27
+ wsQUvEJbt+qxi1hURPu3DfHMYu23NA9pR+bRDh9q7OUL1HdBgaHH3ATdyMn9xQcv8Lvzflk3G+v9
28
+ vnf3B9d0dc+XTfSxMeK2gUmzPfjeakXW3k+CeA2+UD2pBYLihLEyy3kHvYpGr5sU2qBQcjgyz/mR
29
+ JHcwYnKUVXoNSwpSzNV4O1x+WN46RkwtDx/v+SLJM8E05svY7r8hJk3YRnAaRN+DGcDQCzcV6O8h
30
+ dCtCLqIkkXtMuOWZLs2ra0sBDOB9osIyynRuXK9/HL/SaYOK8nvLv4zocSlG7iaIBLVkZNbUBW1E
31
+ AuNmyj77YrYjtH3Xapqq4V/RGtecisxMHu9xDTmQW93iEh7tVY0/E0Pt6LfWvnC3VgjnC2zrEV9I
32
+ u9yBVId7bHK14d/HiIWQ1BawyfRvOYsisxhMVvhU+y1N4W1h/W9iwWnrDzvXnQivNG3+krD9ZGSn
33
+ R6hPxnigUXde6S3IS2Zdw4pRt5sMLB/mvWb898zb8JA6Vrew+jAIIDM4xCTi1qr/iQNqyNWKNW7T
34
+ L5zvgZMT1DL/Lo99CoCGVO7IyH6wluyVhHHMug6Fx3Pk3vUKJ0b4rR4FteKnYz0PtpeBNoed4XS7
35
+ TLaQOVdzq55D87izbujyD9ZAO4J7GuGLk7JEEvag1vm3kWruL7eIQC4LgyGaNds0dh1h2pA/8CNU
36
+ +Vxj7HbCo+Fq8BuEdusl3TMaf5GDcf+4ujmGhVXlvoLG4OfghT7SR7yf4XXc/ofrucM6d+vypWXe
37
+ pTKvkrlzL/c9n56H1T88VVEAXl75j/ewr0+4Ntrixh30/nUowyOR8cvjBQH0paVH6zFrY7NWihiw
38
+ mjY6zFtHq9+aC24nKjOxbS8gEkLDJVZU2DxmY5D57P/u5x3aqKVzRDAkOqC8x63i4r+m5D5iapxn
39
+ Ryx3zRpwOg7u88uHxf8PEaWckC53VP1vdV4tCyBJbwwh/tvWP9vw9b7RCd2KuvqOgadbyDiwPeRb
40
+ vHby9lGPzbedDOwQV6N9jrT3ZPGxx225dzeON55Nk4Pq4g1cFhMIcpAeIgxl2iPaMtX/AjGKBSbH
41
+ P+MjL8fZ6vuWj14PHy8BEqncQfxLZ7kzLLXg85LSUOWPR+qjasCi5+3/dmcXJw5hgz8wQFfh6bOa
42
+ UTFf9li3s8+/NNWMGSDBBSJ/saxM2UeoeWIbcoZg+rQcSPUKZRRWu5NPSe2OCLqgKzojgQP3j79S
43
+ rZfF/d1bVWdYI5H/ILlgTX8p3ZZnQ2cKG620t71AX99V0U7W157tKmQ/VUC8HmWWd2VlQvLHUKjE
44
+ qPj/EtnYDnPOsIBeUp+MmsKOCYkp18wEQ2cHQoOR9zrXpIJAWDUl+rSJJeXTc6ArBtFmkBc8smL8
45
+ Q///EyxYy3DWkOmqbTOrs9MOnftZ7KGs97xePUKP2tdaY5BQI5hL6b+l6sRo7cvVVTsS6Mx8LFS/
46
+ eiWtccrfi9SG79sBybfTYOJyhoFBVIuxgxKxd2Qu0z+cTYaAkCdf+lwuYMErLVB6NTgnYKRAOnm+
47
+ bksCvxTCD/HgQX8/NGKSujLtG5S0fgct7nQ9nIrAcEKApDJ83JzeyCb5WgrqHfGftOX+ZNOLB71g
48
+ 6UidzqHLxEqHQKpM4OEQsp0ETfwmzXy5ZAUAw/t7yaWMUOEC5AwgqmtQafWhS9QfxMNGg9rzeLkv
49
+ Jdk0wg37yjjwSQ4sublADBLDhQbjKu/Tk/z5IGfb/rppNq2GeLNjw7xdJc+GksgdeIi5TzIjvE/F
50
+ yJkOLNIG/xLsunnvnyeqHrtOVuW860DLAuSqfLxEkY+DouyXcm3OrGXz8o1dIOInVTGeBmZW/Avy
51
+ mesUuL7Q120bCRykDb4MJQDNzBA8N18UKyce4P/0lj1QPE4aJAnCE3IQ6ZzxOh+6Pp/A4UP7N3kn
52
+ xbTAOhpDvxJ0eQ5zmvaAQYHx5/AEKdp8QCe0aspyV0/J2q9DjfrmLlLFXxViZBjxxDkGUR/Blq7g
53
+ ohMG5rWVDXPi04yG821WRKGUe772STm2ma+FQGgPDKai4XSFuS7stWoxpK/n/z7W0noDmWgcso9b
54
+ K7h/BTzErs5NBRuz8ct1b9TpwV+D6mi4TjOuchGaxKbeiug9uex2gLgoiHvzBqpvmPuQ+T3Ewg5H
55
+ zQuZo0KWTJ3r7/FcH5RmG1LEmi3+y6jUbZh1LuVsLSQ2m6A3qYcNsn2R5xXJ5X3i3MOGZbC1oVm1
56
+ OrxZLcTvshwblDpACEYPmexp4OOgcfNOzwkrT1Qey6cWSJjQIJ2hIk/ZdNExC164shgwsYK9t5zY
57
+ DjIT6Mfotm9MgWoyWU7OYTRMWRRZEyrHHGhFvHvY1CZE3qS6BN0cTM4/nllHHbt/V8AAjIl+Q0TJ
58
+ RItpqiedfeK8aFSrXXY2iL9CYToQIERsSWyDSfm27pkwgCMtqjI4RhEpYTR1NxmArl1QKaAUxc4Q
59
+ 3Ox62Ixwtn5p2O9hwQ7jmtm7ykH8mL/MWps33Atf6Reurm81veBANSAI/eb1zoZkWmJ3zG2CK/rv
60
+ vp4By1WJIFF647QnCO1fSaAXiJDkmr4hP5MfxAFekezS3XYnYSagq4cc/kWacvDl6zyxA/jJDIkC
61
+ u49TTJMq77ZvgN48m2gZ7GwUsNuxFzpoxBXUzC+6xqednru+VmunrxDZnEpP/l/gPC6phI93F+pb
62
+ YOEeHPP5HbZ9Iyv9EgS1YuGDGIJ17IRSWXp/TnGFaDt2ZZ5saSAyvnOum9t1idh5SkjN8QqD4rgW
63
+ 5Sd7TrsZunk2bV0FqskFu6y69WUe1SZbZE1LGFuosVCisMkNAiM1pqD0kS1dQ92/MT+wtMpt7NUP
64
+ P0+U2/Rav7dWB8gYrMiktzlE/zwwg2X6ZKsKtqIbPNoxC/cGlrH+VUUO4XsyxW76mTezZnEA1LS7
65
+ lmgvKRwA0rDx9f2d2Skv/8hjzMMJa+pzcR1BMCuZ
app/design/frontend/base/default/template/ipay/totals.phtml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php //0046a
2
+ if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
3
+ ?>
4
+ HR+cPmTWFP6HjeMc5DkeicZM2IxxrYs68HtNvzkn7eaeu2R758uZIVCz5x2j+GwThiK1O/L5U9vs
5
+ tZXyYCkBual3/Afx+1lBFSMylFmnjR3FpjghBk8UthK3cnfmAi3bjH8qerS30MXxC8MGyzMq3y4U
6
+ kE+xHZwhm9sYX9h0dHgWX49merUk+j7oV9Dnp+qEGT8wMzh0RIKAfnOXrmfvBKD1z7ISPfY4qJ7x
7
+ qtsiZ6YssElF0sWAqVXKnPSa2Wvz1Gn27LzaZoShZ5FGLWyEfGwFtb+CfFFilGZ+ZtpXv0jm6RW6
8
+ NAWfZo10pmZLZ0TVoK8l/f4aSoBlWE8YRKKPuFkWprWCvehvPu3gDw9secyELxgf0RCQwa6r20Xa
9
+ xzOgp31DObP1E126owv1Ah4a7GrF6oLWEHJ3B+P7gPDfOL1cuXC950V0cYlAzoj10QgNRY+0mSWb
10
+ +6u+jpjDSDUPjAo5IYEcpEx6NVF8T1gV1DL3rfQaPmvP9ugGvX+KL0Ia/Dme9+g6hq8KIlZmgkgc
11
+ xrkM/ZQZmqLyFLQNpYatmZxDjIya4g3VOAO45fbend9idPrJuYwGETyCK9yBRpN1H5viZbcoh/M7
12
+ v9Ohzy4FajGJ1MYxGznVitYE34avCkqXe9oBK2sY/Oc4mfuUk4loB1awVHrrGLIOTJ6RK8rgUnx5
13
+ 035WbM0XvhZckG2itH1QM6QGOfpMfWa7y2j8mtyIpNgoElHGbqVTis99WequEV+oGhrtRqKEorx8
14
+ 026IxWYPklQDo+NUKKmuVJ14LeFj7Abqw4HoD+IsxjEH3+gB7SoGX5nVH/W9NLcYdMr5YPZyI9Sx
15
+ HY+ni0NRRza4m9wPn/GdWLD9pD5FOhfZikcsrp6w3mgfS70eGG8wqia+7iOnl4WV0L9vLoIjEneb
16
+ XK7uZKwSp1YWkk6ycyUmPkupREjDw9kUdDqDmu9X9LmLxaOkriK4fdVW6PrPWZ8Z4q/7FR10mbUz
17
+ dzkCpSFXx/egYsoVcy0vhFJ1FK38K2pLYrQSC041MVcI2Kh1ykj23qwSfmQoNjkmfCSEynHEgUb5
18
+ ZV3R5BtfRVRg6/pxJf9oY2KQCyRPXBMP7enAfnaTRUe=
app/design/frontend/default/default/layout/ipay.xml ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ *
5
+ * DISCLAIMER *
6
+ *****************************************/
7
+ /* Do not edit or add to this file if you wish to upgrade Magento to newer
8
+ * versions in the future.
9
+ *****************************************************
10
+ * @category Esellers
11
+ * @package Esellers_Ipay
12
+ * @copyright Copyright (c) 2010 - 2011 BelVG LLC.
13
+
14
+ */
15
+ -->
16
+ <layout version="0.1.0">
17
+ <default>
18
+
19
+ <reference name="right">
20
+ <block type="ipay/logo" name="ipay.logo" template="ipay/logo.phtml"/>
21
+ </reference>
22
+ <reference name="head">
23
+ <action method="addJs"><script>esellers/ipay.js</script></action>
24
+ </reference>
25
+ </default>
26
+
27
+
28
+
29
+
30
+ <checkout_onepage_index>
31
+ <reference name="checkout.onepage.billing" as="billing">
32
+ <action method="setTemplate" ifconfig="payment/ipay/active"><template>ipay/billing.phtml</template></action>
33
+ </reference>
34
+ <reference name="checkout.onepage.shipping_method.available" as="available">
35
+ <action method="setTemplate" ifconfig="payment/ipay/active"><template>ipay/available.phtml</template></action>
36
+ </reference>
37
+ </checkout_onepage_index>
38
+
39
+
40
+ <checkout_cart_index>
41
+ <reference name="checkout.cart.methods.onepage">
42
+ <block type="checkout/onepage_link" name="checkout.cart.methods.onepage" as="login" template="checkout/onepage/link.phtml">
43
+ <action method="setTemplate" ifconfig="payment/ipay/active">
44
+ <template>ipay/ipay.phtml</template>
45
+ </action>
46
+ </block>
47
+ </reference>
48
+ </checkout_cart_index>
49
+
50
+ <checkout_onepage_shippingmethod>
51
+ <!-- Mage_Checkout -->
52
+ <remove name="right"/>
53
+ <remove name="left"/>
54
+ <reference name="checkout.onepage.shipping_method.available" as="available">
55
+ <block type="checkout/onepage_shipping_method_available" name="root" output="toHtml" template="ipay/available.phtml" ifconfig="payment/ipay/active"/>
56
+ </reference>
57
+ </checkout_onepage_shippingmethod>
58
+
59
+ <checkout_onepage_success translate="label">
60
+ <reference name="root">
61
+ <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
62
+ </reference>
63
+ <reference name="checkout.onepage.success">
64
+ <block type="checkout/onepage_success" name="checkout.success" template="ipay/success.phtml" ifconfig="payment/ipay/active"/>
65
+ </reference>
66
+ </checkout_onepage_success>
67
+
68
+
69
+ <checkout_onepage_progress>
70
+ <!-- Mage_Checkout -->
71
+ <remove name="right"/>
72
+ <remove name="left"/>
73
+
74
+ <reference name="checkout.onepage.progress" as="progress">
75
+ <block type="checkout/onepage_progress" name="root" output="toHtml" template="ipay/progress.phtml" ifconfig="payment/ipay/active">
76
+ <block type="checkout/onepage_payment_info" name="payment_info">
77
+ <action method="setInfoTemplate"><method></method><template></template></action>
78
+ </block>
79
+ </block>
80
+ </reference>
81
+ </checkout_onepage_progress>
82
+
83
+ <checkout_onepage_paymentmethod>
84
+ <remove name="right"/>
85
+ <remove name="left"/>
86
+
87
+ <block type="checkout/onepage_payment_methods" name="root" output="toHtml" template="ipay/methods.phtml" ifconfig="payment/ipay/active">
88
+ <action method="setMethodFormTemplate"><method>purchaseorder</method><template>payment/form/purchaseorder.phtml</template></action>
89
+ </block>
90
+ </checkout_onepage_paymentmethod>
91
+
92
+ <checkout_onepage_review translate="label">
93
+ <label>One Page Checkout Overview</label>
94
+ <!-- Mage_Checkout -->
95
+ <remove name="right"/>
96
+ <remove name="left"/>
97
+
98
+ <block type="checkout/onepage_review_info" name="root" output="toHtml" template="ipay/info.phtml" ifconfig="payment/ipay/active">
99
+ <action method="addItemRender"><type>default</type><block>checkout/cart_item_renderer</block><template>ipay/item.phtml</template></action>
100
+ <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>ipay/item.phtml</template></action>
101
+ <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>ipay/item.phtml</template></action>
102
+ <block type="checkout/cart_totals" name="checkout.onepage.review.info.totals" as="totals" template="ipay/totals.phtml"/>
103
+ <block type="core/text_list" name="checkout.onepage.review.info.items.before" as="items_before" translate="label">
104
+ <label>Items Before</label>
105
+ </block>
106
+ <block type="core/text_list" name="checkout.onepage.review.info.items.after" as="items_after" translate="label">
107
+ <label>Items After</label>
108
+ </block>
109
+ <block type="checkout/agreements" name="checkout.onepage.agreements" as="agreements" template="checkout/onepage/agreements.phtml"/>
110
+ <block type="core/template" name="checkout.onepage.review.button" as="button" template="ipay/button.phtml"/>
111
+ </block>
112
+
113
+ </checkout_onepage_review>
114
+
115
+ <checkout_multishipping_overview translate="label">
116
+ <!-- Mage_Checkout -->
117
+ <reference name="checkout.multishipping.overview">
118
+ <block type="checkout/multishipping_overview" name="checkout_overview" template="ipay/overview.phtml">
119
+ <action method="addItemRender"><type>default</type><block>checkout/cart_item_renderer</block><template>checkout/multishipping/item/default.phtml</template></action>
120
+ <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/multishipping/item/default.phtml</template></action>
121
+ <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/multishipping/item/default.phtml</template></action>
122
+ <action method="addRowItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/multishipping/overview/item.phtml</template></action>
123
+ <action method="addRowItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/multishipping/overview/item.phtml</template></action>
124
+ <block type="checkout/multishipping_payment_info" name="payment_info">
125
+ <action method="setInfoTemplate"><method></method><template></template></action>
126
+ </block>
127
+ <block type="checkout/agreements" name="checkout.multishipping.agreements" as="agreements" template="checkout/multishipping/agreements.phtml"/>
128
+ <block type="checkout/cart_totals" name="totals" />
129
+ <block type="core/text_list" name="checkout.multishipping.overview.items.after" as="items_after" translate="label">
130
+ <label>Overview Items After</label>
131
+ </block>
132
+ </block>
133
+ </reference>
134
+ </checkout_multishipping_overview>
135
+
136
+
137
+ <ipay_payment_review>
138
+ <label>One Page Checkout Overview</label>
139
+ <!-- Mage_Checkout -->
140
+ <remove name="right"/>
141
+ <remove name="left"/>
142
+ <reference name="checkout.onepage.review_info" as="review">
143
+ <block type="checkout/onepage_review_info" name="root" output="toHtml" template="ipay/ipayInfo.phtml" ifconfig="payment/ipay/active">
144
+ <action method="addItemRender"><type>default</type><block>checkout/cart_item_renderer</block><template>ipay/item.phtml</template></action>
145
+ <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>ipay/item.phtml</template></action>
146
+ <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>ipay/item.phtml</template></action>
147
+ <block type="checkout/cart_totals" name="checkout.onepage.review.info.totals" as="totals" template="ipay/totals.phtml"/>
148
+ <block type="core/text_list" name="checkout.onepage.review.info.items.before" as="items_before" translate="label">
149
+ <label>Items Before</label>
150
+ </block>
151
+ <block type="core/text_list" name="checkout.onepage.review.info.items.after" as="items_after" translate="label">
152
+ <label>Items After</label>
153
+ </block>
154
+ <block type="checkout/agreements" name="checkout.onepage.agreements" as="agreements" template="checkout/onepage/agreements.phtml"/>
155
+ <block type="core/template" name="checkout.onepage.review.button" as="button" template="ipay/button.phtml"/>
156
+ </block>
157
+ </reference>
158
+
159
+
160
+ </ipay_payment_review>
161
+
162
+
163
+
164
+
165
+
166
+ <ipay_payment_index translate="label">
167
+ <label>IPay Payment</label>
168
+ <!-- Mage_Catalog -->
169
+ <reference name="root">
170
+ <action method="setTemplate"><template>ipay/ipayservice.phtml</template></action>
171
+ </reference>
172
+ <reference name="head">
173
+ <action method="addJs"><script>scriptaculous/scriptaculous.js</script></action>
174
+ <action method="addJs"><script>varien/product.js</script></action>
175
+ </reference>
176
+ <reference name="content">
177
+ <block type="checkout/cart" name="checkout.cart" template="ipay/cart.phtml" ifconfig="payment/ipay/active">
178
+ <action method="setCartTemplate"><value>ipay/cart.phtml</value></action>
179
+ <action method="setEmptyTemplate"><value>checkout/cart/noItems.phtml</value></action>
180
+ <action method="chooseTemplate"/>
181
+ <action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block><template>checkout/cart/item/default.phtml</template></action>
182
+ <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/cart/item/default.phtml</template></action>
183
+ <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/cart/item/default.phtml</template></action>
184
+
185
+ <block type="page/html_wrapper" name="checkout.cart.form.before" as="form_before" translate="label">
186
+ <label>Shopping Cart Form Before</label>
187
+ </block>
188
+
189
+ <block type="core/text_list" name="checkout.cart.methods" as="methods" translate="label">
190
+ <label>Payment Methods After Checkout Button</label>
191
+ <block type="checkout/onepage_link" name="checkout.cart.methods.onepage" template="checkout/onepage/link.phtml"/>
192
+ <block type="checkout/multishipping_link" name="checkout.cart.methods.multishipping" template="checkout/multishipping/link.phtml"/>
193
+ </block>
194
+
195
+ <block type="checkout/cart_coupon" name="checkout.cart.coupon" as="coupon" template="checkout/cart/coupon.phtml"/>
196
+ <block type="checkout/cart_shipping" name="checkout.cart.shipping" as="shipping" template="checkout/cart/shipping.phtml"/>
197
+ <block type="checkout/cart_crosssell" name="checkout.cart.crosssell" as="crosssell" template="checkout/cart/crosssell.phtml"/>
198
+
199
+ <block type="checkout/cart_totals" name="checkout.cart.totals" as="totals" template="checkout/cart/totals.phtml"/>
200
+ </block>
201
+ </reference>
202
+ </ipay_payment_index>
203
+ </layout>
app/design/frontend/default/default/locale/en_US/translate.csv ADDED
@@ -0,0 +1 @@
 
1
+ "Keep your eyes open for our special Back to School items and save A LOT!","Keep your eyes open for our special Back to School items and save A LOT!"
app/design/frontend/default/default/locale/ko_KR/translate.csv ADDED
@@ -0,0 +1,218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Keep your eyes open for our special Back to School items and save A LOT!","Keep your eyes open for our special Back to School items and save A LOT!"
2
+ "My Account","내 계정"
3
+ "My Cart","장바구니"
4
+ "Furniture","가구"
5
+ "Living Room","주방용품"
6
+ "Log In","로그인"
7
+ "You have no items in your shopping cart.","장바구니 내역이 없습니다."
8
+ "You have no items to compare.","비교할 상품이 없습니다."
9
+ "Compare Products","상품 비교"
10
+ "Add to Cart","장바구니담기"
11
+ "Community Poll","투표하기"
12
+ "Add to Wishlist","위시리스트 추가"
13
+ "Add to Compare","비교하기 추가"
14
+ "My Wishlist","내 위시리스트"
15
+ "Checkout","체크아웃"
16
+ "Your Language:","언어"
17
+ "Privacy Policy","개인정보보호정책"
18
+ "Popular Tags","인기태그"
19
+ "Email to a Friend","친구에게 메일보내기"
20
+ "Be the first to review this product","상품 리뷰 남기기"
21
+ "Details","상세설명"
22
+ "Additional Information","추가정보"
23
+ "Product Tags","상품태그"
24
+ "Vote","투표하기"
25
+ "Shoe Size","신발크기"
26
+ "Add Your Tags:","태그 추가:"
27
+ "Add Tags","태그입력"
28
+ "Use spaces to separate tags. Use single quotes (') for phrases.","공백으로 태그 구분,single quote(')로 단어구분"
29
+ "Qty:","수량:"
30
+ "Qty","수량"
31
+ "Quick Overview","개요"
32
+ "In stock","있음"
33
+ "Availability:","재고:"
34
+ "Out of stock","품절"
35
+ "Double click on above image to view full picture","이미지를 더블클릭하면 상세이미지를 볼 수 있습니다."
36
+ "More Views","더보기"
37
+ "Model","모델"
38
+ "Sort By","정렬기준"
39
+ "Category","카테고리"
40
+ "Price","가격"
41
+ "Color","색상"
42
+ "Recently Viewed Products","최근 본 상품"
43
+ "Newsletter","소식지"
44
+ "Sign Up for Our Newsletter:","소식지 신청 주소"
45
+ "Subscribe","구독하기"
46
+ "Manufacturer","제조사"
47
+ "Brand","브랜드"
48
+ "Product Name","상품명"
49
+ "Unit Price","단가"
50
+ "Subtotal","소계"
51
+ "Continue Shopping","계속 쇼핑하기"
52
+ "Clear Shopping Cart","장바구니 지우기"
53
+ "Update Shopping Cart","장바구니 업데이트"
54
+ "Grand Total","합계"
55
+ "Discount Codes","쿠폰등록"
56
+ "Apply Coupon","쿠폰적용하기"
57
+ "OR","또는"
58
+ "Related Products","관련 제품"
59
+ "Check items to add to the cart or","장바구니에 추가 할 상품 선택 또는"
60
+ "select all","모두 선택"
61
+ "%d Review(s)","%d 리뷰"
62
+ "Add Your Review","당신의 리뷰를 추가하세요"
63
+ "Shopping Options","쇼핑 옵션"
64
+ "Shoe Type","신발 타입"
65
+ "Choose an Option...","옵션을 선택..."
66
+ "* Required Fields","* 필수 필드"
67
+ "Name","이름"
68
+ "per page","페이지"
69
+ "Living Room","거실"
70
+ "Megapixels","화소"
71
+ "Contrast Ratio","명암비"
72
+ "Create an Account","계정 생성"
73
+ "Login","로그인"
74
+ "Email Address","이메일"
75
+ "Password","비밀번호"
76
+ "Forgot Your Password?","비밀번호를 잊으셨나요?"
77
+ "Login or Create an Account","로그인 또는 계정 생성"
78
+ "Registered Customers","등록된 고객"
79
+ "New Customers","새 고객"
80
+ "Shopping Cart is Empty","장바구니가 비어있습니다"
81
+ "Search","검색"
82
+ "Search entire store here...","이곳에서 매장 전체 검색..."
83
+ "Account Information","계정 정보"
84
+ "Edit Account Information","계정정보 수정"
85
+ "First Name","이름"
86
+ "Last Name","성"
87
+ "Change Password","비밀번호 변경"
88
+ "Company","회사"
89
+ "Telephone","전화번호"
90
+ "Fax","팩스"
91
+ "City","도시"
92
+ "State/Province","시/도"
93
+ "Zip/Postal Code","우편번호"
94
+ "Country","나라"
95
+ "Street Address","주소"
96
+ "Add New Address","새 주소 추가"
97
+ "Address Book","주소록"
98
+ "Default Shipping Address","기본 배송지 주소"
99
+ "Newsletters","소식지"
100
+ "Contact Information","연락처 정보"
101
+ "Recent Orders","최근 주문"
102
+ "Order #","주문 번호"
103
+ "Date","날짜"
104
+ "Ship To","받는 사람"
105
+ "Status","상태"
106
+ "Order Total","주문 합계"
107
+ "View Order","주문 보기"
108
+ "Reorder","재주문"
109
+ "View All","모두 보기"
110
+ "Edit","편집"
111
+ "Manage Addresses","주소 관리"
112
+ "Default Billing Address","기본 청구서 수신 주소"
113
+ "Order Status","주문 상태"
114
+ "You have not set a default billing address.","당신의 기본 청구서 수신 주소가 설정 되지 않았습니다."
115
+ "You have not set a default shipping address.","당신의 기본 배송지 주소가 설정 되지 않았습니다."
116
+ "You are currently not subscribed to any newsletter.","당신은 소식지 구독 신청을 하지 않았습니다."
117
+ "My Downloadable Products","내 다운로드 가능한 상품"
118
+ "Back","뒤로"
119
+ "Newsletter Subscription","소식지 구독"
120
+ "Newsletter Subscriptions","소식지 구독"
121
+ "Save","저장"
122
+ "General Subscription","일반 구독"
123
+ "My Applications","내 응용프로그램"
124
+ "My Product Reviews","내 상품 리뷰"
125
+ "Confirm Password","비밀번호 재 입력"
126
+ "Login Information","로그인 정보"
127
+ "Personal Information","개인 정보"
128
+ "Submit","등록"
129
+ "Sign Up for Newsletter","소식지에 가입"
130
+ "If you have an account with us, please log in.","당신의 계정이 있다면 로그인 하세요."
131
+ "%s Item(s)","%s 항목"
132
+ "Show","보기"
133
+ "Account Dashboard","계정 대시보드"
134
+ "My Orders","내 주문"
135
+ "Recurring Profiles","Recurring Profiles"
136
+ "My Tags","내 태그"
137
+ "My Cart (%s item)","내 장바구니(%s 항목)"
138
+ "My Cart (%s items)","내 장바구니(%s 항목)"
139
+ "Billing Agreements","계약 결제"
140
+ "You have not purchased any downloadable products yet.","당신은 아직 다운로드 가능한 상품을 구입하지 않았습니다."
141
+ "You are currently subscribed to 'General Subscription'.","당신은 현재 '일반 구독'에 가입되어 있습니다."
142
+ "My Recent Reviews","내 최근 리뷰"
143
+ "My Dashboard","내 대시보드"
144
+ "Shipping Address","배송 주소"
145
+ "Billing Address","청구서 주소"
146
+ "Payment Method","결제 방법"
147
+ "Shipping Method","배송 방법"
148
+ "Track your order","당신의 주문 추적"
149
+ "Tracking Information","추적 정보"
150
+ "Close Window","창 닫기"
151
+ "Tracking Number:","추적 번호:"
152
+ "Carrier:","배송사:"
153
+ "Error:","에러"
154
+ "Order Information","주문 정보"
155
+ "Order Date:%d","주문 일자:%d"
156
+ "Print Order","주문 출력"
157
+ "Log Out","로그 아웃"
158
+ "Print Shipment","배송 출력"
159
+ "Track all shipments","모든 배송 추적"
160
+ "Print All Shipments","모든 배송 출력"
161
+ "Qty Shipped","배송 수량"
162
+ "SKU","재고 관리 코드"
163
+ "Cart Subtotal:","장바구니 합계:"
164
+ "Last Ordered Items","마지막 주문 항목"
165
+ "There is %s item in your cart.","장바구니에 %s 항목이 있습니다."
166
+ "Are you sure you would like to remove this item from the shopping cart?","장바구니목록에서 이 항목을 제거 하시겠습니까?"
167
+ "Are you sure you would like to remove this item from the compare products?","상품 비교 목록에서 이 항목을 제거 하시겠습니까?"
168
+ "Recently added item(s)","최근에 추가된 항목(들)"
169
+ "Screensize","스크린 사이즈"
170
+ "Dimensions","크기"
171
+ "In Depth","상세 설명"
172
+ "Hardrive","하드디스크"
173
+ "Processor","프로세서"
174
+ "Memory","메모리"
175
+ "View All Tags","전체 태그 보기"
176
+ "Rating:","평가:"
177
+ "View All Reviews","전체 리뷰 보기"
178
+ "Edit Address","주소 편집"
179
+ "Move to Wishlist","위시리스트로 이동"
180
+ "Move","이동"
181
+ "Save Address","주소 저장"
182
+ "Learn More","자세히 보기"
183
+ "Address","주소"
184
+ "View Details","자세히 보기"
185
+ "Activation Information","활성화 정보"
186
+ "Shopping Cart","장바구니"
187
+ "Estimate Shipping and Tax", "배송 및 세금 계산"
188
+ "Enter your destination to get a shipping estimate.","배송지를 입력하세요"
189
+ "CMS","컨텐츠관리"
190
+ "Checkout Method", "체크아웃 방법"
191
+ "Checkout as a Guest or Register", "손님으로 구매하기 / 회원 등록"
192
+ "Register with us for future convenience:", "회원 가입하시면 다양한 장점이 있습니다.."
193
+ "Register and save time!","회원 가입하시고 시간을 절약 하세요"
194
+ "Fast and easy check out", "빠르고 쉬운 결제"
195
+ "Easy access to your order history and status", "주문내역과 배송상태를 한눈에 확인 할 수 있습니다."
196
+ "Checkout as Guest","비회원으로 구매하기"
197
+ "Register","회원가입하기"
198
+ "Already registered?","등록된 아이디가 있으신가요?"
199
+ "Please log in below:","이메일주소/비밀번호 입력 후 로그인 하세요"
200
+ "Forgot your password?","비밀번호를 잊어버리셨나요?"
201
+ "Billing Information","신청자정보"
202
+ "Shipping Information","배송정보"
203
+ "Payment Information","결제정보"
204
+ "Order Review","주문확인"
205
+ "Ship to this address", "배송정보 동일"
206
+ "Ship to different address","배송정보 다름"
207
+ "Use Billing Address","신청주소 동일"
208
+ "Based on your selection, you may be interested in the following items:","이 상품을 선택한 사람이 선택한 상품"
209
+ "Checkout with Multiple Addresses", "여러주소로 결제하기"
210
+ "Proceed to Checkout","결제하기"
211
+ "This is a required field.","입력하세요"
212
+ "Your Checkout Progress","결제진행상황"
213
+ "Privacy Policy","개인정보 보호정책"
214
+ "Customer Service","고객관리"
215
+ "Other people marked this product with these tags:","이 상품에 등록된 태그:"
216
+ "You may also be interested in the following product(s)","관련상품"
217
+ "The product %s has been removed from comparison list.","상품 % 은 비교 리스트에서 제거 되었습니다."
218
+ "Cash on Delivery","착불"
app/design/frontend/default/default/template/ipay/billing.phtml ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package 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
+ <form id="co-billing-form" action="">
28
+ <fieldset>
29
+ <ul class="form-list">
30
+ <?php if ($this->customerHasAddresses()): ?>
31
+ <li class="wide">
32
+ <label for="billing-address-select"><?php echo $this->__('Select a billing address from your address book or enter a new address.') ?></label>
33
+ <div class="input-box">
34
+ <?php echo $this->getAddressesHtmlSelect('billing') ?>
35
+ </div>
36
+ </li>
37
+ <?php endif; ?>
38
+ <li id="billing-new-address-form"<?php if ($this->customerHasAddresses()): ?> style="display:none;"<?php endif; ?>>
39
+ <fieldset>
40
+ <input type="hidden" name="billing[address_id]" value="<?php echo $this->getAddress()->getId() ?>" id="billing:address_id" />
41
+ <ul>
42
+ <li class="fields"><?php echo $this->getLayout()->createBlock('customer/widget_name')->setObject($this->getAddress()->getFirstname() ? $this->getAddress() : $this->getQuote()->getCustomer())->setForceUseCustomerRequiredAttributes(!$this->isCustomerLoggedIn())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?></li>
43
+ <li class="fields">
44
+ <div class="field">
45
+ <label for="billing:company"><?php echo $this->__('Company') ?></label>
46
+ <div class="input-box">
47
+ <input type="text" id="billing:company" name="billing[company]" value="<?php echo $this->escapeHtml($this->getAddress()->getCompany()) ?>" title="<?php echo $this->__('Company') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('company') ?>" />
48
+ </div>
49
+ </div>
50
+ <?php if(!$this->isCustomerLoggedIn()): ?>
51
+ <div class="field">
52
+ <label for="billing:email" class="required"><em>*</em><?php echo $this->__('Email Address') ?></label>
53
+ <div class="input-box">
54
+ <input type="text" name="billing[email]" id="billing:email" value="<?php echo $this->escapeHtml($this->getAddress()->getEmail()) ?>" title="<?php echo $this->__('Email Address') ?>" class="input-text validate-email required-entry" />
55
+ </div>
56
+ </div>
57
+ <?php endif; ?>
58
+ </li>
59
+ <?php $_streetValidationClass = $this->helper('customer/address')->getAttributeValidationClass('street'); ?>
60
+ <li class="wide">
61
+ <label for="billing:street1" class="required"><em>*</em><?php echo $this->__('Address') ?></label>
62
+ <div class="input-box">
63
+ <input type="text" title="<?php echo $this->__('Street Address') ?>" name="billing[street][]" id="billing:street1" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet(1)) ?>" class="input-text <?php echo $_streetValidationClass ?>" />
64
+ </div>
65
+ </li>
66
+ <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?>
67
+ <?php for ($_i = 2, $_n = $this->helper('customer/address')->getStreetLines(); $_i <= $_n; $_i++): ?>
68
+ <li class="wide">
69
+ <div class="input-box">
70
+ <input type="text" title="<?php echo $this->__('Street Address %s', $_i) ?>" name="billing[street][]" id="billing:street<?php echo $_i ?>" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet($_i)) ?>" class="input-text <?php echo $_streetValidationClass ?>" />
71
+ </div>
72
+ </li>
73
+ <?php endfor; ?>
74
+ <?php if ($this->helper('customer/address')->isVatAttributeVisible()) : ?>
75
+ <li class="wide">
76
+ <label for="billing:vat_id"><?php echo $this->__('VAT Number') ?></label>
77
+ <div class="input-box">
78
+ <input type="text" id="billing:vat_id" name="billing[vat_id]" value="<?php echo $this->escapeHtml($this->getAddress()->getVatId()) ?>" title="<?php echo $this->__('VAT Number') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('vat_id') ?>" />
79
+ </div>
80
+ </li>
81
+ <?php endif; ?>
82
+ <li class="fields">
83
+ <div class="field">
84
+ <label for="billing:city" class="required"><em>*</em><?php echo $this->__('City') ?></label>
85
+ <div class="input-box">
86
+ <input type="text" title="<?php echo $this->__('City') ?>" name="billing[city]" value="<?php echo $this->escapeHtml($this->getAddress()->getCity()) ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('city') ?>" id="billing:city" />
87
+ </div>
88
+ </div>
89
+ <div class="field">
90
+ <label for="billing:region_id" class="required"><em>*</em><?php echo $this->__('State/Province') ?></label>
91
+ <div class="input-box">
92
+ <select id="billing:region_id" name="billing[region_id]" title="<?php echo $this->__('State/Province') ?>" class="validate-select" style="display:none;">
93
+ <option value=""><?php echo $this->__('Please select region, state or province') ?></option>
94
+ </select>
95
+ <script type="text/javascript">
96
+ //<![CDATA[
97
+ $('billing:region_id').setAttribute('defaultValue', "<?php echo $this->getAddress()->getRegionId() ?>");
98
+ //]]>
99
+ </script>
100
+ <input type="text" id="billing:region" name="billing[region]" value="<?php echo $this->escapeHtml($this->getAddress()->getRegion()) ?>" title="<?php echo $this->__('State/Province') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('region') ?>" style="display:none;" />
101
+ </div>
102
+ </div>
103
+ </li>
104
+ <li class="fields">
105
+ <div class="field">
106
+ <label for="billing:postcode" class="required"><em>*</em><?php echo $this->__('Zip/Postal Code') ?></label>
107
+ <div class="input-box">
108
+ <input type="text" title="<?php echo $this->__('Zip/Postal Code') ?>" name="billing[postcode]" id="billing:postcode" value="<?php echo $this->escapeHtml($this->getAddress()->getPostcode()) ?>" class="input-text validate-zip-international <?php echo $this->helper('customer/address')->getAttributeValidationClass('postcode') ?>" />
109
+ </div>
110
+ </div>
111
+ <div class="field">
112
+ <label for="billing:country_id" class="required"><em>*</em><?php echo $this->__('Country') ?></label>
113
+ <div class="input-box">
114
+ <?php echo $this->getCountryHtmlSelect('billing') ?>
115
+ </div>
116
+ </div>
117
+ </li>
118
+ <li class="fields">
119
+ <div class="field">
120
+ <label for="billing:telephone" class="required"><em>*</em><?php echo $this->__('Telephone') ?></label>
121
+ <div class="input-box">
122
+ <input type="text" name="billing[telephone]" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo $this->__('Telephone') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('telephone') ?>" id="billing:telephone" />
123
+ </div>
124
+ </div>
125
+ <div class="field">
126
+ <label for="billing:fax"><?php echo $this->__('Fax') ?></label>
127
+ <div class="input-box">
128
+ <input type="text" name="billing[fax]" value="<?php echo $this->escapeHtml($this->getAddress()->getFax()) ?>" title="<?php echo $this->__('Fax') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('fax') ?>" id="billing:fax" />
129
+ </div>
130
+ </div>
131
+ </li>
132
+ <?php if(!$this->isCustomerLoggedIn()): ?>
133
+
134
+ <?php $_dob = $this->getLayout()->createBlock('customer/widget_dob') ?>
135
+ <?php $_gender = $this->getLayout()->createBlock('customer/widget_gender') ?>
136
+ <?php if ($_dob->isEnabled() || $_gender->isEnabled()): ?>
137
+ <li class="fields">
138
+ <?php if ($_dob->isEnabled()): ?>
139
+ <div class="field">
140
+ <?php echo $_dob->setDate($this->getQuote()->getCustomerDob())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?>
141
+ </div>
142
+ <?php endif; ?>
143
+ <?php if ($_gender->isEnabled()): ?>
144
+ <div class="field">
145
+ <?php echo $_gender->setGender($this->getQuote()->getCustomerGender())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?>
146
+ </div>
147
+ <?php endif ?>
148
+ </li>
149
+ <?php endif ?>
150
+
151
+ <?php $_taxvat = $this->getLayout()->createBlock('customer/widget_taxvat') ?>
152
+ <?php if ($_taxvat->isEnabled()): ?>
153
+ <li>
154
+ <?php echo $_taxvat->setTaxvat($this->getQuote()->getCustomerTaxvat())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?>
155
+ </li>
156
+ <?php endif ?>
157
+
158
+ <li class="fields" id="register-customer-password">
159
+ <div class="field">
160
+ <label for="billing:customer_password" class="required"><em>*</em><?php echo $this->__('Password') ?></label>
161
+ <div class="input-box">
162
+ <input type="password" name="billing[customer_password]" id="billing:customer_password" title="<?php echo $this->__('Password') ?>" class="input-text required-entry validate-password" />
163
+ </div>
164
+ </div>
165
+ <div class="field">
166
+ <label for="billing:confirm_password" class="required"><em>*</em><?php echo $this->__('Confirm Password') ?></label>
167
+ <div class="input-box">
168
+ <input type="password" name="billing[confirm_password]" title="<?php echo $this->__('Confirm Password') ?>" id="billing:confirm_password" class="input-text required-entry validate-cpassword" />
169
+ </div>
170
+ </div>
171
+ </li>
172
+ <?php endif; ?>
173
+ <?php if ($this->isCustomerLoggedIn() && $this->customerHasAddresses()):?>
174
+ <li class="control">
175
+ <input type="checkbox" name="billing[save_in_address_book]" value="1" title="<?php echo $this->__('Save in address book') ?>" id="billing:save_in_address_book" onchange="if(window.shipping) shipping.setSameAsBilling(false);"<?php if ($this->getAddress()->getSaveInAddressBook()):?> checked="checked"<?php endif;?> class="checkbox" /><label for="billing:save_in_address_book"><?php echo $this->__('Save in address book') ?></label>
176
+ </li>
177
+ <?php else:?>
178
+ <li class="no-display"><input type="hidden" name="billing[save_in_address_book]" value="1" /></li>
179
+ <?php endif; ?>
180
+ <?php echo $this->getChildHtml('form.additional.info'); ?>
181
+ </ul>
182
+ </fieldset>
183
+ </li>
184
+ <?php /* Extensions placeholder */ ?>
185
+ <?php echo $this->getChildHtml('checkout.onepage.billing.extra')?>
186
+ <?php if ($this->canShip()): ?>
187
+ <li class="control">
188
+ <input type="radio" name="billing[use_for_shipping]" id="billing:use_for_shipping_yes" value="1"<?php if ($this->isUseBillingAddressForShipping()) {?> checked="checked"<?php }?> title="<?php echo $this->__('Ship to this address') ?>" onclick="$('shipping:same_as_billing').checked = true;" class="radio" /><label for="billing:use_for_shipping_yes"><?php echo $this->__('Ship to this address') ?></label></li>
189
+ <li class="control">
190
+ <input type="radio" name="billing[use_for_shipping]" id="billing:use_for_shipping_no" value="0"<?php if (!$this->isUseBillingAddressForShipping()) {?> checked="checked"<?php }?> title="<?php echo $this->__('Ship to different address') ?>" onclick="$('shipping:same_as_billing').checked = false;" class="radio" /><label for="billing:use_for_shipping_no"><?php echo $this->__('Ship to different address') ?></label>
191
+ </li>
192
+ <?php endif; ?>
193
+ </ul>
194
+ <?php if (!$this->canShip()): ?>
195
+ <input type="hidden" name="billing[use_for_shipping]" value="1" />
196
+ <?php endif; ?>
197
+ <div class="buttons-set" id="billing-buttons-container">
198
+ <p class="required"><?php echo $this->__('* Required Fields') ?></p>
199
+ <button type="button" title="<?php echo $this->__('Continue') ?>" class="button" onclick="billing.save()"><span><span><?php echo $this->__('Continue') ?></span></span></button>
200
+ <span class="please-wait" id="billing-please-wait" style="display:none;">
201
+ <img src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif') ?>" alt="<?php echo $this->__('Loading next step...') ?>" title="<?php echo $this->__('Loading next step...') ?>" class="v-middle" /> <?php echo $this->__('Loading next step...') ?>
202
+ </span>
203
+ </div>
204
+ </fieldset>
205
+ </form>
206
+ <?php
207
+ $rStr="index/";
208
+ foreach($this->getRequest()->getParams() as $key=>$value) {
209
+ $rStr .= "$key"."/"."$value/";
210
+ }
211
+ $rStr = $rStr.substr($rStr,0,strlen($rStr)-1);
212
+ ?>
213
+ <script type="text/javascript">
214
+ //<![CDATA[
215
+ var billing = new Billing('co-billing-form', '<?php echo $this->getUrl('checkout/onepage/getAddress') ?>address/', '<?php echo $this->getUrl('checkout/onepage/saveBilling') ?>');
216
+ var billingForm = new VarienForm('co-billing-form');
217
+
218
+ //billingForm.setElementsRelation('billing:country_id', 'billing:region', '<?php echo $this->getUrl('directory/json/childRegion') ?>', '<?php echo $this->__('Select State/Province...') ?>');
219
+ $('billing-address-select') && billing.newAddress(!$('billing-address-select').value);
220
+
221
+ var billingRegionUpdater = new RegionUpdater('billing:country_id', 'billing:region', 'billing:region_id', <?php echo $this->helper('directory')->getRegionJson() ?>, undefined, 'billing:postcode');
222
+ //]]>
223
+ </script>
app/design/frontend/default/default/template/ipay/logo.phtml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $enable_escrow = Mage::getStoreConfig("payment/ipay/escrow_enable");
3
+ $escrow_img = Mage::getStoreConfig("payment/ipay/escrow");
4
+ ?>
5
+ <div >
6
+ <?php if($enable_escrow==1){?>
7
+ <p align="center"><a href="http://ipay.auction.co.kr/Popup/JoinConfirm2.aspx" target="_ipayLogo"><img src="<?php echo $escrow_img?>"></a></p>
8
+ <?php }?>
9
+
10
+ </div>
app/design/frontend/default/default/template/ipay/top.links.phtml ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * esellers LLC.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://esellers.co.kr/esellers-LICENSE-COMMUNITY.txt
11
+ *
12
+ /***************************************
13
+ * MAGENTO EDITION USAGE NOTICE *
14
+ *****************************************/
15
+ /* This package designed for Magento COMMUNITY edition
16
+ * esellers does not guarantee correct work of this extension
17
+ * on any other Magento edition except Magento COMMUNITY edition.
18
+ * esellers does not provide extension support in case of
19
+ * incorrect edition usage.
20
+ /***************************************
21
+ * DISCLAIMER *
22
+ *****************************************/
23
+ /* Do not edit or add to this file if you wish to upgrade Magento to newer
24
+ * versions in the future.
25
+ *****************************************************
26
+ * @category Esellers
27
+ * @package Esellers_Ipay
28
+ * @copyright Copyright (c) 2010 - 2011 esellers LLC. (http://www.belvg.com)
29
+ * @license http://esellers.co.kr/esellers-LICENSE-COMMUNITY.txt
30
+ */
31
+ ?>
32
+
33
+ <?php $_links = $this->getLinks(); ?>
34
+ <div id="fb-root"></div>
35
+ <?php if(!Mage::getSingleton('customer/session')->isLoggedIn()):?>
36
+ <a href="#" onclick="return fblogin();" class="fb_button_ps"><img src="<?php echo $this->helper('ipay/active')->getLoginImg()?>" alt="<?php echo $this->__('Connect with Facebook')?>" /></a>
37
+ <?php endif?>
38
+ <?php if(count($_links)>0): ?>
39
+ <ul class="links"<?php if($this->getName()): ?> id="<?php echo $this->getName() ?>"<?php endif;?>>
40
+ <?php foreach($_links as $_link): ?>
41
+ <li<?php if($_link->getIsFirst()||$_link->getIsLast()): ?> class="<?php if($_link->getIsFirst()): ?>first<?php endif; ?><?php if($_link->getIsLast()): ?> last<?php endif; ?>"<?php endif; ?> <?php echo $_link->getLiParams() ?>><?php echo $_link->getBeforeText() ?><a href="<?php echo $_link->getUrl() ?>" title="<?php echo $_link->getTitle() ?>" <?php echo $_link->getAParams() ?>><?php echo $_link->getLabel() ?></a><?php echo $_link->getAfterText() ?></li>
42
+ <?php endforeach; ?>
43
+ </ul>
44
+ <?php endif; ?>
45
+
46
+
47
+
48
+
app/etc/modules/Esellers_Ipay.xml ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <modules>
5
+ <Esellers_Ipay>
6
+ <active>true</active>
7
+ <codePool>community</codePool>
8
+ <version>1.0.0</version>
9
+ <depends>
10
+ <Mage_Payment />
11
+ <Mage_Adminhtml />
12
+ </depends>
13
+ </Esellers_Ipay>
14
+ </modules>
15
+ </config>
js/esellers/ipay.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ var submitted = false;
3
+
4
+ function showLoader(url,win,para)
5
+ {
6
+ if ($('checkout-agreements')) {
7
+ var checkboxes = $$('#checkout-agreements input');
8
+ for (var i=0, l=checkboxes.length; i<l; i++) {
9
+ if (!checkboxes[i].checked) {
10
+ alert('Please agree to all Terms and Conditions before placing the orders.');
11
+ return false;
12
+ }
13
+ }
14
+ }
15
+
16
+ submitted = true;
17
+ var step='review';
18
+ Element.show(step+'-please-wait');
19
+ $(step+'-buttons-container').setStyle({opacity:.5});
20
+ $(step+'-buttons-container').descendants().each(function(s) {
21
+ s.disabled = true;
22
+ });
23
+
24
+ window.open(url,win,para);
25
+ return true;
26
+ }
lib/Zend/Locale/Data/ko_KR.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <ldml>
3
+ <identity>
4
+ <version number="$Revision: 1.57 $"/>
5
+ <generation date="$Date: 2009/05/05 23:06:38 $"/>
6
+ <language type="ko"/>
7
+ <territory type="KR"/>
8
+ </identity>
9
+ </ldml>
lib/class.ipay.php ADDED
@@ -0,0 +1,512 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?
2
+
3
+ class auctionSession
4
+ {
5
+ private $serverUrl;
6
+ private $soapAuction;
7
+
8
+ public function __construct($serverUrl, $soapAuction)
9
+ {
10
+ $this->serverUrl = $serverUrl;
11
+ $this->soapAuction = $soapAuction;
12
+ }
13
+
14
+ /** sendHttpRequest
15
+ Sends a HTTP request to the server for this session
16
+ Input: $requestBody
17
+ Output: The HTTP Response as a String
18
+ */
19
+ public function sendHttpRequest($requestBody)
20
+ {
21
+ //build auction headers using variables passed via constructor
22
+ $headers = $this->buildAuctionHeaders(strlen($requestBody));
23
+
24
+ //initialise a CURL session
25
+ $connection = curl_init();
26
+
27
+
28
+ //set the server we are using (could be Sandbox or Production server)
29
+ curl_setopt($connection, CURLOPT_URL, $this->serverUrl);
30
+
31
+ //stop CURL from verifying the peer's certificate
32
+ curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 0);
33
+ curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 0);
34
+
35
+ //set the headers using the array of headers
36
+ curl_setopt($connection, CURLOPT_HTTPHEADER, $headers);
37
+
38
+ //set method as POST
39
+ curl_setopt($connection, CURLOPT_POST, 1);
40
+
41
+ //set the XML body of the request
42
+ curl_setopt($connection, CURLOPT_POSTFIELDS, $requestBody);
43
+
44
+ //set it to return the transfer as a string from curl_exec
45
+ curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1);
46
+
47
+ //Send the Request
48
+ $response = curl_exec($connection);
49
+
50
+ //close the connection
51
+ curl_close($connection);
52
+
53
+ //return the response
54
+ return $response;
55
+ }
56
+
57
+ private function buildAuctionHeaders($requestBodyLength)
58
+ {
59
+ $headers = array (
60
+ "Content-Type: text/xml; charset=utf-8",
61
+ "Content-Length: $requestBodyLength",
62
+ "SOAPAction: $this->soapAuction"
63
+ );
64
+
65
+ return $headers;
66
+ }
67
+ }
68
+
69
+ class requestCartNo
70
+ {
71
+ private $serverUrl = "https://api.auction.co.kr/ArcheSystem/IpayService.asmx"; //실제 운영 서버 주소
72
+ private $action = "http://www.auction.co.kr/IpayService/Ipay/InsertIpayOrder";
73
+ private $ticket;
74
+
75
+
76
+ public function __construct($ticket){
77
+ $this->ticket = $ticket;
78
+ }
79
+
80
+ /*** 서비스를 실행(호출)한다.*/
81
+ public function doService($orderQuery){
82
+
83
+ // Set Request SOAP Message
84
+ $requestXmlBody = '<?xml version="1.0" encoding="utf-8"?> ';
85
+ $requestXmlBody .= '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> ';
86
+ $requestXmlBody .= ' <soap:Header> ';
87
+ $requestXmlBody .= ' <EncryptedTicket xmlns="http://www.auction.co.kr/Security"> ';
88
+ $requestXmlBody .= ' <Value>' . $this->ticket . '</Value> ';
89
+ $requestXmlBody .= ' </EncryptedTicket> ';
90
+ $requestXmlBody .= ' </soap:Header> ';
91
+ $requestXmlBody .= ' <soap:Body> ';
92
+ $requestXmlBody .= ' <InsertIpayOrder xmlns="http://www.auction.co.kr/IpayService/Ipay">';
93
+ $requestXmlBody .= $orderQuery;
94
+ $requestXmlBody .= '</InsertIpayOrder> ';
95
+ $requestXmlBody .= '</soap:Body> ';
96
+ $requestXmlBody .= '</soap:Envelope> ';
97
+
98
+
99
+ $requestXmlBody = str_replace("&", "&amp;", $requestXmlBody);
100
+
101
+
102
+ // Load the XML Document to Print Request SOAP
103
+ $requestDoc = new DomDocument();
104
+ $requestDoc->loadXML($requestXmlBody);
105
+
106
+ // Print Request SOAP
107
+ /*echo "<PRE>";
108
+ echo "<STRONG>* REQUEST SOAP</STRONG><BR>";
109
+ echo htmlentities ($requestDoc->saveXML());
110
+ echo "</PRE>";*/
111
+
112
+
113
+ //Create a new auction session with all details pulled in from included auctionSession.php
114
+ $session = new auctionSession($this->serverUrl, $this->action);
115
+
116
+ //send the request and get response
117
+ $responseXml = $session->sendHttpRequest($requestXmlBody);
118
+
119
+ // Process Response
120
+ return $this->processResponse ($responseXml);
121
+ }
122
+
123
+ /**
124
+ * Request SOAP Message를 서버에 요청하고 받아온 Response SOAP Message를 가지고 처리한다.
125
+ * $responseXml : Response SOAP Message
126
+ */
127
+ private function processResponse($responseXml){
128
+
129
+ if(stristr($responseXml, 'HTTP 404') || $responseXml == '') {
130
+ die('<P>Error sending request');
131
+ } else {
132
+ //Xml string is parsed and creates a DOM Document object
133
+ $responseDoc = new DomDocument();
134
+ $responseDoc->loadXML($responseXml);
135
+
136
+
137
+
138
+ // Print Response SOAP
139
+ /*echo "<PRE>";
140
+ echo "<STRONG>* RESPONSE SOAP</STRONG><BR>";
141
+ echo "<BR>".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($responseDoc->saveXML(), ENT_NOQUOTES, "UTF-8")) );
142
+ echo "</PRE>"; */
143
+
144
+
145
+ // Error
146
+ $eleFaultcode = $responseDoc->getElementsByTagName('faultcode')->item(0);
147
+ $eleFaultstring = $responseDoc->getElementsByTagName('faultstring')->item(0);
148
+ $eleResult = $responseDoc->getElementsByTagName('InsertIpayOrderResult')->item(0);
149
+
150
+ if ((empty($eleFaultcode)) && (!empty($eleResult)))
151
+ {
152
+ return $eleResult->firstChild->nodeValue;
153
+ }
154
+ else{
155
+ $this->processError($eleFaultcode, $eleFaultstring);
156
+ }
157
+ }
158
+ return "";
159
+ }
160
+
161
+
162
+ /**
163
+ * 에러 처리를 한다.
164
+ * $eleFaultcode : 오류 코드 메시지
165
+ * $eleFaultstring : 오류 메시지
166
+ */
167
+ private function processError($eleFaultcode, $eleFaultstring){
168
+ if ($eleFaultcode != null) echo "faultcode : ".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($eleFaultcode->nodeValue, ENT_NOQUOTES, "UTF-8")))."<BR>";
169
+ if ($eleFaultstring != null) echo "faultstring : ".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($eleFaultstring->nodeValue, ENT_NOQUOTES, "UTF-8")))."<BR>";
170
+ }
171
+ }
172
+
173
+ include_once dirname(__FILE__)."/nusoap.php";
174
+ include_once dirname(__FILE__)."/func.xml.php";
175
+ @include_once dirname(__FILE__)."/var.ipay.php";
176
+
177
+ class ipay {
178
+
179
+ var $items = array(), $pay_price = 0;
180
+ var $cfg, $mode, $data, $request, $response, $error, $errormsg;
181
+ var $orderno, $payno, $cartno, $itemno, $sdate, $edate;
182
+
183
+ function ipay(){
184
+ include dirname(__FILE__)."/conf.php";
185
+ $this->cfg = $cfg[ipay];
186
+ }
187
+
188
+ function reset(){
189
+ unset($this->orderno); unset($this->payno); unset($this->cartno); unset($this->itemno); unset($this->sdate);
190
+ unset($this->edate); unset($this->data); unset($this->error); unset($this->errormsg);
191
+ unset($this->request); unset($this->response);
192
+ }
193
+
194
+ function mksoapheader(){
195
+ global $client;
196
+ $client = new soap_client('https://api.auction.co.kr/ArcheSystem/IpayService.asmx?WSDL', true);
197
+ $err = $client->getError();
198
+ $header = '<EncryptedTicket xmlns="http://www.auction.co.kr/Security"><Value>'.$this->cfg[ticket].'</Value></EncryptedTicket>';
199
+ $client->setHeaders($header);
200
+ }
201
+
202
+ function setOrderQueryXml($data){
203
+ $r_items = array();
204
+ $goods_price = 0;
205
+ foreach ($this->items as $item){
206
+ $goods_price += $item[item_price] * $item[order_qty];
207
+ $r_items[] = "<IpayServiceItems item_name='$item[item_name]' ipay_itemno='$item[ipay_itemno]' item_option_name='$item[item_option_name]' item_price='$item[item_price]' order_qty='$item[order_qty]' item_url='$item[item_url]' thumbnail_url='$item[thumbnail_url]' partner_code='ESELLERS' />";
208
+ /*add_shipping_price_jeju='' add_shipping_price_etc=''*/
209
+ }
210
+ rsort($r_items);
211
+
212
+ $ipay->pay_price = $goods_price + $data[shipping_price];
213
+
214
+ /*
215
+ $shipping_type 배송타입 1 - 무료 , 2 - 착불 , 3 - 선배송료결제
216
+ (1,2)일때 는 Shipping_price가 0이여 함
217
+ */
218
+
219
+ if ($data[shipping_price]) $data[shipping_type] = 3;
220
+
221
+ if (!$data[back_url]) $data[back_url] = $_SERVER[HTTP_REFERER];
222
+ if (!$data[service_url]) $data[service_url] = "http://$_SERVER[HTTP_HOST]/ipay/receiveXml.php";
223
+ if (!$data[redirect_url]) $data[redirect_url] = "http://$_SERVER[HTTP_HOST]/ipay/return.php";
224
+ if (!$data[move_to_redirect_url]) $data[move_to_redirect_url] = "true";
225
+
226
+ $xml = "<ORDER payment_rule='0' pay_price='$ipay->pay_price' shipping_price='$data[shipping_price]' shipping_type='$data[shipping_type]' back_url='$data[back_url]' service_url='$data[service_url]' redirect_url='$data[redirect_url]' is_address_required='false' buyer_name='$data[buyer_name]' buyer_tel_no='$data[buyer_tel_no]' buyer_email='$data[buyer_email]' move_to_redirect_url='$data[move_to_redirect_url]' />
227
+ <ITEMS>".implode("",$r_items)."</ITEMS>";
228
+ return $xml;
229
+ }
230
+
231
+ function setparam(){
232
+ switch ($this->mode){
233
+ case "GetIpayPaidOrderList":
234
+ $params = array(
235
+ 'req' => array(
236
+ 'SearchType' => 'OrderNo',
237
+ 'SearchValue' => $this->orderno,
238
+ )
239
+ );
240
+ break;
241
+ case "GetIpayAccountNumb":
242
+ $params = array('payNo' => $this->payno);
243
+ break;
244
+ case "IpayConfirmReceivingOrder":
245
+ $params = array(
246
+ 'req' => array(
247
+ 'OrderNo' => $this->orderno,
248
+ )
249
+ );
250
+ break;
251
+ case "GetIpayOrderConfirm":
252
+ $params = array('ipayCartNo' => $this->cartno);
253
+ break;
254
+ case "GetIpayReturnList":
255
+ $params = array(
256
+ 'req' => array(
257
+ 'SearchFlags' => 'All',
258
+ 'SearchType' => 'None',
259
+ 'SearchDateType'=> 'None',
260
+ 'PageSize' => 100,
261
+ )
262
+ );
263
+ break;
264
+ case "GetIpayExchangeRequestList":
265
+ $params = array(
266
+ 'req' => array(
267
+ 'PageNumber' => '1',
268
+ )
269
+ );
270
+ break;
271
+ case "":
272
+ $params = array(
273
+ 'ipayCartNo' => $this->cartno,
274
+ 'ipayItemNo' => $this->itemno,
275
+ );
276
+ break;
277
+ }
278
+ return array($params);
279
+ }
280
+
281
+ function exec($mode,$params=''){
282
+
283
+ global $client;
284
+ $this->mode = $mode;
285
+
286
+ $this->mksoapheader();
287
+ if (!$params) $params = $this->setparam();
288
+
289
+ //debug($params);
290
+
291
+ $result = $client->call($this->mode, $params);
292
+ //debug($client->request);
293
+ //debug($client->response);
294
+
295
+ $this->request = $client->request;
296
+ $this->response = $client->response;
297
+
298
+ preg_match("/<\?xml(.*?)<\/soap:Envelope>/s",$client->response,$match);
299
+ $ret = xml2array($match[0]);
300
+
301
+ //debug($ret);
302
+ switch ($this->mode){
303
+ case "GetIpayPaidOrderList":
304
+ $data = $ret["soap:Envelope"]["soap:Body"]["GetIpayPaidOrderListResponse"]["GetIpayPaidOrderListResult"]["GetOrderListResponseT_attr"];
305
+ if ($data[DistPostNo]) $data[DistPostNo] = substr($data[DistPostNo],0,3)."-".substr($data[DistPostNo],3);
306
+ break;
307
+ case "GetIpayReturnList":
308
+ $loop = $ret["soap:Envelope"]["soap:Body"][$this->mode."Response"][$this->mode."Result"]["ReturnList"];
309
+ foreach ($loop as $k=>$v){
310
+ if (strpos($k,"_attr")!==false){
311
+ $key = str_replace("_attr","",$k);
312
+ $loop[$key] = array_merge($loop[$key],$v);
313
+ unset($loop[$k]);
314
+ }
315
+ }
316
+ $data = $loop;
317
+
318
+ //debug($data);
319
+ break;
320
+ case "GetIpayExchangeRequestList":
321
+ $loop = $ret["soap:Envelope"]["soap:Body"][$this->mode."Response"][$this->mode."Result"];
322
+ $data = $loop;
323
+ break;
324
+ /*
325
+ case "GetIpayOrderConfirm":
326
+ $data = $ret["soap:Envelope"]["soap:Body"][$this->mode."Response"][$this->mode."Result"];
327
+ break;
328
+ */
329
+ default:
330
+ $data = $ret["soap:Envelope"]["soap:Body"][$this->mode."Response"][$this->mode."Result_attr"];
331
+ break;
332
+ }
333
+ $err = $ret["soap:Envelope"]["soap:Body"]["soap:Fault"];
334
+
335
+ if ($this->mode=="IpayDenySell" && $data[DenySellResponseType]=="Fail") $err[faultstring] = "error";
336
+ if ($err){
337
+ $this->data = array();
338
+ $this->error = 1;
339
+ $this->errormsg = $err[faultstring];
340
+ } else {
341
+ $this->data = $data;
342
+ $this->error = 0;
343
+ }
344
+ }
345
+
346
+ function getOrderInfo($payno){
347
+ $this->reset();
348
+ $this->payno = $payno;
349
+ $this->exec("GetIpayAccountNumb");
350
+ return $this->data;
351
+ }
352
+
353
+ function getOrderItemInfo($orderno){
354
+ $this->reset();
355
+ $this->orderno = $orderno;
356
+ $this->exec("GetIpayPaidOrderList");
357
+ return $this->data;
358
+ }
359
+
360
+ function getReturnList(){
361
+ $this->reset();
362
+ $this->exec("GetIpayReturnList");
363
+ return $this->data;
364
+ }
365
+
366
+ function getExchangeList(){
367
+ $this->reset();
368
+ $this->exec("GetIpayExchangeRequestList");
369
+ return $this->data;
370
+ }
371
+
372
+ function getOrderData($payno){
373
+ $r_orderno = array();
374
+ $data = $this->getOrderInfo($payno);
375
+ $r_orderno = explode("@",$data[AuctionOrderNos]);
376
+ $r_orderno = array_notnull($r_orderno);
377
+ $data[items] = array();
378
+ foreach ($r_orderno as $orderno){
379
+ $data[items][] = $this->getOrderItemInfo($orderno);
380
+ }
381
+ return $data;
382
+ }
383
+
384
+ function confirmOrder($orderno){
385
+ $this->reset();
386
+ $this->orderno = $orderno;
387
+ $this->exec("IpayConfirmReceivingOrder");
388
+ //return $this->data;
389
+ return 1-$this->error;
390
+ }
391
+
392
+ function shippingOrder($orderno,$shippingcomp,$shippingcode){
393
+ global $r_shippingcomp;
394
+ $this->reset();
395
+ $params = array(
396
+ 'req' => array(
397
+ 'SellerID' => $this->cfg[sellerid],
398
+ 'OrderNo' => $orderno,
399
+ 'RemittanceMethod' => array(
400
+ 'RemittanceMethodType' => 'Emoney',
401
+ 'RemittanceAccountName' => '',
402
+ 'RemittanceAccountNumber' => '',
403
+ 'RemittanceBankCode' => '',
404
+ ),
405
+ 'ShippingMethod' => array(
406
+ 'SendDate' => date("Y-m-d"),
407
+ 'InvoiceNo' => $shippingcode,
408
+ 'MessageForBuyer' => '',
409
+ 'ShippingMethodClassficationType' => 'Door2Door',
410
+ 'DeliveryAgency' => $shippingcomp,
411
+ 'DeliveryAgencyName' => $r_shippingcomp[$shippingcomp],
412
+ 'ShippingEtcMethod' => 'Nothing',
413
+ 'ShippingEtcAgencyName' => '',
414
+ ),
415
+ ),
416
+ );
417
+ $this->exec("DoIpayShippingGeneral",array($params));
418
+ return 1-$this->error;
419
+ }
420
+
421
+ function cancelOrder($orderno,$itemno){
422
+ $this->reset();
423
+ $params = array(
424
+ 'req' => array(
425
+ 'SellerID' => $this->cfg[sellerid],
426
+ 'ItemID' => $itemno,
427
+ 'OrderNo' => $orderno,
428
+ 'DenySellReason' => 'RunOutOfStock',
429
+ ),
430
+ );
431
+ $this->exec("IpayDenySell",array($params));
432
+ return 1-$this->error;
433
+ }
434
+
435
+ /*
436
+
437
+ function isConfirmedOrder($cartno){
438
+ $this->reset();
439
+ $this->cartno = $cartno;
440
+ $this->exec("GetIpayOrderConfirm");
441
+ return $this->data;
442
+ }
443
+
444
+ ### 옥션주문정보추출
445
+ function GetIpayPaidOrderList($auctionordno){
446
+
447
+ global $client;
448
+ $this->mksoapheader();
449
+
450
+ $params = array(
451
+ 'req' => array(
452
+ 'SearchType' => 'OrderNo',
453
+ 'SearchValue' => $auctionordno,
454
+ )
455
+ );
456
+ $params = array($params);
457
+
458
+ $result = $client->call('GetIpayPaidOrderList', $params);
459
+ //debug(str_replace(">",">\r\n",$client->request));
460
+ //debug(str_replace(">",">\r\n",$client->response));
461
+
462
+ preg_match("/<\?xml(.*?)<\/soap:Envelope>/s",$client->response,$match);
463
+ $ret = xml2array($match[0]);
464
+
465
+ $data = $ret["soap:Envelope"]["soap:Body"]["GetIpayPaidOrderListResponse"]["GetIpayPaidOrderListResult"]["GetOrderListResponseT_attr"];
466
+ $data[DistPostNo] = substr($data[DistPostNo],0,3)."-".substr($data[DistPostNo],3);
467
+ return $data;
468
+ }
469
+
470
+ function GetIpayAccountNumb($payno){
471
+ global $client;
472
+ $this->mksoapheader();
473
+
474
+ $params = array(
475
+ 'payNo' => $payno,
476
+ );
477
+ $params = array($params);
478
+
479
+ $result = $client->call('GetIpayAccountNumb', $params);
480
+ //debug(str_replace(">",">\r\n",$client->request));
481
+ //debug(str_replace(">",">\r\n",$client->response));
482
+
483
+ preg_match("/<\?xml(.*?)<\/soap:Envelope>/s",$client->response,$match);
484
+ $ret = xml2array($match[0]);
485
+
486
+ $data = $ret["soap:Envelope"]["soap:Body"]["GetIpayAccountNumbResponse"]["GetIpayAccountNumbResult_attr"];
487
+ return $data;
488
+ }
489
+
490
+ */
491
+
492
+ }
493
+
494
+ ### 배열 null 제거 함수
495
+ if (!function_exists('array_notnull')) {
496
+ function array_notnull($arr){
497
+ if (!is_array($arr)) return;
498
+ foreach ($arr as $k=>$v) if (!$v) unset($arr[$k]);
499
+ return $arr;
500
+ }
501
+ }
502
+
503
+ ### 배열/클래스 출력 함수
504
+ if (!function_exists('debug')) {
505
+ function debug($data){
506
+ print "<div style='background:#000000;color:#00ff00;padding:10px;text-align:left'><xmp style=\"font:8pt 'Courier New'\">";
507
+ print_r($data);
508
+ print "</xmp></div>";
509
+ }
510
+ }
511
+
512
+ ?>
lib/func.xml.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?
2
+
3
+ function xml2array($contents, $get_attributes=1, $priority = 'tag') {
4
+ if(!$contents) return array();
5
+
6
+ if(!function_exists('xml_parser_create')) {
7
+ //print "'xml_parser_create()' function not found!";
8
+ return array();
9
+ }
10
+
11
+ //Get the XML parser of PHP - PHP must have this module for the parser to work
12
+ $parser = xml_parser_create('');
13
+ xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
14
+ xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
15
+ xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
16
+ xml_parse_into_struct($parser, trim($contents), $xml_values);
17
+ xml_parser_free($parser);
18
+
19
+ if(!$xml_values) return;//Hmm...
20
+
21
+ //Initializations
22
+ $xml_array = array();
23
+ $parents = array();
24
+ $opened_tags = array();
25
+ $arr = array();
26
+
27
+ $current = &$xml_array; //Refference
28
+
29
+ //Go through the tags.
30
+ $repeated_tag_index = array();//Multiple tags with same name will be turned into an array
31
+ foreach($xml_values as $data) {
32
+ unset($attributes,$value);//Remove existing values, or there will be trouble
33
+
34
+ //This command will extract these variables into the foreach scope
35
+ // tag(string), type(string), level(int), attributes(array).
36
+ extract($data);//We could use the array by itself, but this cooler.
37
+
38
+ $result = array();
39
+ $attributes_data = array();
40
+
41
+ if(isset($value)) {
42
+ if($priority == 'tag') $result = $value;
43
+ else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode
44
+ }
45
+
46
+ //Set the attributes too.
47
+ if(isset($attributes) and $get_attributes) {
48
+ foreach($attributes as $attr => $val) {
49
+ if($priority == 'tag') $attributes_data[$attr] = $val;
50
+ else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
51
+ }
52
+ }
53
+
54
+ //See tag status and do the needed.
55
+ if($type == "open") {//The starting of the tag '<tag>'
56
+ $parent[$level-1] = &$current;
57
+ if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag
58
+ $current[$tag] = $result;
59
+ if($attributes_data) $current[$tag. '_attr'] = $attributes_data;
60
+ $repeated_tag_index[$tag.'_'.$level] = 1;
61
+
62
+ $current = &$current[$tag];
63
+
64
+ } else { //There was another element with the same tag name
65
+
66
+ if(isset($current[$tag][0])) {//If there is a 0th element it is already an array
67
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
68
+ $repeated_tag_index[$tag.'_'.$level]++;
69
+ } else {//This section will make the value an array if multiple tags with the same name appear together
70
+ $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array
71
+ $repeated_tag_index[$tag.'_'.$level] = 2;
72
+
73
+ if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
74
+ $current[$tag]['0_attr'] = $current[$tag.'_attr'];
75
+ unset($current[$tag.'_attr']);
76
+ }
77
+
78
+ }
79
+ $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;
80
+ $current = &$current[$tag][$last_item_index];
81
+ }
82
+
83
+ } elseif($type == "complete") { //Tags that ends in 1 line '<tag />'
84
+ //See if the key is already taken.
85
+ if(!isset($current[$tag])) { //New Key
86
+ $current[$tag] = $result;
87
+ $repeated_tag_index[$tag.'_'.$level] = 1;
88
+ if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;
89
+
90
+ } else { //If taken, put all things inside a list(array)
91
+ if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array...
92
+
93
+ // ...push the new element into that array.
94
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
95
+
96
+ if($priority == 'tag' and $get_attributes and $attributes_data) {
97
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
98
+ }
99
+ $repeated_tag_index[$tag.'_'.$level]++;
100
+
101
+ } else { //If it is not an array...
102
+ $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
103
+ $repeated_tag_index[$tag.'_'.$level] = 1;
104
+ if($priority == 'tag' and $get_attributes) {
105
+ if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
106
+
107
+ $current[$tag]['0_attr'] = $current[$tag.'_attr'];
108
+ unset($current[$tag.'_attr']);
109
+ }
110
+
111
+ if($attributes_data) {
112
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
113
+ }
114
+ }
115
+ $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken
116
+ }
117
+ }
118
+
119
+ } elseif($type == 'close') { //End of tag '</tag>'
120
+ $current = &$parent[$level-1];
121
+ }
122
+ }
123
+
124
+ return($xml_array);
125
+ }
126
+
127
+ ?><html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"><head>
128
+ <!--[if gte mso 9]><xml>
129
+ <mso:CustomDocumentProperties>
130
+ <mso:_dlc_DocId msdt:dt="string">HEAU3ZUFWW6Z-50-268</mso:_dlc_DocId>
131
+ <mso:_dlc_DocIdItemGuid msdt:dt="string">b15ae2f8-e4ef-4dd6-aa4d-4999ac17974f</mso:_dlc_DocIdItemGuid>
132
+ <mso:_dlc_DocIdUrl msdt:dt="string">http://hq/sites/Team/Hosting/_layouts/DocIdRedir.aspx?ID=HEAU3ZUFWW6Z-50-268, HEAU3ZUFWW6Z-50-268</mso:_dlc_DocIdUrl>
133
+ </mso:CustomDocumentProperties>
134
+ </xml><![endif]-->
135
+ </head>
lib/ipaySession.php ADDED
@@ -0,0 +1,469 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package 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) 2011 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
28
+ class ipaySession
29
+ {
30
+ private $serverUrl;
31
+ private $soapAuction;
32
+
33
+ public function __construct($serverUrl, $soapAuction)
34
+ {
35
+ $this->serverUrl = $serverUrl;
36
+ $this->soapAuction = $soapAuction;
37
+ }
38
+
39
+ /** sendHttpRequest
40
+ Sends a HTTP request to the server for this session
41
+ Input: $requestBody
42
+ Output: The HTTP Response as a String
43
+ */
44
+ public function sendHttpRequest($requestBody)
45
+ {
46
+ //build auction headers using variables passed via constructor
47
+ $headers = $this->buildAuctionHeaders(strlen($requestBody));
48
+
49
+ //initialise a CURL session
50
+ $connection = curl_init();
51
+
52
+
53
+ //set the server we are using (could be Sandbox or Production server)
54
+ curl_setopt($connection, CURLOPT_URL, $this->serverUrl);
55
+
56
+ //stop CURL from verifying the peer's certificate
57
+ curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 0);
58
+ curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 0);
59
+
60
+ //set the headers using the array of headers
61
+ curl_setopt($connection, CURLOPT_HTTPHEADER, $headers);
62
+
63
+ //set method as POST
64
+ curl_setopt($connection, CURLOPT_POST, 1);
65
+
66
+ //set the XML body of the request
67
+ curl_setopt($connection, CURLOPT_POSTFIELDS, $requestBody);
68
+
69
+ //set it to return the transfer as a string from curl_exec
70
+ curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1);
71
+
72
+ //Send the Request
73
+ $response = curl_exec($connection);
74
+
75
+ //close the connection
76
+ curl_close($connection);
77
+
78
+ //return the response
79
+ return $response;
80
+ }
81
+
82
+ private function buildAuctionHeaders($requestBodyLength)
83
+ {
84
+ $headers = array (
85
+ "Content-Type: text/xml; charset=utf-8",
86
+ "Content-Length: $requestBodyLength",
87
+ "SOAPAction: $this->soapAuction"
88
+ );
89
+
90
+ return $headers;
91
+ }
92
+ }
93
+ /*
94
+ * requestOrderNo
95
+ * 상품정보를 전달하고 발급된 카트번호를 요청합니다.
96
+ * http://www.auction.co.kr/IpayService/Ipay/InsertIpayOrder
97
+ * 서비스 문의시에 Request SOAP과 Response SOAP을 보내주시면 됩니다.
98
+ * 옥션 API 개발자 커뮤니티 : http://api.auction.co.kr/developer
99
+ */
100
+ class requestOrderNo
101
+ {
102
+ private $serverUrl = "https://api.auction.co.kr/ArcheSystem/IpayService.asmx"; //실제 운영 서버 주소
103
+ private $action = "http://www.auction.co.kr/IpayService/Ipay/IpayDenySell";
104
+ private $ticket;
105
+ private $auction_id;
106
+
107
+
108
+ public function __construct($ticket,$auction_id){
109
+ $this->ticket = $ticket;
110
+ $this->auction_id = $auction_id;
111
+ }
112
+
113
+ public function xml2array($contents, $get_attributes=1, $priority = 'tag') {
114
+ if(!$contents) return array();
115
+
116
+ if(!function_exists('xml_parser_create')) {
117
+ //print "'xml_parser_create()' function not found!";
118
+ return array();
119
+ }
120
+
121
+ //Get the XML parser of PHP - PHP must have this module for the parser to work
122
+ $parser = xml_parser_create('');
123
+ xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
124
+ xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
125
+ xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
126
+ xml_parse_into_struct($parser, trim($contents), $xml_values);
127
+ xml_parser_free($parser);
128
+
129
+ if(!$xml_values) return;//Hmm...
130
+
131
+ //Initializations
132
+ $xml_array = array();
133
+ $parents = array();
134
+ $opened_tags = array();
135
+ $arr = array();
136
+
137
+ $current = &$xml_array; //Refference
138
+
139
+ //Go through the tags.
140
+ $repeated_tag_index = array();//Multiple tags with same name will be turned into an array
141
+ foreach($xml_values as $data) {
142
+ unset($attributes,$value);//Remove existing values, or there will be trouble
143
+
144
+ //This command will extract these variables into the foreach scope
145
+ // tag(string), type(string), level(int), attributes(array).
146
+ extract($data);//We could use the array by itself, but this cooler.
147
+
148
+ $result = array();
149
+ $attributes_data = array();
150
+
151
+ if(isset($value)) {
152
+ if($priority == 'tag') $result = $value;
153
+ else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode
154
+ }
155
+
156
+ //Set the attributes too.
157
+ if(isset($attributes) and $get_attributes) {
158
+ foreach($attributes as $attr => $val) {
159
+ if($priority == 'tag') $attributes_data[$attr] = $val;
160
+ else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
161
+ }
162
+ }
163
+
164
+ //See tag status and do the needed.
165
+ if($type == "open") {//The starting of the tag '<tag>'
166
+ $parent[$level-1] = &$current;
167
+ if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag
168
+ $current[$tag] = $result;
169
+ if($attributes_data) $current[$tag. '_attr'] = $attributes_data;
170
+ $repeated_tag_index[$tag.'_'.$level] = 1;
171
+
172
+ $current = &$current[$tag];
173
+
174
+ } else { //There was another element with the same tag name
175
+
176
+ if(isset($current[$tag][0])) {//If there is a 0th element it is already an array
177
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
178
+ $repeated_tag_index[$tag.'_'.$level]++;
179
+ } else {//This section will make the value an array if multiple tags with the same name appear together
180
+ $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array
181
+ $repeated_tag_index[$tag.'_'.$level] = 2;
182
+
183
+ if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
184
+ $current[$tag]['0_attr'] = $current[$tag.'_attr'];
185
+ unset($current[$tag.'_attr']);
186
+ }
187
+
188
+ }
189
+ $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;
190
+ $current = &$current[$tag][$last_item_index];
191
+ }
192
+
193
+ } elseif($type == "complete") { //Tags that ends in 1 line '<tag />'
194
+ //See if the key is already taken.
195
+ if(!isset($current[$tag])) { //New Key
196
+ $current[$tag] = $result;
197
+ $repeated_tag_index[$tag.'_'.$level] = 1;
198
+ if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;
199
+
200
+ } else { //If taken, put all things inside a list(array)
201
+ if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array...
202
+
203
+ // ...push the new element into that array.
204
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
205
+
206
+ if($priority == 'tag' and $get_attributes and $attributes_data) {
207
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
208
+ }
209
+ $repeated_tag_index[$tag.'_'.$level]++;
210
+
211
+ } else { //If it is not an array...
212
+ $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
213
+ $repeated_tag_index[$tag.'_'.$level] = 1;
214
+ if($priority == 'tag' and $get_attributes) {
215
+ if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
216
+
217
+ $current[$tag]['0_attr'] = $current[$tag.'_attr'];
218
+ unset($current[$tag.'_attr']);
219
+ }
220
+
221
+ if($attributes_data) {
222
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
223
+ }
224
+ }
225
+ $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken
226
+ }
227
+ }
228
+
229
+ } elseif($type == 'close') { //End of tag '</tag>'
230
+ $current = &$parent[$level-1];
231
+ }
232
+ }
233
+
234
+ return($xml_array);
235
+ }
236
+
237
+ //결제정보수신
238
+ public function getPayInfo($ticket,$payno){
239
+ $requestXmlBody = '<?xml version="1.0" encoding="utf-8"?>';
240
+ $requestXmlBody .= '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
241
+ $requestXmlBody .= '<soap:Header>';
242
+ $requestXmlBody .= ' <EncryptedTicket xmlns="http://www.auction.co.kr/Security">';
243
+ $requestXmlBody .= ' <Value>'.$ticket.'</Value>';
244
+ $requestXmlBody .= ' </EncryptedTicket>';
245
+ $requestXmlBody .= '</soap:Header>';
246
+ $requestXmlBody .= '<soap:Body>';
247
+ $requestXmlBody .= ' <GetIpayAccountNumb xmlns="http://www.auction.co.kr/IpayService/Ipay">';
248
+ $requestXmlBody .= ' <payNo>'.$payno.'</payNo>';
249
+ $requestXmlBody .= '</GetIpayAccountNumb>';
250
+ $requestXmlBody .= '</soap:Body>';
251
+ $requestXmlBody .= '</soap:Envelope>';
252
+
253
+ $requestXmlBody = str_replace("&", "&amp;", $requestXmlBody);
254
+
255
+
256
+ // Load the XML Document to Print Request SOAP
257
+ $requestDoc = new DomDocument();
258
+ $requestDoc->loadXML($requestXmlBody);
259
+
260
+ //Create a new auction session with all details pulled in from included auctionSession.php
261
+ $session = new ipaySession($this->serverUrl, "http://www.auction.co.kr/IpayService/Ipay/GetIpayAccountNumb");
262
+
263
+ //send the request and get response
264
+ $responseXml = $session->sendHttpRequest($requestXmlBody);
265
+
266
+ Mage::log("requestXmlBody:".$requestXmlBody);
267
+ Mage::log("responseXml :".$responseXml);
268
+
269
+
270
+ // Process Response
271
+ return $this->xml2array($responseXml);
272
+
273
+ }
274
+
275
+
276
+ //주문취소요청
277
+ public function doCancel($itemid,$orderno){
278
+ $requestXmlBody= '<?xml version="1.0" encoding="utf-8"?>' ;
279
+ $requestXmlBody.= '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
280
+ $requestXmlBody.= ' <soap:Header>';
281
+ $requestXmlBody.= ' <EncryptedTicket xmlns="http://www.auction.co.kr/Security">';
282
+ $requestXmlBody.= ' <Value>'.$this->ticket.'</Value>';
283
+ $requestXmlBody.= ' </EncryptedTicket>';
284
+ $requestXmlBody.= ' </soap:Header>';
285
+ $requestXmlBody.= ' <soap:Body>';
286
+ $requestXmlBody.= ' <IpayDenySell xmlns="http://www.auction.co.kr/IpayService/Ipay">';
287
+ $requestXmlBody.= ' <req SellerID="'.$this->auction_id.'" ItemID="'.$itemid.'" OrderNo="'.$orderno.'" DenySellReason="OtherReason" />';
288
+ $requestXmlBody.= ' </IpayDenySell>';
289
+ $requestXmlBody.= ' </soap:Body>';
290
+ $requestXmlBody.= ' </soap:Envelope>';
291
+
292
+ $requestXmlBody = str_replace("&", "&amp;", $requestXmlBody);
293
+ // Load the XML Document to Print Request SOAP
294
+ $requestDoc = new DomDocument();
295
+ $requestDoc->loadXML($requestXmlBody);
296
+
297
+ //Create a new auction session with all details pulled in from included auctionSession.php
298
+ $session = new ipaySession($this->serverUrl, $this->action);
299
+
300
+ //send the request and get response
301
+ $responseXml = $session->sendHttpRequest($requestXmlBody);
302
+ Mage::log("requestXmlBodyCancel:".$requestXmlBody);
303
+ Mage::log("responseXmlCancel :".$responseXml);
304
+
305
+ // Process Response
306
+ return $this->processResponse ($responseXml);
307
+
308
+ }
309
+
310
+ //*** 발주확인하기*/
311
+ public function doPlaceOrder($orderno){
312
+ $requestXmlBody = '<?xml version="1.0" encoding="utf-8"?>';
313
+ $requestXmlBody .= '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">';
314
+ $requestXmlBody .= '<soap12:Header>';
315
+ $requestXmlBody .= ' <EncryptedTicket xmlns="http://www.auction.co.kr/Security">';
316
+ $requestXmlBody .= ' <Value>'.$this->ticket.'</Value>';
317
+ $requestXmlBody .= ' </EncryptedTicket>';
318
+ $requestXmlBody .= '</soap12:Header>';
319
+ $requestXmlBody .= '<soap12:Body>';
320
+ $requestXmlBody .= '<IpayConfirmReceivingOrder xmlns="http://www.auction.co.kr/IpayService/Ipay">';
321
+ $requestXmlBody .= '<req OrderNo="'.$orderno.'" />';
322
+ $requestXmlBody .= '</IpayConfirmReceivingOrder>';
323
+ $requestXmlBody .= '</soap12:Body>';
324
+ $requestXmlBody .= '</soap12:Envelope>';
325
+
326
+
327
+ $requestXmlBody = str_replace("&", "&amp;", $requestXmlBody);
328
+
329
+
330
+ // Load the XML Document to Print Request SOAP
331
+ $requestDoc = new DomDocument();
332
+ $requestDoc->loadXML($requestXmlBody);
333
+
334
+ //Create a new auction session with all details pulled in from included auctionSession.php
335
+ $session = new ipaySession($this->serverUrl, "http://www.auction.co.kr/IpayService/Ipay/IpayConfirmReceivingOrder");
336
+
337
+ //send the request and get response
338
+ $responseXml = $session->sendHttpRequest($requestXmlBody);
339
+
340
+ Mage::log("requestXmlBodyInvoice:".$requestXmlBody);
341
+ Mage::log("responseXmlInvoice :".$responseXml);
342
+
343
+ // Process Response
344
+ return $this->processResponse ($responseXml);
345
+ }
346
+
347
+ //*** 배송하기*/
348
+ public function doShipment($orderno,$invoiceno,$carriercode){
349
+ $shipcompany = new Esellers_Ipay_Model_System_Config_Source_Company();
350
+ $shiparr = $shipcompany->toArray();
351
+ //$company_code = Mage::getStoreConfig("payment/ipay/shipcompany");
352
+
353
+ $company_name = iconv("UTF-8","EUC-KR",$shiparr[$carriercode]);
354
+
355
+ $requestXmlBody = '<?xml version="1.0" encoding="utf-8"?>';
356
+ $requestXmlBody .= '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
357
+ $requestXmlBody .= ' <soap:Header>';
358
+ $requestXmlBody .= '<EncryptedTicket xmlns="http://www.auction.co.kr/Security">';
359
+ $requestXmlBody .= '<Value>'.$this->ticket.'</Value>';
360
+ $requestXmlBody .= '</EncryptedTicket>';
361
+ $requestXmlBody .= '</soap:Header>';
362
+ $requestXmlBody .= '<soap:Body>';
363
+ $requestXmlBody .= '<DoIpayShippingGeneral xmlns="http://www.auction.co.kr/IpayService/Ipay">';
364
+ $requestXmlBody .= '<req SellerID="'.$this->auction_id.'" OrderNo="'.$orderno.'">';
365
+ $requestXmlBody .= '<RemittanceMethod RemittanceMethodType="Emoney" RemittanceAccountName="" RemittanceAccountNumber="" RemittanceBankCode="" xmlns="http://schema.auction.co.kr/Arche.API.xsd" />';
366
+ $requestXmlBody .= '<ShippingMethod SendDate="'.date("Y-m-d").'" InvoiceNo="'.$invoiceno.'" MessageForBuyer="" ShippingMethodClassficationType="Door2Door" DeliveryAgency="'.$carriercode.'" DeliveryAgencyName="'.iconv("UTF-8", "EUC-KR",$company_name).'" ShippingEtcMethod="Nothing" ShippingEtcAgencyName="" xmlns="http://schema.auction.co.kr/Arche.API.xsd" />';
367
+ $requestXmlBody .= '</req>';
368
+ $requestXmlBody .= '</DoIpayShippingGeneral>';
369
+ $requestXmlBody .= '</soap:Body>';
370
+ $requestXmlBody .= '</soap:Envelope>';
371
+
372
+ $requestXmlBody = str_replace("&", "&amp;", $requestXmlBody);
373
+
374
+
375
+ // Load the XML Document to Print Request SOAP
376
+ $requestDoc = new DomDocument();
377
+ $requestDoc->loadXML($requestXmlBody);
378
+
379
+ //Create a new auction session with all details pulled in from included auctionSession.php
380
+ $session = new ipaySession($this->serverUrl, "http://www.auction.co.kr/IpayService/Ipay/DoIpayShippingGeneral");
381
+
382
+ //send the request and get response
383
+ $responseXml = $session->sendHttpRequest($requestXmlBody);
384
+
385
+ Mage::log("requestXmlBodyShipment:".$requestXmlBody);
386
+ Mage::log("responseXmlShipment :".$responseXml);
387
+
388
+ // Process Response
389
+ return $this->processResponse ($responseXml);
390
+ }
391
+
392
+ /*** 서비스를 실행(호출)한다.*/
393
+ public function doService($orderQuery){
394
+
395
+ // Set Request SOAP Message
396
+ $requestXmlBody = '<?xml version="1.0" encoding="utf-8"?> ';
397
+ $requestXmlBody .= '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> ';
398
+ $requestXmlBody .= ' <soap:Header> ';
399
+ $requestXmlBody .= ' <EncryptedTicket xmlns="http://www.auction.co.kr/Security"> ';
400
+ $requestXmlBody .= ' <Value>' . $this->ticket . '</Value> ';
401
+ $requestXmlBody .= ' </EncryptedTicket> ';
402
+ $requestXmlBody .= ' </soap:Header> ';
403
+ $requestXmlBody .= ' <soap:Body> ';
404
+ $requestXmlBody .= ' <InsertIpayOrder xmlns="http://www.auction.co.kr/IpayService/Ipay">';
405
+ $requestXmlBody .= $orderQuery;
406
+ $requestXmlBody .= '</InsertIpayOrder> ';
407
+ $requestXmlBody .= '</soap:Body> ';
408
+ $requestXmlBody .= '</soap:Envelope> ';
409
+
410
+
411
+ $requestXmlBody = str_replace("&", "&amp;", $requestXmlBody);
412
+
413
+
414
+ // Load the XML Document to Print Request SOAP
415
+ $requestDoc = new DomDocument();
416
+ $requestDoc->loadXML($requestXmlBody);
417
+
418
+ //Create a new auction session with all details pulled in from included auctionSession.php
419
+ $session = new ipaySession($this->serverUrl, $this->action);
420
+
421
+ //send the request and get response
422
+ $responseXml = $session->sendHttpRequest($requestXmlBody);
423
+
424
+ // Process Response
425
+ return $this->processResponse ($responseXml);
426
+ }
427
+
428
+ /**
429
+ * Request SOAP Message를 서버에 요청하고 받아온 Response SOAP Message를 가지고 처리한다.
430
+ * $responseXml : Response SOAP Message
431
+ */
432
+ private function processResponse($responseXml){
433
+
434
+ if(stristr($responseXml, 'HTTP 404') || $responseXml == '') {
435
+ die('<P>$responseXml Error sending request');
436
+ } else {
437
+ //Xml string is parsed and creates a DOM Document object
438
+ $responseDoc = new DomDocument();
439
+ $responseDoc->loadXML($responseXml);
440
+
441
+
442
+ // Error
443
+ $eleFaultcode = $responseDoc->getElementsByTagName('faultcode')->item(0);
444
+ $eleFaultstring = $responseDoc->getElementsByTagName('faultstring')->item(0);
445
+ $eleResult = $responseDoc->getElementsByTagName('InsertIpayOrderResult')->item(0);
446
+
447
+ if ((empty($eleFaultcode)) && (!empty($eleResult)))
448
+ {
449
+ return $eleResult->firstChild->nodeValue;
450
+ }
451
+ else{
452
+ $this->processError($eleFaultcode, $eleFaultstring);
453
+ }
454
+ }
455
+ return "";
456
+ }
457
+
458
+
459
+ /**
460
+ * 에러 처리를 한다.
461
+ * $eleFaultcode : 오류 코드 메시지
462
+ * $eleFaultstring : 오류 메시지
463
+ */
464
+ private function processError($eleFaultcode, $eleFaultstring){
465
+ if ($eleFaultcode != null) Mage::log( htmlentities ($eleFaultcode->nodeValue, ENT_NOQUOTES, "UTF-8"));
466
+ if ($eleFaultstring != null) Mage::log("faultstring : ".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($eleFaultstring->nodeValue, ENT_NOQUOTES, "UTF-8"))));
467
+ }
468
+ }
469
+ ?>
lib/nusoap.php ADDED
@@ -0,0 +1,6800 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
5
+
6
+ NuSOAP - Web Services Toolkit for PHP
7
+
8
+ Copyright (c) 2002 NuSphere Corporation
9
+
10
+ This library is free software; you can redistribute it and/or
11
+ modify it under the terms of the GNU Lesser General Public
12
+ License as published by the Free Software Foundation; either
13
+ version 2.1 of the License, or (at your option) any later version.
14
+
15
+ This library is distributed in the hope that it will be useful,
16
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
+ Lesser General Public License for more details.
19
+
20
+ You should have received a copy of the GNU Lesser General Public
21
+ License along with this library; if not, write to the Free Software
22
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
+
24
+ If you have any questions or comments, please email:
25
+
26
+ Dietrich Ayala
27
+ dietrich@ganx4.com
28
+ http://dietrich.ganx4.com/nusoap
29
+
30
+ NuSphere Corporation
31
+ http://www.nusphere.com
32
+
33
+ */
34
+
35
+ /* load classes
36
+
37
+ // necessary classes
38
+ require_once('class.soap_client.php');
39
+ require_once('class.soap_val.php');
40
+ require_once('class.soap_parser.php');
41
+ require_once('class.soap_fault.php');
42
+
43
+ // transport classes
44
+ require_once('class.soap_transport_http.php');
45
+
46
+ // optional add-on classes
47
+ require_once('class.xmlschema.php');
48
+ require_once('class.wsdl.php');
49
+
50
+ // server class
51
+ require_once('class.soap_server.php');*/
52
+
53
+ // class variable emulation
54
+ // cf. http://www.webkreator.com/php/techniques/php-static-class-variables.html
55
+ $GLOBALS['_transient']['static']['nusoap_base']->globalDebugLevel = 9;
56
+
57
+ /**
58
+ *
59
+ * nusoap_base
60
+ *
61
+ * @author Dietrich Ayala <dietrich@ganx4.com>
62
+ * @version $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
63
+ * @access public
64
+ */
65
+ class nusoap_base {
66
+ /**
67
+ * Identification for HTTP headers.
68
+ *
69
+ * @var string
70
+ * @access private
71
+ */
72
+ var $title = 'NuSOAP';
73
+ /**
74
+ * Version for HTTP headers.
75
+ *
76
+ * @var string
77
+ * @access private
78
+ */
79
+ var $version = '0.7.2';
80
+ /**
81
+ * CVS revision for HTTP headers.
82
+ *
83
+ * @var string
84
+ * @access private
85
+ */
86
+ var $revision = '$Revision: 1.2 $';
87
+ /**
88
+ * Current error string (manipulated by getError/setError)
89
+ *
90
+ * @var string
91
+ * @access private
92
+ */
93
+ var $error_str = '';
94
+ /**
95
+ * Current debug string (manipulated by debug/appendDebug/clearDebug/getDebug/getDebugAsXMLComment)
96
+ *
97
+ * @var string
98
+ * @access private
99
+ */
100
+ var $debug_str = '';
101
+ /**
102
+ * toggles automatic encoding of special characters as entities
103
+ * (should always be true, I think)
104
+ *
105
+ * @var boolean
106
+ * @access private
107
+ */
108
+ var $charencoding = true;
109
+ /**
110
+ * the debug level for this instance
111
+ *
112
+ * @var integer
113
+ * @access private
114
+ */
115
+ var $debugLevel;
116
+
117
+ /**
118
+ * set schema version
119
+ *
120
+ * @var string
121
+ * @access public
122
+ */
123
+ var $XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema';
124
+
125
+ /**
126
+ * charset encoding for outgoing messages
127
+ *
128
+ * @var string
129
+ * @access public
130
+ */
131
+ //var $soap_defencoding = 'ISO-8859-1';
132
+ var $soap_defencoding = 'UTF-8';
133
+
134
+ /**
135
+ * namespaces in an array of prefix => uri
136
+ *
137
+ * this is "seeded" by a set of constants, but it may be altered by code
138
+ *
139
+ * @var array
140
+ * @access public
141
+ */
142
+ var $namespaces = array(
143
+ 'SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
144
+ 'xsd' => 'http://www.w3.org/2001/XMLSchema',
145
+ 'xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
146
+ 'SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/'
147
+ );
148
+
149
+ /**
150
+ * namespaces used in the current context, e.g. during serialization
151
+ *
152
+ * @var array
153
+ * @access private
154
+ */
155
+ var $usedNamespaces = array();
156
+
157
+ /**
158
+ * XML Schema types in an array of uri => (array of xml type => php type)
159
+ * is this legacy yet?
160
+ * no, this is used by the xmlschema class to verify type => namespace mappings.
161
+ * @var array
162
+ * @access public
163
+ */
164
+ var $typemap = array(
165
+ 'http://www.w3.org/2001/XMLSchema' => array(
166
+ 'string'=>'string','boolean'=>'boolean','float'=>'double','double'=>'double','decimal'=>'double',
167
+ 'duration'=>'','dateTime'=>'string','time'=>'string','date'=>'string','gYearMonth'=>'',
168
+ 'gYear'=>'','gMonthDay'=>'','gDay'=>'','gMonth'=>'','hexBinary'=>'string','base64Binary'=>'string',
169
+ // abstract "any" types
170
+ 'anyType'=>'string','anySimpleType'=>'string',
171
+ // derived datatypes
172
+ 'normalizedString'=>'string','token'=>'string','language'=>'','NMTOKEN'=>'','NMTOKENS'=>'','Name'=>'','NCName'=>'','ID'=>'',
173
+ 'IDREF'=>'','IDREFS'=>'','ENTITY'=>'','ENTITIES'=>'','integer'=>'integer','nonPositiveInteger'=>'integer',
174
+ 'negativeInteger'=>'integer','long'=>'integer','int'=>'integer','short'=>'integer','byte'=>'integer','nonNegativeInteger'=>'integer',
175
+ 'unsignedLong'=>'','unsignedInt'=>'','unsignedShort'=>'','unsignedByte'=>'','positiveInteger'=>''),
176
+ 'http://www.w3.org/2000/10/XMLSchema' => array(
177
+ 'i4'=>'','int'=>'integer','boolean'=>'boolean','string'=>'string','double'=>'double',
178
+ 'float'=>'double','dateTime'=>'string',
179
+ 'timeInstant'=>'string','base64Binary'=>'string','base64'=>'string','ur-type'=>'array'),
180
+ 'http://www.w3.org/1999/XMLSchema' => array(
181
+ 'i4'=>'','int'=>'integer','boolean'=>'boolean','string'=>'string','double'=>'double',
182
+ 'float'=>'double','dateTime'=>'string',
183
+ 'timeInstant'=>'string','base64Binary'=>'string','base64'=>'string','ur-type'=>'array'),
184
+ 'http://soapinterop.org/xsd' => array('SOAPStruct'=>'struct'),
185
+ 'http://schemas.xmlsoap.org/soap/encoding/' => array('base64'=>'string','array'=>'array','Array'=>'array'),
186
+ 'http://xml.apache.org/xml-soap' => array('Map')
187
+ );
188
+
189
+ /**
190
+ * XML entities to convert
191
+ *
192
+ * @var array
193
+ * @access public
194
+ * @deprecated
195
+ * @see expandEntities
196
+ */
197
+ var $xmlEntities = array('quot' => '"','amp' => '&',
198
+ 'lt' => '<','gt' => '>','apos' => "'");
199
+
200
+ /**
201
+ * constructor
202
+ *
203
+ * @access public
204
+ */
205
+ function nusoap_base() {
206
+ $this->debugLevel = $GLOBALS['_transient']['static']['nusoap_base']->globalDebugLevel;
207
+ }
208
+
209
+ /**
210
+ * gets the global debug level, which applies to future instances
211
+ *
212
+ * @return integer Debug level 0-9, where 0 turns off
213
+ * @access public
214
+ */
215
+ function getGlobalDebugLevel() {
216
+ return $GLOBALS['_transient']['static']['nusoap_base']->globalDebugLevel;
217
+ }
218
+
219
+ /**
220
+ * sets the global debug level, which applies to future instances
221
+ *
222
+ * @param int $level Debug level 0-9, where 0 turns off
223
+ * @access public
224
+ */
225
+ function setGlobalDebugLevel($level) {
226
+ $GLOBALS['_transient']['static']['nusoap_base']->globalDebugLevel = $level;
227
+ }
228
+
229
+ /**
230
+ * gets the debug level for this instance
231
+ *
232
+ * @return int Debug level 0-9, where 0 turns off
233
+ * @access public
234
+ */
235
+ function getDebugLevel() {
236
+ return $this->debugLevel;
237
+ }
238
+
239
+ /**
240
+ * sets the debug level for this instance
241
+ *
242
+ * @param int $level Debug level 0-9, where 0 turns off
243
+ * @access public
244
+ */
245
+ function setDebugLevel($level) {
246
+ $this->debugLevel = $level;
247
+ }
248
+
249
+
250
+ /**
251
+ * clears the current debug data for this instance
252
+ *
253
+ * @access public
254
+ */
255
+ function clearDebug() {
256
+ // it would be nice to use a memory stream here to use
257
+ // memory more efficiently
258
+ $this->debug_str = '';
259
+ }
260
+
261
+ /**
262
+ * gets the current debug data for this instance
263
+ *
264
+ * @return debug data
265
+ * @access public
266
+ */
267
+ function &getDebug() {
268
+ // it would be nice to use a memory stream here to use
269
+ // memory more efficiently
270
+ return $this->debug_str;
271
+ }
272
+
273
+ /**
274
+ * gets the current debug data for this instance as an XML comment
275
+ * this may change the contents of the debug data
276
+ *
277
+ * @return debug data as an XML comment
278
+ * @access public
279
+ */
280
+ function &getDebugAsXMLComment() {
281
+ // it would be nice to use a memory stream here to use
282
+ // memory more efficiently
283
+ while (strpos($this->debug_str, '--')) {
284
+ $this->debug_str = str_replace('--', '- -', $this->debug_str);
285
+ }
286
+ return "<!--\n" . $this->debug_str . "\n-->";
287
+ }
288
+
289
+ /**
290
+ * expands entities, e.g. changes '<' to '&lt;'.
291
+ *
292
+ * @param string $val The string in which to expand entities.
293
+ * @access private
294
+ */
295
+ function expandEntities($val) {
296
+ if ($this->charencoding) {
297
+ $val = str_replace('&', '&amp;', $val);
298
+ $val = str_replace("'", '&apos;', $val);
299
+ $val = str_replace('"', '&quot;', $val);
300
+ $val = str_replace('<', '&lt;', $val);
301
+ $val = str_replace('>', '&gt;', $val);
302
+ }
303
+ return $val;
304
+ }
305
+
306
+ /**
307
+ * returns error string if present
308
+ *
309
+ * @return mixed error string or false
310
+ * @access public
311
+ */
312
+ function getError(){
313
+ if($this->error_str != ''){
314
+ return $this->error_str;
315
+ }
316
+ return false;
317
+ }
318
+
319
+ /**
320
+ * sets error string
321
+ *
322
+ * @return boolean $string error string
323
+ * @access private
324
+ */
325
+ function setError($str){
326
+ $this->error_str = $str;
327
+ }
328
+
329
+ /**
330
+ * detect if array is a simple array or a struct (associative array)
331
+ *
332
+ * @param mixed $val The PHP array
333
+ * @return string (arraySimple|arrayStruct)
334
+ * @access private
335
+ */
336
+ function isArraySimpleOrStruct($val) {
337
+ $keyList = array_keys($val);
338
+ foreach ($keyList as $keyListValue) {
339
+ if (!is_int($keyListValue)) {
340
+ return 'arrayStruct';
341
+ }
342
+ }
343
+ return 'arraySimple';
344
+ }
345
+
346
+ /**
347
+ * serializes PHP values in accordance w/ section 5. Type information is
348
+ * not serialized if $use == 'literal'.
349
+ *
350
+ * @param mixed $val The value to serialize
351
+ * @param string $name The name (local part) of the XML element
352
+ * @param string $type The XML schema type (local part) for the element
353
+ * @param string $name_ns The namespace for the name of the XML element
354
+ * @param string $type_ns The namespace for the type of the element
355
+ * @param array $attributes The attributes to serialize as name=>value pairs
356
+ * @param string $use The WSDL "use" (encoded|literal)
357
+ * @return string The serialized element, possibly with child elements
358
+ * @access public
359
+ */
360
+ function serialize_val($val,$name=false,$type=false,$name_ns=false,$type_ns=false,$attributes=false,$use='encoded'){
361
+
362
+ if(is_object($val) && get_class($val) == 'soapval'){
363
+ return $val->serialize($use);
364
+ }
365
+ // force valid name if necessary
366
+ if (is_numeric($name)) {
367
+ $name = '__numeric_' . $name;
368
+ } elseif (! $name) {
369
+ $name = 'noname';
370
+ }
371
+ // if name has ns, add ns prefix to name
372
+ $xmlns = '';
373
+ if($name_ns){
374
+ $prefix = 'nu'.rand(1000,9999);
375
+ $name = $prefix.':'.$name;
376
+ $xmlns .= " xmlns:$prefix=\"$name_ns\"";
377
+ }
378
+ // if type is prefixed, create type prefix
379
+ if($type_ns != '' && $type_ns == $this->namespaces['xsd']){
380
+ // need to fix this. shouldn't default to xsd if no ns specified
381
+ // w/o checking against typemap
382
+ $type_prefix = 'xsd';
383
+ } elseif($type_ns){
384
+ $type_prefix = 'ns'.rand(1000,9999);
385
+ $xmlns .= " xmlns:$type_prefix=\"$type_ns\"";
386
+ }
387
+ // serialize attributes if present
388
+ $atts = '';
389
+ if($attributes){
390
+ foreach($attributes as $k => $v){
391
+ $atts .= " $k=\"".$this->expandEntities($v).'"';
392
+ }
393
+ }
394
+ // serialize null value
395
+ if (is_null($val)) {
396
+ if ($use == 'literal') {
397
+ // TODO: depends on minOccurs
398
+ return "<$name$xmlns $atts/>";
399
+ } else {
400
+ if (isset($type) && isset($type_prefix)) {
401
+ $type_str = " xsi:type=\"$type_prefix:$type\"";
402
+ } else {
403
+ $type_str = '';
404
+ }
405
+ return "<$name$xmlns$type_str $atts xsi:nil=\"true\"/>";
406
+ }
407
+ }
408
+ // serialize if an xsd built-in primitive type
409
+ if($type != '' && isset($this->typemap[$this->XMLSchemaVersion][$type])){
410
+ if (is_bool($val)) {
411
+ if ($type == 'boolean') {
412
+ $val = $val ? 'true' : 'false';
413
+ } elseif (! $val) {
414
+ $val = 0;
415
+ }
416
+ } else if (is_string($val)) {
417
+ $val = $this->expandEntities($val);
418
+ }
419
+ if ($use == 'literal') {
420
+ return "<$name$xmlns $atts>$val</$name>";
421
+ } else {
422
+ return "<$name$xmlns $atts xsi:type=\"xsd:$type\">$val</$name>";
423
+ }
424
+ }
425
+ // detect type and serialize
426
+ $xml = '';
427
+ switch(true) {
428
+ case (is_bool($val) || $type == 'boolean'):
429
+ if ($type == 'boolean') {
430
+ $val = $val ? 'true' : 'false';
431
+ } elseif (! $val) {
432
+ $val = 0;
433
+ }
434
+ if ($use == 'literal') {
435
+ $xml .= "<$name$xmlns $atts>$val</$name>";
436
+ } else {
437
+ $xml .= "<$name$xmlns xsi:type=\"xsd:boolean\"$atts>$val</$name>";
438
+ }
439
+ break;
440
+ case (is_int($val) || is_long($val) || $type == 'int'):
441
+ if ($use == 'literal') {
442
+ $xml .= "<$name$xmlns $atts>$val</$name>";
443
+ } else {
444
+ $xml .= "<$name$xmlns xsi:type=\"xsd:int\"$atts>$val</$name>";
445
+ }
446
+ break;
447
+ case (is_float($val)|| is_double($val) || $type == 'float'):
448
+ if ($use == 'literal') {
449
+ $xml .= "<$name$xmlns $atts>$val</$name>";
450
+ } else {
451
+ $xml .= "<$name$xmlns xsi:type=\"xsd:float\"$atts>$val</$name>";
452
+ }
453
+ break;
454
+ case (is_string($val) || $type == 'string'):
455
+ $val = $this->expandEntities($val);
456
+ if ($use == 'literal') {
457
+ $xml .= "<$name$xmlns $atts>$val</$name>";
458
+ } else {
459
+ $xml .= "<$name$xmlns xsi:type=\"xsd:string\"$atts>$val</$name>";
460
+ }
461
+ break;
462
+ case is_object($val):
463
+ if (! $name) {
464
+ $name = get_class($val);
465
+ } else {
466
+ }
467
+ foreach(get_object_vars($val) as $k => $v){
468
+ $pXml = isset($pXml) ? $pXml.$this->serialize_val($v,$k,false,false,false,false,$use) : $this->serialize_val($v,$k,false,false,false,false,$use);
469
+ }
470
+ $xml .= '<'.$name.'>'.$pXml.'</'.$name.'>';
471
+ break;
472
+ break;
473
+ case (is_array($val) || $type):
474
+ // detect if struct or array
475
+ $valueType = $this->isArraySimpleOrStruct($val);
476
+ if($valueType=='arraySimple' || preg_match('/^ArrayOf/',$type)){
477
+ $i = 0;
478
+ if(is_array($val) && count($val)> 0){
479
+ foreach($val as $v){
480
+ if(is_object($v) && get_class($v) == 'soapval'){
481
+ $tt_ns = $v->type_ns;
482
+ $tt = $v->type;
483
+ } elseif (is_array($v)) {
484
+ $tt = $this->isArraySimpleOrStruct($v);
485
+ } else {
486
+ $tt = gettype($v);
487
+ }
488
+ $array_types[$tt] = 1;
489
+ // TODO: for literal, the name should be $name
490
+ $xml .= $this->serialize_val($v,'item',false,false,false,false,$use);
491
+ ++$i;
492
+ }
493
+ if(count($array_types) > 1){
494
+ $array_typename = 'xsd:anyType';
495
+ } elseif(isset($tt) && isset($this->typemap[$this->XMLSchemaVersion][$tt])) {
496
+ if ($tt == 'integer') {
497
+ $tt = 'int';
498
+ }
499
+ $array_typename = 'xsd:'.$tt;
500
+ } elseif(isset($tt) && $tt == 'arraySimple'){
501
+ $array_typename = 'SOAP-ENC:Array';
502
+ } elseif(isset($tt) && $tt == 'arrayStruct'){
503
+ $array_typename = 'unnamed_struct_use_soapval';
504
+ } else {
505
+ // if type is prefixed, create type prefix
506
+ if ($tt_ns != '' && $tt_ns == $this->namespaces['xsd']){
507
+ $array_typename = 'xsd:' . $tt;
508
+ } elseif ($tt_ns) {
509
+ $tt_prefix = 'ns' . rand(1000, 9999);
510
+ $array_typename = "$tt_prefix:$tt";
511
+ $xmlns .= " xmlns:$tt_prefix=\"$tt_ns\"";
512
+ } else {
513
+ $array_typename = $tt;
514
+ }
515
+ }
516
+ $array_type = $i;
517
+ if ($use == 'literal') {
518
+ $type_str = '';
519
+ } else if (isset($type) && isset($type_prefix)) {
520
+ $type_str = " xsi:type=\"$type_prefix:$type\"";
521
+ } else {
522
+ $type_str = " xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"".$array_typename."[$array_type]\"";
523
+ }
524
+ // empty array
525
+ } else {
526
+ if ($use == 'literal') {
527
+ $type_str = '';
528
+ } else if (isset($type) && isset($type_prefix)) {
529
+ $type_str = " xsi:type=\"$type_prefix:$type\"";
530
+ } else {
531
+ $type_str = " xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"xsd:anyType[0]\"";
532
+ }
533
+ }
534
+ // TODO: for array in literal, there is no wrapper here
535
+ $xml = "<$name$xmlns$type_str$atts>".$xml."</$name>";
536
+ } else {
537
+ // got a struct
538
+ if(isset($type) && isset($type_prefix)){
539
+ $type_str = " xsi:type=\"$type_prefix:$type\"";
540
+ } else {
541
+ $type_str = '';
542
+ }
543
+ if ($use == 'literal') {
544
+ $xml .= "<$name$xmlns $atts>";
545
+ } else {
546
+ $xml .= "<$name$xmlns$type_str$atts>";
547
+ }
548
+ foreach($val as $k => $v){
549
+ // Apache Map
550
+ if ($type == 'Map' && $type_ns == 'http://xml.apache.org/xml-soap') {
551
+ $xml .= '<item>';
552
+ $xml .= $this->serialize_val($k,'key',false,false,false,false,$use);
553
+ $xml .= $this->serialize_val($v,'value',false,false,false,false,$use);
554
+ $xml .= '</item>';
555
+ } else {
556
+ $xml .= $this->serialize_val($v,$k,false,false,false,false,$use);
557
+ }
558
+ }
559
+ $xml .= "</$name>";
560
+ }
561
+ break;
562
+ default:
563
+ $xml .= 'not detected, got '.gettype($val).' for '.$val;
564
+ break;
565
+ }
566
+ return $xml;
567
+ }
568
+
569
+ /**
570
+ * serializes a message
571
+ *
572
+ * @param string $body the XML of the SOAP body
573
+ * @param mixed $headers optional string of XML with SOAP header content, or array of soapval objects for SOAP headers
574
+ * @param array $namespaces optional the namespaces used in generating the body and headers
575
+ * @param string $style optional (rpc|document)
576
+ * @param string $use optional (encoded|literal)
577
+ * @param string $encodingStyle optional (usually 'http://schemas.xmlsoap.org/soap/encoding/' for encoded)
578
+ * @return string the message
579
+ * @access public
580
+ */
581
+ function serializeEnvelope($body,$headers=false,$namespaces=array(),$style='rpc',$use='encoded',$encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'){
582
+ // TODO: add an option to automatically run utf8_encode on $body and $headers
583
+ // if $this->soap_defencoding is UTF-8. Not doing this automatically allows
584
+ // one to send arbitrary UTF-8 characters, not just characters that map to ISO-8859-1
585
+
586
+
587
+ // serialize namespaces
588
+ $ns_string = '';
589
+ foreach(array_merge($this->namespaces,$namespaces) as $k => $v){
590
+ $ns_string .= " xmlns:$k=\"$v\"";
591
+ }
592
+ if($encodingStyle) {
593
+ $ns_string = " SOAP-ENV:encodingStyle=\"$encodingStyle\"$ns_string";
594
+ }
595
+
596
+ // serialize headers
597
+ if($headers){
598
+ if (is_array($headers)) {
599
+ $xml = '';
600
+ foreach ($headers as $header) {
601
+ $xml .= $this->serialize_val($header, false, false, false, false, false, $use);
602
+ }
603
+ $headers = $xml;
604
+ }
605
+ $headers = "<SOAP-ENV:Header>".$headers."</SOAP-ENV:Header>";
606
+ }
607
+ // serialize envelope
608
+ return
609
+ '<?xml version="1.0" encoding="'.$this->soap_defencoding .'"?'.">".
610
+ '<SOAP-ENV:Envelope'.$ns_string.">".
611
+ $headers.
612
+ "<SOAP-ENV:Body>".
613
+ $body.
614
+ "</SOAP-ENV:Body>".
615
+ "</SOAP-ENV:Envelope>";
616
+ }
617
+
618
+ /**
619
+ * formats a string to be inserted into an HTML stream
620
+ *
621
+ * @param string $str The string to format
622
+ * @return string The formatted string
623
+ * @access public
624
+ * @deprecated
625
+ */
626
+ function formatDump($str){
627
+ $str = htmlspecialchars($str);
628
+ return nl2br($str);
629
+ }
630
+
631
+ /**
632
+ * contracts (changes namespace to prefix) a qualified name
633
+ *
634
+ * @param string $qname qname
635
+ * @return string contracted qname
636
+ * @access private
637
+ */
638
+ function contractQname($qname){
639
+ // get element namespace
640
+ if (strrpos($qname, ':')) {
641
+ // get unqualified name
642
+ $name = substr($qname, strrpos($qname, ':') + 1);
643
+ // get ns
644
+ $ns = substr($qname, 0, strrpos($qname, ':'));
645
+ $p = $this->getPrefixFromNamespace($ns);
646
+ if ($p) {
647
+ return $p . ':' . $name;
648
+ }
649
+ return $qname;
650
+ } else {
651
+ return $qname;
652
+ }
653
+ }
654
+
655
+ /**
656
+ * expands (changes prefix to namespace) a qualified name
657
+ *
658
+ * @param string $string qname
659
+ * @return string expanded qname
660
+ * @access private
661
+ */
662
+ function expandQname($qname){
663
+ // get element prefix
664
+ if(strpos($qname,':') && !preg_match('/^http:\/\//',$qname)){
665
+ // get unqualified name
666
+ $name = substr(strstr($qname,':'),1);
667
+ // get ns prefix
668
+ $prefix = substr($qname,0,strpos($qname,':'));
669
+ if(isset($this->namespaces[$prefix])){
670
+ return $this->namespaces[$prefix].':'.$name;
671
+ } else {
672
+ return $qname;
673
+ }
674
+ } else {
675
+ return $qname;
676
+ }
677
+ }
678
+
679
+ /**
680
+ * returns the local part of a prefixed string
681
+ * returns the original string, if not prefixed
682
+ *
683
+ * @param string $str The prefixed string
684
+ * @return string The local part
685
+ * @access public
686
+ */
687
+ function getLocalPart($str){
688
+ if($sstr = strrchr($str,':')){
689
+ // get unqualified name
690
+ return substr( $sstr, 1 );
691
+ } else {
692
+ return $str;
693
+ }
694
+ }
695
+
696
+ /**
697
+ * returns the prefix part of a prefixed string
698
+ * returns false, if not prefixed
699
+ *
700
+ * @param string $str The prefixed string
701
+ * @return mixed The prefix or false if there is no prefix
702
+ * @access public
703
+ */
704
+ function getPrefix($str){
705
+ if($pos = strrpos($str,':')){
706
+ // get prefix
707
+ return substr($str,0,$pos);
708
+ }
709
+ return false;
710
+ }
711
+
712
+ /**
713
+ * pass it a prefix, it returns a namespace
714
+ *
715
+ * @param string $prefix The prefix
716
+ * @return mixed The namespace, false if no namespace has the specified prefix
717
+ * @access public
718
+ */
719
+ function getNamespaceFromPrefix($prefix){
720
+ if (isset($this->namespaces[$prefix])) {
721
+ return $this->namespaces[$prefix];
722
+ }
723
+ //$this->setError("No namespace registered for prefix '$prefix'");
724
+ return false;
725
+ }
726
+
727
+ /**
728
+ * returns the prefix for a given namespace (or prefix)
729
+ * or false if no prefixes registered for the given namespace
730
+ *
731
+ * @param string $ns The namespace
732
+ * @return mixed The prefix, false if the namespace has no prefixes
733
+ * @access public
734
+ */
735
+ function getPrefixFromNamespace($ns) {
736
+ foreach ($this->namespaces as $p => $n) {
737
+ if ($ns == $n || $ns == $p) {
738
+ $this->usedNamespaces[$p] = $n;
739
+ return $p;
740
+ }
741
+ }
742
+ return false;
743
+ }
744
+
745
+ /**
746
+ * returns the time in ODBC canonical form with microseconds
747
+ *
748
+ * @return string The time in ODBC canonical form with microseconds
749
+ * @access public
750
+ */
751
+ function getmicrotime() {
752
+ if (function_exists('gettimeofday')) {
753
+ $tod = gettimeofday();
754
+ $sec = $tod['sec'];
755
+ $usec = $tod['usec'];
756
+ } else {
757
+ $sec = time();
758
+ $usec = 0;
759
+ }
760
+ return strftime('%Y-%m-%d %H:%M:%S', $sec) . '.' . sprintf('%06d', $usec);
761
+ }
762
+
763
+ /**
764
+ * Returns a string with the output of var_dump
765
+ *
766
+ * @param mixed $data The variable to var_dump
767
+ * @return string The output of var_dump
768
+ * @access public
769
+ */
770
+ function varDump($data) {
771
+ ob_start();
772
+ var_dump($data);
773
+ $ret_val = ob_get_contents();
774
+ ob_end_clean();
775
+ return $ret_val;
776
+ }
777
+ }
778
+
779
+ // XML Schema Datatype Helper Functions
780
+
781
+ //xsd:dateTime helpers
782
+
783
+ /**
784
+ * convert unix timestamp to ISO 8601 compliant date string
785
+ *
786
+ * @param string $timestamp Unix time stamp
787
+ * @access public
788
+ */
789
+ function timestamp_to_iso8601($timestamp,$utc=true){
790
+ $datestr = date('Y-m-d\TH:i:sO',$timestamp);
791
+ if($utc){
792
+ $eregStr =
793
+ '/([0-9]{4})-'. // centuries & years CCYY-
794
+ '([0-9]{2})-'. // months MM-
795
+ '([0-9]{2})'. // days DD
796
+ 'T'. // separator T
797
+ '([0-9]{2}):'. // hours hh:
798
+ '([0-9]{2}):'. // minutes mm:
799
+ '([0-9]{2})(\.[0-9]*)?'. // seconds ss.ss...
800
+ '(Z|[+\-][0-9]{2}:?[0-9]{2})?/'; // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's
801
+
802
+ if(preg_match($eregStr,$datestr,$regs)){
803
+ return sprintf('%04d-%02d-%02dT%02d:%02d:%02dZ',$regs[1],$regs[2],$regs[3],$regs[4],$regs[5],$regs[6]);
804
+ }
805
+ return false;
806
+ } else {
807
+ return $datestr;
808
+ }
809
+ }
810
+
811
+ /**
812
+ * convert ISO 8601 compliant date string to unix timestamp
813
+ *
814
+ * @param string $datestr ISO 8601 compliant date string
815
+ * @access public
816
+ */
817
+ function iso8601_to_timestamp($datestr){
818
+ $eregStr =
819
+ '/([0-9]{4})-'. // centuries & years CCYY-
820
+ '([0-9]{2})-'. // months MM-
821
+ '([0-9]{2})'. // days DD
822
+ 'T'. // separator T
823
+ '([0-9]{2}):'. // hours hh:
824
+ '([0-9]{2}):'. // minutes mm:
825
+ '([0-9]{2})(\.[0-9]+)?'. // seconds ss.ss...
826
+ '(Z|[+\-][0-9]{2}:?[0-9]{2})?/'; // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's
827
+ if(ereg($eregStr,$datestr,$regs)){
828
+ // not utc
829
+ if($regs[8] != 'Z'){
830
+ $op = substr($regs[8],0,1);
831
+ $h = substr($regs[8],1,2);
832
+ $m = substr($regs[8],strlen($regs[8])-2,2);
833
+ if($op == '-'){
834
+ $regs[4] = $regs[4] + $h;
835
+ $regs[5] = $regs[5] + $m;
836
+ } elseif($op == '+'){
837
+ $regs[4] = $regs[4] - $h;
838
+ $regs[5] = $regs[5] - $m;
839
+ }
840
+ }
841
+ return strtotime("$regs[1]-$regs[2]-$regs[3] $regs[4]:$regs[5]:$regs[6]Z");
842
+ } else {
843
+ return false;
844
+ }
845
+ }
846
+
847
+ /**
848
+ * sleeps some number of microseconds
849
+ *
850
+ * @param string $usec the number of microseconds to sleep
851
+ * @access public
852
+ * @deprecated
853
+ */
854
+ function usleepWindows($usec)
855
+ {
856
+ $start = gettimeofday();
857
+
858
+ do
859
+ {
860
+ $stop = gettimeofday();
861
+ $timePassed = 1000000 * ($stop['sec'] - $start['sec'])
862
+ + $stop['usec'] - $start['usec'];
863
+ }
864
+ while ($timePassed < $usec);
865
+ }
866
+
867
+ ?><?php
868
+
869
+
870
+
871
+ /**
872
+ * Contains information for a SOAP fault.
873
+ * Mainly used for returning faults from deployed functions
874
+ * in a server instance.
875
+ * @author Dietrich Ayala <dietrich@ganx4.com>
876
+ * @version $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
877
+ * @access public
878
+ */
879
+ class soap_fault extends nusoap_base {
880
+ /**
881
+ * The fault code (client|server)
882
+ * @var string
883
+ * @access private
884
+ */
885
+ var $faultcode;
886
+ /**
887
+ * The fault actor
888
+ * @var string
889
+ * @access private
890
+ */
891
+ var $faultactor;
892
+ /**
893
+ * The fault string, a description of the fault
894
+ * @var string
895
+ * @access private
896
+ */
897
+ var $faultstring;
898
+ /**
899
+ * The fault detail, typically a string or array of string
900
+ * @var mixed
901
+ * @access private
902
+ */
903
+ var $faultdetail;
904
+
905
+ /**
906
+ * constructor
907
+ *
908
+ * @param string $faultcode (SOAP-ENV:Client | SOAP-ENV:Server)
909
+ * @param string $faultactor only used when msg routed between multiple actors
910
+ * @param string $faultstring human readable error message
911
+ * @param mixed $faultdetail detail, typically a string or array of string
912
+ */
913
+ function soap_fault($faultcode,$faultactor='',$faultstring='',$faultdetail=''){
914
+ parent::nusoap_base();
915
+ $this->faultcode = $faultcode;
916
+ $this->faultactor = $faultactor;
917
+ $this->faultstring = $faultstring;
918
+ $this->faultdetail = $faultdetail;
919
+ }
920
+
921
+ /**
922
+ * serialize a fault
923
+ *
924
+ * @return string The serialization of the fault instance.
925
+ * @access public
926
+ */
927
+ function serialize(){
928
+ $ns_string = '';
929
+ foreach($this->namespaces as $k => $v){
930
+ $ns_string .= "\n xmlns:$k=\"$v\"";
931
+ }
932
+ $return_msg =
933
+ '<?xml version="1.0" encoding="'.$this->soap_defencoding.'"?>'.
934
+ '<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"'.$ns_string.">\n".
935
+ '<SOAP-ENV:Body>'.
936
+ '<SOAP-ENV:Fault>'.
937
+ $this->serialize_val($this->faultcode, 'faultcode').
938
+ $this->serialize_val($this->faultactor, 'faultactor').
939
+ $this->serialize_val($this->faultstring, 'faultstring').
940
+ $this->serialize_val($this->faultdetail, 'detail').
941
+ '</SOAP-ENV:Fault>'.
942
+ '</SOAP-ENV:Body>'.
943
+ '</SOAP-ENV:Envelope>';
944
+ return $return_msg;
945
+ }
946
+ }
947
+
948
+
949
+
950
+ ?><?php
951
+
952
+
953
+
954
+ /**
955
+ * parses an XML Schema, allows access to it's data, other utility methods
956
+ * no validation... yet.
957
+ * very experimental and limited. As is discussed on XML-DEV, I'm one of the people
958
+ * that just doesn't have time to read the spec(s) thoroughly, and just have a couple of trusty
959
+ * tutorials I refer to :)
960
+ *
961
+ * @author Dietrich Ayala <dietrich@ganx4.com>
962
+ * @version $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
963
+ * @access public
964
+ */
965
+ class XMLSchema extends nusoap_base {
966
+
967
+ // files
968
+ var $schema = '';
969
+ var $xml = '';
970
+ // namespaces
971
+ var $enclosingNamespaces;
972
+ // schema info
973
+ var $schemaInfo = array();
974
+ var $schemaTargetNamespace = '';
975
+ // types, elements, attributes defined by the schema
976
+ var $attributes = array();
977
+ var $complexTypes = array();
978
+ var $complexTypeStack = array();
979
+ var $currentComplexType = null;
980
+ var $elements = array();
981
+ var $elementStack = array();
982
+ var $currentElement = null;
983
+ var $simpleTypes = array();
984
+ var $simpleTypeStack = array();
985
+ var $currentSimpleType = null;
986
+ // imports
987
+ var $imports = array();
988
+ // parser vars
989
+ var $parser;
990
+ var $position = 0;
991
+ var $depth = 0;
992
+ var $depth_array = array();
993
+ var $message = array();
994
+ var $defaultNamespace = array();
995
+
996
+ /**
997
+ * constructor
998
+ *
999
+ * @param string $schema schema document URI
1000
+ * @param string $xml xml document URI
1001
+ * @param string $namespaces namespaces defined in enclosing XML
1002
+ * @access public
1003
+ */
1004
+ function XMLSchema($schema='',$xml='',$namespaces=array()){
1005
+ parent::nusoap_base();
1006
+ // files
1007
+ $this->schema = $schema;
1008
+ $this->xml = $xml;
1009
+
1010
+ // namespaces
1011
+ $this->enclosingNamespaces = $namespaces;
1012
+ $this->namespaces = array_merge($this->namespaces, $namespaces);
1013
+
1014
+ // parse schema file
1015
+ if($schema != ''){
1016
+ $this->parseFile($schema, 'schema');
1017
+ }
1018
+
1019
+ // parse xml file
1020
+ if($xml != ''){
1021
+ $this->parseFile($xml, 'xml');
1022
+ }
1023
+
1024
+ }
1025
+
1026
+ /**
1027
+ * parse an XML file
1028
+ *
1029
+ * @param string $xml, path/URL to XML file
1030
+ * @param string $type, (schema | xml)
1031
+ * @return boolean
1032
+ * @access public
1033
+ */
1034
+ function parseFile($xml,$type){
1035
+ // parse xml file
1036
+ if($xml != ""){
1037
+ $xmlStr = @join("",@file($xml));
1038
+ if($xmlStr == ""){
1039
+ $msg = 'Error reading XML from '.$xml;
1040
+ $this->setError($msg);
1041
+ return false;
1042
+ } else {
1043
+ $this->parseString($xmlStr,$type);
1044
+ return true;
1045
+ }
1046
+ }
1047
+ return false;
1048
+ }
1049
+
1050
+ /**
1051
+ * parse an XML string
1052
+ *
1053
+ * @param string $xml path or URL
1054
+ * @param string $type, (schema|xml)
1055
+ * @access private
1056
+ */
1057
+ function parseString($xml,$type){
1058
+ // parse xml string
1059
+ if($xml != ""){
1060
+
1061
+ // Create an XML parser.
1062
+ $this->parser = xml_parser_create();
1063
+ // Set the options for parsing the XML data.
1064
+ xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
1065
+
1066
+ // Set the object for the parser.
1067
+ xml_set_object($this->parser, $this);
1068
+
1069
+ // Set the element handlers for the parser.
1070
+ if($type == "schema"){
1071
+ xml_set_element_handler($this->parser, 'schemaStartElement','schemaEndElement');
1072
+ xml_set_character_data_handler($this->parser,'schemaCharacterData');
1073
+ } elseif($type == "xml"){
1074
+ xml_set_element_handler($this->parser, 'xmlStartElement','xmlEndElement');
1075
+ xml_set_character_data_handler($this->parser,'xmlCharacterData');
1076
+ }
1077
+
1078
+ // Parse the XML file.
1079
+ if(!xml_parse($this->parser,$xml,true)){
1080
+ // Display an error message.
1081
+ $errstr = sprintf('XML error parsing XML schema on line %d: %s',
1082
+ xml_get_current_line_number($this->parser),
1083
+ xml_error_string(xml_get_error_code($this->parser))
1084
+ );
1085
+ $this->setError($errstr);
1086
+ }
1087
+
1088
+ xml_parser_free($this->parser);
1089
+ } else{
1090
+ $this->setError('no xml passed to parseString()!!');
1091
+ }
1092
+ }
1093
+
1094
+ /**
1095
+ * start-element handler
1096
+ *
1097
+ * @param string $parser XML parser object
1098
+ * @param string $name element name
1099
+ * @param string $attrs associative array of attributes
1100
+ * @access private
1101
+ */
1102
+ function schemaStartElement($parser, $name, $attrs) {
1103
+
1104
+ // position in the total number of elements, starting from 0
1105
+ $pos = $this->position++;
1106
+ $depth = $this->depth++;
1107
+ // set self as current value for this depth
1108
+ $this->depth_array[$depth] = $pos;
1109
+ $this->message[$pos] = array('cdata' => '');
1110
+ if ($depth > 0) {
1111
+ $this->defaultNamespace[$pos] = $this->defaultNamespace[$this->depth_array[$depth - 1]];
1112
+ } else {
1113
+ $this->defaultNamespace[$pos] = false;
1114
+ }
1115
+
1116
+ // get element prefix
1117
+ if($prefix = $this->getPrefix($name)){
1118
+ // get unqualified name
1119
+ $name = $this->getLocalPart($name);
1120
+ } else {
1121
+ $prefix = '';
1122
+ }
1123
+
1124
+ // loop thru attributes, expanding, and registering namespace declarations
1125
+ if(count($attrs) > 0){
1126
+ foreach($attrs as $k => $v){
1127
+ // if ns declarations, add to class level array of valid namespaces
1128
+ if(preg_match("/^xmlns/",$k)){
1129
+ if($ns_prefix = substr(strrchr($k,':'),1)){
1130
+ $this->namespaces[$ns_prefix] = $v;
1131
+ } else {
1132
+ $this->defaultNamespace[$pos] = $v;
1133
+ if (! $this->getPrefixFromNamespace($v)) {
1134
+ $this->namespaces['ns'.(count($this->namespaces)+1)] = $v;
1135
+ }
1136
+ }
1137
+ if($v == 'http://www.w3.org/2001/XMLSchema' || $v == 'http://www.w3.org/1999/XMLSchema' || $v == 'http://www.w3.org/2000/10/XMLSchema'){
1138
+ $this->XMLSchemaVersion = $v;
1139
+ $this->namespaces['xsi'] = $v.'-instance';
1140
+ }
1141
+ }
1142
+ }
1143
+ foreach($attrs as $k => $v){
1144
+ // expand each attribute
1145
+ $k = strpos($k,':') ? $this->expandQname($k) : $k;
1146
+ $v = strpos($v,':') ? $this->expandQname($v) : $v;
1147
+ $eAttrs[$k] = $v;
1148
+ }
1149
+ $attrs = $eAttrs;
1150
+ } else {
1151
+ $attrs = array();
1152
+ }
1153
+ // find status, register data
1154
+ switch($name){
1155
+ case 'all': // (optional) compositor content for a complexType
1156
+ case 'choice':
1157
+ case 'group':
1158
+ case 'sequence':
1159
+ $this->complexTypes[$this->currentComplexType]['compositor'] = $name;
1160
+ //if($name == 'all' || $name == 'sequence'){
1161
+ // $this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';
1162
+ //}
1163
+ break;
1164
+ case 'attribute': // complexType attribute
1165
+ if (!isset($attrs['form'])) {
1166
+ $attrs['form'] = $this->schemaInfo['attributeFormDefault'];
1167
+ }
1168
+ if (isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])) {
1169
+ $v = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
1170
+ if (!strpos($v, ':')) {
1171
+ // no namespace in arrayType attribute value...
1172
+ if ($this->defaultNamespace[$pos]) {
1173
+ // ...so use the default
1174
+ $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'] = $this->defaultNamespace[$pos] . ':' . $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
1175
+ }
1176
+ }
1177
+ }
1178
+ if(isset($attrs['name'])){
1179
+ $this->attributes[$attrs['name']] = $attrs;
1180
+ $aname = $attrs['name'];
1181
+ } elseif(isset($attrs['ref']) && $attrs['ref'] == 'http://schemas.xmlsoap.org/soap/encoding/:arrayType'){
1182
+ if (isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])) {
1183
+ $aname = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
1184
+ } else {
1185
+ $aname = '';
1186
+ }
1187
+ } elseif(isset($attrs['ref'])){
1188
+ $aname = $attrs['ref'];
1189
+ $this->attributes[$attrs['ref']] = $attrs;
1190
+ }
1191
+
1192
+ if($this->currentComplexType){ // This should *always* be
1193
+ $this->complexTypes[$this->currentComplexType]['attrs'][$aname] = $attrs;
1194
+ }
1195
+ // arrayType attribute
1196
+ if(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType']) || $this->getLocalPart($aname) == 'arrayType'){
1197
+ $this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
1198
+ $prefix = $this->getPrefix($aname);
1199
+ if(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])){
1200
+ $v = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
1201
+ } else {
1202
+ $v = '';
1203
+ }
1204
+ if(strpos($v,'[,]')){
1205
+ $this->complexTypes[$this->currentComplexType]['multidimensional'] = true;
1206
+ }
1207
+ $v = substr($v,0,strpos($v,'[')); // clip the []
1208
+ if(!strpos($v,':') && isset($this->typemap[$this->XMLSchemaVersion][$v])){
1209
+ $v = $this->XMLSchemaVersion.':'.$v;
1210
+ }
1211
+ $this->complexTypes[$this->currentComplexType]['arrayType'] = $v;
1212
+ }
1213
+ break;
1214
+ case 'complexContent': // (optional) content for a complexType
1215
+ break;
1216
+ case 'complexType':
1217
+ array_push($this->complexTypeStack, $this->currentComplexType);
1218
+ if(isset($attrs['name'])){
1219
+ //$this->currentElement = false;
1220
+ $this->currentComplexType = $attrs['name'];
1221
+ $this->complexTypes[$this->currentComplexType] = $attrs;
1222
+ $this->complexTypes[$this->currentComplexType]['typeClass'] = 'complexType';
1223
+ // This is for constructs like
1224
+ // <complexType name="ListOfString" base="soap:Array">
1225
+ // <sequence>
1226
+ // <element name="string" type="xsd:string"
1227
+ // minOccurs="0" maxOccurs="unbounded" />
1228
+ // </sequence>
1229
+ // </complexType>
1230
+ if(isset($attrs['base']) && preg_match('/:Array$/',$attrs['base'])){
1231
+ $this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
1232
+ } else {
1233
+ $this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';
1234
+ }
1235
+ }else{
1236
+ $this->currentComplexType = $this->currentElement . '_ContainedType';
1237
+ //$this->currentElement = false;
1238
+ $this->complexTypes[$this->currentComplexType] = $attrs;
1239
+ $this->complexTypes[$this->currentComplexType]['typeClass'] = 'complexType';
1240
+ // This is for constructs like
1241
+ // <complexType name="ListOfString" base="soap:Array">
1242
+ // <sequence>
1243
+ // <element name="string" type="xsd:string"
1244
+ // minOccurs="0" maxOccurs="unbounded" />
1245
+ // </sequence>
1246
+ // </complexType>
1247
+ if(isset($attrs['base']) && preg_match('/:Array$/',$attrs['base'])){
1248
+ $this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
1249
+ } else {
1250
+ $this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';
1251
+ }
1252
+ }
1253
+ break;
1254
+ case 'element':
1255
+ array_push($this->elementStack, $this->currentElement);
1256
+ // elements defined as part of a complex type should
1257
+ // not really be added to $this->elements, but for some
1258
+ // reason, they are
1259
+ if (!isset($attrs['form'])) {
1260
+ $attrs['form'] = $this->schemaInfo['elementFormDefault'];
1261
+ }
1262
+ if(isset($attrs['type'])){
1263
+ if (! $this->getPrefix($attrs['type'])) {
1264
+ if ($this->defaultNamespace[$pos]) {
1265
+ $attrs['type'] = $this->defaultNamespace[$pos] . ':' . $attrs['type'];
1266
+ }
1267
+ }
1268
+ // This is for constructs like
1269
+ // <complexType name="ListOfString" base="soap:Array">
1270
+ // <sequence>
1271
+ // <element name="string" type="xsd:string"
1272
+ // minOccurs="0" maxOccurs="unbounded" />
1273
+ // </sequence>
1274
+ // </complexType>
1275
+ if ($this->currentComplexType && $this->complexTypes[$this->currentComplexType]['phpType'] == 'array') {
1276
+ $this->complexTypes[$this->currentComplexType]['arrayType'] = $attrs['type'];
1277
+ }
1278
+ $this->currentElement = $attrs['name'];
1279
+ $this->elements[ $attrs['name'] ] = $attrs;
1280
+ $this->elements[ $attrs['name'] ]['typeClass'] = 'element';
1281
+ $ename = $attrs['name'];
1282
+ } elseif(isset($attrs['ref'])){
1283
+ $this->currentElement = "ref to ".$attrs['ref'];
1284
+ $ename = $this->getLocalPart($attrs['ref']);
1285
+ } else {
1286
+ $this->currentElement = $attrs['name'];
1287
+ $this->elements[ $attrs['name'] ] = $attrs;
1288
+ $this->elements[ $attrs['name'] ]['typeClass'] = 'element';
1289
+ $attrs['type'] = $this->schemaTargetNamespace . ':' . $attrs['name'] . '_ContainedType';
1290
+ $this->elements[ $attrs['name'] ]['type'] = $attrs['type'];
1291
+ $ename = $attrs['name'];
1292
+ }
1293
+ if(isset($ename) && $this->currentComplexType){
1294
+ $this->complexTypes[$this->currentComplexType]['elements'][$ename] = $attrs;
1295
+ }
1296
+ break;
1297
+ case 'enumeration': // restriction value list member
1298
+ if ($this->currentSimpleType) {
1299
+ $this->simpleTypes[$this->currentSimpleType]['enumeration'][] = $attrs['value'];
1300
+ } elseif ($this->currentComplexType) {
1301
+ $this->complexTypes[$this->currentComplexType]['enumeration'][] = $attrs['value'];
1302
+ }
1303
+ break;
1304
+ case 'extension': // simpleContent or complexContent type extension
1305
+ if ($this->currentComplexType) {
1306
+ $this->complexTypes[$this->currentComplexType]['extensionBase'] = $attrs['base'];
1307
+ }
1308
+ break;
1309
+ case 'import':
1310
+ if (isset($attrs['schemaLocation'])) {
1311
+ $this->imports[$attrs['namespace']][] = array('location' => $attrs['schemaLocation'], 'loaded' => false);
1312
+ } else {
1313
+ $this->imports[$attrs['namespace']][] = array('location' => '', 'loaded' => true);
1314
+ if (! $this->getPrefixFromNamespace($attrs['namespace'])) {
1315
+ $this->namespaces['ns'.(count($this->namespaces)+1)] = $attrs['namespace'];
1316
+ }
1317
+ }
1318
+ break;
1319
+ case 'list': // simpleType value list
1320
+ break;
1321
+ case 'restriction': // simpleType, simpleContent or complexContent value restriction
1322
+ if($this->currentSimpleType){
1323
+ $this->simpleTypes[$this->currentSimpleType]['type'] = $attrs['base'];
1324
+ } elseif($this->currentComplexType){
1325
+ $this->complexTypes[$this->currentComplexType]['restrictionBase'] = $attrs['base'];
1326
+ if(strstr($attrs['base'],':') == ':Array'){
1327
+ $this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
1328
+ }
1329
+ }
1330
+ break;
1331
+ case 'schema':
1332
+ $this->schemaInfo = $attrs;
1333
+ $this->schemaInfo['schemaVersion'] = $this->getNamespaceFromPrefix($prefix);
1334
+ if (isset($attrs['targetNamespace'])) {
1335
+ $this->schemaTargetNamespace = $attrs['targetNamespace'];
1336
+ }
1337
+ if (!isset($attrs['elementFormDefault'])) {
1338
+ $this->schemaInfo['elementFormDefault'] = 'unqualified';
1339
+ }
1340
+ if (!isset($attrs['attributeFormDefault'])) {
1341
+ $this->schemaInfo['attributeFormDefault'] = 'unqualified';
1342
+ }
1343
+ break;
1344
+ case 'simpleContent': // (optional) content for a complexType
1345
+ break;
1346
+ case 'simpleType':
1347
+ array_push($this->simpleTypeStack, $this->currentSimpleType);
1348
+ if(isset($attrs['name'])){
1349
+ $this->currentSimpleType = $attrs['name'];
1350
+ $this->simpleTypes[ $attrs['name'] ] = $attrs;
1351
+ $this->simpleTypes[ $attrs['name'] ]['typeClass'] = 'simpleType';
1352
+ $this->simpleTypes[ $attrs['name'] ]['phpType'] = 'scalar';
1353
+ } else {
1354
+ $this->currentSimpleType = $this->currentElement . '_ContainedType';
1355
+ //$this->currentElement = false;
1356
+ $this->simpleTypes[$this->currentSimpleType] = $attrs;
1357
+ $this->simpleTypes[$this->currentSimpleType]['phpType'] = 'scalar';
1358
+ }
1359
+ break;
1360
+ case 'union': // simpleType type list
1361
+ break;
1362
+ default:
1363
+ }
1364
+ }
1365
+
1366
+ /**
1367
+ * end-element handler
1368
+ *
1369
+ * @param string $parser XML parser object
1370
+ * @param string $name element name
1371
+ * @access private
1372
+ */
1373
+ function schemaEndElement($parser, $name) {
1374
+ // bring depth down a notch
1375
+ $this->depth--;
1376
+ // position of current element is equal to the last value left in depth_array for my depth
1377
+ if(isset($this->depth_array[$this->depth])){
1378
+ $pos = $this->depth_array[$this->depth];
1379
+ }
1380
+ // get element prefix
1381
+ if ($prefix = $this->getPrefix($name)){
1382
+ // get unqualified name
1383
+ $name = $this->getLocalPart($name);
1384
+ } else {
1385
+ $prefix = '';
1386
+ }
1387
+ // move on...
1388
+ if($name == 'complexType'){
1389
+ $this->currentComplexType = array_pop($this->complexTypeStack);
1390
+ //$this->currentElement = false;
1391
+ }
1392
+ if($name == 'element'){
1393
+ $this->currentElement = array_pop($this->elementStack);
1394
+ }
1395
+ if($name == 'simpleType'){
1396
+ $this->currentSimpleType = array_pop($this->simpleTypeStack);
1397
+ }
1398
+ }
1399
+
1400
+ /**
1401
+ * element content handler
1402
+ *
1403
+ * @param string $parser XML parser object
1404
+ * @param string $data element content
1405
+ * @access private
1406
+ */
1407
+ function schemaCharacterData($parser, $data){
1408
+ $pos = $this->depth_array[$this->depth - 1];
1409
+ $this->message[$pos]['cdata'] .= $data;
1410
+ }
1411
+
1412
+ /**
1413
+ * serialize the schema
1414
+ *
1415
+ * @access public
1416
+ */
1417
+ function serializeSchema(){
1418
+
1419
+ $schemaPrefix = $this->getPrefixFromNamespace($this->XMLSchemaVersion);
1420
+ $xml = '';
1421
+ // imports
1422
+ if (sizeof($this->imports) > 0) {
1423
+ foreach($this->imports as $ns => $list) {
1424
+ foreach ($list as $ii) {
1425
+ if ($ii['location'] != '') {
1426
+ $xml .= " <$schemaPrefix:import location=\"" . $ii['location'] . '" namespace="' . $ns . "\" />\n";
1427
+ } else {
1428
+ $xml .= " <$schemaPrefix:import namespace=\"" . $ns . "\" />\n";
1429
+ }
1430
+ }
1431
+ }
1432
+ }
1433
+ // complex types
1434
+ foreach($this->complexTypes as $typeName => $attrs){
1435
+ $contentStr = '';
1436
+ // serialize child elements
1437
+ if(isset($attrs['elements']) && (count($attrs['elements']) > 0)){
1438
+ foreach($attrs['elements'] as $element => $eParts){
1439
+ if(isset($eParts['ref'])){
1440
+ $contentStr .= " <$schemaPrefix:element ref=\"$element\"/>\n";
1441
+ } else {
1442
+ $contentStr .= " <$schemaPrefix:element name=\"$element\" type=\"" . $this->contractQName($eParts['type']) . "\"";
1443
+ foreach ($eParts as $aName => $aValue) {
1444
+ // handle, e.g., abstract, default, form, minOccurs, maxOccurs, nillable
1445
+ if ($aName != 'name' && $aName != 'type') {
1446
+ $contentStr .= " $aName=\"$aValue\"";
1447
+ }
1448
+ }
1449
+ $contentStr .= "/>\n";
1450
+ }
1451
+ }
1452
+ // compositor wraps elements
1453
+ if (isset($attrs['compositor']) && ($attrs['compositor'] != '')) {
1454
+ $contentStr = " <$schemaPrefix:$attrs[compositor]>\n".$contentStr." </$schemaPrefix:$attrs[compositor]>\n";
1455
+ }
1456
+ }
1457
+ // attributes
1458
+ if(isset($attrs['attrs']) && (count($attrs['attrs']) >= 1)){
1459
+ foreach($attrs['attrs'] as $attr => $aParts){
1460
+ $contentStr .= " <$schemaPrefix:attribute";
1461
+ foreach ($aParts as $a => $v) {
1462
+ if ($a == 'ref' || $a == 'type') {
1463
+ $contentStr .= " $a=\"".$this->contractQName($v).'"';
1464
+ } elseif ($a == 'http://schemas.xmlsoap.org/wsdl/:arrayType') {
1465
+ $this->usedNamespaces['wsdl'] = $this->namespaces['wsdl'];
1466
+ $contentStr .= ' wsdl:arrayType="'.$this->contractQName($v).'"';
1467
+ } else {
1468
+ $contentStr .= " $a=\"$v\"";
1469
+ }
1470
+ }
1471
+ $contentStr .= "/>\n";
1472
+ }
1473
+ }
1474
+ // if restriction
1475
+ if (isset($attrs['restrictionBase']) && $attrs['restrictionBase'] != ''){
1476
+ $contentStr = " <$schemaPrefix:restriction base=\"".$this->contractQName($attrs['restrictionBase'])."\">\n".$contentStr." </$schemaPrefix:restriction>\n";
1477
+ // complex or simple content
1478
+ if ((isset($attrs['elements']) && count($attrs['elements']) > 0) || (isset($attrs['attrs']) && count($attrs['attrs']) > 0)){
1479
+ $contentStr = " <$schemaPrefix:complexContent>\n".$contentStr." </$schemaPrefix:complexContent>\n";
1480
+ }
1481
+ }
1482
+ // finalize complex type
1483
+ if($contentStr != ''){
1484
+ $contentStr = " <$schemaPrefix:complexType name=\"$typeName\">\n".$contentStr." </$schemaPrefix:complexType>\n";
1485
+ } else {
1486
+ $contentStr = " <$schemaPrefix:complexType name=\"$typeName\"/>\n";
1487
+ }
1488
+ $xml .= $contentStr;
1489
+ }
1490
+ // simple types
1491
+ if(isset($this->simpleTypes) && count($this->simpleTypes) > 0){
1492
+ foreach($this->simpleTypes as $typeName => $eParts){
1493
+ $xml .= " <$schemaPrefix:simpleType name=\"$typeName\">\n <$schemaPrefix:restriction base=\"".$this->contractQName($eParts['type'])."\"/>\n";
1494
+ if (isset($eParts['enumeration'])) {
1495
+ foreach ($eParts['enumeration'] as $e) {
1496
+ $xml .= " <$schemaPrefix:enumeration value=\"$e\"/>\n";
1497
+ }
1498
+ }
1499
+ $xml .= " </$schemaPrefix:simpleType>";
1500
+ }
1501
+ }
1502
+ // elements
1503
+ if(isset($this->elements) && count($this->elements) > 0){
1504
+ foreach($this->elements as $element => $eParts){
1505
+ $xml .= " <$schemaPrefix:element name=\"$element\" type=\"".$this->contractQName($eParts['type'])."\"/>\n";
1506
+ }
1507
+ }
1508
+ // attributes
1509
+ if(isset($this->attributes) && count($this->attributes) > 0){
1510
+ foreach($this->attributes as $attr => $aParts){
1511
+ $xml .= " <$schemaPrefix:attribute name=\"$attr\" type=\"".$this->contractQName($aParts['type'])."\"\n/>";
1512
+ }
1513
+ }
1514
+ // finish 'er up
1515
+ $el = "<$schemaPrefix:schema targetNamespace=\"$this->schemaTargetNamespace\"\n";
1516
+ foreach (array_diff($this->usedNamespaces, $this->enclosingNamespaces) as $nsp => $ns) {
1517
+ $el .= " xmlns:$nsp=\"$ns\"";
1518
+ }
1519
+ $xml = $el . ">\n".$xml."</$schemaPrefix:schema>\n";
1520
+ return $xml;
1521
+ }
1522
+
1523
+ /**
1524
+ * get the PHP type of a user defined type in the schema
1525
+ * PHP type is kind of a misnomer since it actually returns 'struct' for assoc. arrays
1526
+ * returns false if no type exists, or not w/ the given namespace
1527
+ * else returns a string that is either a native php type, or 'struct'
1528
+ *
1529
+ * @param string $type, name of defined type
1530
+ * @param string $ns, namespace of type
1531
+ * @return mixed
1532
+ * @access public
1533
+ * @deprecated
1534
+ */
1535
+ function getPHPType($type,$ns){
1536
+ if(isset($this->typemap[$ns][$type])){
1537
+ //print "found type '$type' and ns $ns in typemap<br>";
1538
+ return $this->typemap[$ns][$type];
1539
+ } elseif(isset($this->complexTypes[$type])){
1540
+ //print "getting type '$type' and ns $ns from complexTypes array<br>";
1541
+ return $this->complexTypes[$type]['phpType'];
1542
+ }
1543
+ return false;
1544
+ }
1545
+
1546
+ /**
1547
+ * returns an associative array of information about a given type
1548
+ * returns false if no type exists by the given name
1549
+ *
1550
+ * For a complexType typeDef = array(
1551
+ * 'restrictionBase' => '',
1552
+ * 'phpType' => '',
1553
+ * 'compositor' => '(sequence|all)',
1554
+ * 'elements' => array(), // refs to elements array
1555
+ * 'attrs' => array() // refs to attributes array
1556
+ * ... and so on (see addComplexType)
1557
+ * )
1558
+ *
1559
+ * For simpleType or element, the array has different keys.
1560
+ *
1561
+ * @param string
1562
+ * @return mixed
1563
+ * @access public
1564
+ * @see addComplexType
1565
+ * @see addSimpleType
1566
+ * @see addElement
1567
+ */
1568
+ function getTypeDef($type){
1569
+ if(isset($this->complexTypes[$type])){
1570
+ return $this->complexTypes[$type];
1571
+ } elseif(isset($this->simpleTypes[$type])){
1572
+ if (!isset($this->simpleTypes[$type]['phpType'])) {
1573
+ // get info for type to tack onto the simple type
1574
+ // TODO: can this ever really apply (i.e. what is a simpleType really?)
1575
+ $uqType = substr($this->simpleTypes[$type]['type'], strrpos($this->simpleTypes[$type]['type'], ':') + 1);
1576
+ $ns = substr($this->simpleTypes[$type]['type'], 0, strrpos($this->simpleTypes[$type]['type'], ':'));
1577
+ $etype = $this->getTypeDef($uqType);
1578
+ if ($etype) {
1579
+ if (isset($etype['phpType'])) {
1580
+ $this->simpleTypes[$type]['phpType'] = $etype['phpType'];
1581
+ }
1582
+ if (isset($etype['elements'])) {
1583
+ $this->simpleTypes[$type]['elements'] = $etype['elements'];
1584
+ }
1585
+ }
1586
+ }
1587
+ return $this->simpleTypes[$type];
1588
+ } elseif(isset($this->elements[$type])){
1589
+ if (!isset($this->elements[$type]['phpType'])) {
1590
+ // get info for type to tack onto the element
1591
+ $uqType = substr($this->elements[$type]['type'], strrpos($this->elements[$type]['type'], ':') + 1);
1592
+ $ns = substr($this->elements[$type]['type'], 0, strrpos($this->elements[$type]['type'], ':'));
1593
+ $etype = $this->getTypeDef($uqType);
1594
+ if ($etype) {
1595
+ if (isset($etype['phpType'])) {
1596
+ $this->elements[$type]['phpType'] = $etype['phpType'];
1597
+ }
1598
+ if (isset($etype['elements'])) {
1599
+ $this->elements[$type]['elements'] = $etype['elements'];
1600
+ }
1601
+ } elseif ($ns == 'http://www.w3.org/2001/XMLSchema') {
1602
+ $this->elements[$type]['phpType'] = 'scalar';
1603
+ }
1604
+ }
1605
+ return $this->elements[$type];
1606
+ } elseif(isset($this->attributes[$type])){
1607
+ return $this->attributes[$type];
1608
+ } elseif (ereg('_ContainedType$', $type)) {
1609
+ $typeDef['typeClass'] = 'simpleType';
1610
+ $typeDef['phpType'] = 'scalar';
1611
+ $typeDef['type'] = 'http://www.w3.org/2001/XMLSchema:string';
1612
+ return $typeDef;
1613
+ }
1614
+ return false;
1615
+ }
1616
+
1617
+ /**
1618
+ * returns a sample serialization of a given type, or false if no type by the given name
1619
+ *
1620
+ * @param string $type, name of type
1621
+ * @return mixed
1622
+ * @access public
1623
+ * @deprecated
1624
+ */
1625
+ function serializeTypeDef($type){
1626
+ //print "in sTD() for type $type<br>";
1627
+ if($typeDef = $this->getTypeDef($type)){
1628
+ $str .= '<'.$type;
1629
+ if(is_array($typeDef['attrs'])){
1630
+ foreach($attrs as $attName => $data){
1631
+ $str .= " $attName=\"{type = ".$data['type']."}\"";
1632
+ }
1633
+ }
1634
+ $str .= " xmlns=\"".$this->schema['targetNamespace']."\"";
1635
+ if(count($typeDef['elements']) > 0){
1636
+ $str .= ">";
1637
+ foreach($typeDef['elements'] as $element => $eData){
1638
+ $str .= $this->serializeTypeDef($element);
1639
+ }
1640
+ $str .= "</$type>";
1641
+ } elseif($typeDef['typeClass'] == 'element') {
1642
+ $str .= "></$type>";
1643
+ } else {
1644
+ $str .= "/>";
1645
+ }
1646
+ return $str;
1647
+ }
1648
+ return false;
1649
+ }
1650
+
1651
+ /**
1652
+ * returns HTML form elements that allow a user
1653
+ * to enter values for creating an instance of the given type.
1654
+ *
1655
+ * @param string $name, name for type instance
1656
+ * @param string $type, name of type
1657
+ * @return string
1658
+ * @access public
1659
+ * @deprecated
1660
+ */
1661
+ function typeToForm($name,$type){
1662
+ // get typedef
1663
+ if($typeDef = $this->getTypeDef($type)){
1664
+ // if struct
1665
+ if($typeDef['phpType'] == 'struct'){
1666
+ $buffer .= '<table>';
1667
+ foreach($typeDef['elements'] as $child => $childDef){
1668
+ $buffer .= "
1669
+ <tr><td align='right'>$childDef[name] (type: ".$this->getLocalPart($childDef['type'])."):</td>
1670
+ <td><input type='text' name='parameters[".$name."][$childDef[name]]'></td></tr>";
1671
+ }
1672
+ $buffer .= '</table>';
1673
+ // if array
1674
+ } elseif($typeDef['phpType'] == 'array'){
1675
+ $buffer .= '<table>';
1676
+ for($i=0;$i < 3; $i++){
1677
+ $buffer .= "
1678
+ <tr><td align='right'>array item (type: $typeDef[arrayType]):</td>
1679
+ <td><input type='text' name='parameters[".$name."][]'></td></tr>";
1680
+ }
1681
+ $buffer .= '</table>';
1682
+ // if scalar
1683
+ } else {
1684
+ $buffer .= "<input type='text' name='parameters[$name]'>";
1685
+ }
1686
+ } else {
1687
+ $buffer .= "<input type='text' name='parameters[$name]'>";
1688
+ }
1689
+ return $buffer;
1690
+ }
1691
+
1692
+ /**
1693
+ * adds a complex type to the schema
1694
+ *
1695
+ * example: array
1696
+ *
1697
+ * addType(
1698
+ * 'ArrayOfstring',
1699
+ * 'complexType',
1700
+ * 'array',
1701
+ * '',
1702
+ * 'SOAP-ENC:Array',
1703
+ * array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'string[]'),
1704
+ * 'xsd:string'
1705
+ * );
1706
+ *
1707
+ * example: PHP associative array ( SOAP Struct )
1708
+ *
1709
+ * addType(
1710
+ * 'SOAPStruct',
1711
+ * 'complexType',
1712
+ * 'struct',
1713
+ * 'all',
1714
+ * array('myVar'=> array('name'=>'myVar','type'=>'string')
1715
+ * );
1716
+ *
1717
+ * @param name
1718
+ * @param typeClass (complexType|simpleType|attribute)
1719
+ * @param phpType: currently supported are array and struct (php assoc array)
1720
+ * @param compositor (all|sequence|choice)
1721
+ * @param restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
1722
+ * @param elements = array ( name = array(name=>'',type=>'') )
1723
+ * @param attrs = array(
1724
+ * array(
1725
+ * 'ref' => "http://schemas.xmlsoap.org/soap/encoding/:arrayType",
1726
+ * "http://schemas.xmlsoap.org/wsdl/:arrayType" => "string[]"
1727
+ * )
1728
+ * )
1729
+ * @param arrayType: namespace:name (http://www.w3.org/2001/XMLSchema:string)
1730
+ * @access public
1731
+ * @see getTypeDef
1732
+ */
1733
+ function addComplexType($name,$typeClass='complexType',$phpType='array',$compositor='',$restrictionBase='',$elements=array(),$attrs=array(),$arrayType=''){
1734
+ $this->complexTypes[$name] = array(
1735
+ 'name' => $name,
1736
+ 'typeClass' => $typeClass,
1737
+ 'phpType' => $phpType,
1738
+ 'compositor'=> $compositor,
1739
+ 'restrictionBase' => $restrictionBase,
1740
+ 'elements' => $elements,
1741
+ 'attrs' => $attrs,
1742
+ 'arrayType' => $arrayType
1743
+ );
1744
+
1745
+ }
1746
+
1747
+ /**
1748
+ * adds a simple type to the schema
1749
+ *
1750
+ * @param string $name
1751
+ * @param string $restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
1752
+ * @param string $typeClass (should always be simpleType)
1753
+ * @param string $phpType (should always be scalar)
1754
+ * @param array $enumeration array of values
1755
+ * @access public
1756
+ * @see xmlschema
1757
+ * @see getTypeDef
1758
+ */
1759
+ function addSimpleType($name, $restrictionBase='', $typeClass='simpleType', $phpType='scalar', $enumeration=array()) {
1760
+ $this->simpleTypes[$name] = array(
1761
+ 'name' => $name,
1762
+ 'typeClass' => $typeClass,
1763
+ 'phpType' => $phpType,
1764
+ 'type' => $restrictionBase,
1765
+ 'enumeration' => $enumeration
1766
+ );
1767
+
1768
+ }
1769
+
1770
+ /**
1771
+ * adds an element to the schema
1772
+ *
1773
+ * @param array $attrs attributes that must include name and type
1774
+ * @see xmlschema
1775
+ * @access public
1776
+ */
1777
+ function addElement($attrs) {
1778
+ if (! $this->getPrefix($attrs['type'])) {
1779
+ $attrs['type'] = $this->schemaTargetNamespace . ':' . $attrs['type'];
1780
+ }
1781
+ $this->elements[ $attrs['name'] ] = $attrs;
1782
+ $this->elements[ $attrs['name'] ]['typeClass'] = 'element';
1783
+
1784
+ }
1785
+ }
1786
+
1787
+
1788
+
1789
+ ?><?php
1790
+
1791
+
1792
+
1793
+ /**
1794
+ * For creating serializable abstractions of native PHP types. This class
1795
+ * allows element name/namespace, XSD type, and XML attributes to be
1796
+ * associated with a value. This is extremely useful when WSDL is not
1797
+ * used, but is also useful when WSDL is used with polymorphic types, including
1798
+ * xsd:anyType and user-defined types.
1799
+ *
1800
+ * @author Dietrich Ayala <dietrich@ganx4.com>
1801
+ * @version $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
1802
+ * @access public
1803
+ */
1804
+ class soapval extends nusoap_base {
1805
+ /**
1806
+ * The XML element name
1807
+ *
1808
+ * @var string
1809
+ * @access private
1810
+ */
1811
+ var $name;
1812
+ /**
1813
+ * The XML type name (string or false)
1814
+ *
1815
+ * @var mixed
1816
+ * @access private
1817
+ */
1818
+ var $type;
1819
+ /**
1820
+ * The PHP value
1821
+ *
1822
+ * @var mixed
1823
+ * @access private
1824
+ */
1825
+ var $value;
1826
+ /**
1827
+ * The XML element namespace (string or false)
1828
+ *
1829
+ * @var mixed
1830
+ * @access private
1831
+ */
1832
+ var $element_ns;
1833
+ /**
1834
+ * The XML type namespace (string or false)
1835
+ *
1836
+ * @var mixed
1837
+ * @access private
1838
+ */
1839
+ var $type_ns;
1840
+ /**
1841
+ * The XML element attributes (array or false)
1842
+ *
1843
+ * @var mixed
1844
+ * @access private
1845
+ */
1846
+ var $attributes;
1847
+
1848
+ /**
1849
+ * constructor
1850
+ *
1851
+ * @param string $name optional name
1852
+ * @param mixed $type optional type name
1853
+ * @param mixed $value optional value
1854
+ * @param mixed $element_ns optional namespace of value
1855
+ * @param mixed $type_ns optional namespace of type
1856
+ * @param mixed $attributes associative array of attributes to add to element serialization
1857
+ * @access public
1858
+ */
1859
+ function soapval($name='soapval',$type=false,$value=-1,$element_ns=false,$type_ns=false,$attributes=false) {
1860
+ parent::nusoap_base();
1861
+ $this->name = $name;
1862
+ $this->type = $type;
1863
+ $this->value = $value;
1864
+ $this->element_ns = $element_ns;
1865
+ $this->type_ns = $type_ns;
1866
+ $this->attributes = $attributes;
1867
+ }
1868
+
1869
+ /**
1870
+ * return serialized value
1871
+ *
1872
+ * @param string $use The WSDL use value (encoded|literal)
1873
+ * @return string XML data
1874
+ * @access public
1875
+ */
1876
+ function serialize($use='encoded') {
1877
+ return $this->serialize_val($this->value,$this->name,$this->type,$this->element_ns,$this->type_ns,$this->attributes,$use);
1878
+ }
1879
+
1880
+ /**
1881
+ * decodes a soapval object into a PHP native type
1882
+ *
1883
+ * @return mixed
1884
+ * @access public
1885
+ */
1886
+ function decode(){
1887
+ return $this->value;
1888
+ }
1889
+ }
1890
+
1891
+
1892
+
1893
+ ?><?php
1894
+
1895
+
1896
+
1897
+ /**
1898
+ * transport class for sending/receiving data via HTTP and HTTPS
1899
+ * NOTE: PHP must be compiled with the CURL extension for HTTPS support
1900
+ *
1901
+ * @author Dietrich Ayala <dietrich@ganx4.com>
1902
+ * @version $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
1903
+ * @access public
1904
+ */
1905
+ class soap_transport_http extends nusoap_base {
1906
+
1907
+ var $url = '';
1908
+ var $uri = '';
1909
+ var $digest_uri = '';
1910
+ var $scheme = '';
1911
+ var $host = '';
1912
+ var $port = '';
1913
+ var $path = '';
1914
+ var $request_method = 'POST';
1915
+ var $protocol_version = '1.1';
1916
+ var $encoding = '';
1917
+ var $outgoing_headers = array();
1918
+ var $incoming_headers = array();
1919
+ var $incoming_cookies = array();
1920
+ var $outgoing_payload = '';
1921
+ var $incoming_payload = '';
1922
+ var $useSOAPAction = true;
1923
+ var $persistentConnection = false;
1924
+ var $ch = false; // cURL handle
1925
+ var $username = '';
1926
+ var $password = '';
1927
+ var $authtype = '';
1928
+ var $digestRequest = array();
1929
+ var $certRequest = array(); // keys must be cainfofile (optional), sslcertfile, sslkeyfile, passphrase, verifypeer (optional), verifyhost (optional)
1930
+ // cainfofile: certificate authority file, e.g. '$pathToPemFiles/rootca.pem'
1931
+ // sslcertfile: SSL certificate file, e.g. '$pathToPemFiles/mycert.pem'
1932
+ // sslkeyfile: SSL key file, e.g. '$pathToPemFiles/mykey.pem'
1933
+ // passphrase: SSL key password/passphrase
1934
+ // verifypeer: default is 1
1935
+ // verifyhost: default is 1
1936
+
1937
+ /**
1938
+ * constructor
1939
+ */
1940
+ function soap_transport_http($url){
1941
+ parent::nusoap_base();
1942
+ $this->setURL($url);
1943
+ ereg('\$Revisio' . 'n: ([^ ]+)', $this->revision, $rev);
1944
+ $this->outgoing_headers['User-Agent'] = $this->title.'/'.$this->version.' ('.$rev[1].')';
1945
+ }
1946
+
1947
+ function setURL($url) {
1948
+ $this->url = $url;
1949
+
1950
+ $u = parse_url($url);
1951
+ foreach($u as $k => $v){
1952
+ $this->$k = $v;
1953
+ }
1954
+
1955
+ // add any GET params to path
1956
+ if(isset($u['query']) && $u['query'] != ''){
1957
+ $this->path .= '?' . $u['query'];
1958
+ }
1959
+
1960
+ // set default port
1961
+ if(!isset($u['port'])){
1962
+ if($u['scheme'] == 'https'){
1963
+ $this->port = 443;
1964
+ } else {
1965
+ $this->port = 80;
1966
+ }
1967
+ }
1968
+
1969
+ $this->uri = $this->path;
1970
+ $this->digest_uri = $this->uri;
1971
+
1972
+ // build headers
1973
+ if (!isset($u['port'])) {
1974
+ $this->outgoing_headers['Host'] = $this->host;
1975
+ } else {
1976
+ $this->outgoing_headers['Host'] = $this->host.':'.$this->port;
1977
+ }
1978
+
1979
+ if (isset($u['user']) && $u['user'] != '') {
1980
+ $this->setCredentials(urldecode($u['user']), isset($u['pass']) ? urldecode($u['pass']) : '');
1981
+ }
1982
+ }
1983
+
1984
+ function connect($connection_timeout=0,$response_timeout=30){
1985
+ // For PHP 4.3 with OpenSSL, change https scheme to ssl, then treat like
1986
+ // "regular" socket.
1987
+ // TODO: disabled for now because OpenSSL must be *compiled* in (not just
1988
+ // loaded), and until PHP5 stream_get_wrappers is not available.
1989
+ // if ($this->scheme == 'https') {
1990
+ // if (version_compare(phpversion(), '4.3.0') >= 0) {
1991
+ // if (extension_loaded('openssl')) {
1992
+ // $this->scheme = 'ssl';
1993
+ // }
1994
+ // }
1995
+ // }
1996
+ if ($this->scheme == 'http' || $this->scheme == 'ssl') {
1997
+ // use persistent connection
1998
+ if($this->persistentConnection && isset($this->fp) && is_resource($this->fp)){
1999
+ if (!feof($this->fp)) {
2000
+ return true;
2001
+ }
2002
+ fclose($this->fp);
2003
+ }
2004
+
2005
+ // munge host if using OpenSSL
2006
+ if ($this->scheme == 'ssl') {
2007
+ $host = 'ssl://' . $this->host;
2008
+ } else {
2009
+ $host = $this->host;
2010
+ }
2011
+
2012
+ // open socket
2013
+ if($connection_timeout > 0){
2014
+ $this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str, $connection_timeout);
2015
+ } else {
2016
+ $this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str);
2017
+ }
2018
+
2019
+ // test pointer
2020
+ if(!$this->fp) {
2021
+ $msg = 'Couldn\'t open socket connection to server ' . $this->url;
2022
+ if ($this->errno) {
2023
+ $msg .= ', Error ('.$this->errno.'): '.$this->error_str;
2024
+ } else {
2025
+ $msg .= ' prior to connect(). This is often a problem looking up the host name.';
2026
+ }
2027
+ $this->setError($msg);
2028
+ return false;
2029
+ }
2030
+
2031
+ // set response timeout
2032
+ socket_set_timeout( $this->fp, $response_timeout);
2033
+
2034
+ return true;
2035
+ } else if ($this->scheme == 'https') {
2036
+ if (!extension_loaded('curl')) {
2037
+ $this->setError('CURL Extension, or OpenSSL extension w/ PHP version >= 4.3 is required for HTTPS');
2038
+ return false;
2039
+ }
2040
+ // init CURL
2041
+ $this->ch = curl_init();
2042
+ // set url
2043
+ $hostURL = ($this->port != '') ? "https://$this->host:$this->port" : "https://$this->host";
2044
+ // add path
2045
+ $hostURL .= $this->path;
2046
+ curl_setopt($this->ch, CURLOPT_URL, $hostURL);
2047
+ // follow location headers (re-directs)
2048
+ curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 1);
2049
+ // ask for headers in the response output
2050
+ curl_setopt($this->ch, CURLOPT_HEADER, 1);
2051
+ // ask for the response output as the return value
2052
+ curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
2053
+ // encode
2054
+ // We manage this ourselves through headers and encoding
2055
+ // if(function_exists('gzuncompress')){
2056
+ // curl_setopt($this->ch, CURLOPT_ENCODING, 'deflate');
2057
+ // }
2058
+ // persistent connection
2059
+ if ($this->persistentConnection) {
2060
+ // The way we send data, we cannot use persistent connections, since
2061
+ // there will be some "junk" at the end of our request.
2062
+ //curl_setopt($this->ch, CURL_HTTP_VERSION_1_1, true);
2063
+ $this->persistentConnection = false;
2064
+ $this->outgoing_headers['Connection'] = 'close';
2065
+ }
2066
+ // set timeout
2067
+ if ($connection_timeout != 0) {
2068
+ curl_setopt($this->ch, CURLOPT_TIMEOUT, $connection_timeout);
2069
+ }
2070
+ // TODO: cURL has added a connection timeout separate from the response timeout
2071
+ //if ($connection_timeout != 0) {
2072
+ // curl_setopt($this->ch, CURLOPT_CONNECTIONTIMEOUT, $connection_timeout);
2073
+ //}
2074
+ //if ($response_timeout != 0) {
2075
+ // curl_setopt($this->ch, CURLOPT_TIMEOUT, $response_timeout);
2076
+ //}
2077
+
2078
+ // recent versions of cURL turn on peer/host checking by default,
2079
+ // while PHP binaries are not compiled with a default location for the
2080
+ // CA cert bundle, so disable peer/host checking.
2081
+ //curl_setopt($this->ch, CURLOPT_CAINFO, 'f:\php-4.3.2-win32\extensions\curl-ca-bundle.crt');
2082
+ curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
2083
+ curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
2084
+
2085
+ // support client certificates (thanks Tobias Boes, Doug Anarino, Eryan Ariobowo)
2086
+ if ($this->authtype == 'certificate') {
2087
+ if (isset($this->certRequest['cainfofile'])) {
2088
+ curl_setopt($this->ch, CURLOPT_CAINFO, $this->certRequest['cainfofile']);
2089
+ }
2090
+ if (isset($this->certRequest['verifypeer'])) {
2091
+ curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, $this->certRequest['verifypeer']);
2092
+ } else {
2093
+ curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 1);
2094
+ }
2095
+ if (isset($this->certRequest['verifyhost'])) {
2096
+ curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, $this->certRequest['verifyhost']);
2097
+ } else {
2098
+ curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 1);
2099
+ }
2100
+ if (isset($this->certRequest['sslcertfile'])) {
2101
+ curl_setopt($this->ch, CURLOPT_SSLCERT, $this->certRequest['sslcertfile']);
2102
+ }
2103
+ if (isset($this->certRequest['sslkeyfile'])) {
2104
+ curl_setopt($this->ch, CURLOPT_SSLKEY, $this->certRequest['sslkeyfile']);
2105
+ }
2106
+ if (isset($this->certRequest['passphrase'])) {
2107
+ curl_setopt($this->ch, CURLOPT_SSLKEYPASSWD , $this->certRequest['passphrase']);
2108
+ }
2109
+ }
2110
+ return true;
2111
+ } else {
2112
+ $this->setError('Unknown scheme ' . $this->scheme);
2113
+ return false;
2114
+ }
2115
+ }
2116
+
2117
+ /**
2118
+ * send the SOAP message via HTTP
2119
+ *
2120
+ * @param string $data message data
2121
+ * @param integer $timeout set connection timeout in seconds
2122
+ * @param integer $response_timeout set response timeout in seconds
2123
+ * @param array $cookies cookies to send
2124
+ * @return string data
2125
+ * @access public
2126
+ */
2127
+ function send($data, $timeout=0, $response_timeout=30, $cookies=NULL) {
2128
+
2129
+
2130
+ $this->tryagain = true;
2131
+ $tries = 0;
2132
+ while ($this->tryagain) {
2133
+ $this->tryagain = false;
2134
+ if ($tries++ < 2) {
2135
+ // make connnection
2136
+ if (!$this->connect($timeout, $response_timeout)){
2137
+ return false;
2138
+ }
2139
+
2140
+ // send request
2141
+ if (!$this->sendRequest($data, $cookies)){
2142
+ return false;
2143
+ }
2144
+
2145
+ // get response
2146
+ $respdata = $this->getResponse();
2147
+ } else {
2148
+ $this->setError('Too many tries to get an OK response');
2149
+ }
2150
+ }
2151
+ return $respdata;
2152
+ }
2153
+
2154
+
2155
+ /**
2156
+ * send the SOAP message via HTTPS 1.0 using CURL
2157
+ *
2158
+ * @param string $msg message data
2159
+ * @param integer $timeout set connection timeout in seconds
2160
+ * @param integer $response_timeout set response timeout in seconds
2161
+ * @param array $cookies cookies to send
2162
+ * @return string data
2163
+ * @access public
2164
+ */
2165
+ function sendHTTPS($data, $timeout=0, $response_timeout=30, $cookies) {
2166
+ return $this->send($data, $timeout, $response_timeout, $cookies);
2167
+ }
2168
+
2169
+ /**
2170
+ * if authenticating, set user credentials here
2171
+ *
2172
+ * @param string $username
2173
+ * @param string $password
2174
+ * @param string $authtype (basic, digest, certificate)
2175
+ * @param array $digestRequest (keys must be nonce, nc, realm, qop)
2176
+ * @param array $certRequest (keys must be cainfofile (optional), sslcertfile, sslkeyfile, passphrase, verifypeer (optional), verifyhost (optional): see corresponding options in cURL docs)
2177
+ * @access public
2178
+ */
2179
+ function setCredentials($username, $password, $authtype = 'basic', $digestRequest = array(), $certRequest = array()) {
2180
+ // cf. RFC 2617
2181
+ if ($authtype == 'basic') {
2182
+ $this->outgoing_headers['Authorization'] = 'Basic '.base64_encode(str_replace(':','',$username).':'.$password);
2183
+ } elseif ($authtype == 'digest') {
2184
+ if (isset($digestRequest['nonce'])) {
2185
+ $digestRequest['nc'] = isset($digestRequest['nc']) ? $digestRequest['nc']++ : 1;
2186
+
2187
+ // calculate the Digest hashes (calculate code based on digest implementation found at: http://www.rassoc.com/gregr/weblog/stories/2002/07/09/webServicesSecurityHttpDigestAuthenticationWithoutActiveDirectory.html)
2188
+
2189
+ // A1 = unq(username-value) ":" unq(realm-value) ":" passwd
2190
+ $A1 = $username. ':' . (isset($digestRequest['realm']) ? $digestRequest['realm'] : '') . ':' . $password;
2191
+
2192
+ // H(A1) = MD5(A1)
2193
+ $HA1 = md5($A1);
2194
+
2195
+ // A2 = Method ":" digest-uri-value
2196
+ $A2 = 'POST:' . $this->digest_uri;
2197
+
2198
+ // H(A2)
2199
+ $HA2 = md5($A2);
2200
+
2201
+ // KD(secret, data) = H(concat(secret, ":", data))
2202
+ // if qop == auth:
2203
+ // request-digest = <"> < KD ( H(A1), unq(nonce-value)
2204
+ // ":" nc-value
2205
+ // ":" unq(cnonce-value)
2206
+ // ":" unq(qop-value)
2207
+ // ":" H(A2)
2208
+ // ) <">
2209
+ // if qop is missing,
2210
+ // request-digest = <"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) > <">
2211
+
2212
+ $unhashedDigest = '';
2213
+ $nonce = isset($digestRequest['nonce']) ? $digestRequest['nonce'] : '';
2214
+ $cnonce = $nonce;
2215
+ if ($digestRequest['qop'] != '') {
2216
+ $unhashedDigest = $HA1 . ':' . $nonce . ':' . sprintf("%08d", $digestRequest['nc']) . ':' . $cnonce . ':' . $digestRequest['qop'] . ':' . $HA2;
2217
+ } else {
2218
+ $unhashedDigest = $HA1 . ':' . $nonce . ':' . $HA2;
2219
+ }
2220
+
2221
+ $hashedDigest = md5($unhashedDigest);
2222
+
2223
+ $this->outgoing_headers['Authorization'] = 'Digest username="' . $username . '", realm="' . $digestRequest['realm'] . '", nonce="' . $nonce . '", uri="' . $this->digest_uri . '", cnonce="' . $cnonce . '", nc=' . sprintf("%08x", $digestRequest['nc']) . ', qop="' . $digestRequest['qop'] . '", response="' . $hashedDigest . '"';
2224
+ }
2225
+ } elseif ($authtype == 'certificate') {
2226
+ $this->certRequest = $certRequest;
2227
+ }
2228
+ $this->username = $username;
2229
+ $this->password = $password;
2230
+ $this->authtype = $authtype;
2231
+ $this->digestRequest = $digestRequest;
2232
+
2233
+ if (isset($this->outgoing_headers['Authorization'])) {
2234
+ } else {
2235
+ }
2236
+ }
2237
+
2238
+ /**
2239
+ * set the soapaction value
2240
+ *
2241
+ * @param string $soapaction
2242
+ * @access public
2243
+ */
2244
+ function setSOAPAction($soapaction) {
2245
+ $this->outgoing_headers['SOAPAction'] = '"' . $soapaction . '"';
2246
+ }
2247
+
2248
+ /**
2249
+ * use http encoding
2250
+ *
2251
+ * @param string $enc encoding style. supported values: gzip, deflate, or both
2252
+ * @access public
2253
+ */
2254
+ function setEncoding($enc='gzip, deflate') {
2255
+ if (function_exists('gzdeflate')) {
2256
+ $this->protocol_version = '1.1';
2257
+ $this->outgoing_headers['Accept-Encoding'] = $enc;
2258
+ if (!isset($this->outgoing_headers['Connection'])) {
2259
+ $this->outgoing_headers['Connection'] = 'close';
2260
+ $this->persistentConnection = false;
2261
+ }
2262
+ set_magic_quotes_runtime(0);
2263
+ // deprecated
2264
+ $this->encoding = $enc;
2265
+ }
2266
+ }
2267
+
2268
+ /**
2269
+ * set proxy info here
2270
+ *
2271
+ * @param string $proxyhost
2272
+ * @param string $proxyport
2273
+ * @param string $proxyusername
2274
+ * @param string $proxypassword
2275
+ * @access public
2276
+ */
2277
+ function setProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '') {
2278
+ $this->uri = $this->url;
2279
+ $this->host = $proxyhost;
2280
+ $this->port = $proxyport;
2281
+ if ($proxyusername != '' && $proxypassword != '') {
2282
+ $this->outgoing_headers['Proxy-Authorization'] = ' Basic '.base64_encode($proxyusername.':'.$proxypassword);
2283
+ }
2284
+ }
2285
+
2286
+ /**
2287
+ * decode a string that is encoded w/ "chunked' transfer encoding
2288
+ * as defined in RFC2068 19.4.6
2289
+ *
2290
+ * @param string $buffer
2291
+ * @param string $lb
2292
+ * @returns string
2293
+ * @access public
2294
+ * @deprecated
2295
+ */
2296
+ function decodeChunked($buffer, $lb){
2297
+ // length := 0
2298
+ $length = 0;
2299
+ $new = '';
2300
+
2301
+ // read chunk-size, chunk-extension (if any) and CRLF
2302
+ // get the position of the linebreak
2303
+ $chunkend = strpos($buffer, $lb);
2304
+ if ($chunkend == FALSE) {
2305
+ return $new;
2306
+ }
2307
+ $temp = substr($buffer,0,$chunkend);
2308
+ $chunk_size = hexdec( trim($temp) );
2309
+ $chunkstart = $chunkend + strlen($lb);
2310
+ // while (chunk-size > 0) {
2311
+ while ($chunk_size > 0) {
2312
+ $chunkend = strpos( $buffer, $lb, $chunkstart + $chunk_size);
2313
+
2314
+ // Just in case we got a broken connection
2315
+ if ($chunkend == FALSE) {
2316
+ $chunk = substr($buffer,$chunkstart);
2317
+ // append chunk-data to entity-body
2318
+ $new .= $chunk;
2319
+ $length += strlen($chunk);
2320
+ break;
2321
+ }
2322
+
2323
+ // read chunk-data and CRLF
2324
+ $chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);
2325
+ // append chunk-data to entity-body
2326
+ $new .= $chunk;
2327
+ // length := length + chunk-size
2328
+ $length += strlen($chunk);
2329
+ // read chunk-size and CRLF
2330
+ $chunkstart = $chunkend + strlen($lb);
2331
+
2332
+ $chunkend = strpos($buffer, $lb, $chunkstart) + strlen($lb);
2333
+ if ($chunkend == FALSE) {
2334
+ break; //Just in case we got a broken connection
2335
+ }
2336
+ $temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);
2337
+ $chunk_size = hexdec( trim($temp) );
2338
+ $chunkstart = $chunkend;
2339
+ }
2340
+ return $new;
2341
+ }
2342
+
2343
+ /*
2344
+ * Writes payload, including HTTP headers, to $this->outgoing_payload.
2345
+ */
2346
+ function buildPayload($data, $cookie_str = '') {
2347
+ // add content-length header
2348
+ $this->outgoing_headers['Content-Length'] = strlen($data);
2349
+
2350
+ // start building outgoing payload:
2351
+ $req = "$this->request_method $this->uri HTTP/$this->protocol_version";
2352
+ $this->outgoing_payload = "$req\r\n";
2353
+
2354
+ // loop thru headers, serializing
2355
+ foreach($this->outgoing_headers as $k => $v){
2356
+ $hdr = $k.': '.$v;
2357
+ $this->outgoing_payload .= "$hdr\r\n";
2358
+ }
2359
+
2360
+ // add any cookies
2361
+ if ($cookie_str != '') {
2362
+ $hdr = 'Cookie: '.$cookie_str;
2363
+ $this->outgoing_payload .= "$hdr\r\n";
2364
+ }
2365
+
2366
+ // header/body separator
2367
+ $this->outgoing_payload .= "\r\n";
2368
+
2369
+ // add data
2370
+ $this->outgoing_payload .= $data;
2371
+ }
2372
+
2373
+ function sendRequest($data, $cookies = NULL) {
2374
+ // build cookie string
2375
+ $cookie_str = $this->getCookiesForRequest($cookies, (($this->scheme == 'ssl') || ($this->scheme == 'https')));
2376
+
2377
+ // build payload
2378
+ $this->buildPayload($data, $cookie_str);
2379
+
2380
+ if ($this->scheme == 'http' || $this->scheme == 'ssl') {
2381
+ // send payload
2382
+ if(!fputs($this->fp, $this->outgoing_payload, strlen($this->outgoing_payload))) {
2383
+ $this->setError('couldn\'t write message data to socket');
2384
+ return false;
2385
+ }
2386
+ return true;
2387
+ } else if ($this->scheme == 'https') {
2388
+ // set payload
2389
+ // TODO: cURL does say this should only be the verb, and in fact it
2390
+ // turns out that the URI and HTTP version are appended to this, which
2391
+ // some servers refuse to work with
2392
+ //curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, $this->outgoing_payload);
2393
+ foreach($this->outgoing_headers as $k => $v){
2394
+ $curl_headers[] = "$k: $v";
2395
+ }
2396
+ if ($cookie_str != '') {
2397
+ $curl_headers[] = 'Cookie: ' . $cookie_str;
2398
+ }
2399
+ curl_setopt($this->ch, CURLOPT_HTTPHEADER, $curl_headers);
2400
+ if ($this->request_method == "POST") {
2401
+ curl_setopt($this->ch, CURLOPT_POST, 1);
2402
+ curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data);
2403
+ } else {
2404
+ }
2405
+ return true;
2406
+ }
2407
+ }
2408
+
2409
+ function getResponse(){
2410
+ $this->incoming_payload = '';
2411
+
2412
+ if ($this->scheme == 'http' || $this->scheme == 'ssl') {
2413
+ // loop until headers have been retrieved
2414
+ $data = '';
2415
+ while (!isset($lb)){
2416
+
2417
+ // We might EOF during header read.
2418
+ if(feof($this->fp)) {
2419
+ $this->incoming_payload = $data;
2420
+ $this->setError('server failed to send headers');
2421
+ return false;
2422
+ }
2423
+
2424
+ $tmp = fgets($this->fp, 256);
2425
+ $tmplen = strlen($tmp);
2426
+
2427
+ if ($tmplen == 0) {
2428
+ $this->incoming_payload = $data;
2429
+ $this->setError('socket read of headers timed out');
2430
+ return false;
2431
+ }
2432
+
2433
+ $data .= $tmp;
2434
+ $pos = strpos($data,"\r\n\r\n");
2435
+ if($pos > 1){
2436
+ $lb = "\r\n";
2437
+ } else {
2438
+ $pos = strpos($data,"\n\n");
2439
+ if($pos > 1){
2440
+ $lb = "\n";
2441
+ }
2442
+ }
2443
+ // remove 100 header
2444
+ if(isset($lb) && ereg('^HTTP/1.1 100',$data)){
2445
+ unset($lb);
2446
+ $data = '';
2447
+ }//
2448
+ }
2449
+ // store header data
2450
+ $this->incoming_payload .= $data;
2451
+ // process headers
2452
+ $header_data = trim(substr($data,0,$pos));
2453
+ $header_array = explode($lb,$header_data);
2454
+ $this->incoming_headers = array();
2455
+ $this->incoming_cookies = array();
2456
+ foreach($header_array as $header_line){
2457
+ $arr = explode(':',$header_line, 2);
2458
+ if(count($arr) > 1){
2459
+ $header_name = strtolower(trim($arr[0]));
2460
+ $this->incoming_headers[$header_name] = trim($arr[1]);
2461
+ if ($header_name == 'set-cookie') {
2462
+ // TODO: allow multiple cookies from parseCookie
2463
+ $cookie = $this->parseCookie(trim($arr[1]));
2464
+ if ($cookie) {
2465
+ $this->incoming_cookies[] = $cookie;
2466
+ } else {
2467
+ }
2468
+ }
2469
+ } else if (isset($header_name)) {
2470
+ // append continuation line to previous header
2471
+ $this->incoming_headers[$header_name] .= $lb . ' ' . $header_line;
2472
+ }
2473
+ }
2474
+
2475
+ // loop until msg has been received
2476
+ if (isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked') {
2477
+ $content_length = 2147483647; // ignore any content-length header
2478
+ $chunked = true;
2479
+ } elseif (isset($this->incoming_headers['content-length'])) {
2480
+ $content_length = $this->incoming_headers['content-length'];
2481
+ $chunked = false;
2482
+ } else {
2483
+ $content_length = 2147483647;
2484
+ $chunked = false;
2485
+ }
2486
+ $data = '';
2487
+ do {
2488
+ if ($chunked) {
2489
+ $tmp = fgets($this->fp, 256);
2490
+ $tmplen = strlen($tmp);
2491
+ if ($tmplen == 0) {
2492
+ $this->incoming_payload = $data;
2493
+ $this->setError('socket read of chunk length timed out');
2494
+ return false;
2495
+ }
2496
+ $content_length = hexdec(trim($tmp));
2497
+ }
2498
+ $strlen = 0;
2499
+ while (($strlen < $content_length) && (!feof($this->fp))) {
2500
+ $readlen = min(8192, $content_length - $strlen);
2501
+ $tmp = fread($this->fp, $readlen);
2502
+ $tmplen = strlen($tmp);
2503
+ if (($tmplen == 0) && (!feof($this->fp))) {
2504
+ $this->incoming_payload = $data;
2505
+ $this->setError('socket read of body timed out');
2506
+ return false;
2507
+ }
2508
+ $strlen += $tmplen;
2509
+ $data .= $tmp;
2510
+ }
2511
+ if ($chunked && ($content_length > 0)) {
2512
+ $tmp = fgets($this->fp, 256);
2513
+ $tmplen = strlen($tmp);
2514
+ if ($tmplen == 0) {
2515
+ $this->incoming_payload = $data;
2516
+ $this->setError('socket read of chunk terminator timed out');
2517
+ return false;
2518
+ }
2519
+ }
2520
+ } while ($chunked && ($content_length > 0) && (!feof($this->fp)));
2521
+ if (feof($this->fp)) {
2522
+ }
2523
+ $this->incoming_payload .= $data;
2524
+
2525
+ // close filepointer
2526
+ if(
2527
+ (isset($this->incoming_headers['connection']) && strtolower($this->incoming_headers['connection']) == 'close') ||
2528
+ (! $this->persistentConnection) || feof($this->fp)){
2529
+ fclose($this->fp);
2530
+ $this->fp = false;
2531
+ }
2532
+
2533
+ // connection was closed unexpectedly
2534
+ if($this->incoming_payload == ''){
2535
+ $this->setError('no response from server');
2536
+ return false;
2537
+ }
2538
+
2539
+ // decode transfer-encoding
2540
+ // if(isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked'){
2541
+ // if(!$data = $this->decodeChunked($data, $lb)){
2542
+ // $this->setError('Decoding of chunked data failed');
2543
+ // return false;
2544
+ // }
2545
+ //print "<pre>\nde-chunked:\n---------------\n$data\n\n---------------\n</pre>";
2546
+ // set decoded payload
2547
+ // $this->incoming_payload = $header_data.$lb.$lb.$data;
2548
+ // }
2549
+
2550
+ } else if ($this->scheme == 'https') {
2551
+ // send and receive
2552
+ $this->incoming_payload = curl_exec($this->ch);
2553
+ $data = $this->incoming_payload;
2554
+
2555
+ $cErr = curl_error($this->ch);
2556
+ if ($cErr != '') {
2557
+ $err = 'cURL ERROR: '.curl_errno($this->ch).': '.$cErr.'<br>';
2558
+ // TODO: there is a PHP bug that can cause this to SEGV for CURLINFO_CONTENT_TYPE
2559
+ foreach(curl_getinfo($this->ch) as $k => $v){
2560
+ $err .= "$k: $v<br>";
2561
+ }
2562
+ $this->setError($err);
2563
+ curl_close($this->ch);
2564
+ return false;
2565
+ } else {
2566
+ //echo '<pre>';
2567
+ //var_dump(curl_getinfo($this->ch));
2568
+ //echo '</pre>';
2569
+ }
2570
+ // close curl
2571
+ curl_close($this->ch);
2572
+
2573
+ // remove 100 header(s)
2574
+ while (ereg('^HTTP/1.1 100',$data)) {
2575
+ if ($pos = strpos($data,"\r\n\r\n")) {
2576
+ $data = ltrim(substr($data,$pos));
2577
+ } elseif($pos = strpos($data,"\n\n") ) {
2578
+ $data = ltrim(substr($data,$pos));
2579
+ }
2580
+ }
2581
+
2582
+ // separate content from HTTP headers
2583
+ if ($pos = strpos($data,"\r\n\r\n")) {
2584
+ $lb = "\r\n";
2585
+ } elseif( $pos = strpos($data,"\n\n")) {
2586
+ $lb = "\n";
2587
+ } else {
2588
+ $this->setError('no proper separation of headers and document');
2589
+ return false;
2590
+ }
2591
+ $header_data = trim(substr($data,0,$pos));
2592
+ $header_array = explode($lb,$header_data);
2593
+ $data = ltrim(substr($data,$pos));
2594
+ // clean headers
2595
+ foreach ($header_array as $header_line) {
2596
+ $arr = explode(':',$header_line,2);
2597
+ if(count($arr) > 1){
2598
+ $header_name = strtolower(trim($arr[0]));
2599
+ $this->incoming_headers[$header_name] = trim($arr[1]);
2600
+ if ($header_name == 'set-cookie') {
2601
+ // TODO: allow multiple cookies from parseCookie
2602
+ $cookie = $this->parseCookie(trim($arr[1]));
2603
+ if ($cookie) {
2604
+ $this->incoming_cookies[] = $cookie;
2605
+ } else {
2606
+ }
2607
+ }
2608
+ } else if (isset($header_name)) {
2609
+ // append continuation line to previous header
2610
+ $this->incoming_headers[$header_name] .= $lb . ' ' . $header_line;
2611
+ }
2612
+ }
2613
+ }
2614
+
2615
+ $arr = explode(' ', $header_array[0], 3);
2616
+ $http_version = $arr[0];
2617
+ $http_status = intval($arr[1]);
2618
+ $http_reason = count($arr) > 2 ? $arr[2] : '';
2619
+
2620
+ // see if we need to resend the request with http digest authentication
2621
+ if (isset($this->incoming_headers['location']) && $http_status == 301) {
2622
+ $this->setURL($this->incoming_headers['location']);
2623
+ $this->tryagain = true;
2624
+ return false;
2625
+ }
2626
+
2627
+ // see if we need to resend the request with http digest authentication
2628
+ if (isset($this->incoming_headers['www-authenticate']) && $http_status == 401) {
2629
+ if (strstr($this->incoming_headers['www-authenticate'], "Digest ")) {
2630
+ // remove "Digest " from our elements
2631
+ $digestString = str_replace('Digest ', '', $this->incoming_headers['www-authenticate']);
2632
+
2633
+ // parse elements into array
2634
+ $digestElements = explode(',', $digestString);
2635
+ foreach ($digestElements as $val) {
2636
+ $tempElement = explode('=', trim($val), 2);
2637
+ $digestRequest[$tempElement[0]] = str_replace("\"", '', $tempElement[1]);
2638
+ }
2639
+
2640
+ // should have (at least) qop, realm, nonce
2641
+ if (isset($digestRequest['nonce'])) {
2642
+ $this->setCredentials($this->username, $this->password, 'digest', $digestRequest);
2643
+ $this->tryagain = true;
2644
+ return false;
2645
+ }
2646
+ }
2647
+ $this->setError('HTTP authentication failed');
2648
+ return false;
2649
+ }
2650
+
2651
+ if (
2652
+ ($http_status >= 300 && $http_status <= 307) ||
2653
+ ($http_status >= 400 && $http_status <= 417) ||
2654
+ ($http_status >= 501 && $http_status <= 505)
2655
+ ) {
2656
+ $this->setError("Unsupported HTTP response status $http_status $http_reason (soap_client->response has contents of the response)");
2657
+ return false;
2658
+ }
2659
+
2660
+ // decode content-encoding
2661
+ if(isset($this->incoming_headers['content-encoding']) && $this->incoming_headers['content-encoding'] != ''){
2662
+ if(strtolower($this->incoming_headers['content-encoding']) == 'deflate' || strtolower($this->incoming_headers['content-encoding']) == 'gzip'){
2663
+ // if decoding works, use it. else assume data wasn't gzencoded
2664
+ if(function_exists('gzinflate')){
2665
+ //$timer->setMarker('starting decoding of gzip/deflated content');
2666
+ // IIS 5 requires gzinflate instead of gzuncompress (similar to IE 5 and gzdeflate v. gzcompress)
2667
+ // this means there are no Zlib headers, although there should be
2668
+ $datalen = strlen($data);
2669
+ if ($this->incoming_headers['content-encoding'] == 'deflate') {
2670
+ if ($degzdata = @gzinflate($data)) {
2671
+ $data = $degzdata;
2672
+ if (strlen($data) < $datalen) {
2673
+ // test for the case that the payload has been compressed twice
2674
+ if ($degzdata = @gzinflate($data)) {
2675
+ $data = $degzdata;
2676
+ }
2677
+ }
2678
+ } else {
2679
+ $this->setError('Error using gzinflate to inflate the payload');
2680
+ }
2681
+ } elseif ($this->incoming_headers['content-encoding'] == 'gzip') {
2682
+ if ($degzdata = @gzinflate(substr($data, 10))) { // do our best
2683
+ $data = $degzdata;
2684
+ if (strlen($data) < $datalen) {
2685
+ // test for the case that the payload has been compressed twice
2686
+ if ($degzdata = @gzinflate(substr($data, 10))) {
2687
+ $data = $degzdata;
2688
+ }
2689
+ }
2690
+ } else {
2691
+ $this->setError('Error using gzinflate to un-gzip the payload');
2692
+ }
2693
+ }
2694
+ //$timer->setMarker('finished decoding of gzip/deflated content');
2695
+ //print "<xmp>\nde-inflated:\n---------------\n$data\n-------------\n</xmp>";
2696
+ // set decoded payload
2697
+ $this->incoming_payload = $header_data.$lb.$lb.$data;
2698
+ } else {
2699
+ $this->setError('The server sent compressed data. Your php install must have the Zlib extension compiled in to support this.');
2700
+ }
2701
+ } else {
2702
+ $this->setError('Unsupported Content-Encoding ' . $this->incoming_headers['content-encoding']);
2703
+ }
2704
+ } else {
2705
+ }
2706
+
2707
+ if(strlen($data) == 0){
2708
+ $this->setError('no data present after HTTP headers');
2709
+ return false;
2710
+ }
2711
+
2712
+ return $data;
2713
+ }
2714
+
2715
+ function setContentType($type, $charset = false) {
2716
+ $this->outgoing_headers['Content-Type'] = $type . ($charset ? '; charset=' . $charset : '');
2717
+ }
2718
+
2719
+ function usePersistentConnection(){
2720
+ if (isset($this->outgoing_headers['Accept-Encoding'])) {
2721
+ return false;
2722
+ }
2723
+ $this->protocol_version = '1.1';
2724
+ $this->persistentConnection = true;
2725
+ $this->outgoing_headers['Connection'] = 'Keep-Alive';
2726
+ return true;
2727
+ }
2728
+
2729
+ /**
2730
+ * parse an incoming Cookie into it's parts
2731
+ *
2732
+ * @param string $cookie_str content of cookie
2733
+ * @return array with data of that cookie
2734
+ * @access private
2735
+ */
2736
+ /*
2737
+ * TODO: allow a Set-Cookie string to be parsed into multiple cookies
2738
+ */
2739
+ function parseCookie($cookie_str) {
2740
+ $cookie_str = str_replace('; ', ';', $cookie_str) . ';';
2741
+ $data = split(';', $cookie_str);
2742
+ $value_str = $data[0];
2743
+
2744
+ $cookie_param = 'domain=';
2745
+ $start = strpos($cookie_str, $cookie_param);
2746
+ if ($start > 0) {
2747
+ $domain = substr($cookie_str, $start + strlen($cookie_param));
2748
+ $domain = substr($domain, 0, strpos($domain, ';'));
2749
+ } else {
2750
+ $domain = '';
2751
+ }
2752
+
2753
+ $cookie_param = 'expires=';
2754
+ $start = strpos($cookie_str, $cookie_param);
2755
+ if ($start > 0) {
2756
+ $expires = substr($cookie_str, $start + strlen($cookie_param));
2757
+ $expires = substr($expires, 0, strpos($expires, ';'));
2758
+ } else {
2759
+ $expires = '';
2760
+ }
2761
+
2762
+ $cookie_param = 'path=';
2763
+ $start = strpos($cookie_str, $cookie_param);
2764
+ if ( $start > 0 ) {
2765
+ $path = substr($cookie_str, $start + strlen($cookie_param));
2766
+ $path = substr($path, 0, strpos($path, ';'));
2767
+ } else {
2768
+ $path = '/';
2769
+ }
2770
+
2771
+ $cookie_param = ';secure;';
2772
+ if (strpos($cookie_str, $cookie_param) !== FALSE) {
2773
+ $secure = true;
2774
+ } else {
2775
+ $secure = false;
2776
+ }
2777
+
2778
+ $sep_pos = strpos($value_str, '=');
2779
+
2780
+ if ($sep_pos) {
2781
+ $name = substr($value_str, 0, $sep_pos);
2782
+ $value = substr($value_str, $sep_pos + 1);
2783
+ $cookie= array( 'name' => $name,
2784
+ 'value' => $value,
2785
+ 'domain' => $domain,
2786
+ 'path' => $path,
2787
+ 'expires' => $expires,
2788
+ 'secure' => $secure
2789
+ );
2790
+ return $cookie;
2791
+ }
2792
+ return false;
2793
+ }
2794
+
2795
+ /**
2796
+ * sort out cookies for the current request
2797
+ *
2798
+ * @param array $cookies array with all cookies
2799
+ * @param boolean $secure is the send-content secure or not?
2800
+ * @return string for Cookie-HTTP-Header
2801
+ * @access private
2802
+ */
2803
+ function getCookiesForRequest($cookies, $secure=false) {
2804
+ $cookie_str = '';
2805
+ if ((! is_null($cookies)) && (is_array($cookies))) {
2806
+ foreach ($cookies as $cookie) {
2807
+ if (! is_array($cookie)) {
2808
+ continue;
2809
+ }
2810
+ if ((isset($cookie['expires'])) && (! empty($cookie['expires']))) {
2811
+ if (strtotime($cookie['expires']) <= time()) {
2812
+ continue;
2813
+ }
2814
+ }
2815
+ if ((isset($cookie['domain'])) && (! empty($cookie['domain']))) {
2816
+ $domain = preg_quote($cookie['domain']);
2817
+ if (! preg_match("'.*$domain$'i", $this->host)) {
2818
+ continue;
2819
+ }
2820
+ }
2821
+ if ((isset($cookie['path'])) && (! empty($cookie['path']))) {
2822
+ $path = preg_quote($cookie['path']);
2823
+ if (! preg_match("'^$path.*'i", $this->path)) {
2824
+ continue;
2825
+ }
2826
+ }
2827
+ if ((! $secure) && (isset($cookie['secure'])) && ($cookie['secure'])) {
2828
+ continue;
2829
+ }
2830
+ $cookie_str .= $cookie['name'] . '=' . $cookie['value'] . '; ';
2831
+ }
2832
+ }
2833
+ return $cookie_str;
2834
+ }
2835
+ }
2836
+
2837
+ ?><?php
2838
+
2839
+
2840
+
2841
+ /**
2842
+ *
2843
+ * soap_server allows the user to create a SOAP server
2844
+ * that is capable of receiving messages and returning responses
2845
+ *
2846
+ * NOTE: WSDL functionality is experimental
2847
+ *
2848
+ * @author Dietrich Ayala <dietrich@ganx4.com>
2849
+ * @version $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
2850
+ * @access public
2851
+ */
2852
+ class soap_server extends nusoap_base {
2853
+ /**
2854
+ * HTTP headers of request
2855
+ * @var array
2856
+ * @access private
2857
+ */
2858
+ var $headers = array();
2859
+ /**
2860
+ * HTTP request
2861
+ * @var string
2862
+ * @access private
2863
+ */
2864
+ var $request = '';
2865
+ /**
2866
+ * SOAP headers from request (incomplete namespace resolution; special characters not escaped) (text)
2867
+ * @var string
2868
+ * @access public
2869
+ */
2870
+ var $requestHeaders = '';
2871
+ /**
2872
+ * SOAP body request portion (incomplete namespace resolution; special characters not escaped) (text)
2873
+ * @var string
2874
+ * @access public
2875
+ */
2876
+ var $document = '';
2877
+ /**
2878
+ * SOAP payload for request (text)
2879
+ * @var string
2880
+ * @access public
2881
+ */
2882
+ var $requestSOAP = '';
2883
+ /**
2884
+ * requested method namespace URI
2885
+ * @var string
2886
+ * @access private
2887
+ */
2888
+ var $methodURI = '';
2889
+ /**
2890
+ * name of method requested
2891
+ * @var string
2892
+ * @access private
2893
+ */
2894
+ var $methodname = '';
2895
+ /**
2896
+ * method parameters from request
2897
+ * @var array
2898
+ * @access private
2899
+ */
2900
+ var $methodparams = array();
2901
+ /**
2902
+ * SOAP Action from request
2903
+ * @var string
2904
+ * @access private
2905
+ */
2906
+ var $SOAPAction = '';
2907
+ /**
2908
+ * character set encoding of incoming (request) messages
2909
+ * @var string
2910
+ * @access public
2911
+ */
2912
+ var $xml_encoding = '';
2913
+ /**
2914
+ * toggles whether the parser decodes element content w/ utf8_decode()
2915
+ * @var boolean
2916
+ * @access public
2917
+ */
2918
+ var $decode_utf8 = true;
2919
+
2920
+ /**
2921
+ * HTTP headers of response
2922
+ * @var array
2923
+ * @access public
2924
+ */
2925
+ var $outgoing_headers = array();
2926
+ /**
2927
+ * HTTP response
2928
+ * @var string
2929
+ * @access private
2930
+ */
2931
+ var $response = '';
2932
+ /**
2933
+ * SOAP headers for response (text)
2934
+ * @var string
2935
+ * @access public
2936
+ */
2937
+ var $responseHeaders = '';
2938
+ /**
2939
+ * SOAP payload for response (text)
2940
+ * @var string
2941
+ * @access private
2942
+ */
2943
+ var $responseSOAP = '';
2944
+ /**
2945
+ * method return value to place in response
2946
+ * @var mixed
2947
+ * @access private
2948
+ */
2949
+ var $methodreturn = false;
2950
+ /**
2951
+ * whether $methodreturn is a string of literal XML
2952
+ * @var boolean
2953
+ * @access public
2954
+ */
2955
+ var $methodreturnisliteralxml = false;
2956
+ /**
2957
+ * SOAP fault for response (or false)
2958
+ * @var mixed
2959
+ * @access private
2960
+ */
2961
+ var $fault = false;
2962
+ /**
2963
+ * text indication of result (for debugging)
2964
+ * @var string
2965
+ * @access private
2966
+ */
2967
+ var $result = 'successful';
2968
+
2969
+ /**
2970
+ * assoc array of operations => opData; operations are added by the register()
2971
+ * method or by parsing an external WSDL definition
2972
+ * @var array
2973
+ * @access private
2974
+ */
2975
+ var $operations = array();
2976
+ /**
2977
+ * wsdl instance (if one)
2978
+ * @var mixed
2979
+ * @access private
2980
+ */
2981
+ var $wsdl = false;
2982
+ /**
2983
+ * URL for WSDL (if one)
2984
+ * @var mixed
2985
+ * @access private
2986
+ */
2987
+ var $externalWSDLURL = false;
2988
+ /**
2989
+ * whether to append debug to response as XML comment
2990
+ * @var boolean
2991
+ * @access public
2992
+ */
2993
+ var $debug_flag = false;
2994
+
2995
+
2996
+ /**
2997
+ * constructor
2998
+ * the optional parameter is a path to a WSDL file that you'd like to bind the server instance to.
2999
+ *
3000
+ * @param mixed $wsdl file path or URL (string), or wsdl instance (object)
3001
+ * @access public
3002
+ */
3003
+ function soap_server($wsdl=false){
3004
+ parent::nusoap_base();
3005
+ // turn on debugging?
3006
+ global $debug;
3007
+ global $HTTP_SERVER_VARS;
3008
+
3009
+ if (isset($_SERVER)) {
3010
+ } elseif (isset($HTTP_SERVER_VARS)) {
3011
+ } else {
3012
+ }
3013
+
3014
+ if (isset($debug)) {
3015
+ $this->debug_flag = $debug;
3016
+ } elseif (isset($_SERVER['QUERY_STRING'])) {
3017
+ $qs = explode('&', $_SERVER['QUERY_STRING']);
3018
+ foreach ($qs as $v) {
3019
+ if (substr($v, 0, 6) == 'debug=') {
3020
+ $this->debug_flag = substr($v, 6);
3021
+ }
3022
+ }
3023
+ } elseif (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
3024
+ $qs = explode('&', $HTTP_SERVER_VARS['QUERY_STRING']);
3025
+ foreach ($qs as $v) {
3026
+ if (substr($v, 0, 6) == 'debug=') {
3027
+ $this->debug_flag = substr($v, 6);
3028
+ }
3029
+ }
3030
+ }
3031
+
3032
+ // wsdl
3033
+ if($wsdl){
3034
+ if (is_object($wsdl) && (get_class($wsdl) == 'wsdl')) {
3035
+ $this->wsdl = $wsdl;
3036
+ $this->externalWSDLURL = $this->wsdl->wsdl;
3037
+ } else {
3038
+ $this->wsdl = new wsdl($wsdl);
3039
+ $this->externalWSDLURL = $wsdl;
3040
+ }
3041
+ $this->wsdl->clearDebug();
3042
+ if($err = $this->wsdl->getError()){
3043
+ die('WSDL ERROR: '.$err);
3044
+ }
3045
+ }
3046
+ }
3047
+
3048
+ /**
3049
+ * processes request and returns response
3050
+ *
3051
+ * @param string $data usually is the value of $HTTP_RAW_POST_DATA
3052
+ * @access public
3053
+ */
3054
+ function service($data){
3055
+ global $HTTP_SERVER_VARS;
3056
+
3057
+ if (isset($_SERVER['QUERY_STRING'])) {
3058
+ $qs = $_SERVER['QUERY_STRING'];
3059
+ } elseif (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
3060
+ $qs = $HTTP_SERVER_VARS['QUERY_STRING'];
3061
+ } else {
3062
+ $qs = '';
3063
+ }
3064
+
3065
+ if (ereg('wsdl', $qs) ){
3066
+ if($this->externalWSDLURL){
3067
+ if (strpos($this->externalWSDLURL,"://")!==false) { // assume URL
3068
+ header('Location: '.$this->externalWSDLURL);
3069
+ } else { // assume file
3070
+ header("Content-Type: text/xml\r\n");
3071
+ $fp = fopen($this->externalWSDLURL, 'r');
3072
+ fpassthru($fp);
3073
+ }
3074
+ } elseif ($this->wsdl) {
3075
+ header("Content-Type: text/xml; charset=ISO-8859-1\r\n");
3076
+ print $this->wsdl->serialize($this->debug_flag);
3077
+ if ($this->debug_flag) {
3078
+ print $this->getDebugAsXMLComment();
3079
+ }
3080
+ } else {
3081
+ header("Content-Type: text/html; charset=ISO-8859-1\r\n");
3082
+ print "This service does not provide WSDL";
3083
+ }
3084
+ } elseif ($data == '' && $this->wsdl) {
3085
+ print $this->wsdl->webDescription();
3086
+ } else {
3087
+ $this->parse_request($data);
3088
+ if (! $this->fault) {
3089
+ $this->invoke_method();
3090
+ }
3091
+ if (! $this->fault) {
3092
+ $this->serialize_return();
3093
+ }
3094
+ $this->send_response();
3095
+ }
3096
+ }
3097
+
3098
+ /**
3099
+ * parses HTTP request headers.
3100
+ *
3101
+ * The following fields are set by this function (when successful)
3102
+ *
3103
+ * headers
3104
+ * request
3105
+ * xml_encoding
3106
+ * SOAPAction
3107
+ *
3108
+ * @access private
3109
+ */
3110
+ function parse_http_headers() {
3111
+ global $HTTP_SERVER_VARS;
3112
+
3113
+ $this->request = '';
3114
+ $this->SOAPAction = '';
3115
+ if(function_exists('getallheaders')){
3116
+ $headers = getallheaders();
3117
+ foreach($headers as $k=>$v){
3118
+ $k = strtolower($k);
3119
+ $this->headers[$k] = $v;
3120
+ $this->request .= "$k: $v\r\n";
3121
+ }
3122
+ // get SOAPAction header
3123
+ if(isset($this->headers['soapaction'])){
3124
+ $this->SOAPAction = str_replace('"','',$this->headers['soapaction']);
3125
+ }
3126
+ // get the character encoding of the incoming request
3127
+ if(isset($this->headers['content-type']) && strpos($this->headers['content-type'],'=')){
3128
+ $enc = str_replace('"','',substr(strstr($this->headers["content-type"],'='),1));
3129
+ if(eregi('^(ISO-8859-1|US-ASCII|UTF-8)$',$enc)){
3130
+ $this->xml_encoding = strtoupper($enc);
3131
+ } else {
3132
+ $this->xml_encoding = 'US-ASCII';
3133
+ }
3134
+ } else {
3135
+ // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
3136
+ $this->xml_encoding = 'ISO-8859-1';
3137
+ }
3138
+ } elseif(isset($_SERVER) && is_array($_SERVER)){
3139
+ foreach ($_SERVER as $k => $v) {
3140
+ if (substr($k, 0, 5) == 'HTTP_') {
3141
+ $k = str_replace(' ', '-', strtolower(str_replace('_', ' ', substr($k, 5)))); $k = strtolower(substr($k, 5));
3142
+ } else {
3143
+ $k = str_replace(' ', '-', strtolower(str_replace('_', ' ', $k))); $k = strtolower($k);
3144
+ }
3145
+ if ($k == 'soapaction') {
3146
+ // get SOAPAction header
3147
+ $k = 'SOAPAction';
3148
+ $v = str_replace('"', '', $v);
3149
+ $v = str_replace('\\', '', $v);
3150
+ $this->SOAPAction = $v;
3151
+ } else if ($k == 'content-type') {
3152
+ // get the character encoding of the incoming request
3153
+ if (strpos($v, '=')) {
3154
+ $enc = substr(strstr($v, '='), 1);
3155
+ $enc = str_replace('"', '', $enc);
3156
+ $enc = str_replace('\\', '', $enc);
3157
+ if (eregi('^(ISO-8859-1|US-ASCII|UTF-8)$', $enc)) {
3158
+ $this->xml_encoding = strtoupper($enc);
3159
+ } else {
3160
+ $this->xml_encoding = 'US-ASCII';
3161
+ }
3162
+ } else {
3163
+ // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
3164
+ $this->xml_encoding = 'ISO-8859-1';
3165
+ }
3166
+ }
3167
+ $this->headers[$k] = $v;
3168
+ $this->request .= "$k: $v\r\n";
3169
+ }
3170
+ } elseif (is_array($HTTP_SERVER_VARS)) {
3171
+ foreach ($HTTP_SERVER_VARS as $k => $v) {
3172
+ if (substr($k, 0, 5) == 'HTTP_') {
3173
+ $k = str_replace(' ', '-', strtolower(str_replace('_', ' ', substr($k, 5)))); $k = strtolower(substr($k, 5));
3174
+ } else {
3175
+ $k = str_replace(' ', '-', strtolower(str_replace('_', ' ', $k))); $k = strtolower($k);
3176
+ }
3177
+ if ($k == 'soapaction') {
3178
+ // get SOAPAction header
3179
+ $k = 'SOAPAction';
3180
+ $v = str_replace('"', '', $v);
3181
+ $v = str_replace('\\', '', $v);
3182
+ $this->SOAPAction = $v;
3183
+ } else if ($k == 'content-type') {
3184
+ // get the character encoding of the incoming request
3185
+ if (strpos($v, '=')) {
3186
+ $enc = substr(strstr($v, '='), 1);
3187
+ $enc = str_replace('"', '', $enc);
3188
+ $enc = str_replace('\\', '', $enc);
3189
+ if (eregi('^(ISO-8859-1|US-ASCII|UTF-8)$', $enc)) {
3190
+ $this->xml_encoding = strtoupper($enc);
3191
+ } else {
3192
+ $this->xml_encoding = 'US-ASCII';
3193
+ }
3194
+ } else {
3195
+ // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
3196
+ $this->xml_encoding = 'ISO-8859-1';
3197
+ }
3198
+ }
3199
+ $this->headers[$k] = $v;
3200
+ $this->request .= "$k: $v\r\n";
3201
+ }
3202
+ } else {
3203
+ $this->setError("HTTP headers not accessible");
3204
+ }
3205
+ }
3206
+
3207
+ /**
3208
+ * parses a request
3209
+ *
3210
+ * The following fields are set by this function (when successful)
3211
+ *
3212
+ * headers
3213
+ * request
3214
+ * xml_encoding
3215
+ * SOAPAction
3216
+ * request
3217
+ * requestSOAP
3218
+ * methodURI
3219
+ * methodname
3220
+ * methodparams
3221
+ * requestHeaders
3222
+ * document
3223
+ *
3224
+ * This sets the fault field on error
3225
+ *
3226
+ * @param string $data XML string
3227
+ * @access private
3228
+ */
3229
+ function parse_request($data='') {
3230
+ $this->parse_http_headers();
3231
+ // uncompress if necessary
3232
+ if (isset($this->headers['content-encoding']) && $this->headers['content-encoding'] != '') {
3233
+ if ($this->headers['content-encoding'] == 'deflate' || $this->headers['content-encoding'] == 'gzip') {
3234
+ // if decoding works, use it. else assume data wasn't gzencoded
3235
+ if (function_exists('gzuncompress')) {
3236
+ if ($this->headers['content-encoding'] == 'deflate' && $degzdata = @gzuncompress($data)) {
3237
+ $data = $degzdata;
3238
+ } elseif ($this->headers['content-encoding'] == 'gzip' && $degzdata = gzinflate(substr($data, 10))) {
3239
+ $data = $degzdata;
3240
+ } else {
3241
+ $this->fault('SOAP-ENV:Client', 'Errors occurred when trying to decode the data');
3242
+ return;
3243
+ }
3244
+ } else {
3245
+ $this->fault('SOAP-ENV:Client', 'This Server does not support compressed data');
3246
+ return;
3247
+ }
3248
+ }
3249
+ }
3250
+ $this->request .= "\r\n".$data;
3251
+ $data = $this->parseRequest($this->headers, $data);
3252
+ $this->requestSOAP = $data;
3253
+ }
3254
+
3255
+ /**
3256
+ * invokes a PHP function for the requested SOAP method
3257
+ *
3258
+ * The following fields are set by this function (when successful)
3259
+ *
3260
+ * methodreturn
3261
+ *
3262
+ * Note that the PHP function that is called may also set the following
3263
+ * fields to affect the response sent to the client
3264
+ *
3265
+ * responseHeaders
3266
+ * outgoing_headers
3267
+ *
3268
+ * This sets the fault field on error
3269
+ *
3270
+ * @access private
3271
+ */
3272
+ function invoke_method() {
3273
+
3274
+ if ($this->wsdl) {
3275
+ if ($this->opData = $this->wsdl->getOperationData($this->methodname)) {
3276
+ } elseif ($this->opData = $this->wsdl->getOperationDataForSoapAction($this->SOAPAction)) {
3277
+ // Note: hopefully this case will only be used for doc/lit, since rpc services should have wrapper element
3278
+ $this->methodname = $this->opData['name'];
3279
+ } else {
3280
+ $this->fault('SOAP-ENV:Client', "Operation '" . $this->methodname . "' is not defined in the WSDL for this service");
3281
+ return;
3282
+ }
3283
+ } else {
3284
+ }
3285
+
3286
+ // if a . is present in $this->methodname, we see if there is a class in scope,
3287
+ // which could be referred to. We will also distinguish between two deliminators,
3288
+ // to allow methods to be called a the class or an instance
3289
+ $class = '';
3290
+ $method = '';
3291
+ if (strpos($this->methodname, '..') > 0) {
3292
+ $delim = '..';
3293
+ } else if (strpos($this->methodname, '.') > 0) {
3294
+ $delim = '.';
3295
+ } else {
3296
+ $delim = '';
3297
+ }
3298
+
3299
+ if (strlen($delim) > 0 && substr_count($this->methodname, $delim) == 1 &&
3300
+ class_exists(substr($this->methodname, 0, strpos($this->methodname, $delim)))) {
3301
+ // get the class and method name
3302
+ $class = substr($this->methodname, 0, strpos($this->methodname, $delim));
3303
+ $method = substr($this->methodname, strpos($this->methodname, $delim) + strlen($delim));
3304
+ }
3305
+
3306
+ // does method exist?
3307
+ if ($class == '') {
3308
+ if (!function_exists($this->methodname)) {
3309
+ $this->result = 'fault: method not found';
3310
+ $this->fault('SOAP-ENV:Client',"method '$this->methodname' not defined in service");
3311
+ return;
3312
+ }
3313
+ } else {
3314
+ $method_to_compare = (substr(phpversion(), 0, 2) == '4.') ? strtolower($method) : $method;
3315
+ if (!in_array($method_to_compare, get_class_methods($class))) {
3316
+ $this->result = 'fault: method not found';
3317
+ $this->fault('SOAP-ENV:Client',"method '$this->methodname' not defined in service");
3318
+ return;
3319
+ }
3320
+ }
3321
+
3322
+ // evaluate message, getting back parameters
3323
+ // verify that request parameters match the method's signature
3324
+ if(! $this->verify_method($this->methodname,$this->methodparams)){
3325
+ // debug
3326
+ $this->result = 'fault: request failed validation against method signature';
3327
+ // return fault
3328
+ $this->fault('SOAP-ENV:Client',"Operation '$this->methodname' not defined in service.");
3329
+ return;
3330
+ }
3331
+
3332
+ // if there are parameters to pass
3333
+ if (!function_exists('call_user_func_array')) {
3334
+ if ($class == '') {
3335
+ $funcCall = "\$this->methodreturn = $this->methodname(";
3336
+ } else {
3337
+ if ($delim == '..') {
3338
+ $funcCall = "\$this->methodreturn = ".$class."::".$method."(";
3339
+ } else {
3340
+ // generate unique instance name
3341
+ $instname = "\$inst_".time();
3342
+ $funcCall = $instname." = new ".$class."(); ";
3343
+ $funcCall .= "\$this->methodreturn = ".$instname."->".$method."(";
3344
+ }
3345
+ }
3346
+ if ($this->methodparams) {
3347
+ foreach ($this->methodparams as $param) {
3348
+ if (is_array($param)) {
3349
+ $this->fault('SOAP-ENV:Client', 'NuSOAP does not handle complexType parameters correctly when using eval; call_user_func_array must be available');
3350
+ return;
3351
+ }
3352
+ $funcCall .= "\"$param\",";
3353
+ }
3354
+ $funcCall = substr($funcCall, 0, -1);
3355
+ }
3356
+ $funcCall .= ');';
3357
+ @eval($funcCall);
3358
+ } else {
3359
+ if ($class == '') {
3360
+ $call_arg = "$this->methodname"; // straight assignment changes $this->methodname to lower case after call_user_func_array()
3361
+ } elseif ($delim == '..') {
3362
+ $call_arg = array ($class, $method);
3363
+ } else {
3364
+ $instance = new $class ();
3365
+ $call_arg = array(&$instance, $method);
3366
+ }
3367
+ $this->methodreturn = call_user_func_array($call_arg, array_values($this->methodparams));
3368
+ }
3369
+ }
3370
+
3371
+ /**
3372
+ * serializes the return value from a PHP function into a full SOAP Envelope
3373
+ *
3374
+ * The following fields are set by this function (when successful)
3375
+ *
3376
+ * responseSOAP
3377
+ *
3378
+ * This sets the fault field on error
3379
+ *
3380
+ * @access private
3381
+ */
3382
+ function serialize_return() {
3383
+ // if fault
3384
+ if (isset($this->methodreturn) && (get_class($this->methodreturn) == 'soap_fault')) {
3385
+ $this->fault = $this->methodreturn;
3386
+ return;
3387
+ } elseif ($this->methodreturnisliteralxml) {
3388
+ $return_val = $this->methodreturn;
3389
+ // returned value(s)
3390
+ } else {
3391
+ if($this->wsdl){
3392
+ // weak attempt at supporting multiple output params
3393
+ if(sizeof($this->opData['output']['parts']) > 1){
3394
+ $opParams = $this->methodreturn;
3395
+ } else {
3396
+ // TODO: is this really necessary?
3397
+ $opParams = array($this->methodreturn);
3398
+ }
3399
+ $return_val = $this->wsdl->serializeRPCParameters($this->methodname,'output',$opParams);
3400
+ $this->wsdl->clearDebug();
3401
+ if($errstr = $this->wsdl->getError()){
3402
+ $this->fault('SOAP-ENV:Server', 'unable to serialize result');
3403
+ return;
3404
+ }
3405
+ } else {
3406
+ if (isset($this->methodreturn)) {
3407
+ $return_val = $this->serialize_val($this->methodreturn, 'return');
3408
+ } else {
3409
+ $return_val = '';
3410
+ }
3411
+ }
3412
+ }
3413
+
3414
+ if ($this->wsdl) {
3415
+ if ($this->opData['style'] == 'rpc') {
3416
+ if ($this->opData['output']['use'] == 'literal') {
3417
+ $payload = '<'.$this->methodname.'Response xmlns="'.$this->methodURI.'">'.$return_val.'</'.$this->methodname."Response>";
3418
+ } else {
3419
+ $payload = '<ns1:'.$this->methodname.'Response xmlns:ns1="'.$this->methodURI.'">'.$return_val.'</ns1:'.$this->methodname."Response>";
3420
+ }
3421
+ } else {
3422
+ $payload = $return_val;
3423
+ }
3424
+ } else {
3425
+ $payload = '<ns1:'.$this->methodname.'Response xmlns:ns1="'.$this->methodURI.'">'.$return_val.'</ns1:'.$this->methodname."Response>";
3426
+ }
3427
+ $this->result = 'successful';
3428
+ if($this->wsdl){
3429
+ //if($this->debug_flag){
3430
+ // }
3431
+ if (isset($opData['output']['encodingStyle'])) {
3432
+ $encodingStyle = $opData['output']['encodingStyle'];
3433
+ } else {
3434
+ $encodingStyle = '';
3435
+ }
3436
+ // Added: In case we use a WSDL, return a serialized env. WITH the usedNamespaces.
3437
+ $this->responseSOAP = $this->serializeEnvelope($payload,$this->responseHeaders,$this->wsdl->usedNamespaces,$this->opData['style'],$encodingStyle);
3438
+ } else {
3439
+ $this->responseSOAP = $this->serializeEnvelope($payload,$this->responseHeaders);
3440
+ }
3441
+ }
3442
+
3443
+ /**
3444
+ * sends an HTTP response
3445
+ *
3446
+ * The following fields are set by this function (when successful)
3447
+ *
3448
+ * outgoing_headers
3449
+ * response
3450
+ *
3451
+ * @access private
3452
+ */
3453
+ function send_response() {
3454
+ if ($this->fault) {
3455
+ $payload = $this->fault->serialize();
3456
+ $this->outgoing_headers[] = "HTTP/1.0 500 Internal Server Error";
3457
+ $this->outgoing_headers[] = "Status: 500 Internal Server Error";
3458
+ } else {
3459
+ $payload = $this->responseSOAP;
3460
+ // Some combinations of PHP+Web server allow the Status
3461
+ // to come through as a header. Since OK is the default
3462
+ // just do nothing.
3463
+ // $this->outgoing_headers[] = "HTTP/1.0 200 OK";
3464
+ // $this->outgoing_headers[] = "Status: 200 OK";
3465
+ }
3466
+ // add debug data if in debug mode
3467
+ if(isset($this->debug_flag) && $this->debug_flag){
3468
+ $payload .= $this->getDebugAsXMLComment();
3469
+ }
3470
+ $this->outgoing_headers[] = "Server: $this->title Server v$this->version";
3471
+ ereg('\$Revisio' . 'n: ([^ ]+)', $this->revision, $rev);
3472
+ $this->outgoing_headers[] = "X-SOAP-Server: $this->title/$this->version (".$rev[1].")";
3473
+ // Let the Web server decide about this
3474
+ //$this->outgoing_headers[] = "Connection: Close\r\n";
3475
+ $payload = $this->getHTTPBody($payload);
3476
+ $type = $this->getHTTPContentType();
3477
+ $charset = $this->getHTTPContentTypeCharset();
3478
+ $this->outgoing_headers[] = "Content-Type: $type" . ($charset ? '; charset=' . $charset : '');
3479
+ //begin code to compress payload - by John
3480
+ // NOTE: there is no way to know whether the Web server will also compress
3481
+ // this data.
3482
+ if (strlen($payload) > 1024 && isset($this->headers) && isset($this->headers['accept-encoding'])) {
3483
+ if (strstr($this->headers['accept-encoding'], 'gzip')) {
3484
+ if (function_exists('gzencode')) {
3485
+ if (isset($this->debug_flag) && $this->debug_flag) {
3486
+ $payload .= "<!-- Content being gzipped -->";
3487
+ }
3488
+ $this->outgoing_headers[] = "Content-Encoding: gzip";
3489
+ $payload = gzencode($payload);
3490
+ } else {
3491
+ if (isset($this->debug_flag) && $this->debug_flag) {
3492
+ $payload .= "<!-- Content will not be gzipped: no gzencode -->";
3493
+ }
3494
+ }
3495
+ } elseif (strstr($this->headers['accept-encoding'], 'deflate')) {
3496
+ // Note: MSIE requires gzdeflate output (no Zlib header and checksum),
3497
+ // instead of gzcompress output,
3498
+ // which conflicts with HTTP 1.1 spec (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5)
3499
+ if (function_exists('gzdeflate')) {
3500
+ if (isset($this->debug_flag) && $this->debug_flag) {
3501
+ $payload .= "<!-- Content being deflated -->";
3502
+ }
3503
+ $this->outgoing_headers[] = "Content-Encoding: deflate";
3504
+ $payload = gzdeflate($payload);
3505
+ } else {
3506
+ if (isset($this->debug_flag) && $this->debug_flag) {
3507
+ $payload .= "<!-- Content will not be deflated: no gzcompress -->";
3508
+ }
3509
+ }
3510
+ }
3511
+ }
3512
+ //end code
3513
+ $this->outgoing_headers[] = "Content-Length: ".strlen($payload);
3514
+ reset($this->outgoing_headers);
3515
+ foreach($this->outgoing_headers as $hdr){
3516
+ header($hdr, false);
3517
+ }
3518
+ print $payload;
3519
+ $this->response = join("\r\n",$this->outgoing_headers)."\r\n\r\n".$payload;
3520
+ }
3521
+
3522
+ /**
3523
+ * takes the value that was created by parsing the request
3524
+ * and compares to the method's signature, if available.
3525
+ *
3526
+ * @param string $operation The operation to be invoked
3527
+ * @param array $request The array of parameter values
3528
+ * @return boolean Whether the operation was found
3529
+ * @access private
3530
+ */
3531
+ function verify_method($operation,$request){
3532
+ if(isset($this->wsdl) && is_object($this->wsdl)){
3533
+ if($this->wsdl->getOperationData($operation)){
3534
+ return true;
3535
+ }
3536
+ } elseif(isset($this->operations[$operation])){
3537
+ return true;
3538
+ }
3539
+ return false;
3540
+ }
3541
+
3542
+ /**
3543
+ * processes SOAP message received from client
3544
+ *
3545
+ * @param array $headers The HTTP headers
3546
+ * @param string $data unprocessed request data from client
3547
+ * @return mixed value of the message, decoded into a PHP type
3548
+ * @access private
3549
+ */
3550
+ function parseRequest($headers, $data) {
3551
+ if (!strstr($headers['content-type'], 'text/xml')) {
3552
+ $this->setError('Request not of type text/xml');
3553
+ return false;
3554
+ }
3555
+ if (strpos($headers['content-type'], '=')) {
3556
+ $enc = str_replace('"', '', substr(strstr($headers["content-type"], '='), 1));
3557
+ if(eregi('^(ISO-8859-1|US-ASCII|UTF-8)$',$enc)){
3558
+ $this->xml_encoding = strtoupper($enc);
3559
+ } else {
3560
+ $this->xml_encoding = 'US-ASCII';
3561
+ }
3562
+ } else {
3563
+ // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
3564
+ $this->xml_encoding = 'ISO-8859-1';
3565
+ }
3566
+ // parse response, get soap parser obj
3567
+ $parser = new soap_parser($data,$this->xml_encoding,'',$this->decode_utf8);
3568
+ // parser debug
3569
+ // if fault occurred during message parsing
3570
+ if($err = $parser->getError()){
3571
+ $this->result = 'fault: error in msg parsing: '.$err;
3572
+ $this->fault('SOAP-ENV:Client',"error in msg parsing:\n".$err);
3573
+ // else successfully parsed request into soapval object
3574
+ } else {
3575
+ // get/set methodname
3576
+ $this->methodURI = $parser->root_struct_namespace;
3577
+ $this->methodname = $parser->root_struct_name;
3578
+ $this->methodparams = $parser->get_response();
3579
+ // get SOAP headers
3580
+ $this->requestHeaders = $parser->getHeaders();
3581
+ // add document for doclit support
3582
+ $this->document = $parser->document;
3583
+ }
3584
+ }
3585
+
3586
+ /**
3587
+ * gets the HTTP body for the current response.
3588
+ *
3589
+ * @param string $soapmsg The SOAP payload
3590
+ * @return string The HTTP body, which includes the SOAP payload
3591
+ * @access private
3592
+ */
3593
+ function getHTTPBody($soapmsg) {
3594
+ return $soapmsg;
3595
+ }
3596
+
3597
+ /**
3598
+ * gets the HTTP content type for the current response.
3599
+ *
3600
+ * Note: getHTTPBody must be called before this.
3601
+ *
3602
+ * @return string the HTTP content type for the current response.
3603
+ * @access private
3604
+ */
3605
+ function getHTTPContentType() {
3606
+ return 'text/xml';
3607
+ }
3608
+
3609
+ /**
3610
+ * gets the HTTP content type charset for the current response.
3611
+ * returns false for non-text content types.
3612
+ *
3613
+ * Note: getHTTPBody must be called before this.
3614
+ *
3615
+ * @return string the HTTP content type charset for the current response.
3616
+ * @access private
3617
+ */
3618
+ function getHTTPContentTypeCharset() {
3619
+ return $this->soap_defencoding;
3620
+ }
3621
+
3622
+ /**
3623
+ * add a method to the dispatch map (this has been replaced by the register method)
3624
+ *
3625
+ * @param string $methodname
3626
+ * @param string $in array of input values
3627
+ * @param string $out array of output values
3628
+ * @access public
3629
+ * @deprecated
3630
+ */
3631
+ function add_to_map($methodname,$in,$out){
3632
+ $this->operations[$methodname] = array('name' => $methodname,'in' => $in,'out' => $out);
3633
+ }
3634
+
3635
+ /**
3636
+ * register a service function with the server
3637
+ *
3638
+ * @param string $name the name of the PHP function, class.method or class..method
3639
+ * @param array $in assoc array of input values: key = param name, value = param type
3640
+ * @param array $out assoc array of output values: key = param name, value = param type
3641
+ * @param mixed $namespace the element namespace for the method or false
3642
+ * @param mixed $soapaction the soapaction for the method or false
3643
+ * @param mixed $style optional (rpc|document) or false Note: when 'document' is specified, parameter and return wrappers are created for you automatically
3644
+ * @param mixed $use optional (encoded|literal) or false
3645
+ * @param string $documentation optional Description to include in WSDL
3646
+ * @param string $encodingStyle optional (usually 'http://schemas.xmlsoap.org/soap/encoding/' for encoded)
3647
+ * @access public
3648
+ */
3649
+ function register($name,$in=array(),$out=array(),$namespace=false,$soapaction=false,$style=false,$use=false,$documentation='',$encodingStyle=''){
3650
+ global $HTTP_SERVER_VARS;
3651
+
3652
+ if($this->externalWSDLURL){
3653
+ die('You cannot bind to an external WSDL file, and register methods outside of it! Please choose either WSDL or no WSDL.');
3654
+ }
3655
+ if (! $name) {
3656
+ die('You must specify a name when you register an operation');
3657
+ }
3658
+ if (!is_array($in)) {
3659
+ die('You must provide an array for operation inputs');
3660
+ }
3661
+ if (!is_array($out)) {
3662
+ die('You must provide an array for operation outputs');
3663
+ }
3664
+ if(false == $namespace) {
3665
+ }
3666
+ if(false == $soapaction) {
3667
+ if (isset($_SERVER)) {
3668
+ $SERVER_NAME = $_SERVER['SERVER_NAME'];
3669
+ $SCRIPT_NAME = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
3670
+ } elseif (isset($HTTP_SERVER_VARS)) {
3671
+ $SERVER_NAME = $HTTP_SERVER_VARS['SERVER_NAME'];
3672
+ $SCRIPT_NAME = isset($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : $HTTP_SERVER_VARS['SCRIPT_NAME'];
3673
+ } else {
3674
+ $this->setError("Neither _SERVER nor HTTP_SERVER_VARS is available");
3675
+ }
3676
+ $soapaction = "http://$SERVER_NAME$SCRIPT_NAME/$name";
3677
+ }
3678
+ if(false == $style) {
3679
+ $style = "rpc";
3680
+ }
3681
+ if(false == $use) {
3682
+ $use = "encoded";
3683
+ }
3684
+ if ($use == 'encoded' && $encodingStyle = '') {
3685
+ $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
3686
+ }
3687
+
3688
+ $this->operations[$name] = array(
3689
+ 'name' => $name,
3690
+ 'in' => $in,
3691
+ 'out' => $out,
3692
+ 'namespace' => $namespace,
3693
+ 'soapaction' => $soapaction,
3694
+ 'style' => $style);
3695
+ if($this->wsdl){
3696
+ $this->wsdl->addOperation($name,$in,$out,$namespace,$soapaction,$style,$use,$documentation,$encodingStyle);
3697
+ }
3698
+ return true;
3699
+ }
3700
+
3701
+ /**
3702
+ * Specify a fault to be returned to the client.
3703
+ * This also acts as a flag to the server that a fault has occured.
3704
+ *
3705
+ * @param string $faultcode
3706
+ * @param string $faultstring
3707
+ * @param string $faultactor
3708
+ * @param string $faultdetail
3709
+ * @access public
3710
+ */
3711
+ function fault($faultcode,$faultstring,$faultactor='',$faultdetail=''){
3712
+ if ($faultdetail == '' && $this->debug_flag) {
3713
+ $faultdetail = $this->getDebug();
3714
+ }
3715
+ $this->fault = new soap_fault($faultcode,$faultactor,$faultstring,$faultdetail);
3716
+ $this->fault->soap_defencoding = $this->soap_defencoding;
3717
+ }
3718
+
3719
+ /**
3720
+ * Sets up wsdl object.
3721
+ * Acts as a flag to enable internal WSDL generation
3722
+ *
3723
+ * @param string $serviceName, name of the service
3724
+ * @param mixed $namespace optional 'tns' service namespace or false
3725
+ * @param mixed $endpoint optional URL of service endpoint or false
3726
+ * @param string $style optional (rpc|document) WSDL style (also specified by operation)
3727
+ * @param string $transport optional SOAP transport
3728
+ * @param mixed $schemaTargetNamespace optional 'types' targetNamespace for service schema or false
3729
+ */
3730
+ function configureWSDL($serviceName,$namespace = false,$endpoint = false,$style='rpc', $transport = 'http://schemas.xmlsoap.org/soap/http', $schemaTargetNamespace = false)
3731
+ {
3732
+ global $HTTP_SERVER_VARS;
3733
+
3734
+ if (isset($_SERVER)) {
3735
+ $SERVER_NAME = $_SERVER['SERVER_NAME'];
3736
+ $SERVER_PORT = $_SERVER['SERVER_PORT'];
3737
+ $SCRIPT_NAME = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
3738
+ $HTTPS = isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : (isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off');
3739
+ } elseif (isset($HTTP_SERVER_VARS)) {
3740
+ $SERVER_NAME = $HTTP_SERVER_VARS['SERVER_NAME'];
3741
+ $SERVER_PORT = $HTTP_SERVER_VARS['SERVER_PORT'];
3742
+ $SCRIPT_NAME = isset($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : $HTTP_SERVER_VARS['SCRIPT_NAME'];
3743
+ $HTTPS = isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off';
3744
+ } else {
3745
+ $this->setError("Neither _SERVER nor HTTP_SERVER_VARS is available");
3746
+ }
3747
+ if ($SERVER_PORT == 80) {
3748
+ $SERVER_PORT = '';
3749
+ } else {
3750
+ $SERVER_PORT = ':' . $SERVER_PORT;
3751
+ }
3752
+ if(false == $namespace) {
3753
+ $namespace = "http://$SERVER_NAME/soap/$serviceName";
3754
+ }
3755
+
3756
+ if(false == $endpoint) {
3757
+ if ($HTTPS == '1' || $HTTPS == 'on') {
3758
+ $SCHEME = 'https';
3759
+ } else {
3760
+ $SCHEME = 'http';
3761
+ }
3762
+ $endpoint = "$SCHEME://$SERVER_NAME$SERVER_PORT$SCRIPT_NAME";
3763
+ }
3764
+
3765
+ if(false == $schemaTargetNamespace) {
3766
+ $schemaTargetNamespace = $namespace;
3767
+ }
3768
+
3769
+ $this->wsdl = new wsdl;
3770
+ $this->wsdl->serviceName = $serviceName;
3771
+ $this->wsdl->endpoint = $endpoint;
3772
+ $this->wsdl->namespaces['tns'] = $namespace;
3773
+ $this->wsdl->namespaces['soap'] = 'http://schemas.xmlsoap.org/wsdl/soap/';
3774
+ $this->wsdl->namespaces['wsdl'] = 'http://schemas.xmlsoap.org/wsdl/';
3775
+ if ($schemaTargetNamespace != $namespace) {
3776
+ $this->wsdl->namespaces['types'] = $schemaTargetNamespace;
3777
+ }
3778
+ $this->wsdl->schemas[$schemaTargetNamespace][0] = new xmlschema('', '', $this->wsdl->namespaces);
3779
+ $this->wsdl->schemas[$schemaTargetNamespace][0]->schemaTargetNamespace = $schemaTargetNamespace;
3780
+ $this->wsdl->schemas[$schemaTargetNamespace][0]->imports['http://schemas.xmlsoap.org/soap/encoding/'][0] = array('location' => '', 'loaded' => true);
3781
+ $this->wsdl->schemas[$schemaTargetNamespace][0]->imports['http://schemas.xmlsoap.org/wsdl/'][0] = array('location' => '', 'loaded' => true);
3782
+ $this->wsdl->bindings[$serviceName.'Binding'] = array(
3783
+ 'name'=>$serviceName.'Binding',
3784
+ 'style'=>$style,
3785
+ 'transport'=>$transport,
3786
+ 'portType'=>$serviceName.'PortType');
3787
+ $this->wsdl->ports[$serviceName.'Port'] = array(
3788
+ 'binding'=>$serviceName.'Binding',
3789
+ 'location'=>$endpoint,
3790
+ 'bindingType'=>'http://schemas.xmlsoap.org/wsdl/soap/');
3791
+ }
3792
+ }
3793
+
3794
+
3795
+
3796
+ ?><?php
3797
+
3798
+
3799
+
3800
+ /**
3801
+ * parses a WSDL file, allows access to it's data, other utility methods
3802
+ *
3803
+ * @author Dietrich Ayala <dietrich@ganx4.com>
3804
+ * @version $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
3805
+ * @access public
3806
+ */
3807
+ class wsdl extends nusoap_base {
3808
+ // URL or filename of the root of this WSDL
3809
+ var $wsdl;
3810
+ // define internal arrays of bindings, ports, operations, messages, etc.
3811
+ var $schemas = array();
3812
+ var $currentSchema;
3813
+ var $message = array();
3814
+ var $complexTypes = array();
3815
+ var $messages = array();
3816
+ var $currentMessage;
3817
+ var $currentOperation;
3818
+ var $portTypes = array();
3819
+ var $currentPortType;
3820
+ var $bindings = array();
3821
+ var $currentBinding;
3822
+ var $ports = array();
3823
+ var $currentPort;
3824
+ var $opData = array();
3825
+ var $status = '';
3826
+ var $documentation = false;
3827
+ var $endpoint = '';
3828
+ // array of wsdl docs to import
3829
+ var $import = array();
3830
+ // parser vars
3831
+ var $parser;
3832
+ var $position = 0;
3833
+ var $depth = 0;
3834
+ var $depth_array = array();
3835
+ // for getting wsdl
3836
+ var $proxyhost = '';
3837
+ var $proxyport = '';
3838
+ var $proxyusername = '';
3839
+ var $proxypassword = '';
3840
+ var $timeout = 0;
3841
+ var $response_timeout = 30;
3842
+
3843
+ /**
3844
+ * constructor
3845
+ *
3846
+ * @param string $wsdl WSDL document URL
3847
+ * @param string $proxyhost
3848
+ * @param string $proxyport
3849
+ * @param string $proxyusername
3850
+ * @param string $proxypassword
3851
+ * @param integer $timeout set the connection timeout
3852
+ * @param integer $response_timeout set the response timeout
3853
+ * @access public
3854
+ */
3855
+ function wsdl($wsdl = '',$proxyhost=false,$proxyport=false,$proxyusername=false,$proxypassword=false,$timeout=0,$response_timeout=30){
3856
+ parent::nusoap_base();
3857
+ $this->wsdl = $wsdl;
3858
+ $this->proxyhost = $proxyhost;
3859
+ $this->proxyport = $proxyport;
3860
+ $this->proxyusername = $proxyusername;
3861
+ $this->proxypassword = $proxypassword;
3862
+ $this->timeout = $timeout;
3863
+ $this->response_timeout = $response_timeout;
3864
+
3865
+ // parse wsdl file
3866
+ if ($wsdl != "") {
3867
+ $this->parseWSDL($wsdl);
3868
+ }
3869
+ // imports
3870
+ // TODO: handle imports more properly, grabbing them in-line and nesting them
3871
+ $imported_urls = array();
3872
+ $imported = 1;
3873
+ while ($imported > 0) {
3874
+ $imported = 0;
3875
+ // Schema imports
3876
+ foreach ($this->schemas as $ns => $list) {
3877
+ foreach ($list as $xs) {
3878
+ $wsdlparts = parse_url($this->wsdl); // this is bogusly simple!
3879
+ foreach ($xs->imports as $ns2 => $list2) {
3880
+ for ($ii = 0; $ii < count($list2); $ii++) {
3881
+ if (! $list2[$ii]['loaded']) {
3882
+ $this->schemas[$ns]->imports[$ns2][$ii]['loaded'] = true;
3883
+ $url = $list2[$ii]['location'];
3884
+ if ($url != '') {
3885
+ $urlparts = parse_url($url);
3886
+ if (!isset($urlparts['host'])) {
3887
+ $url = $wsdlparts['scheme'] . '://' . $wsdlparts['host'] . (isset($wsdlparts['port']) ? ':' .$wsdlparts['port'] : '') .
3888
+ substr($wsdlparts['path'],0,strrpos($wsdlparts['path'],'/') + 1) .$urlparts['path'];
3889
+ }
3890
+ if (! in_array($url, $imported_urls)) {
3891
+ $this->parseWSDL($url);
3892
+ $imported++;
3893
+ $imported_urls[] = $url;
3894
+ }
3895
+ } else {
3896
+ }
3897
+ }
3898
+ }
3899
+ }
3900
+ }
3901
+ }
3902
+ // WSDL imports
3903
+ $wsdlparts = parse_url($this->wsdl); // this is bogusly simple!
3904
+ foreach ($this->import as $ns => $list) {
3905
+ for ($ii = 0; $ii < count($list); $ii++) {
3906
+ if (! $list[$ii]['loaded']) {
3907
+ $this->import[$ns][$ii]['loaded'] = true;
3908
+ $url = $list[$ii]['location'];
3909
+ if ($url != '') {
3910
+ $urlparts = parse_url($url);
3911
+ if (!isset($urlparts['host'])) {
3912
+ $url = $wsdlparts['scheme'] . '://' . $wsdlparts['host'] . (isset($wsdlparts['port']) ? ':' . $wsdlparts['port'] : '') .
3913
+ substr($wsdlparts['path'],0,strrpos($wsdlparts['path'],'/') + 1) .$urlparts['path'];
3914
+ }
3915
+ if (! in_array($url, $imported_urls)) {
3916
+ $this->parseWSDL($url);
3917
+ $imported++;
3918
+ $imported_urls[] = $url;
3919
+ }
3920
+ } else {
3921
+ }
3922
+ }
3923
+ }
3924
+ }
3925
+ }
3926
+ // add new data to operation data
3927
+ foreach($this->bindings as $binding => $bindingData) {
3928
+ if (isset($bindingData['operations']) && is_array($bindingData['operations'])) {
3929
+ foreach($bindingData['operations'] as $operation => $data) {
3930
+ $this->bindings[$binding]['operations'][$operation]['input'] =
3931
+ isset($this->bindings[$binding]['operations'][$operation]['input']) ?
3932
+ array_merge($this->bindings[$binding]['operations'][$operation]['input'], $this->portTypes[ $bindingData['portType'] ][$operation]['input']) :
3933
+ $this->portTypes[ $bindingData['portType'] ][$operation]['input'];
3934
+ $this->bindings[$binding]['operations'][$operation]['output'] =
3935
+ isset($this->bindings[$binding]['operations'][$operation]['output']) ?
3936
+ array_merge($this->bindings[$binding]['operations'][$operation]['output'], $this->portTypes[ $bindingData['portType'] ][$operation]['output']) :
3937
+ $this->portTypes[ $bindingData['portType'] ][$operation]['output'];
3938
+ if(isset($this->messages[ $this->bindings[$binding]['operations'][$operation]['input']['message'] ])){
3939
+ $this->bindings[$binding]['operations'][$operation]['input']['parts'] = $this->messages[ $this->bindings[$binding]['operations'][$operation]['input']['message'] ];
3940
+ }
3941
+ if(isset($this->messages[ $this->bindings[$binding]['operations'][$operation]['output']['message'] ])){
3942
+ $this->bindings[$binding]['operations'][$operation]['output']['parts'] = $this->messages[ $this->bindings[$binding]['operations'][$operation]['output']['message'] ];
3943
+ }
3944
+ if (isset($bindingData['style'])) {
3945
+ $this->bindings[$binding]['operations'][$operation]['style'] = $bindingData['style'];
3946
+ }
3947
+ $this->bindings[$binding]['operations'][$operation]['transport'] = isset($bindingData['transport']) ? $bindingData['transport'] : '';
3948
+ $this->bindings[$binding]['operations'][$operation]['documentation'] = isset($this->portTypes[ $bindingData['portType'] ][$operation]['documentation']) ? $this->portTypes[ $bindingData['portType'] ][$operation]['documentation'] : '';
3949
+ $this->bindings[$binding]['operations'][$operation]['endpoint'] = isset($bindingData['endpoint']) ? $bindingData['endpoint'] : '';
3950
+ }
3951
+ }
3952
+ }
3953
+ }
3954
+
3955
+ /**
3956
+ * parses the wsdl document
3957
+ *
3958
+ * @param string $wsdl path or URL
3959
+ * @access private
3960
+ */
3961
+ function parseWSDL($wsdl = '')
3962
+ {
3963
+ if ($wsdl == '') {
3964
+ $this->setError('no wsdl passed to parseWSDL()!!');
3965
+ return false;
3966
+ }
3967
+
3968
+ // parse $wsdl for url format
3969
+ $wsdl_props = parse_url($wsdl);
3970
+
3971
+ if (isset($wsdl_props['scheme']) && ($wsdl_props['scheme'] == 'http' || $wsdl_props['scheme'] == 'https')) {
3972
+ // get wsdl
3973
+ $tr = new soap_transport_http($wsdl);
3974
+ $tr->request_method = 'GET';
3975
+ $tr->useSOAPAction = false;
3976
+ if($this->proxyhost && $this->proxyport){
3977
+ $tr->setProxy($this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword);
3978
+ }
3979
+ $tr->setEncoding('gzip, deflate');
3980
+ $wsdl_string = $tr->send('', $this->timeout, $this->response_timeout);
3981
+ // catch errors
3982
+ if($err = $tr->getError() ){
3983
+ $errstr = 'HTTP ERROR: '.$err;
3984
+ $this->setError($errstr);
3985
+ unset($tr);
3986
+ return false;
3987
+ }
3988
+ unset($tr);
3989
+ } else {
3990
+ // $wsdl is not http(s), so treat it as a file URL or plain file path
3991
+ if (isset($wsdl_props['scheme']) && ($wsdl_props['scheme'] == 'file') && isset($wsdl_props['path'])) {
3992
+ $path = isset($wsdl_props['host']) ? ($wsdl_props['host'] . ':' . $wsdl_props['path']) : $wsdl_props['path'];
3993
+ } else {
3994
+ $path = $wsdl;
3995
+ }
3996
+ if ($fp = @fopen($path, 'r')) {
3997
+ $wsdl_string = '';
3998
+ while ($data = fread($fp, 32768)) {
3999
+ $wsdl_string .= $data;
4000
+ }
4001
+ fclose($fp);
4002
+ } else {
4003
+ $errstr = "Bad path to WSDL file $path";
4004
+ $this->setError($errstr);
4005
+ return false;
4006
+ }
4007
+ }
4008
+ // end new code added
4009
+ // Create an XML parser.
4010
+ $this->parser = xml_parser_create();
4011
+ // Set the options for parsing the XML data.
4012
+ // xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
4013
+ xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
4014
+ // Set the object for the parser.
4015
+ xml_set_object($this->parser, $this);
4016
+ // Set the element handlers for the parser.
4017
+ xml_set_element_handler($this->parser, 'start_element', 'end_element');
4018
+ xml_set_character_data_handler($this->parser, 'character_data');
4019
+ // Parse the XML file.
4020
+ if (!xml_parse($this->parser, $wsdl_string, true)) {
4021
+ // Display an error message.
4022
+ $errstr = sprintf(
4023
+ 'XML error parsing WSDL from %s on line %d: %s',
4024
+ $wsdl,
4025
+ xml_get_current_line_number($this->parser),
4026
+ xml_error_string(xml_get_error_code($this->parser))
4027
+ );
4028
+ $this->setError($errstr);
4029
+ return false;
4030
+ }
4031
+ // free the parser
4032
+ xml_parser_free($this->parser);
4033
+ // catch wsdl parse errors
4034
+ if($this->getError()){
4035
+ return false;
4036
+ }
4037
+ return true;
4038
+ }
4039
+
4040
+ /**
4041
+ * start-element handler
4042
+ *
4043
+ * @param string $parser XML parser object
4044
+ * @param string $name element name
4045
+ * @param string $attrs associative array of attributes
4046
+ * @access private
4047
+ */
4048
+ function start_element($parser, $name, $attrs)
4049
+ {
4050
+ if ($this->status == 'schema') {
4051
+ $this->currentSchema->schemaStartElement($parser, $name, $attrs);
4052
+ $this->currentSchema->clearDebug();
4053
+ } elseif (preg_match('/schema$/', $name)) {
4054
+ $this->status = 'schema';
4055
+ $this->currentSchema = new xmlschema('', '', $this->namespaces);
4056
+ $this->currentSchema->schemaStartElement($parser, $name, $attrs);
4057
+ $this->currentSchema->clearDebug();
4058
+ } else {
4059
+ // position in the total number of elements, starting from 0
4060
+ $pos = $this->position++;
4061
+ $depth = $this->depth++;
4062
+ // set self as current value for this depth
4063
+ $this->depth_array[$depth] = $pos;
4064
+ $this->message[$pos] = array('cdata' => '');
4065
+ // process attributes
4066
+ if (count($attrs) > 0) {
4067
+ // register namespace declarations
4068
+ foreach($attrs as $k => $v) {
4069
+ if (preg_match("/^xmlns/", $k)) {
4070
+ if ($ns_prefix = substr(strrchr($k, ':'), 1)) {
4071
+ $this->namespaces[$ns_prefix] = $v;
4072
+ } else {
4073
+ $this->namespaces['ns' . (count($this->namespaces) + 1)] = $v;
4074
+ }
4075
+ if ($v == 'http://www.w3.org/2001/XMLSchema' || $v == 'http://www.w3.org/1999/XMLSchema' || $v == 'http://www.w3.org/2000/10/XMLSchema') {
4076
+ $this->XMLSchemaVersion = $v;
4077
+ $this->namespaces['xsi'] = $v . '-instance';
4078
+ }
4079
+ }
4080
+ }
4081
+ // expand each attribute prefix to its namespace
4082
+ foreach($attrs as $k => $v) {
4083
+ $k = strpos($k, ':') ? $this->expandQname($k) : $k;
4084
+ if ($k != 'location' && $k != 'soapAction' && $k != 'namespace') {
4085
+ $v = strpos($v, ':') ? $this->expandQname($v) : $v;
4086
+ }
4087
+ $eAttrs[$k] = $v;
4088
+ }
4089
+ $attrs = $eAttrs;
4090
+ } else {
4091
+ $attrs = array();
4092
+ }
4093
+ // get element prefix, namespace and name
4094
+ if (preg_match('/:/', $name)) {
4095
+ // get ns prefix
4096
+ $prefix = substr($name, 0, strpos($name, ':'));
4097
+ // get ns
4098
+ $namespace = isset($this->namespaces[$prefix]) ? $this->namespaces[$prefix] : '';
4099
+ // get unqualified name
4100
+ $name = substr(strstr($name, ':'), 1);
4101
+ }
4102
+ // process attributes, expanding any prefixes to namespaces
4103
+ // find status, register data
4104
+ switch ($this->status) {
4105
+ case 'message':
4106
+ if ($name == 'part') {
4107
+ if (isset($attrs['type'])) {
4108
+ $this->messages[$this->currentMessage][$attrs['name']] = $attrs['type'];
4109
+ }
4110
+ if (isset($attrs['element'])) {
4111
+ $this->messages[$this->currentMessage][$attrs['name']] = $attrs['element'];
4112
+ }
4113
+ }
4114
+ break;
4115
+ case 'portType':
4116
+ switch ($name) {
4117
+ case 'operation':
4118
+ $this->currentPortOperation = $attrs['name'];
4119
+ if (isset($attrs['parameterOrder'])) {
4120
+ $this->portTypes[$this->currentPortType][$attrs['name']]['parameterOrder'] = $attrs['parameterOrder'];
4121
+ }
4122
+ break;
4123
+ case 'documentation':
4124
+ $this->documentation = true;
4125
+ break;
4126
+ // merge input/output data
4127
+ default:
4128
+ $m = isset($attrs['message']) ? $this->getLocalPart($attrs['message']) : '';
4129
+ $this->portTypes[$this->currentPortType][$this->currentPortOperation][$name]['message'] = $m;
4130
+ break;
4131
+ }
4132
+ break;
4133
+ case 'binding':
4134
+ switch ($name) {
4135
+ case 'binding':
4136
+ // get ns prefix
4137
+ if (isset($attrs['style'])) {
4138
+ $this->bindings[$this->currentBinding]['prefix'] = $prefix;
4139
+ }
4140
+ $this->bindings[$this->currentBinding] = array_merge($this->bindings[$this->currentBinding], $attrs);
4141
+ break;
4142
+ case 'header':
4143
+ $this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus]['headers'][] = $attrs;
4144
+ break;
4145
+ case 'operation':
4146
+ if (isset($attrs['soapAction'])) {
4147
+ $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['soapAction'] = $attrs['soapAction'];
4148
+ }
4149
+ if (isset($attrs['style'])) {
4150
+ $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['style'] = $attrs['style'];
4151
+ }
4152
+ if (isset($attrs['name'])) {
4153
+ $this->currentOperation = $attrs['name'];
4154
+ $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['name'] = $attrs['name'];
4155
+ $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['binding'] = $this->currentBinding;
4156
+ $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['endpoint'] = isset($this->bindings[$this->currentBinding]['endpoint']) ? $this->bindings[$this->currentBinding]['endpoint'] : '';
4157
+ }
4158
+ break;
4159
+ case 'input':
4160
+ $this->opStatus = 'input';
4161
+ break;
4162
+ case 'output':
4163
+ $this->opStatus = 'output';
4164
+ break;
4165
+ case 'body':
4166
+ if (isset($this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus])) {
4167
+ $this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus] = array_merge($this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus], $attrs);
4168
+ } else {
4169
+ $this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus] = $attrs;
4170
+ }
4171
+ break;
4172
+ }
4173
+ break;
4174
+ case 'service':
4175
+ switch ($name) {
4176
+ case 'port':
4177
+ $this->currentPort = $attrs['name'];
4178
+ $this->ports[$this->currentPort]['binding'] = $this->getLocalPart($attrs['binding']);
4179
+
4180
+ break;
4181
+ case 'address':
4182
+ $this->ports[$this->currentPort]['location'] = $attrs['location'];
4183
+ $this->ports[$this->currentPort]['bindingType'] = $namespace;
4184
+ $this->bindings[ $this->ports[$this->currentPort]['binding'] ]['bindingType'] = $namespace;
4185
+ $this->bindings[ $this->ports[$this->currentPort]['binding'] ]['endpoint'] = $attrs['location'];
4186
+ break;
4187
+ }
4188
+ break;
4189
+ }
4190
+ // set status
4191
+ switch ($name) {
4192
+ case 'import':
4193
+ if (isset($attrs['location'])) {
4194
+ $this->import[$attrs['namespace']][] = array('location' => $attrs['location'], 'loaded' => false);
4195
+ } else {
4196
+ $this->import[$attrs['namespace']][] = array('location' => '', 'loaded' => true);
4197
+ if (! $this->getPrefixFromNamespace($attrs['namespace'])) {
4198
+ $this->namespaces['ns'.(count($this->namespaces)+1)] = $attrs['namespace'];
4199
+ }
4200
+ }
4201
+ break;
4202
+ //wait for schema
4203
+ //case 'types':
4204
+ // $this->status = 'schema';
4205
+ // break;
4206
+ case 'message':
4207
+ $this->status = 'message';
4208
+ $this->messages[$attrs['name']] = array();
4209
+ $this->currentMessage = $attrs['name'];
4210
+ break;
4211
+ case 'portType':
4212
+ $this->status = 'portType';
4213
+ $this->portTypes[$attrs['name']] = array();
4214
+ $this->currentPortType = $attrs['name'];
4215
+ break;
4216
+ case "binding":
4217
+ if (isset($attrs['name'])) {
4218
+ // get binding name
4219
+ if (strpos($attrs['name'], ':')) {
4220
+ $this->currentBinding = $this->getLocalPart($attrs['name']);
4221
+ } else {
4222
+ $this->currentBinding = $attrs['name'];
4223
+ }
4224
+ $this->status = 'binding';
4225
+ $this->bindings[$this->currentBinding]['portType'] = $this->getLocalPart($attrs['type']);
4226
+ }
4227
+ break;
4228
+ case 'service':
4229
+ $this->serviceName = $attrs['name'];
4230
+ $this->status = 'service';
4231
+ break;
4232
+ case 'definitions':
4233
+ foreach ($attrs as $name => $value) {
4234
+ $this->wsdl_info[$name] = $value;
4235
+ }
4236
+ break;
4237
+ }
4238
+ }
4239
+ }
4240
+
4241
+ /**
4242
+ * end-element handler
4243
+ *
4244
+ * @param string $parser XML parser object
4245
+ * @param string $name element name
4246
+ * @access private
4247
+ */
4248
+ function end_element($parser, $name){
4249
+ // unset schema status
4250
+ if (/*ereg('types$', $name) ||*/ preg_match('/schema$/', $name)) {
4251
+ $this->status = "";
4252
+ $this->currentSchema->clearDebug();
4253
+ $this->schemas[$this->currentSchema->schemaTargetNamespace][] = $this->currentSchema;
4254
+ }
4255
+ if ($this->status == 'schema') {
4256
+ $this->currentSchema->schemaEndElement($parser, $name);
4257
+ } else {
4258
+ // bring depth down a notch
4259
+ $this->depth--;
4260
+ }
4261
+ // end documentation
4262
+ if ($this->documentation) {
4263
+ //TODO: track the node to which documentation should be assigned; it can be a part, message, etc.
4264
+ //$this->portTypes[$this->currentPortType][$this->currentPortOperation]['documentation'] = $this->documentation;
4265
+ $this->documentation = false;
4266
+ }
4267
+ }
4268
+
4269
+ /**
4270
+ * element content handler
4271
+ *
4272
+ * @param string $parser XML parser object
4273
+ * @param string $data element content
4274
+ * @access private
4275
+ */
4276
+ function character_data($parser, $data)
4277
+ {
4278
+ $pos = isset($this->depth_array[$this->depth]) ? $this->depth_array[$this->depth] : 0;
4279
+ if (isset($this->message[$pos]['cdata'])) {
4280
+ $this->message[$pos]['cdata'] .= $data;
4281
+ }
4282
+ if ($this->documentation) {
4283
+ $this->documentation .= $data;
4284
+ }
4285
+ }
4286
+
4287
+ function getBindingData($binding)
4288
+ {
4289
+ if (is_array($this->bindings[$binding])) {
4290
+ return $this->bindings[$binding];
4291
+ }
4292
+ }
4293
+
4294
+ /**
4295
+ * returns an assoc array of operation names => operation data
4296
+ *
4297
+ * @param string $bindingType eg: soap, smtp, dime (only soap is currently supported)
4298
+ * @return array
4299
+ * @access public
4300
+ */
4301
+ function getOperations($bindingType = 'soap')
4302
+ {
4303
+ $ops = array();
4304
+ if ($bindingType == 'soap') {
4305
+ $bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';
4306
+ }
4307
+ // loop thru ports
4308
+ foreach($this->ports as $port => $portData) {
4309
+ // binding type of port matches parameter
4310
+ if ($portData['bindingType'] == $bindingType) {
4311
+ // merge bindings
4312
+ if (isset($this->bindings[ $portData['binding'] ]['operations'])) {
4313
+ $ops = array_merge ($ops, $this->bindings[ $portData['binding'] ]['operations']);
4314
+ }
4315
+ }
4316
+ }
4317
+ return $ops;
4318
+ }
4319
+
4320
+ /**
4321
+ * returns an associative array of data necessary for calling an operation
4322
+ *
4323
+ * @param string $operation , name of operation
4324
+ * @param string $bindingType , type of binding eg: soap
4325
+ * @return array
4326
+ * @access public
4327
+ */
4328
+ function getOperationData($operation, $bindingType = 'soap')
4329
+ {
4330
+ if ($bindingType == 'soap') {
4331
+ $bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';
4332
+ }
4333
+ // loop thru ports
4334
+ foreach($this->ports as $port => $portData) {
4335
+ // binding type of port matches parameter
4336
+ if ($portData['bindingType'] == $bindingType) {
4337
+ // get binding
4338
+ //foreach($this->bindings[ $portData['binding'] ]['operations'] as $bOperation => $opData) {
4339
+ foreach(array_keys($this->bindings[ $portData['binding'] ]['operations']) as $bOperation) {
4340
+ // note that we could/should also check the namespace here
4341
+ if ($operation == $bOperation) {
4342
+ $opData = $this->bindings[ $portData['binding'] ]['operations'][$operation];
4343
+ return $opData;
4344
+ }
4345
+ }
4346
+ }
4347
+ }
4348
+ }
4349
+
4350
+ /**
4351
+ * returns an associative array of data necessary for calling an operation
4352
+ *
4353
+ * @param string $soapAction soapAction for operation
4354
+ * @param string $bindingType type of binding eg: soap
4355
+ * @return array
4356
+ * @access public
4357
+ */
4358
+ function getOperationDataForSoapAction($soapAction, $bindingType = 'soap') {
4359
+ if ($bindingType == 'soap') {
4360
+ $bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';
4361
+ }
4362
+ // loop thru ports
4363
+ foreach($this->ports as $port => $portData) {
4364
+ // binding type of port matches parameter
4365
+ if ($portData['bindingType'] == $bindingType) {
4366
+ // loop through operations for the binding
4367
+ foreach ($this->bindings[ $portData['binding'] ]['operations'] as $bOperation => $opData) {
4368
+ if ($opData['soapAction'] == $soapAction) {
4369
+ return $opData;
4370
+ }
4371
+ }
4372
+ }
4373
+ }
4374
+ }
4375
+
4376
+ /**
4377
+ * returns an array of information about a given type
4378
+ * returns false if no type exists by the given name
4379
+ *
4380
+ * typeDef = array(
4381
+ * 'elements' => array(), // refs to elements array
4382
+ * 'restrictionBase' => '',
4383
+ * 'phpType' => '',
4384
+ * 'order' => '(sequence|all)',
4385
+ * 'attrs' => array() // refs to attributes array
4386
+ * )
4387
+ *
4388
+ * @param $type string the type
4389
+ * @param $ns string namespace (not prefix) of the type
4390
+ * @return mixed
4391
+ * @access public
4392
+ * @see xmlschema
4393
+ */
4394
+ function getTypeDef($type, $ns) {
4395
+ if ((! $ns) && isset($this->namespaces['tns'])) {
4396
+ $ns = $this->namespaces['tns'];
4397
+ }
4398
+ if (isset($this->schemas[$ns])) {
4399
+ for ($i = 0; $i < count($this->schemas[$ns]); $i++) {
4400
+ $xs = &$this->schemas[$ns][$i];
4401
+ $t = $xs->getTypeDef($type);
4402
+ $xs->clearDebug();
4403
+ if ($t) {
4404
+ if (!isset($t['phpType'])) {
4405
+ // get info for type to tack onto the element
4406
+ $uqType = substr($t['type'], strrpos($t['type'], ':') + 1);
4407
+ $ns = substr($t['type'], 0, strrpos($t['type'], ':'));
4408
+ $etype = $this->getTypeDef($uqType, $ns);
4409
+ if ($etype) {
4410
+ if (isset($etype['phpType'])) {
4411
+ $t['phpType'] = $etype['phpType'];
4412
+ }
4413
+ if (isset($etype['elements'])) {
4414
+ $t['elements'] = $etype['elements'];
4415
+ }
4416
+ if (isset($etype['attrs'])) {
4417
+ $t['attrs'] = $etype['attrs'];
4418
+ }
4419
+ }
4420
+ }
4421
+ return $t;
4422
+ }
4423
+ }
4424
+ } else {
4425
+ }
4426
+ return false;
4427
+ }
4428
+
4429
+ /**
4430
+ * prints html description of services
4431
+ *
4432
+ * @access private
4433
+ */
4434
+ function webDescription(){
4435
+ global $HTTP_SERVER_VARS;
4436
+
4437
+ if (isset($_SERVER)) {
4438
+ $PHP_SELF = $_SERVER['PHP_SELF'];
4439
+ } elseif (isset($HTTP_SERVER_VARS)) {
4440
+ $PHP_SELF = $HTTP_SERVER_VARS['PHP_SELF'];
4441
+ } else {
4442
+ $this->setError("Neither _SERVER nor HTTP_SERVER_VARS is available");
4443
+ }
4444
+
4445
+ $b = '
4446
+ <html><head><title>NuSOAP: '.$this->serviceName.'</title>
4447
+ <style type="text/css">
4448
+ body { font-family: arial; color: #000000; background-color: #ffffff; margin: 0px 0px 0px 0px; }
4449
+ p { font-family: arial; color: #000000; margin-top: 0px; margin-bottom: 12px; }
4450
+ pre { background-color: silver; padding: 5px; font-family: Courier New; font-size: x-small; color: #000000;}
4451
+ ul { margin-top: 10px; margin-left: 20px; }
4452
+ li { list-style-type: none; margin-top: 10px; color: #000000; }
4453
+ .content{
4454
+ margin-left: 0px; padding-bottom: 2em; }
4455
+ .nav {
4456
+ padding-top: 10px; padding-bottom: 10px; padding-left: 15px; font-size: .70em;
4457
+ margin-top: 10px; margin-left: 0px; color: #000000;
4458
+ background-color: #ccccff; width: 20%; margin-left: 20px; margin-top: 20px; }
4459
+ .title {
4460
+ font-family: arial; font-size: 26px; color: #ffffff;
4461
+ background-color: #999999; width: 105%; margin-left: 0px;
4462
+ padding-top: 10px; padding-bottom: 10px; padding-left: 15px;}
4463
+ .hidden {
4464
+ position: absolute; visibility: hidden; z-index: 200; left: 250px; top: 100px;
4465
+ font-family: arial; overflow: hidden; width: 600;
4466
+ padding: 20px; font-size: 10px; background-color: #999999;
4467
+ layer-background-color:#FFFFFF; }
4468
+ a,a:active { color: charcoal; font-weight: bold; }
4469
+ a:visited { color: #666666; font-weight: bold; }
4470
+ a:hover { color: cc3300; font-weight: bold; }
4471
+ </style>
4472
+ <script type="text/javascript">
4473
+ //<![CDATA[
4474
+ // POP-UP CAPTIONS...
4475
+ function lib_bwcheck(){ //Browsercheck (needed)
4476
+ this.ver=navigator.appVersion
4477
+ this.agent=navigator.userAgent
4478
+ this.dom=document.getElementById?1:0
4479
+ this.opera5=this.agent.indexOf("Opera 5")>-1
4480
+ this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0;
4481
+ this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
4482
+ this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
4483
+ this.ie=this.ie4||this.ie5||this.ie6
4484
+ this.mac=this.agent.indexOf("Mac")>-1
4485
+ this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
4486
+ this.ns4=(document.layers && !this.dom)?1:0;
4487
+ this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
4488
+ return this
4489
+ }
4490
+ var bw = new lib_bwcheck()
4491
+ //Makes crossbrowser object.
4492
+ function makeObj(obj){
4493
+ this.evnt=bw.dom? document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?document.layers[obj]:0;
4494
+ if(!this.evnt) return false
4495
+ this.css=bw.dom||bw.ie4?this.evnt.style:bw.ns4?this.evnt:0;
4496
+ this.wref=bw.dom||bw.ie4?this.evnt:bw.ns4?this.css.document:0;
4497
+ this.writeIt=b_writeIt;
4498
+ return this
4499
+ }
4500
+ // A unit of measure that will be added when setting the position of a layer.
4501
+ //var px = bw.ns4||window.opera?"":"px";
4502
+ function b_writeIt(text){
4503
+ if (bw.ns4){this.wref.write(text);this.wref.close()}
4504
+ else this.wref.innerHTML = text
4505
+ }
4506
+ //Shows the messages
4507
+ var oDesc;
4508
+ function popup(divid){
4509
+ if(oDesc = new makeObj(divid)){
4510
+ oDesc.css.visibility = "visible"
4511
+ }
4512
+ }
4513
+ function popout(){ // Hides message
4514
+ if(oDesc) oDesc.css.visibility = "hidden"
4515
+ }
4516
+ //]]>
4517
+ </script>
4518
+ </head>
4519
+ <body>
4520
+ <div class=content>
4521
+ <br><br>
4522
+ <div class=title>'.$this->serviceName.'</div>
4523
+ <div class=nav>
4524
+ <p>View the <a href="'.$PHP_SELF.'?wsdl">WSDL</a> for the service.
4525
+ Click on an operation name to view it&apos;s details.</p>
4526
+ <ul>';
4527
+ foreach($this->getOperations() as $op => $data){
4528
+ $b .= "<li><a href='#' onclick=\"popout();popup('$op')\">$op</a></li>";
4529
+ // create hidden div
4530
+ $b .= "<div id='$op' class='hidden'>
4531
+ <a href='#' onclick='popout()'><font color='#ffffff'>Close</font></a><br><br>";
4532
+ foreach($data as $donnie => $marie){ // loop through opdata
4533
+ if($donnie == 'input' || $donnie == 'output'){ // show input/output data
4534
+ $b .= "<font color='white'>".ucfirst($donnie).':</font><br>';
4535
+ foreach($marie as $captain => $tenille){ // loop through data
4536
+ if($captain == 'parts'){ // loop thru parts
4537
+ $b .= "&nbsp;&nbsp;$captain:<br>";
4538
+ //if(is_array($tenille)){
4539
+ foreach($tenille as $joanie => $chachi){
4540
+ $b .= "&nbsp;&nbsp;&nbsp;&nbsp;$joanie: $chachi<br>";
4541
+ }
4542
+ //}
4543
+ } else {
4544
+ $b .= "&nbsp;&nbsp;$captain: $tenille<br>";
4545
+ }
4546
+ }
4547
+ } else {
4548
+ $b .= "<font color='white'>".ucfirst($donnie).":</font> $marie<br>";
4549
+ }
4550
+ }
4551
+ $b .= '</div>';
4552
+ }
4553
+ $b .= '
4554
+ <ul>
4555
+ </div>
4556
+ </div></body></html>';
4557
+ return $b;
4558
+ }
4559
+
4560
+ /**
4561
+ * serialize the parsed wsdl
4562
+ *
4563
+ * @param mixed $debug whether to put debug=1 in endpoint URL
4564
+ * @return string serialization of WSDL
4565
+ * @access public
4566
+ */
4567
+ function serialize($debug = 0)
4568
+ {
4569
+ $xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';
4570
+ $xml .= "\n<definitions";
4571
+ foreach($this->namespaces as $k => $v) {
4572
+ $xml .= " xmlns:$k=\"$v\"";
4573
+ }
4574
+ // 10.9.02 - add poulter fix for wsdl and tns declarations
4575
+ if (isset($this->namespaces['wsdl'])) {
4576
+ $xml .= " xmlns=\"" . $this->namespaces['wsdl'] . "\"";
4577
+ }
4578
+ if (isset($this->namespaces['tns'])) {
4579
+ $xml .= " targetNamespace=\"" . $this->namespaces['tns'] . "\"";
4580
+ }
4581
+ $xml .= '>';
4582
+ // imports
4583
+ if (sizeof($this->import) > 0) {
4584
+ foreach($this->import as $ns => $list) {
4585
+ foreach ($list as $ii) {
4586
+ if ($ii['location'] != '') {
4587
+ $xml .= '<import location="' . $ii['location'] . '" namespace="' . $ns . '" />';
4588
+ } else {
4589
+ $xml .= '<import namespace="' . $ns . '" />';
4590
+ }
4591
+ }
4592
+ }
4593
+ }
4594
+ // types
4595
+ if (count($this->schemas)>=1) {
4596
+ $xml .= "\n<types>\n";
4597
+ foreach ($this->schemas as $ns => $list) {
4598
+ foreach ($list as $xs) {
4599
+ $xml .= $xs->serializeSchema();
4600
+ }
4601
+ }
4602
+ $xml .= '</types>';
4603
+ }
4604
+ // messages
4605
+ if (count($this->messages) >= 1) {
4606
+ foreach($this->messages as $msgName => $msgParts) {
4607
+ $xml .= "\n<message name=\"" . $msgName . '">';
4608
+ if(is_array($msgParts)){
4609
+ foreach($msgParts as $partName => $partType) {
4610
+ // print 'serializing '.$partType.', sv: '.$this->XMLSchemaVersion.'<br>';
4611
+ if (strpos($partType, ':')) {
4612
+ $typePrefix = $this->getPrefixFromNamespace($this->getPrefix($partType));
4613
+ } elseif (isset($this->typemap[$this->namespaces['xsd']][$partType])) {
4614
+ // print 'checking typemap: '.$this->XMLSchemaVersion.'<br>';
4615
+ $typePrefix = 'xsd';
4616
+ } else {
4617
+ foreach($this->typemap as $ns => $types) {
4618
+ if (isset($types[$partType])) {
4619
+ $typePrefix = $this->getPrefixFromNamespace($ns);
4620
+ }
4621
+ }
4622
+ if (!isset($typePrefix)) {
4623
+ die("$partType has no namespace!");
4624
+ }
4625
+ }
4626
+ $ns = $this->getNamespaceFromPrefix($typePrefix);
4627
+ $typeDef = $this->getTypeDef($this->getLocalPart($partType), $ns);
4628
+ if ($typeDef['typeClass'] == 'element') {
4629
+ $elementortype = 'element';
4630
+ } else {
4631
+ $elementortype = 'type';
4632
+ }
4633
+ $xml .= "\n" . ' <part name="' . $partName . '" ' . $elementortype . '="' . $typePrefix . ':' . $this->getLocalPart($partType) . '" />';
4634
+ }
4635
+ }
4636
+ $xml .= '</message>';
4637
+ }
4638
+ }
4639
+ // bindings & porttypes
4640
+ if (count($this->bindings) >= 1) {
4641
+ $binding_xml = '';
4642
+ $portType_xml = '';
4643
+ foreach($this->bindings as $bindingName => $attrs) {
4644
+ $binding_xml .= "\n<binding name=\"" . $bindingName . '" type="tns:' . $attrs['portType'] . '">';
4645
+ $binding_xml .= "\n" . ' <soap:binding style="' . $attrs['style'] . '" transport="' . $attrs['transport'] . '"/>';
4646
+ $portType_xml .= "\n<portType name=\"" . $attrs['portType'] . '">';
4647
+ foreach($attrs['operations'] as $opName => $opParts) {
4648
+ $binding_xml .= "\n" . ' <operation name="' . $opName . '">';
4649
+ $binding_xml .= "\n" . ' <soap:operation soapAction="' . $opParts['soapAction'] . '" style="'. $opParts['style'] . '"/>';
4650
+ if (isset($opParts['input']['encodingStyle']) && $opParts['input']['encodingStyle'] != '') {
4651
+ $enc_style = ' encodingStyle="' . $opParts['input']['encodingStyle'] . '"';
4652
+ } else {
4653
+ $enc_style = '';
4654
+ }
4655
+ $binding_xml .= "\n" . ' <input><soap:body use="' . $opParts['input']['use'] . '" namespace="' . $opParts['input']['namespace'] . '"' . $enc_style . '/></input>';
4656
+ if (isset($opParts['output']['encodingStyle']) && $opParts['output']['encodingStyle'] != '') {
4657
+ $enc_style = ' encodingStyle="' . $opParts['output']['encodingStyle'] . '"';
4658
+ } else {
4659
+ $enc_style = '';
4660
+ }
4661
+ $binding_xml .= "\n" . ' <output><soap:body use="' . $opParts['output']['use'] . '" namespace="' . $opParts['output']['namespace'] . '"' . $enc_style . '/></output>';
4662
+ $binding_xml .= "\n" . ' </operation>';
4663
+ $portType_xml .= "\n" . ' <operation name="' . $opParts['name'] . '"';
4664
+ if (isset($opParts['parameterOrder'])) {
4665
+ $portType_xml .= ' parameterOrder="' . $opParts['parameterOrder'] . '"';
4666
+ }
4667
+ $portType_xml .= '>';
4668
+ if(isset($opParts['documentation']) && $opParts['documentation'] != '') {
4669
+ $portType_xml .= "\n" . ' <documentation>' . htmlspecialchars($opParts['documentation']) . '</documentation>';
4670
+ }
4671
+ $portType_xml .= "\n" . ' <input message="tns:' . $opParts['input']['message'] . '"/>';
4672
+ $portType_xml .= "\n" . ' <output message="tns:' . $opParts['output']['message'] . '"/>';
4673
+ $portType_xml .= "\n" . ' </operation>';
4674
+ }
4675
+ $portType_xml .= "\n" . '</portType>';
4676
+ $binding_xml .= "\n" . '</binding>';
4677
+ }
4678
+ $xml .= $portType_xml . $binding_xml;
4679
+ }
4680
+ // services
4681
+ $xml .= "\n<service name=\"" . $this->serviceName . '">';
4682
+ if (count($this->ports) >= 1) {
4683
+ foreach($this->ports as $pName => $attrs) {
4684
+ $xml .= "\n" . ' <port name="' . $pName . '" binding="tns:' . $attrs['binding'] . '">';
4685
+ $xml .= "\n" . ' <soap:address location="' . $attrs['location'] . ($debug ? '?debug=1' : '') . '"/>';
4686
+ $xml .= "\n" . ' </port>';
4687
+ }
4688
+ }
4689
+ $xml .= "\n" . '</service>';
4690
+ return $xml . "\n</definitions>";
4691
+ }
4692
+
4693
+ /**
4694
+ * serialize PHP values according to a WSDL message definition
4695
+ *
4696
+ * TODO
4697
+ * - multi-ref serialization
4698
+ * - validate PHP values against type definitions, return errors if invalid
4699
+ *
4700
+ * @param string $operation operation name
4701
+ * @param string $direction (input|output)
4702
+ * @param mixed $parameters parameter value(s)
4703
+ * @return mixed parameters serialized as XML or false on error (e.g. operation not found)
4704
+ * @access public
4705
+ */
4706
+ function serializeRPCParameters($operation, $direction, $parameters)
4707
+ {
4708
+
4709
+ if ($direction != 'input' && $direction != 'output') {
4710
+ $this->setError('The value of the \$direction argument needs to be either "input" or "output"');
4711
+ return false;
4712
+ }
4713
+ if (!$opData = $this->getOperationData($operation)) {
4714
+ $this->setError('Unable to retrieve WSDL data for operation: ' . $operation);
4715
+ return false;
4716
+ }
4717
+
4718
+ // Get encoding style for output and set to current
4719
+ $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
4720
+ if(($direction == 'input') && isset($opData['output']['encodingStyle']) && ($opData['output']['encodingStyle'] != $encodingStyle)) {
4721
+ $encodingStyle = $opData['output']['encodingStyle'];
4722
+ $enc_style = $encodingStyle;
4723
+ }
4724
+
4725
+ // set input params
4726
+ $xml = '';
4727
+ if (isset($opData[$direction]['parts']) && sizeof($opData[$direction]['parts']) > 0) {
4728
+
4729
+ $use = $opData[$direction]['use'];
4730
+ if (is_array($parameters)) {
4731
+ $parametersArrayType = $this->isArraySimpleOrStruct($parameters);
4732
+ foreach($opData[$direction]['parts'] as $name => $type) {
4733
+ // Track encoding style
4734
+ if (isset($opData[$direction]['encodingStyle']) && $encodingStyle != $opData[$direction]['encodingStyle']) {
4735
+ $encodingStyle = $opData[$direction]['encodingStyle'];
4736
+ $enc_style = $encodingStyle;
4737
+ } else {
4738
+ $enc_style = false;
4739
+ }
4740
+ // NOTE: add error handling here
4741
+ // if serializeType returns false, then catch global error and fault
4742
+ if ($parametersArrayType == 'arraySimple') {
4743
+ $p = array_shift($parameters);
4744
+ $xml .= $this->serializeType($name, $type, $p, $use, $enc_style);
4745
+ } elseif (isset($parameters[$name])) {
4746
+ $xml .= $this->serializeType($name, $type, $parameters[$name], $use, $enc_style);
4747
+ } else {
4748
+ // TODO: only send nillable
4749
+ $xml .= $this->serializeType($name, $type, null, $use, $enc_style);
4750
+ }
4751
+ }
4752
+ } else {
4753
+ }
4754
+ }
4755
+ return $xml;
4756
+ }
4757
+
4758
+ /**
4759
+ * serialize a PHP value according to a WSDL message definition
4760
+ *
4761
+ * TODO
4762
+ * - multi-ref serialization
4763
+ * - validate PHP values against type definitions, return errors if invalid
4764
+ *
4765
+ * @param string $ type name
4766
+ * @param mixed $ param value
4767
+ * @return mixed new param or false if initial value didn't validate
4768
+ * @access public
4769
+ * @deprecated
4770
+ */
4771
+ function serializeParameters($operation, $direction, $parameters)
4772
+ {
4773
+
4774
+ if ($direction != 'input' && $direction != 'output') {
4775
+ $this->setError('The value of the \$direction argument needs to be either "input" or "output"');
4776
+ return false;
4777
+ }
4778
+ if (!$opData = $this->getOperationData($operation)) {
4779
+ $this->setError('Unable to retrieve WSDL data for operation: ' . $operation);
4780
+ return false;
4781
+ }
4782
+
4783
+ // Get encoding style for output and set to current
4784
+ $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
4785
+ if(($direction == 'input') && isset($opData['output']['encodingStyle']) && ($opData['output']['encodingStyle'] != $encodingStyle)) {
4786
+ $encodingStyle = $opData['output']['encodingStyle'];
4787
+ $enc_style = $encodingStyle;
4788
+ }
4789
+
4790
+ // set input params
4791
+ $xml = '';
4792
+ if (isset($opData[$direction]['parts']) && sizeof($opData[$direction]['parts']) > 0) {
4793
+
4794
+ $use = $opData[$direction]['use'];
4795
+ if (is_array($parameters)) {
4796
+ $parametersArrayType = $this->isArraySimpleOrStruct($parameters);
4797
+ foreach($opData[$direction]['parts'] as $name => $type) {
4798
+ // Track encoding style
4799
+ if(isset($opData[$direction]['encodingStyle']) && $encodingStyle != $opData[$direction]['encodingStyle']) {
4800
+ $encodingStyle = $opData[$direction]['encodingStyle'];
4801
+ $enc_style = $encodingStyle;
4802
+ } else {
4803
+ $enc_style = false;
4804
+ }
4805
+ // NOTE: add error handling here
4806
+ // if serializeType returns false, then catch global error and fault
4807
+ if ($parametersArrayType == 'arraySimple') {
4808
+ $p = array_shift($parameters);
4809
+ $xml .= $this->serializeType($name, $type, $p, $use, $enc_style);
4810
+ } elseif (isset($parameters[$name])) {
4811
+ $xml .= $this->serializeType($name, $type, $parameters[$name], $use, $enc_style);
4812
+ } else {
4813
+ // TODO: only send nillable
4814
+ $xml .= $this->serializeType($name, $type, null, $use, $enc_style);
4815
+ }
4816
+ }
4817
+ } else {
4818
+ }
4819
+ }
4820
+ return $xml;
4821
+ }
4822
+
4823
+ /**
4824
+ * serializes a PHP value according a given type definition
4825
+ *
4826
+ * @param string $name name of value (part or element)
4827
+ * @param string $type XML schema type of value (type or element)
4828
+ * @param mixed $value a native PHP value (parameter value)
4829
+ * @param string $use use for part (encoded|literal)
4830
+ * @param string $encodingStyle SOAP encoding style for the value (if different than the enclosing style)
4831
+ * @param boolean $unqualified a kludge for what should be XML namespace form handling
4832
+ * @return string value serialized as an XML string
4833
+ * @access private
4834
+ */
4835
+ function serializeType($name, $type, $value, $use='encoded', $encodingStyle=false, $unqualified=false)
4836
+ {
4837
+ if($use == 'encoded' && $encodingStyle) {
4838
+ $encodingStyle = ' SOAP-ENV:encodingStyle="' . $encodingStyle . '"';
4839
+ }
4840
+
4841
+ // if a soapval has been supplied, let its type override the WSDL
4842
+ if (is_object($value) && get_class($value) == 'soapval') {
4843
+ if ($value->type_ns) {
4844
+ $type = $value->type_ns . ':' . $value->type;
4845
+ $forceType = true;
4846
+ } elseif ($value->type) {
4847
+ $type = $value->type;
4848
+ $forceType = true;
4849
+ } else {
4850
+ $forceType = false;
4851
+ }
4852
+ $attrs = $value->attributes;
4853
+ $value = $value->value;
4854
+ if ($attrs) {
4855
+ if (!is_array($value)) {
4856
+ $value['!'] = $value;
4857
+ }
4858
+ foreach ($attrs as $n => $v) {
4859
+ $value['!' . $n] = $v;
4860
+ }
4861
+ }
4862
+ } else {
4863
+ $forceType = false;
4864
+ }
4865
+
4866
+ $xml = '';
4867
+ if (strpos($type, ':')) {
4868
+ $uqType = substr($type, strrpos($type, ':') + 1);
4869
+ $ns = substr($type, 0, strrpos($type, ':'));
4870
+ if ($this->getNamespaceFromPrefix($ns)) {
4871
+ $ns = $this->getNamespaceFromPrefix($ns);
4872
+ }
4873
+
4874
+ if($ns == $this->XMLSchemaVersion || $ns == 'http://schemas.xmlsoap.org/soap/encoding/'){
4875
+ if ($unqualified && $use == 'literal') {
4876
+ $elementNS = " xmlns=\"\"";
4877
+ } else {
4878
+ $elementNS = '';
4879
+ }
4880
+ if (is_null($value)) {
4881
+ if ($use == 'literal') {
4882
+ // TODO: depends on minOccurs
4883
+ $xml = "<$name$elementNS/>";
4884
+ } else {
4885
+ // TODO: depends on nillable, which should be checked before calling this method
4886
+ $xml = "<$name$elementNS xsi:nil=\"true\" xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"/>";
4887
+ }
4888
+ return $xml;
4889
+ }
4890
+ if ($uqType == 'Array') {
4891
+ // JBoss/Axis does this sometimes
4892
+ return $this->serialize_val($value, $name, false, false, false, false, $use);
4893
+ }
4894
+ if ($uqType == 'boolean') {
4895
+ if ((is_string($value) && $value == 'false') || (! $value)) {
4896
+ $value = 'false';
4897
+ } else {
4898
+ $value = 'true';
4899
+ }
4900
+ }
4901
+ if ($uqType == 'string' && gettype($value) == 'string') {
4902
+ $value = $this->expandEntities($value);
4903
+ }
4904
+ if (($uqType == 'long' || $uqType == 'unsignedLong') && gettype($value) == 'double') {
4905
+ $value = sprintf("%.0lf", $value);
4906
+ }
4907
+ // it's a scalar
4908
+ // TODO: what about null/nil values?
4909
+ // check type isn't a custom type extending xmlschema namespace
4910
+ if (!$this->getTypeDef($uqType, $ns)) {
4911
+ if ($use == 'literal') {
4912
+ if ($forceType) {
4913
+ $xml = "<$name$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\">$value</$name>";
4914
+ } else {
4915
+ $xml = "<$name$elementNS>$value</$name>";
4916
+ }
4917
+ } else {
4918
+ $xml = "<$name$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>$value</$name>";
4919
+ }
4920
+ return $xml;
4921
+ }
4922
+ } else if ($ns == 'http://xml.apache.org/xml-soap') {
4923
+ if ($uqType == 'Map') {
4924
+ $tt_prefix = $this->getPrefixFromNamespace('http://xml.apache.org/xml-soap');
4925
+ if (! $tt_prefix) {
4926
+ $tt_prefix = 'ns' . rand(1000, 9999);
4927
+ $this->namespaces[$tt_prefix] = 'http://xml.apache.org/xml-soap';
4928
+ // force this to be added to usedNamespaces
4929
+ $tt_prefix = $this->getPrefixFromNamespace('http://xml.apache.org/xml-soap');
4930
+ }
4931
+ $contents = '';
4932
+ foreach($value as $k => $v) {
4933
+ $contents .= '<item>';
4934
+ $contents .= $this->serialize_val($k,'key',false,false,false,false,$use);
4935
+ $contents .= $this->serialize_val($v,'value',false,false,false,false,$use);
4936
+ $contents .= '</item>';
4937
+ }
4938
+ if ($use == 'literal') {
4939
+ if ($forceType) {
4940
+ $xml = "<$name xsi:type=\"" . $tt_prefix . ":$uqType\">$contents</$name>";
4941
+ } else {
4942
+ $xml = "<$name>$contents</$name>";
4943
+ }
4944
+ } else {
4945
+ $xml = "<$name xsi:type=\"" . $tt_prefix . ":$uqType\"$encodingStyle>$contents</$name>";
4946
+ }
4947
+ return $xml;
4948
+ }
4949
+ }
4950
+ } else {
4951
+ // TODO: should the type be compared to types in XSD, and the namespace
4952
+ // set to XSD if the type matches?
4953
+ $ns = '';
4954
+ $uqType = $type;
4955
+ }
4956
+ if(!$typeDef = $this->getTypeDef($uqType, $ns)){
4957
+ $this->setError("$type ($uqType) is not a supported type.");
4958
+ return false;
4959
+ } else {
4960
+ }
4961
+ $phpType = $typeDef['phpType'];
4962
+ // if php type == struct, map value to the <all> element names
4963
+ if ($phpType == 'struct') {
4964
+ if (isset($typeDef['typeClass']) && $typeDef['typeClass'] == 'element') {
4965
+ $elementName = $uqType;
4966
+ if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified')) {
4967
+ $elementNS = " xmlns=\"$ns\"";
4968
+ } else {
4969
+ $elementNS = " xmlns=\"\"";
4970
+ }
4971
+ } else {
4972
+ $elementName = $name;
4973
+ if ($unqualified) {
4974
+ $elementNS = " xmlns=\"\"";
4975
+ } else {
4976
+ $elementNS = '';
4977
+ }
4978
+ }
4979
+
4980
+ ############################################### ipay
4981
+ $r_xmlns_case = array("RemittanceMethod","ShippingMethod","AuctionDelivery","Sender","Reciever");
4982
+ if (in_array($name,$r_xmlns_case)) $elementNS = ' xmlns="http://schema.auction.co.kr/Arche.API.xsd"';
4983
+ ###############################################
4984
+
4985
+ if (is_null($value)) {
4986
+ if ($use == 'literal') {
4987
+ // TODO: depends on minOccurs
4988
+ $xml = "<$elementName$elementNS/>";
4989
+ } else {
4990
+ $xml = "<$elementName$elementNS xsi:nil=\"true\" xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"/>";
4991
+ }
4992
+ return $xml;
4993
+ }
4994
+ if (is_object($value)) {
4995
+ $value = get_object_vars($value);
4996
+ }
4997
+ if (is_array($value)) {
4998
+ $elementAttrs = $this->serializeComplexTypeAttributes($typeDef, $value, $ns, $uqType);
4999
+ if ($use == 'literal') {
5000
+ if ($forceType) {
5001
+ $xml = "<$elementName$elementNS$elementAttrs xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\">";
5002
+ } else {
5003
+ $xml = "<$elementName$elementNS$elementAttrs>";
5004
+ }
5005
+ } else {
5006
+ $xml = "<$elementName$elementNS$elementAttrs xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>";
5007
+ }
5008
+
5009
+ $xml .= $this->serializeComplexTypeElements($typeDef, $value, $ns, $uqType, $use, $encodingStyle);
5010
+ $xml .= "</$elementName>";
5011
+ } else {
5012
+ $this->setError("phpType is struct, but value is not an array: see debug output for details");
5013
+ $xml = '';
5014
+ }
5015
+ } elseif ($phpType == 'array') {
5016
+ if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified')) {
5017
+ $elementNS = " xmlns=\"$ns\"";
5018
+ } else {
5019
+ if ($unqualified) {
5020
+ $elementNS = " xmlns=\"\"";
5021
+ } else {
5022
+ $elementNS = '';
5023
+ }
5024
+ }
5025
+ if (is_null($value)) {
5026
+ if ($use == 'literal') {
5027
+ // TODO: depends on minOccurs
5028
+ $xml = "<$name$elementNS/>";
5029
+ } else {
5030
+ $xml = "<$name$elementNS xsi:nil=\"true\" xsi:type=\"" .
5031
+ $this->getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/') .
5032
+ ":Array\" " .
5033
+ $this->getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/') .
5034
+ ':arrayType="' .
5035
+ $this->getPrefixFromNamespace($this->getPrefix($typeDef['arrayType'])) .
5036
+ ':' .
5037
+ $this->getLocalPart($typeDef['arrayType'])."[0]\"/>";
5038
+ }
5039
+ return $xml;
5040
+ }
5041
+ if (isset($typeDef['multidimensional'])) {
5042
+ $nv = array();
5043
+ foreach($value as $v) {
5044
+ $cols = ',' . sizeof($v);
5045
+ $nv = array_merge($nv, $v);
5046
+ }
5047
+ $value = $nv;
5048
+ } else {
5049
+ $cols = '';
5050
+ }
5051
+ if (is_array($value) && sizeof($value) >= 1) {
5052
+ $rows = sizeof($value);
5053
+ $contents = '';
5054
+ foreach($value as $k => $v) {
5055
+ //if (strpos($typeDef['arrayType'], ':') ) {
5056
+ if (!in_array($typeDef['arrayType'],$this->typemap['http://www.w3.org/2001/XMLSchema'])) {
5057
+ $contents .= $this->serializeType('item', $typeDef['arrayType'], $v, $use);
5058
+ } else {
5059
+ $contents .= $this->serialize_val($v, 'item', $typeDef['arrayType'], null, $this->XMLSchemaVersion, false, $use);
5060
+ }
5061
+ }
5062
+ } else {
5063
+ $rows = 0;
5064
+ $contents = null;
5065
+ }
5066
+ // TODO: for now, an empty value will be serialized as a zero element
5067
+ // array. Revisit this when coding the handling of null/nil values.
5068
+ if ($use == 'literal') {
5069
+ $xml = "<$name$elementNS>"
5070
+ .$contents
5071
+ ."</$name>";
5072
+ } else {
5073
+ $xml = "<$name$elementNS xsi:type=\"".$this->getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/').':Array" '.
5074
+ $this->getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/')
5075
+ .':arrayType="'
5076
+ .$this->getPrefixFromNamespace($this->getPrefix($typeDef['arrayType']))
5077
+ .":".$this->getLocalPart($typeDef['arrayType'])."[$rows$cols]\">"
5078
+ .$contents
5079
+ ."</$name>";
5080
+ }
5081
+ } elseif ($phpType == 'scalar') {
5082
+ if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified')) {
5083
+ $elementNS = " xmlns=\"$ns\"";
5084
+ } else {
5085
+ if ($unqualified) {
5086
+ $elementNS = " xmlns=\"\"";
5087
+ } else {
5088
+ $elementNS = '';
5089
+ }
5090
+ }
5091
+ if ($use == 'literal') {
5092
+ if ($forceType) {
5093
+ $xml = "<$name$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\">$value</$name>";
5094
+ } else {
5095
+ $xml = "<$name$elementNS>$value</$name>";
5096
+ }
5097
+ } else {
5098
+ $xml = "<$name$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>$value</$name>";
5099
+ }
5100
+ }
5101
+ return $xml;
5102
+ }
5103
+
5104
+ /**
5105
+ * serializes the attributes for a complexType
5106
+ *
5107
+ * @param array $typeDef our internal representation of an XML schema type (or element)
5108
+ * @param mixed $value a native PHP value (parameter value)
5109
+ * @param string $ns the namespace of the type
5110
+ * @param string $uqType the local part of the type
5111
+ * @return string value serialized as an XML string
5112
+ * @access private
5113
+ */
5114
+ function serializeComplexTypeAttributes($typeDef, $value, $ns, $uqType) {
5115
+ $xml = '';
5116
+ if (isset($typeDef['attrs']) && is_array($typeDef['attrs'])) {
5117
+ if (is_array($value)) {
5118
+ $xvalue = $value;
5119
+ } elseif (is_object($value)) {
5120
+ $xvalue = get_object_vars($value);
5121
+ } else {
5122
+ $xvalue = array();
5123
+ }
5124
+ foreach ($typeDef['attrs'] as $aName => $attrs) {
5125
+ if (isset($xvalue['!' . $aName])) {
5126
+ $xname = '!' . $aName;
5127
+ } elseif (isset($xvalue[$aName])) {
5128
+ $xname = $aName;
5129
+ } elseif (isset($attrs['default'])) {
5130
+ $xname = '!' . $aName;
5131
+ $xvalue[$xname] = $attrs['default'];
5132
+ } else {
5133
+ $xname = '';
5134
+ }
5135
+ if ($xname) {
5136
+ $xml .= " $aName=\"" . $this->expandEntities($xvalue[$xname]) . "\"";
5137
+ }
5138
+ }
5139
+ } else {
5140
+ }
5141
+ if (isset($typeDef['extensionBase'])) {
5142
+ $ns = $this->getPrefix($typeDef['extensionBase']);
5143
+ $uqType = $this->getLocalPart($typeDef['extensionBase']);
5144
+ if ($this->getNamespaceFromPrefix($ns)) {
5145
+ $ns = $this->getNamespaceFromPrefix($ns);
5146
+ }
5147
+ if ($typeDef = $this->getTypeDef($uqType, $ns)) {
5148
+ $xml .= $this->serializeComplexTypeAttributes($typeDef, $value, $ns, $uqType);
5149
+ } else {
5150
+ }
5151
+ }
5152
+ return $xml;
5153
+ }
5154
+
5155
+ /**
5156
+ * serializes the elements for a complexType
5157
+ *
5158
+ * @param array $typeDef our internal representation of an XML schema type (or element)
5159
+ * @param mixed $value a native PHP value (parameter value)
5160
+ * @param string $ns the namespace of the type
5161
+ * @param string $uqType the local part of the type
5162
+ * @param string $use use for part (encoded|literal)
5163
+ * @param string $encodingStyle SOAP encoding style for the value (if different than the enclosing style)
5164
+ * @return string value serialized as an XML string
5165
+ * @access private
5166
+ */
5167
+ function serializeComplexTypeElements($typeDef, $value, $ns, $uqType, $use='encoded', $encodingStyle=false) {
5168
+ $xml = '';
5169
+ if (isset($typeDef['elements']) && is_array($typeDef['elements'])) {
5170
+ if (is_array($value)) {
5171
+ $xvalue = $value;
5172
+ } elseif (is_object($value)) {
5173
+ $xvalue = get_object_vars($value);
5174
+ } else {
5175
+ $xvalue = array();
5176
+ }
5177
+ // toggle whether all elements are present - ideally should validate against schema
5178
+ if (count($typeDef['elements']) != count($xvalue)){
5179
+ $optionals = true;
5180
+ }
5181
+ foreach ($typeDef['elements'] as $eName => $attrs) {
5182
+ if (!isset($xvalue[$eName])) {
5183
+ if (isset($attrs['default'])) {
5184
+ $xvalue[$eName] = $attrs['default'];
5185
+ }
5186
+ }
5187
+ // if user took advantage of a minOccurs=0, then only serialize named parameters
5188
+ if (isset($optionals)
5189
+ && (!isset($xvalue[$eName]))
5190
+ && ( (!isset($attrs['nillable'])) || $attrs['nillable'] != 'true')
5191
+ ){
5192
+ if (isset($attrs['minOccurs']) && $attrs['minOccurs'] <> '0') {
5193
+ }
5194
+ // do nothing
5195
+ } else {
5196
+ // get value
5197
+ if (isset($xvalue[$eName])) {
5198
+ $v = $xvalue[$eName];
5199
+ } else {
5200
+ $v = null;
5201
+ }
5202
+ if (isset($attrs['form'])) {
5203
+ $unqualified = ($attrs['form'] == 'unqualified');
5204
+ } else {
5205
+ $unqualified = false;
5206
+ }
5207
+ if (isset($attrs['maxOccurs']) && ($attrs['maxOccurs'] == 'unbounded' || $attrs['maxOccurs'] > 1) && isset($v) && is_array($v) && $this->isArraySimpleOrStruct($v) == 'arraySimple') {
5208
+ $vv = $v;
5209
+ foreach ($vv as $k => $v) {
5210
+ if (isset($attrs['type']) || isset($attrs['ref'])) {
5211
+ // serialize schema-defined type
5212
+ $xml .= $this->serializeType($eName, isset($attrs['type']) ? $attrs['type'] : $attrs['ref'], $v, $use, $encodingStyle, $unqualified);
5213
+ } else {
5214
+ // serialize generic type (can this ever really happen?)
5215
+ $xml .= $this->serialize_val($v, $eName, false, false, false, false, $use);
5216
+ }
5217
+ }
5218
+ } else {
5219
+ if (isset($attrs['type']) || isset($attrs['ref'])) {
5220
+ // serialize schema-defined type
5221
+ $xml .= $this->serializeType($eName, isset($attrs['type']) ? $attrs['type'] : $attrs['ref'], $v, $use, $encodingStyle, $unqualified);
5222
+ } else {
5223
+ // serialize generic type (can this ever really happen?)
5224
+ $xml .= $this->serialize_val($v, $eName, false, false, false, false, $use);
5225
+ }
5226
+ }
5227
+ }
5228
+ }
5229
+ } else {
5230
+ }
5231
+ if (isset($typeDef['extensionBase'])) {
5232
+ $ns = $this->getPrefix($typeDef['extensionBase']);
5233
+ $uqType = $this->getLocalPart($typeDef['extensionBase']);
5234
+ if ($this->getNamespaceFromPrefix($ns)) {
5235
+ $ns = $this->getNamespaceFromPrefix($ns);
5236
+ }
5237
+ if ($typeDef = $this->getTypeDef($uqType, $ns)) {
5238
+ $xml .= $this->serializeComplexTypeElements($typeDef, $value, $ns, $uqType, $use, $encodingStyle);
5239
+ } else {
5240
+ }
5241
+ }
5242
+ return $xml;
5243
+ }
5244
+
5245
+ /**
5246
+ * adds an XML Schema complex type to the WSDL types
5247
+ *
5248
+ * @param string name
5249
+ * @param string typeClass (complexType|simpleType|attribute)
5250
+ * @param string phpType: currently supported are array and struct (php assoc array)
5251
+ * @param string compositor (all|sequence|choice)
5252
+ * @param string restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
5253
+ * @param array elements = array ( name => array(name=>'',type=>'') )
5254
+ * @param array attrs = array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'xsd:string[]'))
5255
+ * @param string arrayType: namespace:name (xsd:string)
5256
+ * @see xmlschema
5257
+ * @access public
5258
+ */
5259
+ function addComplexType($name,$typeClass='complexType',$phpType='array',$compositor='',$restrictionBase='',$elements=array(),$attrs=array(),$arrayType='') {
5260
+ if (count($elements) > 0) {
5261
+ foreach($elements as $n => $e){
5262
+ // expand each element
5263
+ foreach ($e as $k => $v) {
5264
+ $k = strpos($k,':') ? $this->expandQname($k) : $k;
5265
+ $v = strpos($v,':') ? $this->expandQname($v) : $v;
5266
+ $ee[$k] = $v;
5267
+ }
5268
+ $eElements[$n] = $ee;
5269
+ }
5270
+ $elements = $eElements;
5271
+ }
5272
+
5273
+ if (count($attrs) > 0) {
5274
+ foreach($attrs as $n => $a){
5275
+ // expand each attribute
5276
+ foreach ($a as $k => $v) {
5277
+ $k = strpos($k,':') ? $this->expandQname($k) : $k;
5278
+ $v = strpos($v,':') ? $this->expandQname($v) : $v;
5279
+ $aa[$k] = $v;
5280
+ }
5281
+ $eAttrs[$n] = $aa;
5282
+ }
5283
+ $attrs = $eAttrs;
5284
+ }
5285
+
5286
+ $restrictionBase = strpos($restrictionBase,':') ? $this->expandQname($restrictionBase) : $restrictionBase;
5287
+ $arrayType = strpos($arrayType,':') ? $this->expandQname($arrayType) : $arrayType;
5288
+
5289
+ $typens = isset($this->namespaces['types']) ? $this->namespaces['types'] : $this->namespaces['tns'];
5290
+ $this->schemas[$typens][0]->addComplexType($name,$typeClass,$phpType,$compositor,$restrictionBase,$elements,$attrs,$arrayType);
5291
+ }
5292
+
5293
+ /**
5294
+ * adds an XML Schema simple type to the WSDL types
5295
+ *
5296
+ * @param string $name
5297
+ * @param string $restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
5298
+ * @param string $typeClass (should always be simpleType)
5299
+ * @param string $phpType (should always be scalar)
5300
+ * @param array $enumeration array of values
5301
+ * @see xmlschema
5302
+ * @access public
5303
+ */
5304
+ function addSimpleType($name, $restrictionBase='', $typeClass='simpleType', $phpType='scalar', $enumeration=array()) {
5305
+ $restrictionBase = strpos($restrictionBase,':') ? $this->expandQname($restrictionBase) : $restrictionBase;
5306
+
5307
+ $typens = isset($this->namespaces['types']) ? $this->namespaces['types'] : $this->namespaces['tns'];
5308
+ $this->schemas[$typens][0]->addSimpleType($name, $restrictionBase, $typeClass, $phpType, $enumeration);
5309
+ }
5310
+
5311
+ /**
5312
+ * adds an element to the WSDL types
5313
+ *
5314
+ * @param array $attrs attributes that must include name and type
5315
+ * @see xmlschema
5316
+ * @access public
5317
+ */
5318
+ function addElement($attrs) {
5319
+ $typens = isset($this->namespaces['types']) ? $this->namespaces['types'] : $this->namespaces['tns'];
5320
+ $this->schemas[$typens][0]->addElement($attrs);
5321
+ }
5322
+
5323
+ /**
5324
+ * register an operation with the server
5325
+ *
5326
+ * @param string $name operation (method) name
5327
+ * @param array $in assoc array of input values: key = param name, value = param type
5328
+ * @param array $out assoc array of output values: key = param name, value = param type
5329
+ * @param string $namespace optional The namespace for the operation
5330
+ * @param string $soapaction optional The soapaction for the operation
5331
+ * @param string $style (rpc|document) optional The style for the operation Note: when 'document' is specified, parameter and return wrappers are created for you automatically
5332
+ * @param string $use (encoded|literal) optional The use for the parameters (cannot mix right now)
5333
+ * @param string $documentation optional The description to include in the WSDL
5334
+ * @param string $encodingStyle optional (usually 'http://schemas.xmlsoap.org/soap/encoding/' for encoded)
5335
+ * @access public
5336
+ */
5337
+ function addOperation($name, $in = false, $out = false, $namespace = false, $soapaction = false, $style = 'rpc', $use = 'encoded', $documentation = '', $encodingStyle = ''){
5338
+ if ($use == 'encoded' && $encodingStyle == '') {
5339
+ $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
5340
+ }
5341
+
5342
+ if ($style == 'document') {
5343
+ $elements = array();
5344
+ foreach ($in as $n => $t) {
5345
+ $elements[$n] = array('name' => $n, 'type' => $t);
5346
+ }
5347
+ $this->addComplexType($name . 'RequestType', 'complexType', 'struct', 'all', '', $elements);
5348
+ $this->addElement(array('name' => $name, 'type' => $name . 'RequestType'));
5349
+ $in = array('parameters' => 'tns:' . $name);
5350
+
5351
+ $elements = array();
5352
+ foreach ($out as $n => $t) {
5353
+ $elements[$n] = array('name' => $n, 'type' => $t);
5354
+ }
5355
+ $this->addComplexType($name . 'ResponseType', 'complexType', 'struct', 'all', '', $elements);
5356
+ $this->addElement(array('name' => $name . 'Response', 'type' => $name . 'ResponseType'));
5357
+ $out = array('parameters' => 'tns:' . $name . 'Response');
5358
+ }
5359
+
5360
+ // get binding
5361
+ $this->bindings[ $this->serviceName . 'Binding' ]['operations'][$name] =
5362
+ array(
5363
+ 'name' => $name,
5364
+ 'binding' => $this->serviceName . 'Binding',
5365
+ 'endpoint' => $this->endpoint,
5366
+ 'soapAction' => $soapaction,
5367
+ 'style' => $style,
5368
+ 'input' => array(
5369
+ 'use' => $use,
5370
+ 'namespace' => $namespace,
5371
+ 'encodingStyle' => $encodingStyle,
5372
+ 'message' => $name . 'Request',
5373
+ 'parts' => $in),
5374
+ 'output' => array(
5375
+ 'use' => $use,
5376
+ 'namespace' => $namespace,
5377
+ 'encodingStyle' => $encodingStyle,
5378
+ 'message' => $name . 'Response',
5379
+ 'parts' => $out),
5380
+ 'namespace' => $namespace,
5381
+ 'transport' => 'http://schemas.xmlsoap.org/soap/http',
5382
+ 'documentation' => $documentation);
5383
+ // add portTypes
5384
+ // add messages
5385
+ if($in)
5386
+ {
5387
+ foreach($in as $pName => $pType)
5388
+ {
5389
+ if(strpos($pType,':')) {
5390
+ $pType = $this->getNamespaceFromPrefix($this->getPrefix($pType)).":".$this->getLocalPart($pType);
5391
+ }
5392
+ $this->messages[$name.'Request'][$pName] = $pType;
5393
+ }
5394
+ } else {
5395
+ $this->messages[$name.'Request']= '0';
5396
+ }
5397
+ if($out)
5398
+ {
5399
+ foreach($out as $pName => $pType)
5400
+ {
5401
+ if(strpos($pType,':')) {
5402
+ $pType = $this->getNamespaceFromPrefix($this->getPrefix($pType)).":".$this->getLocalPart($pType);
5403
+ }
5404
+ $this->messages[$name.'Response'][$pName] = $pType;
5405
+ }
5406
+ } else {
5407
+ $this->messages[$name.'Response']= '0';
5408
+ }
5409
+ return true;
5410
+ }
5411
+ }
5412
+ ?><?php
5413
+
5414
+
5415
+
5416
+ /**
5417
+ *
5418
+ * soap_parser class parses SOAP XML messages into native PHP values
5419
+ *
5420
+ * @author Dietrich Ayala <dietrich@ganx4.com>
5421
+ * @version $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
5422
+ * @access public
5423
+ */
5424
+ class soap_parser extends nusoap_base {
5425
+
5426
+ var $xml = '';
5427
+ var $xml_encoding = '';
5428
+ var $method = '';
5429
+ var $root_struct = '';
5430
+ var $root_struct_name = '';
5431
+ var $root_struct_namespace = '';
5432
+ var $root_header = '';
5433
+ var $document = ''; // incoming SOAP body (text)
5434
+ // determines where in the message we are (envelope,header,body,method)
5435
+ var $status = '';
5436
+ var $position = 0;
5437
+ var $depth = 0;
5438
+ var $default_namespace = '';
5439
+ var $namespaces = array();
5440
+ var $message = array();
5441
+ var $parent = '';
5442
+ var $fault = false;
5443
+ var $fault_code = '';
5444
+ var $fault_str = '';
5445
+ var $fault_detail = '';
5446
+ var $depth_array = array();
5447
+ var $debug_flag = true;
5448
+ var $soapresponse = NULL;
5449
+ var $responseHeaders = ''; // incoming SOAP headers (text)
5450
+ var $body_position = 0;
5451
+ // for multiref parsing:
5452
+ // array of id => pos
5453
+ var $ids = array();
5454
+ // array of id => hrefs => pos
5455
+ var $multirefs = array();
5456
+ // toggle for auto-decoding element content
5457
+ var $decode_utf8 = true;
5458
+
5459
+ /**
5460
+ * constructor that actually does the parsing
5461
+ *
5462
+ * @param string $xml SOAP message
5463
+ * @param string $encoding character encoding scheme of message
5464
+ * @param string $method method for which XML is parsed (unused?)
5465
+ * @param string $decode_utf8 whether to decode UTF-8 to ISO-8859-1
5466
+ * @access public
5467
+ */
5468
+ function soap_parser($xml,$encoding='UTF-8',$method='',$decode_utf8=true){
5469
+ parent::nusoap_base();
5470
+ $this->xml = $xml;
5471
+ $this->xml_encoding = $encoding;
5472
+ $this->method = $method;
5473
+ $this->decode_utf8 = $decode_utf8;
5474
+
5475
+ // Check whether content has been read.
5476
+ if(!empty($xml)){
5477
+ // Check XML encoding
5478
+ $pos_xml = strpos($xml, '<?xml');
5479
+ if ($pos_xml !== FALSE) {
5480
+ $xml_decl = substr($xml, $pos_xml, strpos($xml, '?>', $pos_xml + 2) - $pos_xml + 1);
5481
+ if (preg_match("/encoding=[\"']([^\"']*)[\"']/", $xml_decl, $res)) {
5482
+ $xml_encoding = $res[1];
5483
+ if (strtoupper($xml_encoding) != $encoding) {
5484
+ $err = "Charset from HTTP Content-Type '" . $encoding . "' does not match encoding from XML declaration '" . $xml_encoding . "'";
5485
+ if ($encoding != 'ISO-8859-1' || strtoupper($xml_encoding) != 'UTF-8') {
5486
+ $this->setError($err);
5487
+ return;
5488
+ }
5489
+ // when HTTP says ISO-8859-1 (the default) and XML says UTF-8 (the typical), assume the other endpoint is just sloppy and proceed
5490
+ } else {
5491
+ }
5492
+ } else {
5493
+ }
5494
+ } else {
5495
+ }
5496
+ // Create an XML parser - why not xml_parser_create_ns?
5497
+ $this->parser = xml_parser_create($this->xml_encoding);
5498
+ // Set the options for parsing the XML data.
5499
+ //xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
5500
+ xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
5501
+ xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, $this->xml_encoding);
5502
+ // Set the object for the parser.
5503
+ xml_set_object($this->parser, $this);
5504
+ // Set the element handlers for the parser.
5505
+ xml_set_element_handler($this->parser, 'start_element','end_element');
5506
+ xml_set_character_data_handler($this->parser,'character_data');
5507
+
5508
+ // Parse the XML file.
5509
+ if(!xml_parse($this->parser,$xml,true)){
5510
+ // Display an error message.
5511
+ $err = sprintf('XML error parsing SOAP payload on line %d: %s',
5512
+ xml_get_current_line_number($this->parser),
5513
+ xml_error_string(xml_get_error_code($this->parser)));
5514
+ $this->setError($err);
5515
+ } else {
5516
+ // get final value
5517
+ $this->soapresponse = $this->message[$this->root_struct]['result'];
5518
+ // get header value: no, because this is documented as XML string
5519
+ // if($this->root_header != '' && isset($this->message[$this->root_header]['result'])){
5520
+ // $this->responseHeaders = $this->message[$this->root_header]['result'];
5521
+ // }
5522
+ // resolve hrefs/ids
5523
+ if(sizeof($this->multirefs) > 0){
5524
+ foreach($this->multirefs as $id => $hrefs){
5525
+ $idVal = $this->buildVal($this->ids[$id]);
5526
+ if (is_array($idVal) && isset($idVal['!id'])) {
5527
+ unset($idVal['!id']);
5528
+ }
5529
+ foreach($hrefs as $refPos => $ref){
5530
+ $this->multirefs[$id][$refPos] = $idVal;
5531
+ }
5532
+ }
5533
+ }
5534
+ }
5535
+ xml_parser_free($this->parser);
5536
+ } else {
5537
+ $this->setError('xml was empty, didn\'t parse!');
5538
+ }
5539
+ }
5540
+
5541
+ /**
5542
+ * start-element handler
5543
+ *
5544
+ * @param resource $parser XML parser object
5545
+ * @param string $name element name
5546
+ * @param array $attrs associative array of attributes
5547
+ * @access private
5548
+ */
5549
+ function start_element($parser, $name, $attrs) {
5550
+ // position in a total number of elements, starting from 0
5551
+ // update class level pos
5552
+ $pos = $this->position++;
5553
+ // and set mine
5554
+ $this->message[$pos] = array('pos' => $pos,'children'=>'','cdata'=>'');
5555
+ // depth = how many levels removed from root?
5556
+ // set mine as current global depth and increment global depth value
5557
+ $this->message[$pos]['depth'] = $this->depth++;
5558
+
5559
+ // else add self as child to whoever the current parent is
5560
+ if($pos != 0){
5561
+ $this->message[$this->parent]['children'] .= '|'.$pos;
5562
+ }
5563
+ // set my parent
5564
+ $this->message[$pos]['parent'] = $this->parent;
5565
+ // set self as current parent
5566
+ $this->parent = $pos;
5567
+ // set self as current value for this depth
5568
+ $this->depth_array[$this->depth] = $pos;
5569
+ // get element prefix
5570
+ if(strpos($name,':')){
5571
+ // get ns prefix
5572
+ $prefix = substr($name,0,strpos($name,':'));
5573
+ // get unqualified name
5574
+ $name = substr(strstr($name,':'),1);
5575
+ }
5576
+ // set status
5577
+ if($name == 'Envelope'){
5578
+ $this->status = 'envelope';
5579
+ } elseif($name == 'Header'){
5580
+ $this->root_header = $pos;
5581
+ $this->status = 'header';
5582
+ } elseif($name == 'Body'){
5583
+ $this->status = 'body';
5584
+ $this->body_position = $pos;
5585
+ // set method
5586
+ } elseif($this->status == 'body' && $pos == ($this->body_position+1)){
5587
+ $this->status = 'method';
5588
+ $this->root_struct_name = $name;
5589
+ $this->root_struct = $pos;
5590
+ $this->message[$pos]['type'] = 'struct';
5591
+ }
5592
+ // set my status
5593
+ $this->message[$pos]['status'] = $this->status;
5594
+ // set name
5595
+ $this->message[$pos]['name'] = htmlspecialchars($name);
5596
+ // set attrs
5597
+ $this->message[$pos]['attrs'] = $attrs;
5598
+
5599
+ // loop through atts, logging ns and type declarations
5600
+ $attstr = '';
5601
+ foreach($attrs as $key => $value){
5602
+ $key_prefix = $this->getPrefix($key);
5603
+ $key_localpart = $this->getLocalPart($key);
5604
+ // if ns declarations, add to class level array of valid namespaces
5605
+ if($key_prefix == 'xmlns'){
5606
+ if(preg_match('/^http:\/\/www.w3.org\/[0-9]{4}\/XMLSchema$/',$value)){
5607
+ $this->XMLSchemaVersion = $value;
5608
+ $this->namespaces['xsd'] = $this->XMLSchemaVersion;
5609
+ $this->namespaces['xsi'] = $this->XMLSchemaVersion.'-instance';
5610
+ }
5611
+ $this->namespaces[$key_localpart] = $value;
5612
+ // set method namespace
5613
+ if($name == $this->root_struct_name){
5614
+ $this->methodNamespace = $value;
5615
+ }
5616
+ // if it's a type declaration, set type
5617
+ } elseif($key_localpart == 'type'){
5618
+ if (isset($this->message[$pos]['type']) && $this->message[$pos]['type'] == 'array') {
5619
+ // do nothing: already processed arrayType
5620
+ } else {
5621
+ $value_prefix = $this->getPrefix($value);
5622
+ $value_localpart = $this->getLocalPart($value);
5623
+ $this->message[$pos]['type'] = $value_localpart;
5624
+ $this->message[$pos]['typePrefix'] = $value_prefix;
5625
+ if(isset($this->namespaces[$value_prefix])){
5626
+ $this->message[$pos]['type_namespace'] = $this->namespaces[$value_prefix];
5627
+ } else if(isset($attrs['xmlns:'.$value_prefix])) {
5628
+ $this->message[$pos]['type_namespace'] = $attrs['xmlns:'.$value_prefix];
5629
+ }
5630
+ // should do something here with the namespace of specified type?
5631
+ }
5632
+ } elseif($key_localpart == 'arrayType'){
5633
+ $this->message[$pos]['type'] = 'array';
5634
+ /* do arrayType ereg here
5635
+ [1] arrayTypeValue ::= atype asize
5636
+ [2] atype ::= QName rank*
5637
+ [3] rank ::= '[' (',')* ']'
5638
+ [4] asize ::= '[' length~ ']'
5639
+ [5] length ::= nextDimension* Digit+
5640
+ [6] nextDimension ::= Digit+ ','
5641
+ */
5642
+ $expr = '/([A-Za-z0-9_]+):([A-Za-z]+[A-Za-z0-9_]+)\[([0-9]+),?([0-9]*)\]/';
5643
+ if(preg_match($expr,$value,$regs)){
5644
+ $this->message[$pos]['typePrefix'] = $regs[1];
5645
+ $this->message[$pos]['arrayTypePrefix'] = $regs[1];
5646
+ if (isset($this->namespaces[$regs[1]])) {
5647
+ $this->message[$pos]['arrayTypeNamespace'] = $this->namespaces[$regs[1]];
5648
+ } else if (isset($attrs['xmlns:'.$regs[1]])) {
5649
+ $this->message[$pos]['arrayTypeNamespace'] = $attrs['xmlns:'.$regs[1]];
5650
+ }
5651
+ $this->message[$pos]['arrayType'] = $regs[2];
5652
+ $this->message[$pos]['arraySize'] = $regs[3];
5653
+ $this->message[$pos]['arrayCols'] = $regs[4];
5654
+ }
5655
+ // specifies nil value (or not)
5656
+ } elseif ($key_localpart == 'nil'){
5657
+ $this->message[$pos]['nil'] = ($value == 'true' || $value == '1');
5658
+ // some other attribute
5659
+ } elseif ($key != 'href' && $key != 'xmlns' && $key_localpart != 'encodingStyle' && $key_localpart != 'root') {
5660
+ $this->message[$pos]['xattrs']['!' . $key] = $value;
5661
+ }
5662
+
5663
+ if ($key == 'xmlns') {
5664
+ $this->default_namespace = $value;
5665
+ }
5666
+ // log id
5667
+ if($key == 'id'){
5668
+ $this->ids[$value] = $pos;
5669
+ }
5670
+ // root
5671
+ if($key_localpart == 'root' && $value == 1){
5672
+ $this->status = 'method';
5673
+ $this->root_struct_name = $name;
5674
+ $this->root_struct = $pos;
5675
+ }
5676
+ // for doclit
5677
+ $attstr .= " $key=\"$value\"";
5678
+ }
5679
+ // get namespace - must be done after namespace atts are processed
5680
+ if(isset($prefix)){
5681
+ $this->message[$pos]['namespace'] = $this->namespaces[$prefix];
5682
+ $this->default_namespace = $this->namespaces[$prefix];
5683
+ } else {
5684
+ $this->message[$pos]['namespace'] = $this->default_namespace;
5685
+ }
5686
+ if($this->status == 'header'){
5687
+ if ($this->root_header != $pos) {
5688
+ $this->responseHeaders .= "<" . (isset($prefix) ? $prefix . ':' : '') . "$name$attstr>";
5689
+ }
5690
+ } elseif($this->root_struct_name != ''){
5691
+ $this->document .= "<" . (isset($prefix) ? $prefix . ':' : '') . "$name$attstr>";
5692
+ }
5693
+ }
5694
+
5695
+ /**
5696
+ * end-element handler
5697
+ *
5698
+ * @param resource $parser XML parser object
5699
+ * @param string $name element name
5700
+ * @access private
5701
+ */
5702
+ function end_element($parser, $name) {
5703
+ // position of current element is equal to the last value left in depth_array for my depth
5704
+ $pos = $this->depth_array[$this->depth--];
5705
+
5706
+ // get element prefix
5707
+ if(strpos($name,':')){
5708
+ // get ns prefix
5709
+ $prefix = substr($name,0,strpos($name,':'));
5710
+ // get unqualified name
5711
+ $name = substr(strstr($name,':'),1);
5712
+ }
5713
+
5714
+ // build to native type
5715
+ if(isset($this->body_position) && $pos > $this->body_position){
5716
+ // deal w/ multirefs
5717
+ if(isset($this->message[$pos]['attrs']['href'])){
5718
+ // get id
5719
+ $id = substr($this->message[$pos]['attrs']['href'],1);
5720
+ // add placeholder to href array
5721
+ $this->multirefs[$id][$pos] = 'placeholder';
5722
+ // add set a reference to it as the result value
5723
+ $this->message[$pos]['result'] =& $this->multirefs[$id][$pos];
5724
+ // build complexType values
5725
+ } elseif($this->message[$pos]['children'] != ''){
5726
+ // if result has already been generated (struct/array)
5727
+ if(!isset($this->message[$pos]['result'])){
5728
+ $this->message[$pos]['result'] = $this->buildVal($pos);
5729
+ }
5730
+ // build complexType values of attributes and possibly simpleContent
5731
+ } elseif (isset($this->message[$pos]['xattrs'])) {
5732
+ if (isset($this->message[$pos]['nil']) && $this->message[$pos]['nil']) {
5733
+ $this->message[$pos]['xattrs']['!'] = null;
5734
+ } elseif (isset($this->message[$pos]['cdata']) && trim($this->message[$pos]['cdata']) != '') {
5735
+ if (isset($this->message[$pos]['type'])) {
5736
+ $this->message[$pos]['xattrs']['!'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
5737
+ } else {
5738
+ $parent = $this->message[$pos]['parent'];
5739
+ if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
5740
+ $this->message[$pos]['xattrs']['!'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
5741
+ } else {
5742
+ $this->message[$pos]['xattrs']['!'] = $this->message[$pos]['cdata'];
5743
+ }
5744
+ }
5745
+ }
5746
+ $this->message[$pos]['result'] = $this->message[$pos]['xattrs'];
5747
+ // set value of simpleType (or nil complexType)
5748
+ } else {
5749
+ if (isset($this->message[$pos]['nil']) && $this->message[$pos]['nil']) {
5750
+ $this->message[$pos]['xattrs']['!'] = null;
5751
+ } elseif (isset($this->message[$pos]['type'])) {
5752
+ $this->message[$pos]['result'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
5753
+ } else {
5754
+ $parent = $this->message[$pos]['parent'];
5755
+ if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
5756
+ $this->message[$pos]['result'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
5757
+ } else {
5758
+ $this->message[$pos]['result'] = $this->message[$pos]['cdata'];
5759
+ }
5760
+ }
5761
+
5762
+ /* add value to parent's result, if parent is struct/array
5763
+ $parent = $this->message[$pos]['parent'];
5764
+ if($this->message[$parent]['type'] != 'map'){
5765
+ if(strtolower($this->message[$parent]['type']) == 'array'){
5766
+ $this->message[$parent]['result'][] = $this->message[$pos]['result'];
5767
+ } else {
5768
+ $this->message[$parent]['result'][$this->message[$pos]['name']] = $this->message[$pos]['result'];
5769
+ }
5770
+ }
5771
+ */
5772
+ }
5773
+ }
5774
+
5775
+ // for doclit
5776
+ if($this->status == 'header'){
5777
+ if ($this->root_header != $pos) {
5778
+ $this->responseHeaders .= "</" . (isset($prefix) ? $prefix . ':' : '') . "$name>";
5779
+ }
5780
+ } elseif($pos >= $this->root_struct){
5781
+ $this->document .= "</" . (isset($prefix) ? $prefix . ':' : '') . "$name>";
5782
+ }
5783
+ // switch status
5784
+ if($pos == $this->root_struct){
5785
+ $this->status = 'body';
5786
+ $this->root_struct_namespace = $this->message[$pos]['namespace'];
5787
+ } elseif($name == 'Body'){
5788
+ $this->status = 'envelope';
5789
+ } elseif($name == 'Header'){
5790
+ $this->status = 'envelope';
5791
+ } elseif($name == 'Envelope'){
5792
+ //
5793
+ }
5794
+ // set parent back to my parent
5795
+ $this->parent = $this->message[$pos]['parent'];
5796
+ }
5797
+
5798
+ /**
5799
+ * element content handler
5800
+ *
5801
+ * @param resource $parser XML parser object
5802
+ * @param string $data element content
5803
+ * @access private
5804
+ */
5805
+ function character_data($parser, $data){
5806
+ $pos = $this->depth_array[$this->depth];
5807
+ if ($this->xml_encoding=='UTF-8'){
5808
+ // TODO: add an option to disable this for folks who want
5809
+ // raw UTF-8 that, e.g., might not map to iso-8859-1
5810
+ // TODO: this can also be handled with xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
5811
+ if($this->decode_utf8){
5812
+ $data = utf8_decode($data);
5813
+ }
5814
+ }
5815
+ $this->message[$pos]['cdata'] .= $data;
5816
+ // for doclit
5817
+ if($this->status == 'header'){
5818
+ $this->responseHeaders .= $data;
5819
+ } else {
5820
+ $this->document .= $data;
5821
+ }
5822
+ }
5823
+
5824
+ /**
5825
+ * get the parsed message
5826
+ *
5827
+ * @return mixed
5828
+ * @access public
5829
+ */
5830
+ function get_response(){
5831
+ return $this->soapresponse;
5832
+ }
5833
+
5834
+ /**
5835
+ * get the parsed headers
5836
+ *
5837
+ * @return string XML or empty if no headers
5838
+ * @access public
5839
+ */
5840
+ function getHeaders(){
5841
+ return $this->responseHeaders;
5842
+ }
5843
+
5844
+ /**
5845
+ * decodes simple types into PHP variables
5846
+ *
5847
+ * @param string $value value to decode
5848
+ * @param string $type XML type to decode
5849
+ * @param string $typens XML type namespace to decode
5850
+ * @return mixed PHP value
5851
+ * @access private
5852
+ */
5853
+ function decodeSimple($value, $type, $typens) {
5854
+ // TODO: use the namespace!
5855
+ if ((!isset($type)) || $type == 'string' || $type == 'long' || $type == 'unsignedLong') {
5856
+ return (string) $value;
5857
+ }
5858
+ if ($type == 'int' || $type == 'integer' || $type == 'short' || $type == 'byte') {
5859
+ return (int) $value;
5860
+ }
5861
+ if ($type == 'float' || $type == 'double' || $type == 'decimal') {
5862
+ return (double) $value;
5863
+ }
5864
+ if ($type == 'boolean') {
5865
+ if (strtolower($value) == 'false' || strtolower($value) == 'f') {
5866
+ return false;
5867
+ }
5868
+ return (boolean) $value;
5869
+ }
5870
+ if ($type == 'base64' || $type == 'base64Binary') {
5871
+ return base64_decode($value);
5872
+ }
5873
+ // obscure numeric types
5874
+ if ($type == 'nonPositiveInteger' || $type == 'negativeInteger'
5875
+ || $type == 'nonNegativeInteger' || $type == 'positiveInteger'
5876
+ || $type == 'unsignedInt'
5877
+ || $type == 'unsignedShort' || $type == 'unsignedByte') {
5878
+ return (int) $value;
5879
+ }
5880
+ // bogus: parser treats array with no elements as a simple type
5881
+ if ($type == 'array') {
5882
+ return array();
5883
+ }
5884
+ // everything else
5885
+ return (string) $value;
5886
+ }
5887
+
5888
+ /**
5889
+ * builds response structures for compound values (arrays/structs)
5890
+ * and scalars
5891
+ *
5892
+ * @param integer $pos position in node tree
5893
+ * @return mixed PHP value
5894
+ * @access private
5895
+ */
5896
+ function buildVal($pos){
5897
+ if(!isset($this->message[$pos]['type'])){
5898
+ $this->message[$pos]['type'] = '';
5899
+ }
5900
+ // if there are children...
5901
+ if($this->message[$pos]['children'] != ''){
5902
+ $children = explode('|',$this->message[$pos]['children']);
5903
+ array_shift($children); // knock off empty
5904
+ // md array
5905
+ if(isset($this->message[$pos]['arrayCols']) && $this->message[$pos]['arrayCols'] != ''){
5906
+ $r=0; // rowcount
5907
+ $c=0; // colcount
5908
+ foreach($children as $child_pos){
5909
+ $params[$r][] = $this->message[$child_pos]['result'];
5910
+ $c++;
5911
+ if($c == $this->message[$pos]['arrayCols']){
5912
+ $c = 0;
5913
+ $r++;
5914
+ }
5915
+ }
5916
+ // array
5917
+ } elseif($this->message[$pos]['type'] == 'array' || $this->message[$pos]['type'] == 'Array'){
5918
+ foreach($children as $child_pos){
5919
+ $params[] = &$this->message[$child_pos]['result'];
5920
+ }
5921
+ // apache Map type: java hashtable
5922
+ } elseif($this->message[$pos]['type'] == 'Map' && $this->message[$pos]['type_namespace'] == 'http://xml.apache.org/xml-soap'){
5923
+ foreach($children as $child_pos){
5924
+ $kv = explode("|",$this->message[$child_pos]['children']);
5925
+ $params[$this->message[$kv[1]]['result']] = &$this->message[$kv[2]]['result'];
5926
+ }
5927
+ // generic compound type
5928
+ //} elseif($this->message[$pos]['type'] == 'SOAPStruct' || $this->message[$pos]['type'] == 'struct') {
5929
+ } else {
5930
+ // Apache Vector type: treat as an array
5931
+ if ($this->message[$pos]['type'] == 'Vector' && $this->message[$pos]['type_namespace'] == 'http://xml.apache.org/xml-soap') {
5932
+ $notstruct = 1;
5933
+ } else {
5934
+ $notstruct = 0;
5935
+ }
5936
+ //
5937
+ foreach($children as $child_pos){
5938
+ if($notstruct){
5939
+ $params[] = &$this->message[$child_pos]['result'];
5940
+ } else {
5941
+ if (isset($params[$this->message[$child_pos]['name']])) {
5942
+ // de-serialize repeated element name into an array
5943
+ if ((!is_array($params[$this->message[$child_pos]['name']])) || (!isset($params[$this->message[$child_pos]['name']][0]))) {
5944
+ $params[$this->message[$child_pos]['name']] = array($params[$this->message[$child_pos]['name']]);
5945
+ }
5946
+ $params[$this->message[$child_pos]['name']][] = &$this->message[$child_pos]['result'];
5947
+ } else {
5948
+ $params[$this->message[$child_pos]['name']] = &$this->message[$child_pos]['result'];
5949
+ }
5950
+ }
5951
+ }
5952
+ }
5953
+ if (isset($this->message[$pos]['xattrs'])) {
5954
+ foreach ($this->message[$pos]['xattrs'] as $n => $v) {
5955
+ $params[$n] = $v;
5956
+ }
5957
+ }
5958
+ // handle simpleContent
5959
+ if (isset($this->message[$pos]['cdata']) && trim($this->message[$pos]['cdata']) != '') {
5960
+ if (isset($this->message[$pos]['type'])) {
5961
+ $params['!'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
5962
+ } else {
5963
+ $parent = $this->message[$pos]['parent'];
5964
+ if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
5965
+ $params['!'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
5966
+ } else {
5967
+ $params['!'] = $this->message[$pos]['cdata'];
5968
+ }
5969
+ }
5970
+ }
5971
+ $ret = is_array($params) ? $params : array();
5972
+ return $ret;
5973
+ } else {
5974
+ $cdata = isset($this->message[$pos]['cdata']) ? $this->message[$pos]['cdata'] : '';
5975
+ if (isset($this->message[$pos]['type'])) {
5976
+ $ret = $this->decodeSimple($cdata, $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
5977
+ return $ret;
5978
+ }
5979
+ $parent = $this->message[$pos]['parent'];
5980
+ if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
5981
+ $ret = $this->decodeSimple($cdata, $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
5982
+ return $ret;
5983
+ }
5984
+ $ret = $this->message[$pos]['cdata'];
5985
+ return $ret;
5986
+ }
5987
+ }
5988
+ }
5989
+
5990
+
5991
+
5992
+ ?><?php
5993
+
5994
+
5995
+
5996
+ /**
5997
+ *
5998
+ * soap_client higher level class for easy usage.
5999
+ *
6000
+ * usage:
6001
+ *
6002
+ * // instantiate client with server info
6003
+ * $soap_client = new soap_client( string path [ ,boolean wsdl] );
6004
+ *
6005
+ * // call method, get results
6006
+ * echo $soap_client->call( string methodname [ ,array parameters] );
6007
+ *
6008
+ * // bye bye client
6009
+ * unset($soap_client);
6010
+ *
6011
+ * @author Dietrich Ayala <dietrich@ganx4.com>
6012
+ * @version $Id: nusoap.php,v 1.2 2007/01/03 14:44:42 moodler Exp $
6013
+ * @access public
6014
+ */
6015
+ class soap_client extends nusoap_base {
6016
+
6017
+ var $username = '';
6018
+ var $password = '';
6019
+ var $authtype = '';
6020
+ var $certRequest = array();
6021
+ var $requestHeaders = false; // SOAP headers in request (text)
6022
+ var $responseHeaders = ''; // SOAP headers from response (incomplete namespace resolution) (text)
6023
+ var $document = ''; // SOAP body response portion (incomplete namespace resolution) (text)
6024
+ var $endpoint;
6025
+ var $forceEndpoint = ''; // overrides WSDL endpoint
6026
+ var $proxyhost = '';
6027
+ var $proxyport = '';
6028
+ var $proxyusername = '';
6029
+ var $proxypassword = '';
6030
+ var $xml_encoding = ''; // character set encoding of incoming (response) messages
6031
+ var $http_encoding = false;
6032
+ var $timeout = 0; // HTTP connection timeout
6033
+ var $response_timeout = 30; // HTTP response timeout
6034
+ var $endpointType = ''; // soap|wsdl, empty for WSDL initialization error
6035
+ var $persistentConnection = false;
6036
+ var $defaultRpcParams = false; // This is no longer used
6037
+ var $request = ''; // HTTP request
6038
+ var $response = ''; // HTTP response
6039
+ var $responseData = ''; // SOAP payload of response
6040
+ var $cookies = array(); // Cookies from response or for request
6041
+ var $decode_utf8 = false; // toggles whether the parser decodes element content w/ utf8_decode()
6042
+ var $operations = array(); // WSDL operations, empty for WSDL initialization error
6043
+
6044
+ /*
6045
+ * fault related variables
6046
+ */
6047
+ /**
6048
+ * @var fault
6049
+ * @access public
6050
+ */
6051
+ var $fault;
6052
+ /**
6053
+ * @var faultcode
6054
+ * @access public
6055
+ */
6056
+ var $faultcode;
6057
+ /**
6058
+ * @var faultstring
6059
+ * @access public
6060
+ */
6061
+ var $faultstring;
6062
+ /**
6063
+ * @var faultdetail
6064
+ * @access public
6065
+ */
6066
+ var $faultdetail;
6067
+
6068
+ /**
6069
+ * constructor
6070
+ *
6071
+ * @param mixed $endpoint SOAP server or WSDL URL (string), or wsdl instance (object)
6072
+ * @param bool $wsdl optional, set to true if using WSDL
6073
+ * @param int $portName optional portName in WSDL document
6074
+ * @param string $proxyhost
6075
+ * @param string $proxyport
6076
+ * @param string $proxyusername
6077
+ * @param string $proxypassword
6078
+ * @param integer $timeout set the connection timeout
6079
+ * @param integer $response_timeout set the response timeout
6080
+ * @access public
6081
+ */
6082
+ function soap_client($endpoint,$wsdl = false,$proxyhost = false,$proxyport = false,$proxyusername = false, $proxypassword = false, $timeout = 0, $response_timeout = 30){
6083
+ parent::nusoap_base();
6084
+ $this->endpoint = $endpoint;
6085
+ $this->proxyhost = $proxyhost;
6086
+ $this->proxyport = $proxyport;
6087
+ $this->proxyusername = $proxyusername;
6088
+ $this->proxypassword = $proxypassword;
6089
+ $this->timeout = $timeout;
6090
+ $this->response_timeout = $response_timeout;
6091
+
6092
+ // make values
6093
+ if($wsdl){
6094
+ if (is_object($endpoint) && (get_class($endpoint) == 'wsdl')) {
6095
+ $this->wsdl = $endpoint;
6096
+ $this->endpoint = $this->wsdl->wsdl;
6097
+ $this->wsdlFile = $this->endpoint;
6098
+ } else {
6099
+ $this->wsdlFile = $this->endpoint;
6100
+
6101
+ // instantiate wsdl object and parse wsdl file
6102
+ $this->wsdl = new wsdl($this->wsdlFile,$this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword,$this->timeout,$this->response_timeout);
6103
+ }
6104
+ $this->wsdl->clearDebug();
6105
+ // catch errors
6106
+ if($errstr = $this->wsdl->getError()){
6107
+ $this->setError('wsdl error: '.$errstr);
6108
+ } elseif($this->operations = $this->wsdl->getOperations()){
6109
+ $this->endpointType = 'wsdl';
6110
+ } else {
6111
+ $this->setError('no operations defined in the WSDL document!');
6112
+ }
6113
+ } else {
6114
+ $this->endpointType = 'soap';
6115
+ }
6116
+ }
6117
+
6118
+ /**
6119
+ * calls method, returns PHP native type
6120
+ *
6121
+ * @param string $method SOAP server URL or path
6122
+ * @param mixed $params An array, associative or simple, of the parameters
6123
+ * for the method call, or a string that is the XML
6124
+ * for the call. For rpc style, this call will
6125
+ * wrap the XML in a tag named after the method, as
6126
+ * well as the SOAP Envelope and Body. For document
6127
+ * style, this will only wrap with the Envelope and Body.
6128
+ * IMPORTANT: when using an array with document style,
6129
+ * in which case there
6130
+ * is really one parameter, the root of the fragment
6131
+ * used in the call, which encloses what programmers
6132
+ * normally think of parameters. A parameter array
6133
+ * *must* include the wrapper.
6134
+ * @param string $namespace optional method namespace (WSDL can override)
6135
+ * @param string $soapAction optional SOAPAction value (WSDL can override)
6136
+ * @param mixed $headers optional string of XML with SOAP header content, or array of soapval objects for SOAP headers
6137
+ * @param boolean $rpcParams optional (no longer used)
6138
+ * @param string $style optional (rpc|document) the style to use when serializing parameters (WSDL can override)
6139
+ * @param string $use optional (encoded|literal) the use when serializing parameters (WSDL can override)
6140
+ * @return mixed response from SOAP call
6141
+ * @access public
6142
+ */
6143
+ function call($operation,$params=array(),$namespace='http://tempuri.org',$soapAction='',$headers=false,$rpcParams=null,$style='rpc',$use='encoded'){
6144
+ $this->operation = $operation;
6145
+ $this->fault = false;
6146
+ $this->setError('');
6147
+ $this->request = '';
6148
+ $this->response = '';
6149
+ $this->responseData = '';
6150
+ $this->faultstring = '';
6151
+ $this->faultcode = '';
6152
+ $this->opData = array();
6153
+
6154
+ if ($headers) {
6155
+ $this->requestHeaders = $headers;
6156
+ }
6157
+ // serialize parameters
6158
+ if($this->endpointType == 'wsdl' && $opData = $this->getOperationData($operation)){
6159
+ // use WSDL for operation
6160
+ $this->opData = $opData;
6161
+ if (isset($opData['soapAction'])) {
6162
+ $soapAction = $opData['soapAction'];
6163
+ }
6164
+ if (! $this->forceEndpoint) {
6165
+ $this->endpoint = $opData['endpoint'];
6166
+ } else {
6167
+ $this->endpoint = $this->forceEndpoint;
6168
+ }
6169
+ $namespace = isset($opData['input']['namespace']) ? $opData['input']['namespace'] : $namespace;
6170
+ $style = $opData['style'];
6171
+ $use = $opData['input']['use'];
6172
+ // add ns to ns array
6173
+ if($namespace != '' && !isset($this->wsdl->namespaces[$namespace])){
6174
+ $nsPrefix = 'ns' . rand(1000, 9999);
6175
+ $this->wsdl->namespaces[$nsPrefix] = $namespace;
6176
+ }
6177
+ $nsPrefix = $this->wsdl->getPrefixFromNamespace($namespace);
6178
+ // serialize payload
6179
+ if (is_string($params)) {
6180
+ $payload = $params;
6181
+ } elseif (is_array($params)) {
6182
+ $payload = $this->wsdl->serializeRPCParameters($operation,'input',$params);
6183
+ } else {
6184
+ $this->setError('params must be array or string');
6185
+ return false;
6186
+ }
6187
+ $usedNamespaces = $this->wsdl->usedNamespaces;
6188
+ if (isset($opData['input']['encodingStyle'])) {
6189
+ $encodingStyle = $opData['input']['encodingStyle'];
6190
+ } else {
6191
+ $encodingStyle = '';
6192
+ }
6193
+ $this->wsdl->clearDebug();
6194
+ if ($errstr = $this->wsdl->getError()) {
6195
+ $this->setError('wsdl error: '.$errstr);
6196
+ return false;
6197
+ }
6198
+ } elseif($this->endpointType == 'wsdl') {
6199
+ // operation not in WSDL
6200
+ $this->wsdl->clearDebug();
6201
+ $this->setError( 'operation '.$operation.' not present.');
6202
+ return false;
6203
+ } else {
6204
+ // no WSDL
6205
+ //$this->namespaces['ns1'] = $namespace;
6206
+ $nsPrefix = 'ns' . rand(1000, 9999);
6207
+ // serialize
6208
+ $payload = '';
6209
+ if (is_string($params)) {
6210
+ $payload = $params;
6211
+ } elseif (is_array($params)) {
6212
+ foreach($params as $k => $v){
6213
+ $payload .= $this->serialize_val($v,$k,false,false,false,false,$use);
6214
+ }
6215
+ } else {
6216
+ $this->setError('params must be array or string');
6217
+ return false;
6218
+ }
6219
+ $usedNamespaces = array();
6220
+ if ($use == 'encoded') {
6221
+ $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
6222
+ } else {
6223
+ $encodingStyle = '';
6224
+ }
6225
+ }
6226
+ // wrap RPC calls with method element
6227
+ if ($style == 'rpc') {
6228
+ if ($use == 'literal') {
6229
+ if ($namespace) {
6230
+ $payload = "<$operation xmlns=\"$namespace\">" . $payload . "</$operation>";
6231
+ } else {
6232
+ $payload = "<$operation>" . $payload . "</$operation>";
6233
+ }
6234
+ } else {
6235
+ if ($namespace) {
6236
+ $payload = "<$nsPrefix:$operation xmlns:$nsPrefix=\"$namespace\">" .
6237
+ $payload .
6238
+ "</$nsPrefix:$operation>";
6239
+ } else {
6240
+ $payload = "<$operation>" .
6241
+ $payload .
6242
+ "</$operation>";
6243
+ }
6244
+ }
6245
+ }
6246
+ // serialize envelope
6247
+ $soapmsg = $this->serializeEnvelope($payload,$this->requestHeaders,$usedNamespaces,$style,$use,$encodingStyle);
6248
+ // send
6249
+ $return = $this->send($this->getHTTPBody($soapmsg),$soapAction,$this->timeout,$this->response_timeout);
6250
+ if($errstr = $this->getError()){
6251
+ return false;
6252
+ } else {
6253
+ $this->return = $return;
6254
+
6255
+ // fault?
6256
+ if(is_array($return) && isset($return['faultcode'])){
6257
+ $this->setError($return['faultcode'].': '.$return['faultstring']);
6258
+ $this->fault = true;
6259
+ foreach($return as $k => $v){
6260
+ $this->$k = $v;
6261
+ }
6262
+ return $return;
6263
+ } elseif ($style == 'document') {
6264
+ // NOTE: if the response is defined to have multiple parts (i.e. unwrapped),
6265
+ // we are only going to return the first part here...sorry about that
6266
+ return $return;
6267
+ } else {
6268
+ // array of return values
6269
+ if(is_array($return)){
6270
+ // multiple 'out' parameters, which we return wrapped up
6271
+ // in the array
6272
+ if(sizeof($return) > 1){
6273
+ return $return;
6274
+ }
6275
+ // single 'out' parameter (normally the return value)
6276
+ $return = array_shift($return);
6277
+ return $return;
6278
+ // nothing returned (ie, echoVoid)
6279
+ } else {
6280
+ return "";
6281
+ }
6282
+ }
6283
+ }
6284
+ }
6285
+
6286
+ /**
6287
+ * get available data pertaining to an operation
6288
+ *
6289
+ * @param string $operation operation name
6290
+ * @return array array of data pertaining to the operation
6291
+ * @access public
6292
+ */
6293
+ function getOperationData($operation){
6294
+ if(isset($this->operations[$operation])){
6295
+ return $this->operations[$operation];
6296
+ }
6297
+ }
6298
+
6299
+ /**
6300
+ * send the SOAP message
6301
+ *
6302
+ * Note: if the operation has multiple return values
6303
+ * the return value of this method will be an array
6304
+ * of those values.
6305
+ *
6306
+ * @param string $msg a SOAPx4 soapmsg object
6307
+ * @param string $soapaction SOAPAction value
6308
+ * @param integer $timeout set connection timeout in seconds
6309
+ * @param integer $response_timeout set response timeout in seconds
6310
+ * @return mixed native PHP types.
6311
+ * @access private
6312
+ */
6313
+ function send($msg, $soapaction = '', $timeout=0, $response_timeout=30) {
6314
+ $this->checkCookies();
6315
+ // detect transport
6316
+ switch(true){
6317
+ // http(s)
6318
+ case ereg('/^http/',$this->endpoint):
6319
+ if($this->persistentConnection == true && is_object($this->persistentConnection)){
6320
+ $http =& $this->persistentConnection;
6321
+ } else {
6322
+ $http = new soap_transport_http($this->endpoint);
6323
+ if ($this->persistentConnection) {
6324
+ $http->usePersistentConnection();
6325
+ }
6326
+ }
6327
+ $http->setContentType($this->getHTTPContentType(), $this->getHTTPContentTypeCharset());
6328
+ $http->setSOAPAction($soapaction);
6329
+ if($this->proxyhost && $this->proxyport){
6330
+ $http->setProxy($this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword);
6331
+ }
6332
+ if($this->authtype != '') {
6333
+ $http->setCredentials($this->username, $this->password, $this->authtype, array(), $this->certRequest);
6334
+ }
6335
+ if($this->http_encoding != ''){
6336
+ $http->setEncoding($this->http_encoding);
6337
+ }
6338
+ if(preg_match('/^http:/',$this->endpoint)){
6339
+ //if(strpos($this->endpoint,'http:')){
6340
+ $this->responseData = $http->send($msg,$timeout,$response_timeout,$this->cookies);
6341
+ } elseif(preg_match('/^https/',$this->endpoint)){
6342
+ //} elseif(strpos($this->endpoint,'https:')){
6343
+ //if(phpversion() == '4.3.0-dev'){
6344
+ //$response = $http->send($msg,$timeout,$response_timeout);
6345
+ //$this->request = $http->outgoing_payload;
6346
+ //$this->response = $http->incoming_payload;
6347
+ //} else
6348
+ $this->responseData = $http->sendHTTPS($msg,$timeout,$response_timeout,$this->cookies);
6349
+ } else {
6350
+ $this->setError('no http/s in endpoint url');
6351
+ }
6352
+ $this->request = $http->outgoing_payload;
6353
+ $this->response = $http->incoming_payload;
6354
+ $this->UpdateCookies($http->incoming_cookies);
6355
+
6356
+ // save transport object if using persistent connections
6357
+ if ($this->persistentConnection) {
6358
+ $http->clearDebug();
6359
+ if (!is_object($this->persistentConnection)) {
6360
+ $this->persistentConnection = $http;
6361
+ }
6362
+ }
6363
+
6364
+ if($err = $http->getError()){
6365
+ $this->setError('HTTP Error: '.$err);
6366
+ return false;
6367
+ } elseif($this->getError()){
6368
+ return false;
6369
+ } else {
6370
+ return $this->parseResponse($http->incoming_headers, $this->responseData);
6371
+ }
6372
+ break;
6373
+ default:
6374
+ $this->setError('no transport found, or selected transport is not yet supported!');
6375
+ return false;
6376
+ break;
6377
+ }
6378
+ }
6379
+
6380
+ /**
6381
+ * processes SOAP message returned from server
6382
+ *
6383
+ * @param array $headers The HTTP headers
6384
+ * @param string $data unprocessed response data from server
6385
+ * @return mixed value of the message, decoded into a PHP type
6386
+ * @access private
6387
+ */
6388
+ function parseResponse($headers, $data) {
6389
+ if (!strstr($headers['content-type'], 'text/xml')) {
6390
+ $this->setError('Response not of type text/xml');
6391
+ return false;
6392
+ }
6393
+ if (strpos($headers['content-type'], '=')) {
6394
+ $enc = str_replace('"', '', substr(strstr($headers["content-type"], '='), 1));
6395
+ if(eregi('^(ISO-8859-1|US-ASCII|UTF-8)$',$enc)){
6396
+ $this->xml_encoding = strtoupper($enc);
6397
+ } else {
6398
+ $this->xml_encoding = 'US-ASCII';
6399
+ }
6400
+ } else {
6401
+ // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
6402
+ $this->xml_encoding = 'ISO-8859-1';
6403
+ }
6404
+ $parser = new soap_parser($data,$this->xml_encoding,$this->operation,$this->decode_utf8);
6405
+ // add parser debug data to our debug
6406
+ // if parse errors
6407
+ if($errstr = $parser->getError()){
6408
+ $this->setError( $errstr);
6409
+ // destroy the parser object
6410
+ unset($parser);
6411
+ return false;
6412
+ } else {
6413
+ // get SOAP headers
6414
+ $this->responseHeaders = $parser->getHeaders();
6415
+ // get decoded message
6416
+ $return = $parser->get_response();
6417
+ // add document for doclit support
6418
+ $this->document = $parser->document;
6419
+ // destroy the parser object
6420
+ unset($parser);
6421
+ // return decode message
6422
+ return $return;
6423
+ }
6424
+ }
6425
+
6426
+ /**
6427
+ * sets the SOAP endpoint, which can override WSDL
6428
+ *
6429
+ * @param $endpoint string The endpoint URL to use, or empty string or false to prevent override
6430
+ * @access public
6431
+ */
6432
+ function setEndpoint($endpoint) {
6433
+ $this->forceEndpoint = $endpoint;
6434
+ }
6435
+
6436
+ /**
6437
+ * set the SOAP headers
6438
+ *
6439
+ * @param $headers mixed String of XML with SOAP header content, or array of soapval objects for SOAP headers
6440
+ * @access public
6441
+ */
6442
+ function setHeaders($headers){
6443
+ $this->requestHeaders = $headers;
6444
+ }
6445
+
6446
+ /**
6447
+ * get the SOAP response headers (namespace resolution incomplete)
6448
+ *
6449
+ * @return string
6450
+ * @access public
6451
+ */
6452
+ function getHeaders(){
6453
+ return $this->responseHeaders;
6454
+ }
6455
+
6456
+ /**
6457
+ * set proxy info here
6458
+ *
6459
+ * @param string $proxyhost
6460
+ * @param string $proxyport
6461
+ * @param string $proxyusername
6462
+ * @param string $proxypassword
6463
+ * @access public
6464
+ */
6465
+ function setHTTPProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '') {
6466
+ $this->proxyhost = $proxyhost;
6467
+ $this->proxyport = $proxyport;
6468
+ $this->proxyusername = $proxyusername;
6469
+ $this->proxypassword = $proxypassword;
6470
+ }
6471
+
6472
+ /**
6473
+ * if authenticating, set user credentials here
6474
+ *
6475
+ * @param string $username
6476
+ * @param string $password
6477
+ * @param string $authtype (basic|digest|certificate)
6478
+ * @param array $certRequest (keys must be cainfofile (optional), sslcertfile, sslkeyfile, passphrase, verifypeer (optional), verifyhost (optional): see corresponding options in cURL docs)
6479
+ * @access public
6480
+ */
6481
+ function setCredentials($username, $password, $authtype = 'basic', $certRequest = array()) {
6482
+ $this->username = $username;
6483
+ $this->password = $password;
6484
+ $this->authtype = $authtype;
6485
+ $this->certRequest = $certRequest;
6486
+ }
6487
+
6488
+ /**
6489
+ * use HTTP encoding
6490
+ *
6491
+ * @param string $enc
6492
+ * @access public
6493
+ */
6494
+ function setHTTPEncoding($enc='gzip, deflate'){
6495
+ $this->http_encoding = $enc;
6496
+ }
6497
+
6498
+ /**
6499
+ * use HTTP persistent connections if possible
6500
+ *
6501
+ * @access public
6502
+ */
6503
+ function useHTTPPersistentConnection(){
6504
+ $this->persistentConnection = true;
6505
+ }
6506
+
6507
+ /**
6508
+ * gets the default RPC parameter setting.
6509
+ * If true, default is that call params are like RPC even for document style.
6510
+ * Each call() can override this value.
6511
+ *
6512
+ * This is no longer used.
6513
+ *
6514
+ * @return boolean
6515
+ * @access public
6516
+ * @deprecated
6517
+ */
6518
+ function getDefaultRpcParams() {
6519
+ return $this->defaultRpcParams;
6520
+ }
6521
+
6522
+ /**
6523
+ * sets the default RPC parameter setting.
6524
+ * If true, default is that call params are like RPC even for document style
6525
+ * Each call() can override this value.
6526
+ *
6527
+ * This is no longer used.
6528
+ *
6529
+ * @param boolean $rpcParams
6530
+ * @access public
6531
+ * @deprecated
6532
+ */
6533
+ function setDefaultRpcParams($rpcParams) {
6534
+ $this->defaultRpcParams = $rpcParams;
6535
+ }
6536
+
6537
+ /**
6538
+ * dynamically creates an instance of a proxy class,
6539
+ * allowing user to directly call methods from wsdl
6540
+ *
6541
+ * @return object soap_proxy object
6542
+ * @access public
6543
+ */
6544
+ function getProxy(){
6545
+ $r = rand();
6546
+ $evalStr = $this->_getProxyClassCode($r);
6547
+ // eval the class
6548
+ eval($evalStr);
6549
+ // instantiate proxy object
6550
+ eval("\$proxy = new soap_proxy_$r('');");
6551
+ // transfer current wsdl data to the proxy thereby avoiding parsing the wsdl twice
6552
+ $proxy->endpointType = 'wsdl';
6553
+ $proxy->wsdlFile = $this->wsdlFile;
6554
+ $proxy->wsdl = $this->wsdl;
6555
+ $proxy->operations = $this->operations;
6556
+ $proxy->defaultRpcParams = $this->defaultRpcParams;
6557
+ // transfer other state
6558
+ $proxy->username = $this->username;
6559
+ $proxy->password = $this->password;
6560
+ $proxy->authtype = $this->authtype;
6561
+ $proxy->proxyhost = $this->proxyhost;
6562
+ $proxy->proxyport = $this->proxyport;
6563
+ $proxy->proxyusername = $this->proxyusername;
6564
+ $proxy->proxypassword = $this->proxypassword;
6565
+ $proxy->timeout = $this->timeout;
6566
+ $proxy->response_timeout = $this->response_timeout;
6567
+ $proxy->http_encoding = $this->http_encoding;
6568
+ $proxy->persistentConnection = $this->persistentConnection;
6569
+ $proxy->requestHeaders = $this->requestHeaders;
6570
+ $proxy->soap_defencoding = $this->soap_defencoding;
6571
+ $proxy->endpoint = $this->endpoint;
6572
+ $proxy->forceEndpoint = $this->forceEndpoint;
6573
+ return $proxy;
6574
+ }
6575
+
6576
+ /**
6577
+ * dynamically creates proxy class code
6578
+ *
6579
+ * @return string PHP/NuSOAP code for the proxy class
6580
+ * @access private
6581
+ */
6582
+ function _getProxyClassCode($r) {
6583
+ if ($this->endpointType != 'wsdl') {
6584
+ $evalStr = 'A proxy can only be created for a WSDL client';
6585
+ $this->setError($evalStr);
6586
+ return $evalStr;
6587
+ }
6588
+ $evalStr = '';
6589
+ foreach ($this->operations as $operation => $opData) {
6590
+ if ($operation != '') {
6591
+ // create param string and param comment string
6592
+ if (sizeof($opData['input']['parts']) > 0) {
6593
+ $paramStr = '';
6594
+ $paramArrayStr = '';
6595
+ $paramCommentStr = '';
6596
+ foreach ($opData['input']['parts'] as $name => $type) {
6597
+ $paramStr .= "\$$name, ";
6598
+ $paramArrayStr .= "'$name' => \$$name, ";
6599
+ $paramCommentStr .= "$type \$$name, ";
6600
+ }
6601
+ $paramStr = substr($paramStr, 0, strlen($paramStr)-2);
6602
+ $paramArrayStr = substr($paramArrayStr, 0, strlen($paramArrayStr)-2);
6603
+ $paramCommentStr = substr($paramCommentStr, 0, strlen($paramCommentStr)-2);
6604
+ } else {
6605
+ $paramStr = '';
6606
+ $paramArrayStr = '';
6607
+ $paramCommentStr = 'void';
6608
+ }
6609
+ $opData['namespace'] = !isset($opData['namespace']) ? 'http://testuri.com' : $opData['namespace'];
6610
+ $evalStr .= "// $paramCommentStr
6611
+ function " . str_replace('.', '__', $operation) . "($paramStr) {
6612
+ \$params = array($paramArrayStr);
6613
+ return \$this->call('$operation', \$params, '".$opData['namespace']."', '".(isset($opData['soapAction']) ? $opData['soapAction'] : '')."');
6614
+ }
6615
+ ";
6616
+ unset($paramStr);
6617
+ unset($paramCommentStr);
6618
+ }
6619
+ }
6620
+ $evalStr = 'class soap_proxy_'.$r.' extends soap_client {
6621
+ '.$evalStr.'
6622
+ }';
6623
+ return $evalStr;
6624
+ }
6625
+
6626
+ /**
6627
+ * dynamically creates proxy class code
6628
+ *
6629
+ * @return string PHP/NuSOAP code for the proxy class
6630
+ * @access public
6631
+ */
6632
+ function getProxyClassCode() {
6633
+ $r = rand();
6634
+ return $this->_getProxyClassCode($r);
6635
+ }
6636
+
6637
+ /**
6638
+ * gets the HTTP body for the current request.
6639
+ *
6640
+ * @param string $soapmsg The SOAP payload
6641
+ * @return string The HTTP body, which includes the SOAP payload
6642
+ * @access private
6643
+ */
6644
+ function getHTTPBody($soapmsg) {
6645
+ return $soapmsg;
6646
+ }
6647
+
6648
+ /**
6649
+ * gets the HTTP content type for the current request.
6650
+ *
6651
+ * Note: getHTTPBody must be called before this.
6652
+ *
6653
+ * @return string the HTTP content type for the current request.
6654
+ * @access private
6655
+ */
6656
+ function getHTTPContentType() {
6657
+ return 'text/xml';
6658
+ }
6659
+
6660
+ /**
6661
+ * gets the HTTP content type charset for the current request.
6662
+ * returns false for non-text content types.
6663
+ *
6664
+ * Note: getHTTPBody must be called before this.
6665
+ *
6666
+ * @return string the HTTP content type charset for the current request.
6667
+ * @access private
6668
+ */
6669
+ function getHTTPContentTypeCharset() {
6670
+ return $this->soap_defencoding;
6671
+ }
6672
+
6673
+ /*
6674
+ * whether or not parser should decode utf8 element content
6675
+ *
6676
+ * @return always returns true
6677
+ * @access public
6678
+ */
6679
+ function decodeUTF8($bool){
6680
+ $this->decode_utf8 = $bool;
6681
+ return true;
6682
+ }
6683
+
6684
+ /**
6685
+ * adds a new Cookie into $this->cookies array
6686
+ *
6687
+ * @param string $name Cookie Name
6688
+ * @param string $value Cookie Value
6689
+ * @return if cookie-set was successful returns true, else false
6690
+ * @access public
6691
+ */
6692
+ function setCookie($name, $value) {
6693
+ if (strlen($name) == 0) {
6694
+ return false;
6695
+ }
6696
+ $this->cookies[] = array('name' => $name, 'value' => $value);
6697
+ return true;
6698
+ }
6699
+
6700
+ /**
6701
+ * gets all Cookies
6702
+ *
6703
+ * @return array with all internal cookies
6704
+ * @access public
6705
+ */
6706
+ function getCookies() {
6707
+ return $this->cookies;
6708
+ }
6709
+
6710
+ /**
6711
+ * checks all Cookies and delete those which are expired
6712
+ *
6713
+ * @return always return true
6714
+ * @access private
6715
+ */
6716
+ function checkCookies() {
6717
+ if (sizeof($this->cookies) == 0) {
6718
+ return true;
6719
+ }
6720
+ $curr_cookies = $this->cookies;
6721
+ $this->cookies = array();
6722
+ foreach ($curr_cookies as $cookie) {
6723
+ if (! is_array($cookie)) {
6724
+ continue;
6725
+ }
6726
+ if ((isset($cookie['expires'])) && (! empty($cookie['expires']))) {
6727
+ if (strtotime($cookie['expires']) > time()) {
6728
+ $this->cookies[] = $cookie;
6729
+ } else {
6730
+ }
6731
+ } else {
6732
+ $this->cookies[] = $cookie;
6733
+ }
6734
+ }
6735
+ return true;
6736
+ }
6737
+
6738
+ /**
6739
+ * updates the current cookies with a new set
6740
+ *
6741
+ * @param array $cookies new cookies with which to update current ones
6742
+ * @return always return true
6743
+ * @access private
6744
+ */
6745
+ function UpdateCookies($cookies) {
6746
+ if (sizeof($this->cookies) == 0) {
6747
+ // no existing cookies: take whatever is new
6748
+ if (sizeof($cookies) > 0) {
6749
+ $this->cookies = $cookies;
6750
+ }
6751
+ return true;
6752
+ }
6753
+ if (sizeof($cookies) == 0) {
6754
+ // no new cookies: keep what we've got
6755
+ return true;
6756
+ }
6757
+ // merge
6758
+ foreach ($cookies as $newCookie) {
6759
+ if (!is_array($newCookie)) {
6760
+ continue;
6761
+ }
6762
+ if ((!isset($newCookie['name'])) || (!isset($newCookie['value']))) {
6763
+ continue;
6764
+ }
6765
+ $newName = $newCookie['name'];
6766
+
6767
+ $found = false;
6768
+ for ($i = 0; $i < count($this->cookies); $i++) {
6769
+ $cookie = $this->cookies[$i];
6770
+ if (!is_array($cookie)) {
6771
+ continue;
6772
+ }
6773
+ if (!isset($cookie['name'])) {
6774
+ continue;
6775
+ }
6776
+ if ($newName != $cookie['name']) {
6777
+ continue;
6778
+ }
6779
+ $newDomain = isset($newCookie['domain']) ? $newCookie['domain'] : 'NODOMAIN';
6780
+ $domain = isset($cookie['domain']) ? $cookie['domain'] : 'NODOMAIN';
6781
+ if ($newDomain != $domain) {
6782
+ continue;
6783
+ }
6784
+ $newPath = isset($newCookie['path']) ? $newCookie['path'] : 'NOPATH';
6785
+ $path = isset($cookie['path']) ? $cookie['path'] : 'NOPATH';
6786
+ if ($newPath != $path) {
6787
+ continue;
6788
+ }
6789
+ $this->cookies[$i] = $newCookie;
6790
+ $found = true;
6791
+ break;
6792
+ }
6793
+ if (! $found) {
6794
+ $this->cookies[] = $newCookie;
6795
+ }
6796
+ }
6797
+ return true;
6798
+ }
6799
+ }
6800
+ ?>
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Esellers_Ipay</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license>free</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Korea Ipay Extension</summary>
10
+ <description>Korea Ipay Extension</description>
11
+ <notes>free</notes>
12
+ <authors><author><name>YoungJun</name><user>djsmqhaskf</user><email>gwgw123@esellers.co.kr</email></author></authors>
13
+ <date>2014-03-31</date>
14
+ <time>05:30:42</time>
15
+ <contents><target name="magecommunity"><dir name="Esellers"><dir name="Aboutep"><dir name="Block"><dir name="System"><dir name="Config"><dir name="Form"><file name="Fieldep.php" hash="dc899e430a9947525cae4887bd9962f5"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="329f662857915c58185fae50c8470ba8"/></dir><dir name="Model"><file name="Createep.php" hash="29220813414cd7ef08d8a318a22c253e"/></dir><dir name="controllers"><file name="EpController.php" hash="a8e6a365629cca1ce841f6036ef70565"/></dir><dir name="etc"><file name="adminhtml.xml" hash="52945238ca397da4a882949e5c32345d"/><file name="config.xml" hash="11dfd3de4dd7541918f8a846493c2684"/><file name="system.xml" hash="9c806e40fb2fd24e5eed4a9f3a80e3cf"/></dir></dir><dir name="Ipay"><dir name="Block"><dir name="Cart"><file name="Onepage.php" hash="75feb0b93fc47b548f2b02c628b6a5e8"/></dir><file name="Logo.php" hash="9b5db42fce62779b0a247d7cd6744b3b"/><dir name="Onepage"><dir name="Review"><file name="Info.php" hash="b2e1ea800a76d97c4e9a4a16fa03afc0"/></dir></dir><dir name="Sales"><dir name="Order"><file name="View.php" hash="425e1b18a8e56993624b056ee061d196"/></dir></dir></dir><dir name="Helper"><file name="Active.php" hash="7408945524deb3ad8c86ef9fc699b9d9"/><file name="Data.php" hash="70658a702bc0819983caf57fbca27f07"/></dir><dir name="Model"><dir name="Carrier"><file name="ShippingMethod.php" hash="46fa125dcbcb9687fd703a18c38021ae"/></dir><file name="Ipay.php" hash="0518adddf60dcf34d8a3b3381b0ad61c"/><dir name="Mysql4"><file name="Setup.php" hash="53f40275bb93ac22b87782a340416d21"/><file name="ipay.php" hash="4b9487ba9f98db81bc67419d2929f262"/></dir><file name="Observer.php" hash="f49f13f5106a7e0d69c8d9dcceca6734"/><file name="PaymentMethod.php" hash="82b92bfd72c33f68cd562a8d5db6e5fb"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Color.php" hash="36ec6dc7646091070ffaab0d5e5733c0"/><file name="Company.php" hash="defee1c6dcb61d6b5bb8092f816d8a4b"/><file name="Escrow.php" hash="a8a0752c02c78f90c3d3bca7db0c89ef"/><file name="Font.php" hash="fa38b9e1cdd682f6ee4995d9cdfdfb4f"/><file name="Layout.php" hash="300ada2497ce69446e02fbd95d721182"/><file name="Paymethod.php" hash="39a18bc37871d35ebe03f2c13e053b46"/><file name="Roundoff.php" hash="6a4e2735aa4ea3e24f1a5b193e35419c"/><file name="Shiptype.php" hash="36a1664abbd89270acd7574b5a69a31d"/></dir></dir></dir></dir><dir name="controllers"><file name="PaymentController.php" hash="52241ba1fcef1675d5f4eb6669a7d839"/><dir name="Sales"><dir name="Order"><file name="ShipmentController.php" hash="f28f46febe2bb7bee1746fc16613ff04"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="78d1c3e1d2b6196532d6b668a084e743"/><file name="config.xml" hash="d0f968d6a092ada66df0aa99345605b0"/><file name="system.xml" hash="8381aa83ec1bc2ed3b817d7583dccc26"/></dir><dir name="sql"><dir name="ipay_setup"><file name="mysql4-upgrade-1.0.0-1.1.0.php" hash="2b463831d3f18ffff86e51de814ca236"/></dir></dir></dir><dir name="Naverep"><dir name="Block"><dir name="System"><dir name="Config"><dir name="Form"><file name="Fieldep.php" hash="5a60c5b48cab0271daf90aa539ff6355"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="daa5ceebfe626f670cccb1145bcf6012"/></dir><dir name="Model"><file name="Createep.php" hash="f9177f0f991192fb849e926994220552"/><file name="Createep_.php" hash="64202da46481d2d773388b3479834ee4"/><file name="Createep__.php" hash="f9177f0f991192fb849e926994220552"/><dir name="System"><dir name="Config"><dir name="Source"><file name="EPUrl.php" hash="2f75faa18870129105849f6338986671"/></dir></dir></dir></dir><dir name="controllers"><file name="EpController.php" hash="9fd0f233f295fb8c5decf4fb386baf44"/></dir><dir name="etc"><file name="adminhtml.xml" hash="1cd2af9f259f073338708c3bdb2951de"/><file name="config.xml" hash="a2fb0980cd160cc19e68a15682653723"/><file name="system.xml" hash="ac7a1b95f86e52a5fce021c6994c612e"/></dir></dir><dir name="Salesgrid"><dir name="Block"><dir name="Sales"><dir name="Order"><file name="Grid.php" hash="3270a0d799ff11e4d945902e1cd27438"/></dir><file name="Order.php" hash="350b8089237ec31e52f21515b3443ec0"/></dir></dir><dir name="controllers"><dir name="Sales"><file name="OrderController.php" hash="c1724502bf916c851db3024275c3fb88"/></dir></dir><dir name="etc"><file name="config.xml" hash="79d514e12c6f4f9c681de6ca502c3660"/></dir></dir></dir><dir name="Mage"><dir name="Adminhtml"><dir name="Block"><dir name="Sales"><dir name="Order"><dir name="Shipment"><dir name="Create"><file name="Tracking.php" hash="3f49892bfdc7deb366438ee39d52cacc"/></dir><dir name="View"><file name="Tracking.php" hash="7e8268953f78c298840c964164e88eb1"/></dir></dir></dir></dir></dir><dir name="Controller"><file name="Action.php" hash="3a9f7511ab3293d150446abb784293c0"/><dir name="Report"><file name="Abstract.php" hash="1487bd48071aa04462cef8eb3846ec92"/></dir><dir name="Sales"><file name="Creditmemo.php" hash="29af0fa650ce1d5f0b67b0b135f166c4"/><file name="Invoice.php" hash="11e0efb6b9b68e425dbaac298cdd7fc0"/><file name="Shipment.php" hash="828706cbba092a90a960034882acfcdd"/></dir></dir><dir name="controllers"><file name="Action.php" hash="3a9f7511ab3293d150446abb784293c0"/><dir name="Block"><dir name="Sales"><dir name="Order"><dir name="Shipment"><dir name="Create"><file name="Tracking.php" hash="6464e01af2fbef56e03a0fdf4c713efc"/></dir></dir></dir></dir></dir><dir name="Controller"><file name="Action.php" hash="3a9f7511ab3293d150446abb784293c0"/><dir name="Report"><file name="Abstract.php" hash="1487bd48071aa04462cef8eb3846ec92"/></dir><dir name="Sales"><file name="Creditmemo.php" hash="29af0fa650ce1d5f0b67b0b135f166c4"/><file name="Invoice.php" hash="11e0efb6b9b68e425dbaac298cdd7fc0"/><file name="Shipment.php" hash="828706cbba092a90a960034882acfcdd"/></dir></dir><dir name="Report"><file name="Abstract.php" hash="1487bd48071aa04462cef8eb3846ec92"/></dir><dir name="Sales"><file name="Creditmemo.php" hash="29af0fa650ce1d5f0b67b0b135f166c4"/><file name="Invoice.php" hash="11e0efb6b9b68e425dbaac298cdd7fc0"/><dir name="Order"><file name="ShipmentController.php" hash="2f10e988915b23d9013a63a89b3a52c0"/></dir><file name="Shipment.php" hash="828706cbba092a90a960034882acfcdd"/></dir></dir></dir><dir name="Directory"><dir name="Model"><file name="Currency.php" hash="730260cb7e27203c3fd4acb3b6e21bdc"/><file name="Currency.php.bak" hash="9dbd4340253bba57b43a0c3e351c45ea"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="ipay.xml" hash="925bf8e3d1c2f980aca10cba3744c4cf"/></dir><dir name="template"><dir name="ipay"><file name="billing.phtml" hash="689c8fe61ebe7b678b418b2b3417bc64"/><file name="logo.phtml" hash="c65810cec9ef03ca55d15e3f58ba28e1"/><file name="top.links.phtml" hash="73b47a0161b7ba80dbbbab3565e17934"/></dir></dir></dir></dir><dir name="base"><dir name="default"><dir name="template"><dir name="ipay"><file name="available.phtml" hash="b9fb29c12304fa47138c4149f6c9dcd3"/><file name="billing.phtml" hash="a9d46f884d0c5632c315649d7f91d659"/><file name="button.phtml" hash="1e9372f61f972e14dae6cb560020ae8c"/><file name="cart.phtml" hash="82fcb1988bd52569c75ce3455b3c8baf"/><file name="cart.phtml_" hash="15206ebc30dadf0ed4ed77cdbd96be3e"/><file name="cart.phtml_today" hash="28a06e86069b189af782c2fccfb7d675"/><file name="footer.phtml" hash="fc98b6ed1ede4a8a9455f8f326b74f07"/><file name="info.phtml" hash="504dba14d9aab615a9d06e11f3af4ea6"/><file name="ipay.phtml" hash="cb071483fa977e88b25bcc63981d09b4"/><file name="ipayInfo.phtml" hash="9a5cda99ea3c3140d33c820d2ba992b2"/><file name="ipayInfo_.phtml" hash="186d5de128b75248f32800757ab43902"/><file name="ipayservice.phtml" hash="54a4575eb3021440c709162277afc54b"/><file name="item.phtml" hash="95ea301337fa0803c9ecd1c824d6aa95"/><file name="links.phtml" hash="d037c28d668a5ef922f742c031733d4a"/><file name="methods.phtml" hash="212f8cd3531e0033045eb59335e6c8b0"/><file name="overview.phtml" hash="849f3d5cda576ef5e91a9d13e89770bf"/><file name="progress.phtml" hash="5e6b60d971cb98bd2695906dc6744ddb"/><file name="success.phtml" hash="1240d117b8e35e19ea14bf2ee7e771b5"/><file name="totals.phtml" hash="55898789cca42936b764ffed6befdcb1"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="ipay"><file name="form.phtml" hash="0f07faa1db31c364219bd291c73a628a"/><file name="info.phtml" hash="eb88cc4791e80946d558104c52df2f8a"/><file name="items.phtml" hash="951b39d61782185c36f1324bc61f8903"/></dir></dir><dir name="layout"><file name="ipay.xml" hash="1e76d74fc3bd0dfd06ef82833876e28a"/></dir></dir></dir></dir></target><target name="magelib"><dir name="."><file name="class.ipay.php" hash="e66adfe6a431eb46dbde772956785bc5"/><file name="ipaySession.php" hash="67b9a599e1b08dae44a169d12c28556c"/><file name="func.xml.php" hash="5e98214b51cc726d2fd02c07b3c46a41"/><file name="nusoap.php" hash="1e221272df95ee844d734f4bf16f2b61"/></dir><dir name="Zend"><dir name="Locale"><dir name="Data"><file name="ko_KR.xml" hash="f5da1450c42c5176178d572cd652beb4"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="default"><dir name="default"><dir name="images"><dir name="ipay"><file name="logo_ipay01.gif" hash="4f337860e439935409220dce962520c7"/><file name="logo_ipay02.gif" hash="ce81aa12bd35a6b85ef19b53652b0b4a"/><file name="sbtn_ipay.gif" hash="b897e2be2fcc53a4496eb21768560f0e"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Esellers_Ipay.xml" hash="a660002a41e1052bb03d54e4cc862bfc"/></dir></target><target name="mage"><dir name="app"><dir name="design"><dir name="frontend"><dir name="default"><dir name="default"><dir name="locale"><dir name="en_US"><file name="translate.csv" hash="793e1ff86039f24caff6fad87a094fa1"/></dir><dir name="ko_KR"><file name="translate.csv" hash="f98214814e44def012a9991167fd29e7"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="locale"><dir name="en_US"><file name="translate.csv" hash="735c9ec66d1309f1206294f075fdcdd1"/></dir><dir name="ko_KR"><file name="translate.csv" hash="36e4010bfc2271d4898580cfa0840a83"/></dir></dir></dir></dir></dir></dir></dir><dir name="js"><dir name="esellers"><file name="ipay.js" hash="360c3ef0e7f4dcd8ec798909f0a570f7"/></dir></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies><required><php><min>5.2.17</min><max>5.6.0</max></php></required></dependencies>
18
+ </package>
skin/frontend/default/default/images/ipay/logo_ipay01.gif ADDED
Binary file
skin/frontend/default/default/images/ipay/logo_ipay02.gif ADDED
Binary file
skin/frontend/default/default/images/ipay/sbtn_ipay.gif ADDED
Binary file