/**
  * {@inheritDoc}
  */
 public function setName($name)
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'setName', array($name));
     return parent::setName($name);
 }
示例#2
0
    /**
     * 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()));
        }
    }