Version Notes
PlumSliceMagento extension extends SOAP v1.0 API for some of missing features required for Catalog Synching and searching functionality.
Download this release
Release Info
Developer | PlumSlice Labs |
Extension | Plumslice_Api |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- app/code/community/Plumslice/Api/Block/Adminhtml/System/Config/Fieldset/Hint.php +15 -0
- app/code/community/Plumslice/Api/Helper/Catalog/Product.php +184 -0
- app/code/community/Plumslice/Api/Helper/Data.php +17 -0
- app/code/community/Plumslice/Api/Model/Catalog/Product/Api.php +55 -0
- app/code/community/Plumslice/Api/Model/Catalog/Product/Api/V2.php +87 -0
- app/code/community/Plumslice/Api/etc/adminhtml.xml +22 -0
- app/code/community/Plumslice/Api/etc/config.xml +28 -0
- app/code/community/Plumslice/Api/etc/system.xml +30 -0
- app/code/community/Plumslice/Api/etc/wsdl.xml +18 -0
- app/code/community/Plumslice/Api/etc/wsi.xml +31 -0
- app/design/adminhtml/base/default/template/plumslice/api/system/config/fieldset/hint.phtml +12 -0
- app/etc/modules/Plumslice_Api.xml +9 -0
- package.xml +23 -0
app/code/community/Plumslice/Api/Block/Adminhtml/System/Config/Fieldset/Hint.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Define a Class Plumslice_Api_Block_Adminhtml_System_Config_Fieldset_Hint
|
4 |
+
|
5 |
+
class Plumslice_Api_Block_Adminhtml_System_Config_Fieldset_Hint
|
6 |
+
extends Mage_Adminhtml_Block_Abstract
|
7 |
+
implements Varien_Data_Form_Element_Renderer_Interface
|
8 |
+
{
|
9 |
+
protected $_template = 'plumslice/api/system/config/fieldset/hint.phtml';
|
10 |
+
|
11 |
+
public function render(Varien_Data_Form_Element_Abstract $element)
|
12 |
+
{
|
13 |
+
return $this->toHtml();
|
14 |
+
}
|
15 |
+
}
|
app/code/community/Plumslice/Api/Helper/Catalog/Product.php
ADDED
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Define a Class Plumslice_Api_Helper_Catalog_Product
|
4 |
+
|
5 |
+
class Plumslice_Api_Helper_Catalog_Product extends Mage_Core_Helper_Abstract
|
6 |
+
{
|
7 |
+
const CATEGORIES_SEPARATOR_PATH_XML = 'plumslice_api/config/categories_separator';
|
8 |
+
|
9 |
+
/**
|
10 |
+
* @param Mage_Catalog_Model_Product $product
|
11 |
+
* @param array $simpleSkus
|
12 |
+
* @param array $priceChanges
|
13 |
+
* @return Plumslice_Api_Helper_Catalog_Product
|
14 |
+
*
|
15 |
+
*/
|
16 |
+
public function associateProducts(Mage_Catalog_Model_Product $product, $simpleSkus, $priceChanges = array(), $configurableAttributes = array())
|
17 |
+
{
|
18 |
+
if (!empty($simpleSkus)) {
|
19 |
+
$newProductIds = Mage::getModel('catalog/product')->getCollection()
|
20 |
+
->addFieldToFilter('sku', array('in' => (array) $simpleSkus))
|
21 |
+
->addFieldToFilter('type_id', Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
|
22 |
+
->getAllIds();
|
23 |
+
|
24 |
+
$oldProductIds = Mage::getModel('catalog/product_type_configurable')->setProduct($product)->getUsedProductCollection()
|
25 |
+
->addAttributeToSelect('*')
|
26 |
+
->addFilterByRequiredOptions()
|
27 |
+
->getAllIds();
|
28 |
+
|
29 |
+
$usedProductIds = array_diff($newProductIds, $oldProductIds);
|
30 |
+
|
31 |
+
if (!empty($newProductIds) && $product->isConfigurable()) {
|
32 |
+
$this->_initConfigurableAttributesData($product, $newProductIds, $priceChanges, $configurableAttributes);
|
33 |
+
}
|
34 |
+
|
35 |
+
if (!empty($usedProductIds) && $product->isGrouped()) {
|
36 |
+
$relations = array_fill_keys($usedProductIds, array('qty' => 0, 'position' => 0));
|
37 |
+
$product->setGroupedLinkData($relations);
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
return $this;
|
42 |
+
}
|
43 |
+
|
44 |
+
protected function _getCatagoriesSeparator()
|
45 |
+
{
|
46 |
+
return Mage::getStoreConfig(self::CATEGORIES_SEPARATOR_PATH_XML);
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @return mixed
|
51 |
+
* @param string $label
|
52 |
+
* @param string $attributeCode
|
53 |
+
*/
|
54 |
+
public function getOptionKeyByLabel($attributeCode, $label)
|
55 |
+
{
|
56 |
+
$attribute = Mage::getModel('catalog/product')->getResource()
|
57 |
+
->getAttribute($attributeCode);
|
58 |
+
if ($attribute && $attribute->getId() && $attribute->usesSource()) {
|
59 |
+
foreach ($attribute->getSource()->getAllOptions(true, true) as $option) {
|
60 |
+
if ($label == $option['label']) {
|
61 |
+
return $option['value'];
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
65 |
+
|
66 |
+
return $label;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* @param array $categoryNames
|
71 |
+
* @return array
|
72 |
+
*
|
73 |
+
*/
|
74 |
+
public function getCategoryIdsByNames($categoryNames)
|
75 |
+
{
|
76 |
+
$categories = array();
|
77 |
+
$separator = $this->_getCatagoriesSeparator();
|
78 |
+
foreach ($categoryNames as $category) {
|
79 |
+
if (is_string($category) && !is_numeric($category)) {
|
80 |
+
$pieces = explode($separator, $category);
|
81 |
+
$addCategories = array();
|
82 |
+
$parentIds = array();
|
83 |
+
foreach ($pieces as $level => $name) {
|
84 |
+
$collection = Mage::getModel('catalog/category')->getCollection()
|
85 |
+
->setStoreId(0)
|
86 |
+
->addFieldToFilter('level', $level + 2)
|
87 |
+
->addAttributeToFilter('name', $name);
|
88 |
+
if (!empty($parentIds)) {
|
89 |
+
$collection->getSelect()->where('parent_id IN (?)', $parentIds);
|
90 |
+
}
|
91 |
+
$parentIds = array();
|
92 |
+
if ($collection->count()) {
|
93 |
+
foreach ($collection as $category) {
|
94 |
+
$addCategories[] = (int) $category->getId();
|
95 |
+
if ($level > 0) {
|
96 |
+
$addCategories[] = (int) $category->getParentId();
|
97 |
+
}
|
98 |
+
$parentIds[] = $category->getId();
|
99 |
+
}
|
100 |
+
}
|
101 |
+
}
|
102 |
+
if (!empty($addCategories)) {
|
103 |
+
$categories = array_merge($categories, $addCategories);
|
104 |
+
}
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
return !empty($categories) ? $categories : $categoryNames;
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* @return Plumslice_Api_Helper_Catalog_Product
|
113 |
+
* @param array $priceChanges
|
114 |
+
* @param array $simpleProductIds
|
115 |
+
* @param Mage_Catalog_Model_Product $mainProduct
|
116 |
+
*/
|
117 |
+
protected function _initConfigurableAttributesData(Mage_Catalog_Model_Product $mainProduct, $simpleProductIds, $priceChanges = array(), $configurableAttributes = array())
|
118 |
+
{
|
119 |
+
if (!$mainProduct->isConfigurable() || empty($simpleProductIds)) {
|
120 |
+
return $this;
|
121 |
+
}
|
122 |
+
|
123 |
+
$mainProduct->setConfigurableProductsData(array_flip($simpleProductIds));
|
124 |
+
$productType = $mainProduct->getTypeInstance(true);
|
125 |
+
$productType->setProduct($mainProduct);
|
126 |
+
$attributesData = $productType->getConfigurableAttributesAsArray();
|
127 |
+
|
128 |
+
if (empty($attributesData)) {
|
129 |
+
// Auto generation if configurable product has no attribute
|
130 |
+
$attributeIds = array();
|
131 |
+
foreach ($productType->getSetAttributes() as $attribute) {
|
132 |
+
if ($productType->canUseAttribute($attribute)) {
|
133 |
+
$attributeIds[] = $attribute->getAttributeId();
|
134 |
+
}
|
135 |
+
}
|
136 |
+
$productType->setUsedProductAttributeIds($attributeIds);
|
137 |
+
$attributesData = $productType->getConfigurableAttributesAsArray();
|
138 |
+
}
|
139 |
+
if (!empty($configurableAttributes)){
|
140 |
+
foreach ($attributesData as $idx => $val) {
|
141 |
+
if (!in_array($val['attribute_id'], $configurableAttributes)) {
|
142 |
+
unset($attributesData[$idx]);
|
143 |
+
}
|
144 |
+
}
|
145 |
+
}
|
146 |
+
|
147 |
+
$products = Mage::getModel('catalog/product')->getCollection()
|
148 |
+
->addIdFilter($simpleProductIds);
|
149 |
+
|
150 |
+
if (count($products)) {
|
151 |
+
foreach ($attributesData as &$attribute) {
|
152 |
+
$attribute['label'] = $attribute['frontend_label'];
|
153 |
+
$attributeCode = $attribute['attribute_code'];
|
154 |
+
foreach ($products as $product) {
|
155 |
+
$product->load($product->getId());
|
156 |
+
$optionId = $product->getData($attributeCode);
|
157 |
+
$isPercent = 0;
|
158 |
+
$priceChange = 0;
|
159 |
+
if (!empty($priceChanges) && isset($priceChanges[$attributeCode])) {
|
160 |
+
$optionText = $product->getResource()
|
161 |
+
->getAttribute($attribute['attribute_code'])
|
162 |
+
->getSource()
|
163 |
+
->getOptionText($optionId);
|
164 |
+
if (isset($priceChanges[$attributeCode][$optionText])) {
|
165 |
+
if (false !== strpos($priceChanges[$attributeCode][$optionText], '%')) {
|
166 |
+
$isPercent = 1;
|
167 |
+
}
|
168 |
+
$priceChange = preg_replace('/[^0-9\.,-]/', '', $priceChanges[$attributeCode][$optionText]);
|
169 |
+
$priceChange = (float) str_replace(',', '.', $priceChange);
|
170 |
+
}
|
171 |
+
}
|
172 |
+
$attribute['values'][$optionId] = array(
|
173 |
+
'value_index' => $optionId,
|
174 |
+
'is_percent' => $isPercent,
|
175 |
+
'pricing_value' => $priceChange,
|
176 |
+
);
|
177 |
+
}
|
178 |
+
}
|
179 |
+
$mainProduct->setConfigurableAttributesData($attributesData);
|
180 |
+
}
|
181 |
+
|
182 |
+
return $this;
|
183 |
+
}
|
184 |
+
}
|
app/code/community/Plumslice/Api/Helper/Data.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Define a Class Plumslice_Api_Helper_Data
|
4 |
+
|
5 |
+
class Plumslice_Api_Helper_Data extends Mage_Core_Helper_Abstract
|
6 |
+
{
|
7 |
+
/**
|
8 |
+
* @param string $attrSetName
|
9 |
+
* @return string
|
10 |
+
*
|
11 |
+
*/
|
12 |
+
public function getAttributeSetIdByName($attrSetName, $entityType = 'catalog_product')
|
13 |
+
{
|
14 |
+
return Mage::getSingleton('catalog/config')
|
15 |
+
->getAttributeSetId($entityType, $attrSetName);
|
16 |
+
}
|
17 |
+
}
|
app/code/community/Plumslice/Api/Model/Catalog/Product/Api.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// Define a Class
|
3 |
+
class Plumslice_Api_Model_Catalog_Product_Api extends Mage_Catalog_Model_Product_Api
|
4 |
+
{
|
5 |
+
public function create($type, $set, $sku, $productData, $store = null)
|
6 |
+
{
|
7 |
+
// It will allow attribute set name instead id
|
8 |
+
if (is_string($set) && !is_numeric($set)) {
|
9 |
+
$set = Mage::helper('plumslice_api')->getAttributeSetIdByName($set);
|
10 |
+
}
|
11 |
+
|
12 |
+
return parent::create($type, $set, $sku, $productData, $store);
|
13 |
+
}
|
14 |
+
|
15 |
+
protected function _prepareDataForSave($product, $productData)
|
16 |
+
{
|
17 |
+
/* Define @var $product Mage_Catalog_Model_Product */
|
18 |
+
|
19 |
+
if (isset($productData['categories'])) {
|
20 |
+
$categoryIds = Mage::helper('plumslice_api/catalog_product')
|
21 |
+
->getCategoryIdsByNames((array) $productData['categories']);
|
22 |
+
if (!empty($categoryIds)) {
|
23 |
+
$productData['categories'] = array_unique($categoryIds);
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
if (isset($productData['website_ids'])) {
|
28 |
+
$websiteIds = $productData['website_ids'];
|
29 |
+
foreach ($websiteIds as $i => $websiteId) {
|
30 |
+
if (!is_numeric($websiteId)) {
|
31 |
+
$website = Mage::app()->getWebsite($websiteId);
|
32 |
+
if ($website->getId()) {
|
33 |
+
$websiteIds[$i] = $website->getId();
|
34 |
+
}
|
35 |
+
}
|
36 |
+
}
|
37 |
+
$product->setWebsiteIds($websiteIds);
|
38 |
+
unset($productData['website_ids']);
|
39 |
+
}
|
40 |
+
|
41 |
+
foreach ($productData as $code => $value) {
|
42 |
+
$productData[$code] = Mage::helper('plumslice_api/catalog_product')
|
43 |
+
->getOptionKeyByLabel($code, $value);
|
44 |
+
}
|
45 |
+
|
46 |
+
parent::_prepareDataForSave($product, $productData);
|
47 |
+
|
48 |
+
if (isset($productData['associated_skus'])) {
|
49 |
+
$simpleSkus = $productData['associated_skus'];
|
50 |
+
$priceChanges = isset($productData['price_changes']) ? $productData['price_changes'] : array();
|
51 |
+
$configurableAttributes = isset($productData['configurable_attributes']) ? $productData['configurable_attributes'] : array();
|
52 |
+
Mage::helper('plumslice_api/catalog_product')->associateProducts($product, $simpleSkus, $priceChanges, $configurableAttributes);
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
app/code/community/Plumslice/Api/Model/Catalog/Product/Api/V2.php
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
//Define a Class
|
3 |
+
class Plumslice_Api_Model_Catalog_Product_Api_V2 extends Mage_Catalog_Model_Product_Api_V2
|
4 |
+
{
|
5 |
+
public function create($type, $set, $sku, $productData, $store = null)
|
6 |
+
{
|
7 |
+
// It will allow attribute set name instead of id
|
8 |
+
if (is_string($set) && !is_numeric($set)) {
|
9 |
+
$set = Mage::helper('plumslice_api')->getAttributeSetIdByName($set);
|
10 |
+
}
|
11 |
+
|
12 |
+
return parent::create($type, $set, $sku, $productData, $store);
|
13 |
+
}
|
14 |
+
|
15 |
+
protected function _prepareDataForSave($product, $productData)
|
16 |
+
{
|
17 |
+
/* Define @var $product Mage_Catalog_Model_Product */
|
18 |
+
|
19 |
+
if (property_exists($productData, 'categories')) {
|
20 |
+
$categoryIds = Mage::helper('plumslice_api/catalog_product')
|
21 |
+
->getCategoryIdsByNames((array) $productData->categories);
|
22 |
+
if (!empty($categoryIds)) {
|
23 |
+
$productData->categories = array_unique($categoryIds);
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
if (property_exists($productData, 'additional_attributes')) {
|
28 |
+
$singleDataExists = property_exists((object) $productData->additional_attributes, 'single_data');
|
29 |
+
$multiDataExists = property_exists((object) $productData->additional_attributes, 'multi_data');
|
30 |
+
if ($singleDataExists || $multiDataExists) {
|
31 |
+
if ($singleDataExists) {
|
32 |
+
foreach ($productData->additional_attributes->single_data as $_attribute) {
|
33 |
+
$_attrCode = $_attribute->key;
|
34 |
+
$productData->$_attrCode = Mage::helper('plumslice_api/catalog_product')
|
35 |
+
->getOptionKeyByLabel($_attrCode, $_attribute->value);
|
36 |
+
}
|
37 |
+
}
|
38 |
+
if ($multiDataExists) {
|
39 |
+
foreach ($productData->additional_attributes->multi_data as $_attribute) {
|
40 |
+
$_attrCode = $_attribute->key;
|
41 |
+
$productData->$_attrCode = Mage::helper('plumslice_api/catalog_product')
|
42 |
+
->getOptionKeyByLabel($_attrCode, $_attribute->value);
|
43 |
+
}
|
44 |
+
}
|
45 |
+
} else {
|
46 |
+
foreach ($productData->additional_attributes as $_attrCode => $_value) {
|
47 |
+
$productData->$_attrCode = Mage::helper('plumslice_api/catalog_product')
|
48 |
+
->getOptionKeyByLabel($_attrCode, $_value);
|
49 |
+
}
|
50 |
+
}
|
51 |
+
unset($productData->additional_attributes);
|
52 |
+
}
|
53 |
+
|
54 |
+
if (property_exists($productData, 'website_ids')) {
|
55 |
+
$websiteIds = (array) $productData->website_ids;
|
56 |
+
foreach ($websiteIds as $i => $websiteId) {
|
57 |
+
if (!is_numeric($websiteId)) {
|
58 |
+
$website = Mage::app()->getWebsite($websiteId);
|
59 |
+
if ($website->getId()) {
|
60 |
+
$websiteIds[$i] = $website->getId();
|
61 |
+
}
|
62 |
+
}
|
63 |
+
}
|
64 |
+
$product->setWebsiteIds($websiteIds);
|
65 |
+
unset($productData->website_ids);
|
66 |
+
}
|
67 |
+
|
68 |
+
parent::_prepareDataForSave($product, $productData);
|
69 |
+
|
70 |
+
if (property_exists($productData, 'associated_skus')) {
|
71 |
+
$simpleSkus = (array) $productData->associated_skus;
|
72 |
+
$priceChanges = array();
|
73 |
+
if (property_exists($productData, 'price_changes')) {
|
74 |
+
if (key($productData->price_changes) === 0) {
|
75 |
+
$priceChanges = $productData->price_changes[0];
|
76 |
+
} else {
|
77 |
+
$priceChanges = $productData->price_changes;
|
78 |
+
}
|
79 |
+
}
|
80 |
+
$configurableAttributes = array();
|
81 |
+
if (property_exists($productData, 'configurable_attributes')) {
|
82 |
+
$configurableAttributes = $productData->configurable_attributes;
|
83 |
+
}
|
84 |
+
Mage::helper('plumslice_api/catalog_product')->associateProducts($product, $simpleSkus, $priceChanges, $configurableAttributes);
|
85 |
+
}
|
86 |
+
}
|
87 |
+
}
|
app/code/community/Plumslice/Api/etc/adminhtml.xml
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<acl>
|
4 |
+
<resources>
|
5 |
+
<admin>
|
6 |
+
<children>
|
7 |
+
<system>
|
8 |
+
<children>
|
9 |
+
<config>
|
10 |
+
<children>
|
11 |
+
<plumslice_api>
|
12 |
+
<title>Plumslice API</title>
|
13 |
+
</plumslice_api>
|
14 |
+
</children>
|
15 |
+
</config>
|
16 |
+
</children>
|
17 |
+
</system>
|
18 |
+
</children>
|
19 |
+
</admin>
|
20 |
+
</resources>
|
21 |
+
</acl>
|
22 |
+
</config>
|
app/code/community/Plumslice/Api/etc/config.xml
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Plumslice_Api>
|
5 |
+
<version>1.0.0</version>
|
6 |
+
</Plumslice_Api>
|
7 |
+
</modules>
|
8 |
+
<global>
|
9 |
+
<helpers>
|
10 |
+
<plumslice_api>
|
11 |
+
<class>Plumslice_Api_Helper</class>
|
12 |
+
</plumslice_api>
|
13 |
+
</helpers>
|
14 |
+
<models>
|
15 |
+
<catalog>
|
16 |
+
<rewrite>
|
17 |
+
<product_api>Plumslice_Api_Model_Catalog_Product_Api</product_api>
|
18 |
+
<product_api_v2>Plumslice_Api_Model_Catalog_Product_Api_V2</product_api_v2>
|
19 |
+
</rewrite>
|
20 |
+
</catalog>
|
21 |
+
</models>
|
22 |
+
<blocks>
|
23 |
+
<plumslice_api>
|
24 |
+
<class>Plumslice_Api_Block</class>
|
25 |
+
</plumslice_api>
|
26 |
+
</blocks>
|
27 |
+
</global>
|
28 |
+
</config>
|
app/code/community/Plumslice/Api/etc/system.xml
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<tabs>
|
4 |
+
<plumslice translate="label">
|
5 |
+
<label><![CDATA[<div><img src="https://plumslice.com/images/mrd/logo-PlumSlice-Cloud-Based-Product-Management-Suite-for-eCommerce.png" alt="PlumSlice Labs" title="PlumSlice Labs" width="108" height="23" style="display:block;" /></div>]]></label>
|
6 |
+
<sort_order>1000</sort_order>
|
7 |
+
</plumslice>
|
8 |
+
</tabs>
|
9 |
+
<sections>
|
10 |
+
<plumslice_api translate="label" module="plumslice_api">
|
11 |
+
<label>Plumslice API</label>
|
12 |
+
<tab>plumslice</tab>
|
13 |
+
<sort_order>101</sort_order>
|
14 |
+
<show_in_store>1</show_in_store>
|
15 |
+
<show_in_website>1</show_in_website>
|
16 |
+
<show_in_default>1</show_in_default>
|
17 |
+
|
18 |
+
|
19 |
+
<groups>
|
20 |
+
<hint>
|
21 |
+
<frontend_model>plumslice_api/adminhtml_system_config_fieldset_hint</frontend_model>
|
22 |
+
<sort_order>0</sort_order>
|
23 |
+
<show_in_website>1</show_in_website>
|
24 |
+
<show_in_default>1</show_in_default>
|
25 |
+
<show_in_store>1</show_in_store>
|
26 |
+
</hint>
|
27 |
+
</groups>
|
28 |
+
</plumslice_api>
|
29 |
+
</sections>
|
30 |
+
</config>
|
app/code/community/Plumslice/Api/etc/wsdl.xml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<definitions xmlns:typens="urn:{{var wsdl.name}}" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
3 |
+
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
4 |
+
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
5 |
+
xmlns="http://schemas.xmlsoap.org/wsdl/"
|
6 |
+
name="{{var wsdl.name}}" targetNamespace="urn:{{var wsdl.name}}">
|
7 |
+
<types>
|
8 |
+
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento">
|
9 |
+
<complexType name="catalogProductCreateEntity">
|
10 |
+
<all>
|
11 |
+
<element name="configurable_attributes" type="typens:ArrayOfString" minOccurs="0"/>
|
12 |
+
<element name="price_changes" type="typens:associativeArray" minOccurs="0" />
|
13 |
+
<element name="associated_skus" type="typens:ArrayOfString" minOccurs="0"/>
|
14 |
+
</all>
|
15 |
+
</complexType>
|
16 |
+
</schema>
|
17 |
+
</types>
|
18 |
+
</definitions>
|
app/code/community/Plumslice/Api/etc/wsi.xml
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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="complexMultiFilter">
|
12 |
+
<xsd:sequence>
|
13 |
+
<xsd:element name="key" type="xsd:string" />
|
14 |
+
<xsd:element name="value" type="typens:associativeArray" />
|
15 |
+
</xsd:sequence>
|
16 |
+
</xsd:complexType>
|
17 |
+
<xsd:complexType name="complexMultiArray">
|
18 |
+
<xsd:sequence>
|
19 |
+
<xsd:element minOccurs="0" maxOccurs="unbounded" name="complexObjectArray" type="typens:complexMultiFilter" />
|
20 |
+
</xsd:sequence>
|
21 |
+
</xsd:complexType>
|
22 |
+
<xsd:complexType name="catalogProductCreateEntity">
|
23 |
+
<xsd:sequence>
|
24 |
+
<xsd:element name="configurable_attributes" type="typens:ArrayOfString" minOccurs="0" />
|
25 |
+
<xsd:element name="price_changes" type="typens:complexMultiArray" minOccurs="0" />
|
26 |
+
<xsd:element name="associated_skus" type="typens:ArrayOfString" minOccurs="0" />
|
27 |
+
</xsd:sequence>
|
28 |
+
</xsd:complexType>
|
29 |
+
</xsd:schema>
|
30 |
+
</wsdl:types>
|
31 |
+
</wsdl:definitions>
|
app/design/adminhtml/base/default/template/plumslice/api/system/config/fieldset/hint.phtml
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Define @var $this Plumslice_Api_Block_Adminhtml_System_Config_Fieldset_Hint
|
4 |
+
*
|
5 |
+
*/
|
6 |
+
?>
|
7 |
+
<div class="box">
|
8 |
+
<div style="padding-left:55px;min-height:42px;">
|
9 |
+
<h4><?php echo $this->helper('plumslice_api')->__('PlumSliceMagento extension extends SOAP v1.0 API for some of missing features required for Catalog Synching and searching functionality.'); ?></h4>
|
10 |
+
<p style="margin-bottom:0;"><?php echo $this->helper('plumslice_api')->__('Full overview available'); ?> <a href="<?php echo $this->escapeHtml($this->helper('plumslice_api')->__('http://www.plumslice.com/')); ?>" target="_blank"><?php echo $this->helper('plumslice_api')->__('here'); ?></a>.</p>
|
11 |
+
</div>
|
12 |
+
</div>
|
app/etc/modules/Plumslice_Api.xml
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Plumslice_Api>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>community</codePool>
|
7 |
+
</Plumslice_Api>
|
8 |
+
</modules>
|
9 |
+
</config>
|
package.xml
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>Plumslice_Api</name>
|
4 |
+
<version>1.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/OSL-3.0">OSL-3.0</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>PlumSlice PIM API Magento extension provides seamless and automated Catalog( Products, Digital Assets, Hierarchies, and Attributes) management using the Plumslice PIM application within the PlumSlice Collaboration Suite. The PlumSlice PIM out-of-box auto-synching process enables customers to manage enhanced and comprehensive product data in PIM which then automatically informs your Magento e-commerce site with the information needed to optimize your customer experience.</summary>
|
10 |
+
<description>PlumSlice Labs(https://www.plumslice.com) makes optimizing the digital commerce ecosystem possible through enhanced product data management including: product research and conceptualization, product development and selection, vendor collaboration and product information and digital asset management - by uniting all the players in product data management including multiple internal stakeholders and external partners as a single highly productive team. All PlumSlice SAAS applications leverage best-in-class automation, workflow management and collaboration techniques as well as purpose-designed internal architecture for added economies and value.
|
11 |
+

|
12 |
+
PlumSlice PIM(product information management) is an industry leading enterprise level fully configurable and workflow-based SAAS application which enables the systemic managementof all product information from one central location. Automation, collaboration and workflow management combine to streamline time to market for new products, reduce costly product data errors, truncate replatforming timelines and drive an exponential improvement in the ability to deliver a truly relevant customer experience across multiple channels with limited resources. PlumSlice PIM was designed for touchscreens and includes desktop, iPad and mobile applications. Work can be done anywhere, at any time, on any device.
|
13 |
+
PlumSlice PIM API Magento extension provides seamless and automated Catalog ( Products, Digital Assets, Hierarchies, and Attributes) management using the Plumslice PIM application within the PlumSlice Colllaboration Suite. The PlumSlice PIM out-of-box auto-synching process enables customers to manage enhanced and comprehensive product data in PIM which then automatically informs your Magento e-commerce site with the information needed to optimize your customer experience.
|
14 |
+

|
15 |
+
PlumSliceMagento extension extends SOAP v1.0 API for some of missing features required for Catalog Synching and searching functionality.</description>
|
16 |
+
<notes>PlumSliceMagento extension extends SOAP v1.0 API for some of missing features required for Catalog Synching and searching functionality.</notes>
|
17 |
+
<authors><author><name>PlumSlice Labs</name><user>bhargav_shah</user><email>bshah@plumslice.com</email></author></authors>
|
18 |
+
<date>2015-12-28</date>
|
19 |
+
<time>13:12:11</time>
|
20 |
+
<contents><target name="magecommunity"><dir name="Plumslice"><dir name="Api"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="3f2b55222c8e52e09133c5b11aeea84b"/></dir></dir></dir></dir></dir><dir name="Helper"><dir name="Catalog"><file name="Product.php" hash="0b8d121b67498c5038d699d7f4eec095"/></dir><file name="Data.php" hash="a53d2f33ffdc933811cdbc406e449828"/></dir><dir name="Model"><dir name="Catalog"><dir name="Product"><dir name="Api"><file name="V2.php" hash="61b267001dacdbd9c13d0343e9d9895b"/></dir><file name="Api.php" hash="65525a5f926a410d05ec62b3931152f3"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="e022183be1071b3f56232a4f4cf07fdc"/><file name="config.xml" hash="8fff43e67008ab42b0ded71f9ff540b0"/><file name="system.xml" hash="f684a3bc400095b94b679db783d0919e"/><file name="wsdl.xml" hash="e91ccf6cf9102265ebfe0eb0c1b4c35a"/><file name="wsi.xml" hash="b2ba402ffe6658c9ee6f89cceea07299"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="template"><dir name="plumslice"><dir name="api"><dir name="system"><dir name="config"><dir name="fieldset"><file name="hint.phtml" hash="54f6fead1f0d67a1a05eb6c71e3bd26c"/></dir></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Plumslice_Api.xml" hash="378ef041113f0772bd7151578455173a"/></dir></target></contents>
|
21 |
+
<compatible/>
|
22 |
+
<dependencies><required><php><min>5.4.2</min><max>5.5.5</max></php></required></dependencies>
|
23 |
+
</package>
|