BikeExchange_DE - Version 1.0.0

Version Notes

Productfeed
Availabilityfeed

Download this release

Release Info

Developer Hagen Schwaß
Extension BikeExchange_DE
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

app/code/local/Bikeexchange/Produktexport/Helper/Data.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+ class Bikeexchange_Produktexport_Helper_Data extends Mage_Core_Helper_Abstract
3
+ {
4
+
5
+ }
6
+ ?>
app/code/local/Bikeexchange/Produktexport/Model/Catalog/Product/Api.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Bikeexchange_Produktexport_Model_Catalog_Product_Api extends Mage_Catalog_Model_Api_Resource
3
+ {
4
+
5
+ protected $possiblebarcodefields = array('barcode', 'ean', 'upc', 'gtin', 'gtin-14', 'gtin-13', 'gtin-12', 'gtin-8', 'ucc-13', 'ucc-12', 'ucc-8', 'ean-8', 'ean-13', 'cip');
6
+ protected $possiblebrandfields = array('brand', 'marke', 'hersteller', 'manufacturer');
7
+ protected $possiblecolorfields = array('color', 'farbe', 'colour');
8
+ protected $possiblesizefields = array('size', 'größe', 'groesse');
9
+ protected $possiblegenderfields = array('gender', 'sex', 'geschlecht', 'gendered');
10
+ protected $possibleyearfields = array('year', 'jahr', 'modelljahr', 'modelyear', 'produktjahr');
11
+
12
+ public function availabilityFeed($store = null)
13
+ {
14
+ $collection = Mage::getModel('catalog/product')->getCollection()
15
+ ->setFlag('require_stock_items', true)
16
+ ->addStoreFilter($this->_getStoreId($store))
17
+ ->addAttributeToSelect('*');
18
+
19
+ $result = array();
20
+ foreach ($collection as $product)
21
+ {
22
+ $item = array(
23
+ 'product_id' => $product->getId(),
24
+ 'type_id' => $product->getTypeId(),
25
+ 'sku' => $product->getSku(),
26
+ 'status' => $product->getStatus(),
27
+ 'visibility' => $product->getVisibility(),
28
+ 'price' => $product->getPrice(),
29
+ 'special_price' => $product->getSpecialPrice(),
30
+ 'special_from_date' => $product->getSpecialFromDate(),
31
+ 'special_to_date' => $product->getSpecialToDate(),
32
+ 'tier_price' => $product->getTierPrice(),
33
+ 'qty' => $product->getStockItem()->getQty(),
34
+ 'is_in_stock'=> $product->getStockItem()->getIsInStock()
35
+ );
36
+ foreach ($product->getTypeInstance(true)->getEditableAttributes($product) as $attribute)
37
+ {
38
+ if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblebarcodefields) && !empty($product->getData($attribute->getAttributeCode())))
39
+ {
40
+ $item['barcode'] = $product->getData($attribute->getAttributeCode());
41
+ }
42
+ else if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblebrandfields) && !empty($product->getData($attribute->getAttributeCode())))
43
+ {
44
+ $item['brand'] = $product->getData($attribute->getAttributeCode());
45
+ }
46
+ else if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblecolorfields) && !empty($product->getData($attribute->getAttributeCode())))
47
+ {
48
+ $item['color'] = $product->getData($attribute->getAttributeCode());
49
+ }
50
+ else if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblesizefields) && !empty($product->getData($attribute->getAttributeCode())))
51
+ {
52
+ $item['size'] = $product->getData($attribute->getAttributeCode());
53
+ }
54
+ else if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblegenderfields) && !empty($product->getData($attribute->getAttributeCode())))
55
+ {
56
+ $item['gender'] = $product->getData($attribute->getAttributeCode());
57
+ }
58
+ }
59
+ $result[] = $item;
60
+ }
61
+ return $result;
62
+ }
63
+
64
+ public function productFeed($store = null)
65
+ {
66
+ $collection = Mage::getModel('catalog/product')->getCollection()
67
+ ->setFlag('require_stock_items', true)
68
+ ->addStoreFilter($this->_getStoreId($store))
69
+ ->addAttributeToSelect('*');
70
+
71
+ $result = array();
72
+ foreach ($collection as $product)
73
+ {
74
+ $item = array(
75
+ 'product_id' => $product->getId(),
76
+ 'sku' => $product->getSku(),
77
+ 'categories' => $product->getCategoryIds(),
78
+ 'websites' => $product->getWebsiteIds(),
79
+ 'type_id' => $product->getTypeId(),
80
+ 'name' => $product->getName(),
81
+ 'description'=> $product->getDescription(),
82
+ 'short_description'=> $product->getShortDescription(),
83
+ 'status' => $product->getStatus(),
84
+ 'product_url' => $product->getProductUrl(),
85
+ 'visibility' => $product->getVisibility(),
86
+ 'price' => $product->getPrice(),
87
+ 'special_price' => $product->getSpecialPrice(),
88
+ 'special_from_date' => $product->getSpecialFromDate(),
89
+ 'special_to_date' => $product->getSpecialToDate(),
90
+ 'tier_price' => $product->getTierPrice(),
91
+ 'meta_title' => $product->getData('meta_title'),
92
+ 'meta_description' => $product->getData('meta_description'),
93
+ 'qty' => $product->getStockItem()->getQty(),
94
+ 'is_in_stock'=> $product->getStockItem()->getIsInStock(),
95
+ 'image_url' => Mage::helper('catalog/product')->getImageUrl($product),
96
+ 'images' => $product->getMediaGalleryImages()
97
+ );
98
+ foreach ($product->getTypeInstance(true)->getEditableAttributes($product) as $attribute)
99
+ {
100
+ if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblebarcodefields) && !empty($product->getData($attribute->getAttributeCode())))
101
+ {
102
+ $item['barcode'] = $product->getAttributeText($attribute->getAttributeCode());
103
+ }
104
+ else if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblebrandfields) && !empty($product->getData($attribute->getAttributeCode())))
105
+ {
106
+ $item['brand'] = $product->getAttributeText($attribute->getAttributeCode());
107
+ }
108
+ else if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblecolorfields) && !empty($product->getData($attribute->getAttributeCode())))
109
+ {
110
+ $item['color'] = $product->getAttributeText($attribute->getAttributeCode());
111
+ }
112
+ else if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblesizefields) && !empty($product->getData($attribute->getAttributeCode())))
113
+ {
114
+ $item['size'] = $product->getAttributeText($attribute->getAttributeCode());
115
+ }
116
+ else if (in_array(strtolower($attribute->getAttributeCode()), $this->possiblegenderfields) && !empty($product->getData($attribute->getAttributeCode())))
117
+ {
118
+ $item['gender'] = $product->getAttributeText($attribute->getAttributeCode());
119
+ }
120
+ else if (in_array(strtolower($attribute->getAttributeCode()), $this->possibleyearfields) && !empty($product->getData($attribute->getAttributeCode())))
121
+ {
122
+ $item['year'] = $product->getAttributeText($attribute->getAttributeCode());
123
+ }
124
+ }
125
+ $result[] = $item;
126
+ }
127
+ return $result;
128
+
129
+ }
130
+
131
+ }
132
+ ?>
app/code/local/Bikeexchange/Produktexport/Model/Catalog/Product/Api/V2.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+ class Bikeexchange_Produktexport_Model_Catalog_Product_Api_V2 extends Bikeexchange_Produktexport_Model_Catalog_Product_Api
3
+ {
4
+
5
+ }
6
+ ?>
app/code/local/Bikeexchange/Produktexport/etc/api.xml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <api>
3
+ <resources>
4
+ <bikeexchange_products translate="title" module="produktexport">
5
+ <model>produktexport/catalog_product_api</model>
6
+ <title>Bikeexchange Feed API</title>
7
+ <acl>bikeexchangeupdateserice</acl>
8
+ <methods>
9
+ <availability translate="title" module="produktexport">
10
+ <title>Availability Feed</title>
11
+ <method>availabilityFeed</method>
12
+ </availability>
13
+ <product translate="title" module="produktexport">
14
+ <title>Product Feed</title>
15
+ <method>productFeed</method>
16
+ </product>
17
+ </methods>
18
+ </bikeexchange_products>
19
+ </resources>
20
+ <v2>
21
+ <resources_function_prefix>
22
+ <bikeexchange_products>bikeexchangeProduktexport</bikeexchange_products>
23
+ </resources_function_prefix>
24
+ </v2>
25
+ <acl>
26
+ <resources>
27
+ <bikeexchangeupdateserice translate="title" module="produktexport">
28
+ <title>Bikeexchange Update Service</title>
29
+ <sort_order>5</sort_order>
30
+ </bikeexchangeupdateserice>
31
+ </resources>
32
+ </acl>
33
+ </api>
34
+ </config>
app/code/local/Bikeexchange/Produktexport/etc/config.xml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <Bikeexchange_Produktexport>
4
+ <version>1.0.0</version>
5
+ </Bikeexchange_Produktexport>
6
+ </modules>
7
+ <global>
8
+ <models>
9
+ <produktexport>
10
+ <class>Bikeexchange_Produktexport_Model</class>
11
+ </produktexport>
12
+ </models>
13
+ <helpers>
14
+ <produktexport>
15
+ <class>Bikeexchange_Produktexport_Helper</class>
16
+ </produktexport>
17
+ </helpers>
18
+ </global>
19
+ </config>
app/code/local/Bikeexchange/Produktexport/etc/wsi.xml ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <wsdl:definitions xmlns:typens="urn:{{var wsdl.name}}"
3
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
4
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
5
+ xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
6
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
7
+ name="{{var wsdl.name}}"
8
+ targetNamespace="urn:{{var wsdl.name}}">
9
+ <wsdl:types>
10
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:{{var wsdl.name}}">
11
+ <xsd:complexType name="bikeexchangeAvailabilityArray">
12
+ <xsd:sequence>
13
+ <xsd:element minOccurs="0" maxOccurs="unbounded" name="complexObjectArray" type="typens:bikeexchangeAvailability" />
14
+ </xsd:sequence>
15
+ </xsd:complexType>
16
+ <xsd:complexType name="bikeexchangeAvailability">
17
+ <xsd:sequence>
18
+ <xsd:element name="product_id" type="xsd:string" minOccurs="0" />
19
+ <xsd:element name="type_id" type="xsd:string" />
20
+ <xsd:element name="sku" type="xsd:string" minOccurs="0" />
21
+ <xsd:element name="barcode" type="xsd:string" minOccurs="0" />
22
+ <xsd:element name="status" type="xsd:string" minOccurs="0" />
23
+ <xsd:element name="visibility" type="xsd:string" minOccurs="0" />
24
+ <xsd:element name="price" type="xsd:string" minOccurs="0" />
25
+ <xsd:element name="special_price" type="xsd:string" minOccurs="0" />
26
+ <xsd:element name="special_from_date" type="xsd:string" minOccurs="0" />
27
+ <xsd:element name="special_to_date" type="xsd:string" minOccurs="0" />
28
+ <xsd:element name="tier_price" type="typens:catalogProductTierPriceEntityArray" minOccurs="0" />
29
+ <xsd:element name="qty" type="xsd:string" minOccurs="0" />
30
+ <xsd:element name="is_in_stock" type="xsd:string" minOccurs="0" />
31
+ </xsd:sequence>
32
+ </xsd:complexType>
33
+ <xsd:complexType name="bikeexchangeProductArray">
34
+ <xsd:sequence>
35
+ <xsd:element minOccurs="0" maxOccurs="unbounded" name="complexObjectArray" type="typens:bikeexchangeProduct" />
36
+ </xsd:sequence>
37
+ </xsd:complexType>
38
+ <xsd:complexType name="bikeexchangeProduct">
39
+ <xsd:sequence>
40
+ <xsd:element name="product_id" type="xsd:string" minOccurs="0" />
41
+ <xsd:element name="sku" type="xsd:string" minOccurs="0" />
42
+ <xsd:element name="barcode" type="xsd:string" minOccurs="0" />
43
+ <xsd:element name="categories" type="typens:ArrayOfString" minOccurs="0" />
44
+ <xsd:element name="websites" type="typens:ArrayOfString" minOccurs="0" />
45
+ <xsd:element name="type_id" type="xsd:string" minOccurs="0" />
46
+ <xsd:element name="name" type="xsd:string" minOccurs="0" />
47
+ <xsd:element name="brand" type="xsd:string" minOccurs="0" />
48
+ <xsd:element name="description" type="xsd:string" minOccurs="0" />
49
+ <xsd:element name="short_description" type="xsd:string" minOccurs="0" />
50
+ <xsd:element name="color" type="xsd:string" minOccurs="0" />
51
+ <xsd:element name="size" type="xsd:string" minOccurs="0" />
52
+ <xsd:element name="gender" type="xsd:string" minOccurs="0" />
53
+ <xsd:element name="year" type="xsd:string" minOccurs="0" />
54
+ <xsd:element name="status" type="xsd:string" minOccurs="0" />
55
+ <xsd:element name="product_url" type="xsd:string" minOccurs="0" />
56
+ <xsd:element name="visibility" type="xsd:string" minOccurs="0" />
57
+ <xsd:element name="price" type="xsd:string" minOccurs="0" />
58
+ <xsd:element name="special_price" type="xsd:string" minOccurs="0" />
59
+ <xsd:element name="special_from_date" type="xsd:string" minOccurs="0" />
60
+ <xsd:element name="special_to_date" type="xsd:string" minOccurs="0" />
61
+ <xsd:element name="tier_price" type="typens:catalogProductTierPriceEntityArray" minOccurs="0" />
62
+ <xsd:element name="meta_title" type="xsd:string" minOccurs="0" />
63
+ <xsd:element name="meta_description" type="xsd:string" minOccurs="0" />
64
+ <xsd:element name="qty" type="xsd:string" minOccurs="0" />
65
+ <xsd:element name="is_in_stock" type="xsd:string" minOccurs="0" />
66
+ <xsd:element name="image_url" type="xsd:string" minOccurs="0" />
67
+ <xsd:element name="images" type="typens:catalogProductImageEntityArray" minOccurs="0" />
68
+ </xsd:sequence>
69
+ </xsd:complexType>
70
+ <xsd:element name="bikeexchangeAvailabilityRequestParam">
71
+ <xsd:complexType>
72
+ <xsd:sequence>
73
+ <xsd:element minOccurs="1" maxOccurs="1" name="sessionId" type="xsd:string" />
74
+ <xsd:element minOccurs="0" maxOccurs="1" name="store" type="xsd:string" />
75
+ </xsd:sequence>
76
+ </xsd:complexType>
77
+ </xsd:element>
78
+ <xsd:element name="bikeexchangeAvailabilityResponseParam">
79
+ <xsd:complexType>
80
+ <xsd:sequence>
81
+ <xsd:element minOccurs="1" maxOccurs="1" name="result" type="typens:bikeexchangeAvailabilityArray" />
82
+ </xsd:sequence>
83
+ </xsd:complexType>
84
+ </xsd:element>
85
+ <xsd:element name="bikeexchangeProductRequestParam">
86
+ <xsd:complexType>
87
+ <xsd:sequence>
88
+ <xsd:element minOccurs="1" maxOccurs="1" name="sessionId" type="xsd:string" />
89
+ <xsd:element minOccurs="0" maxOccurs="1" name="store" type="xsd:string" />
90
+ </xsd:sequence>
91
+ </xsd:complexType>
92
+ </xsd:element>
93
+ <xsd:element name="bikeexchangeProductResponseParam">
94
+ <xsd:complexType>
95
+ <xsd:sequence>
96
+ <xsd:element minOccurs="1" maxOccurs="1" name="result" type="typens:bikeexchangeProductArray" />
97
+ </xsd:sequence>
98
+ </xsd:complexType>
99
+ </xsd:element>
100
+ </xsd:schema>
101
+ </wsdl:types>
102
+ <wsdl:message name="bikeexchangeProduktexportAvailabilityRequest">
103
+ <wsdl:part name="parameters" element="typens:bikeexchangeAvailabilityRequestParam" />
104
+ </wsdl:message>
105
+ <wsdl:message name="bikeexchangeProduktexportAvailabilityResponse">
106
+ <wsdl:part name="parameters" element="typens:bikeexchangeAvailabilityResponseParam" />
107
+ </wsdl:message>
108
+ <wsdl:message name="bikeexchangeProduktexportProductRequest">
109
+ <wsdl:part name="parameters" element="typens:bikeexchangeProductRequestParam" />
110
+ </wsdl:message>
111
+ <wsdl:message name="bikeexchangeProduktexportProductResponse">
112
+ <wsdl:part name="parameters" element="typens:bikeexchangeProductResponseParam" />
113
+ </wsdl:message>
114
+ <wsdl:portType name="{{var wsdl.handler}}PortType">
115
+ <wsdl:operation name="bikeexchangeProduktexportAvailability">
116
+ <wsdl:documentation>Bikeexchange Availability Feed</wsdl:documentation>
117
+ <wsdl:input message="typens:bikeexchangeProduktexportAvailabilityRequest" />
118
+ <wsdl:output message="typens:bikeexchangeProduktexportAvailabilityResponse" />
119
+ </wsdl:operation>
120
+ <wsdl:operation name="bikeexchangeProduktexportProduct">
121
+ <wsdl:documentation>Bikeexchange Product Feed</wsdl:documentation>
122
+ <wsdl:input message="typens:bikeexchangeProduktexportProductRequest" />
123
+ <wsdl:output message="typens:bikeexchangeProduktexportProductResponse" />
124
+ </wsdl:operation>
125
+ </wsdl:portType>
126
+ <wsdl:binding name="{{var wsdl.handler}}Binding" type="typens:{{var wsdl.handler}}PortType">
127
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
128
+ <wsdl:operation name="bikeexchangeProduktexportAvailability">
129
+ <soap:operation soapAction="" />
130
+ <wsdl:input>
131
+ <soap:body use="literal" />
132
+ </wsdl:input>
133
+ <wsdl:output>
134
+ <soap:body use="literal" />
135
+ </wsdl:output>
136
+ </wsdl:operation>
137
+ <wsdl:operation name="bikeexchangeProduktexportProduct">
138
+ <soap:operation soapAction="" />
139
+ <wsdl:input>
140
+ <soap:body use="literal" />
141
+ </wsdl:input>
142
+ <wsdl:output>
143
+ <soap:body use="literal" />
144
+ </wsdl:output>
145
+ </wsdl:operation>
146
+ </wsdl:binding>
147
+ <wsdl:service name="{{var wsdl.name}}Service">
148
+ <wsdl:port name="{{var wsdl.handler}}Port" binding="typens:{{var wsdl.handler}}Binding">
149
+ <soap:address location="{{var wsdl.url}}" />
150
+ </wsdl:port>
151
+ </wsdl:service>
152
+ </wsdl:definitions>
app/etc/modules/Bikeexchange_Produktexport.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <Bikeexchange_Produktexport>
4
+ <active>true</active>
5
+ <codePool>local</codePool>
6
+ </Bikeexchange_Produktexport>
7
+ </modules>
8
+ </config>
package.xml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>BikeExchange_DE</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Stellt Funktionen f&#xFC;r den BikeExchange DE Update Service bereit.</summary>
10
+ <description>Die Extension ist f&#xFC;r BikeExchange DE Kunden, die den BikeExchange Update Service nutzen wollen. Der BikeExchange Update Service aktualisiert Lagerbest&#xE4;nde, Angebotspreise und organisiert die Auftragsabwicklung. Au&#xDF;erdem werden Produktdaten bereitgestellt.</description>
11
+ <notes>Productfeed&#xD;
12
+ Availabilityfeed</notes>
13
+ <authors><author><name>Hagen Schwa&#xDF;</name><user>hagens</user><email>bikeexchange@hagenschwass.name</email></author></authors>
14
+ <date>2017-02-16</date>
15
+ <time>16:39:50</time>
16
+ <contents><target name="magelocal"><dir name="Bikeexchange"><dir name="Produktexport"><dir name="Helper"><file name="Data.php" hash="6a59185f3a1ecbe68cb845b6525f997d"/></dir><dir name="Model"><dir name="Catalog"><dir name="Product"><dir name="Api"><file name="V2.php" hash="8af7de3830297ee52215de8271de4efe"/></dir><file name="Api.php" hash="c045b16d7fca72a020f4c54cf04a30ce"/></dir></dir></dir><dir name="etc"><file name="api.xml" hash="e82ea342aeadaf59d0e96cc3424ab1ae"/><file name="config.xml" hash="400664fde2261f4a74713a81dc8ef0b2"/><file name="wsi.xml" hash="a42fe0c0091a18e3ca36039c604afcfe"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Bikeexchange_Produktexport.xml" hash="3f65e0b66b7a7e7dc690dded74491885"/></dir></target></contents>
17
+ <compatible/>
18
+ <dependencies><required><php><min>5.4.0</min><max>5.6.0</max></php></required></dependencies>
19
+ </package>