/** * {@inheritDoc} */ public function setName($name) { $this->__initializer__ && $this->__initializer__->__invoke($this, 'setName', array($name)); return parent::setName($name); }
/** * The saveAlbumAction is used to save a new album and update an existing album. * The function expects the following parameters: * <code> * id => [int] May be null if a new album to be saved. * text => [string] Name of the album to be saved. * parentId => [int] Id of the parent album. 0 if the album is to be stored at the highest level. * position => [int] Position of the album within the tree. * iconCls => [string] Css class for the album tree node * thumbnailSize => [int] Flag if thumbnails should be created. * createThumbnails => [array] Array of thumbnail sizes * </code> * @return bool */ public function saveAlbumAction() { $params = $this->Request()->getParams(); //check if the album id passed. If no id passed, create a new album and album settings. if (isset($params['id']) && !empty($params['id']) && $params['id'] !== 0) { $album = Shopware()->Models()->find('Shopware\Models\Media\Album', $params['id']); $settings = $album->getSettings(); } else { $album = new Album(); $settings = new Settings(); $settings->setCreateThumbnails(0); $settings->setIcon('sprite-blue-folder'); $settings->setThumbnailSize(''); } //check if the album is loaded. if ($album === null || $settings === null) { $this->View()->assign(array('success' => false, 'message' => 'Album/Settings not found')); return false; } //validate name if (isset($params['text']) && !empty($params['text'])) { $album->setName($params['text']); } else { $this->View()->assign(array('success' => false, 'message' => 'No name passed!')); return false; } //validate parent ID if (isset($params['parentId']) && !empty($params['parentId']) && $params['parentId'] !== 0 && $params['parentId'] !== 'root') { $parentId = $params['parentId']; } else { $parentId = null; } //validate position if (isset($params['position']) && !empty($params['position'])) { if ($album->getId() !== 0) { $this->changePosition($album, $params['position'], $parentId); } $album->setPosition($params['position']); } else { //get last position + 1 if ($parentId === null) { $sql= "SELECT MAX(position) + 1 FROM s_media_album WHERE parentID IS NULL"; $position = Shopware()->Db()->fetchOne($sql); } else { $sql= "SELECT MAX(position) + 1 FROM s_media_album WHERE parentID = ?"; $position = Shopware()->Db()->fetchOne($sql, array($parentId)); } if ($position === null) { $position = 1; } $album->setPosition($position); } //Important! Parent must be set only after updating the position. $album->setParentId($parentId); //validate icon property of the album settings if (isset($params['iconCls']) && !empty($params['iconCls'])) { $settings->setIcon($params['iconCls']); } //validate create thumbnail property of the album settings if (isset($params['createThumbnails']) && !empty($params['createThumbnails'])) { $settings->setCreateThumbnails($params['createThumbnails']); } //validate thumbnail size property of the album settings if (isset($params['thumbnailSize'])) { $sizes = array(); foreach ($params['thumbnailSize'] as $size) { if (!empty($size['value']) && $size['value'] !== '') { $sizes[] = $size['value']; } } if (count($sizes) > 0) { $settings->setThumbnailSize($sizes); } else { $settings->setThumbnailSize(''); } } if ($parentId !== null && empty($params['id'])) { $builder = Shopware()->Models()->createQueryBuilder(); $builder->select(array('settings')) ->from('Shopware\Models\Media\Settings', 'settings') ->where('settings.albumId = :albumId') ->setParameter('albumId', $parentId); $settingData = $builder->getQuery()->getOneOrNullResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY); $settings->fromArray($settingData); } //try save try { Shopware()->Models()->persist($album); Shopware()->Models()->flush(); //after the album is saved, set the album id to the settings model and save the settings $settings->setAlbumId($album->getId()); $settings->setAlbum($album); Shopware()->Models()->persist($settings); Shopware()->Models()->flush(); //return the album node properties to refresh the tree. $node = $this->toTree(array($album)); $this->View()->assign(array('success' => true, 'data' => $node)); } catch (\Doctrine\ORM\ORMException $e) { $this->View()->assign(array('success' => false, 'message' => $e->getMessage())); } }