Extend Magento Product Attribute Api

# OPTIONAL, install patch
apt-get install -y patch
 
# patch on command line
cd /var/www/
wget http://www.panticz.de/sites/default/files/api.xml_.diff -O /tmp/api.xml.diff
patch -p2 ./app/code/core/Mage/Catalog/etc/api.xml < /tmp/api.xml.diff
 
wget http://www.panticz.de/sites/default/files/Api.php_.diff -O /tmp/Api.php.diff
patch -p2 ./app/code/core/Mage/Catalog/Model/Product/Attribute/Api.php < /tmp/Api.php.diff
 
 
1. go to magento installation folder, for example /var/www/magento
 
2. add definition to app/code/core/Mage/Catalog/etc/api.xml (line 215)
<create translate="title" module="catalog">
    <title>Create new product attribute</title>
    <acl>catalog/product/attribute/create</acl>
</create>
<delete translate="title" module="catalog">
    <title>Delete product attribute</title>
    <acl>catalog/product/attribute/delete</acl>
</delete>
<addoptions translate="title" module="catalog">
    <title>Add attribute options</title>
    <acl>catalog/product/attribute/addoptions</acl>
</addoptions>
 
3. add functions to app/code/core/Mage/Catalog/Model/Product/Attribute/Api.php
   /**
     * Create new product attribute.
     *
     * @param string $attributeName
     * @param array $attributeData
     * @param string|int $store
     * @return int
     */
    public function create($attributeName, $attributeData, $store = null)
    {
	// create product attribute
        $installer = new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup('core_setup');
        $installer->addAttribute('catalog_product', $attributeName, $attributeData);
 
	// get product attribute id
        $storeId = $this->_getStoreId($store);
        $attribute = Mage::getModel('catalog/product')
            ->setStoreId($storeId)
            ->getResource()
            ->getAttribute($attributeName);
 
	return $attribute->getId();
    }
 
   /**
     * Create attribute options
     *
     * @param string $attributeId
     * @param array $attributeOptions
     * @return int
     */
    public function addoptions($attributeId, $attributeOptions)
    {
	$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
 
	for($i = 0; $i < sizeof($attributeOptions); $i++) {
		$option = array();
		$option['attribute_id'] = $attributeId;
		$option['value'][$value][0] = $attributeOptions[$i];
 
		$setup->addAttributeOption($option);
	}
 
	return true;
    }
 
   /**
     * Delete product attribute.
     *
     * @param string $attributeName
     * @param string|int $store
     * @return int
     */
    public function delete($attributeName, $store = null)
    {
        $storeId = $this->_getStoreId($store);
        $attribute = Mage::getModel('catalog/product')
            ->setStoreId($storeId)
            ->getResource()
            ->getAttribute($attributeName);
 
        if (!$attribute) {
            $this->_fault('not_exists');
        }
 
        try {
            $attribute->delete();
        } catch (Mage_Core_Exception $e) {
            $this->_fault('not_deleted', $e->getMessage());
 
            return false;
        }
 
	return true;
    }
 
<strong>Extention for MD5 sum</strong>
http://www.panticz.de/sites/default/files/magento/Api/media.md5.api.php.diff
http://www.panticz.de/sites/default/files/magento/Api/media.md5.api.xml.diff
 
# Links
http://www.magentocommerce.com/wiki/doc/webservices-api/custom-api
http://svn.magentocommerce.com/source/branches/1.4-trunk/app/code/core/Mage/Catalog/etc/api.xml
http://svn.magentocommerce.com/source/branches/1.4-trunk/app/code/core/Mage/Catalog/Model/Product/Attribute/Api.php
http://www.magentocommerce.com/wiki/doc/installing_custom_attributes_with_your_module
http://snippi.net/node?page=1
 
/var/www/magento/app/code/core/Mage/Eav/Model/Entity/Setup.php
/var/www/magento/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Setup.php
/var/www/magento/app/code/core/Mage/Eav/Model/Entity/Attribute/Abstract.php
AttachmentSize
api.xml_.diff1.14 KB
Api.php_.diff2.3 KB