123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- <?php
- namespace Gedmo\Tree\Strategy\ORM;
- use Gedmo\Tree\Strategy\AbstractMaterializedPath;
- use Gedmo\Tool\Wrapper\AbstractWrapper;
- /**
- * This strategy makes tree using materialized path strategy
- *
- * @author Gustavo Falco <comfortablynumb84@gmail.com>
- * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
- * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
- */
- class MaterializedPath extends AbstractMaterializedPath
- {
- /**
- * {@inheritdoc}
- */
- public function removeNode($om, $meta, $config, $node)
- {
- $uow = $om->getUnitOfWork();
- $wrapped = AbstractWrapper::wrap($node, $om);
- $path = addcslashes($wrapped->getPropertyValue($config['path']), '%');
- // Remove node's children
- $qb = $om->createQueryBuilder();
- $qb->select('e')
- ->from($config['useObjectClass'], 'e')
- ->where($qb->expr()->like('e.'.$config['path'], $qb->expr()->literal($path.'%')));
- if (isset($config['level'])) {
- $lvlField = $config['level'];
- $lvl = $wrapped->getPropertyValue($lvlField);
- if (!empty($lvl)) {
- $qb->andWhere($qb->expr()->gt('e.' . $lvlField, $qb->expr()->literal($lvl)));
- }
- }
- $results = $qb->getQuery()
- ->execute();
- foreach ($results as $node) {
- $uow->scheduleForDelete($node);
- }
- }
- /**
- * {@inheritdoc}
- */
- public function getChildren($om, $meta, $config, $path)
- {
- $path = addcslashes($path, '%');
- $qb = $om->createQueryBuilder($config['useObjectClass']);
- $qb->select('e')
- ->from($config['useObjectClass'], 'e')
- ->where($qb->expr()->like('e.'.$config['path'], $qb->expr()->literal($path.'%')))
- ->andWhere('e.'.$config['path'].' != :path')
- ->orderBy('e.'.$config['path'], 'asc'); // This may save some calls to updateNode
- $qb->setParameter('path', $path);
- return $qb->getQuery()
- ->execute();
- }
- }
|