* * @package stWebApiPlugin * @subpackage libs */ class stCategoryWebApi extends autoStCategoryWebApi { public static function getLink(Category $category, StCategoryWebApi $api) { return $api->__getCategoryUrl($category); } public function AddCategory($object) { if (isset($object->_culture)) $this->__setCulture($object->_culture); stWebApi::getLogin($object->_session_hash, 'webapi_write'); $this->TestAndValidateAddCategoryFields($object); if (!$object->parent_id) { $item = new Category(); $item->setCulture(stLanguage::getHydrateCulture()); $item->makeRoot(); $item->setName($object->name); $item->save(); $item->setScope($item->getId()); $item->save(); } else { $parent = CategoryPeer::retrieveByPK($object->parent_id); if (!is_object($parent)) throw new SoapFault('2', sprintf($this->__(WEBAPI_ADD_ERROR), $this->__('niepoprawny parametr parent_id'))); $parent->setCulture(stLanguage::getHydrateCulture()); $item = new Category(); $item->setCulture(stLanguage::getHydrateCulture()); $item->setName($object->name); $item->insertAsLastChildOf($parent); $item->save(); } if ($item) { try { if (isset($object->main_page)) $item->setMainPage($object->main_page); if (isset($object->description)) $item->setDescription($object->description); if (isset($object->is_active)) $item->setIsActive($object->is_active); if (isset($object->is_hidden)) $item->setIsHidden($object->is_hidden); if (isset($object->show_children_products)) $item->setShowChildrenProducts($object->show_children_products); $item->save(); if (isset($object->image) && isset($object->image_filename)) $this->setCategoryImage($item, $object->image_filename, $object->image); if (isset($object->url)) { $item->setUrl($object->url); $item->save(); } } catch (Exception $e) { throw new SoapFault('2', $this->__(WEBAPI_ADD_ERROR)); } ProductHasCategoryPeer::cleanCache(); $object = new StdClass(); $this->getFieldsForAddCategory($object, $item); ProductHasCategoryPeer::cleanCache(); return $object; } else { throw new SoapFault('1', $this->__(WEBAPI_ADD_ERROR)); } } public function setCategoryImage($item, $filename, $image) { $tmpFile = sfConfig::get('sf_cache_dir') . '/webapi_category.tmp'; if (is_object($item->getSfAsset())) { $item->getSfAsset()->delete(); $item->setSfAsset(null); } file_put_contents($tmpFile, base64_decode($image)); $item->createAsset($item->getId() . '.' . pathinfo($filename, PATHINFO_EXTENSION), $tmpFile); $item->save(); } public function UpdateCategory($object) { if (isset($object->_culture)) $this->__setCulture($object->_culture); stWebApi::getLogin($object->_session_hash, 'webapi_write'); $this->TestAndValidateUpdateCategoryFields($object); $item = CategoryPeer::retrieveByPk($object->id); if ($item) { try { $item->setCulture(sfContext::getInstance()->getUser()->getCulture()); if (isset($object->name)) $item->setName($object->name); if (isset($object->main_page)) $item->setMainPage($object->main_page); if (isset($object->description)) $item->setDescription($object->description); if (isset($object->is_active)) $item->setIsActive($object->is_active); if (isset($object->is_hidden)) $item->setIsHidden($object->is_hidden); if (isset($object->show_children_products)) $item->setShowChildrenProducts($object->show_children_products); if (isset($object->url)) $item->setUrl($object->url); $item->save(); if (isset($object->image) && isset($object->image_filename)) $this->setCategoryImage($item, $object->image_filename, $object->image); } catch (Exception $e) { throw new SoapFault('2', sprintf($this->__(WEBAPI_UPDATE_ERROR), $e->getMessage())); } ProductHasCategoryPeer::cleanCache(); $object = new StdClass(); $object->_update = 1; return $object; } else { throw new SoapFault('1', $this->__(WEBAPI_INCORRECT_ID)); } } public function getFieldsForGetCategory($object, $item) { parent::getFieldsForGetCategory($object, $item); $this->addCustomFields($object, $item); } public function getFieldsForGetCategoryList($object, $item) { parent::getFieldsForGetCategoryList($object, $item); $this->addCustomFields($object, $item); } public function getFieldsForGetCategoryChildrens($object, $item) { parent::getFieldsForGetCategoryChildrens($object, $item); $this->addCustomFields($object, $item); } public function getGetCategoryChildrensCriteria($object) { $c = parent::getGetCategoryChildrensCriteria($object); if ($object->parent_id != 0) { $c->add(CategoryPeer::PARENT_ID, $object->parent_id); } else { $c->add(CategoryPeer::PARENT_ID, null, Criteria::ISNULL); } return $c; } public function getGetProductCategoryListCriteria($object) { $c = parent::getGetProductCategoryListCriteria($object); $c->add(ProductHasCategoryPeer::PRODUCT_ID, $object->id); return $c; } public function getGetCategoryListCriteria($object) { $c = parent::getGetCategoryListCriteria($object); if (isset($object->parent_id)) { $c->add(CategoryPeer::PARENT_ID, $object->parent_id); } if (isset($object->product_id)) { $c->addJoin(ProductHasCategoryPeer::CATEGORY_ID, CategoryPeer::ID); $c->add(ProductHasCategoryPeer::PRODUCT_ID, $object->product_id); } return $c; } public function getProductCategoryList($object) { if (isset($object->_culture)) { $this->__setCulture($object->_culture); } stWebApi::getLogin($object->_session_hash, 'webapi_read'); $this->TestAndValidategetProductCategoryListFields($object); $c = $this->getGetProductCategoryListCriteria($object); if (!isset($object->_limit)) $object->_limit = 20; // ustawiamy kryteria wyboru $c->setLimit($object->_limit); $c->setOffset($object->_offset); $items = ProductHasCategoryPeer::doSelect($c); if ($items) { // Zwracanie wyniku, dla wszystkich pol z tablicy 'out' $items_array = array(); foreach ($items as $item) { $object = new StdClass(); $this->getFieldsForgetProductCategoryList($object, $item); $items_array[] = $object; } return $items_array; } else { return array(); } } protected function addCustomFields($object, Category $category) { if (is_object($category->getSfAsset())) { $object->image_filename = basename($category->getSfAsset()->getPath()); $object->image = base64_encode(file_get_contents(sfConfig::get('sf_web_dir') . '/' . $category->getSfAsset()->getPath())); } } }