/** * {@inheritdoc} */ public function validate($value, Constraint $constraint) { foreach ($this->context->getMetadata()->properties as $propertyMetadata) { /* @var PropertyMetadata $propertyMetadata */ foreach ($propertyMetadata->getConstraints() as $constraint) { if ($constraint instanceof ContentFile) { $method = 'get' . Container::camelize($constraint->mapping) . 'MappingType'; if (!method_exists($value, $method)) { throw new \RuntimeException(sprintf('Method "%s" should be defined in class %s', $method, get_class($value))); } $accessor = PropertyAccess::createPropertyAccessor(); $propertyName = $propertyMetadata->getPropertyName(); $content = $accessor->getValue($value, $propertyName); // check also translations if ($translations = $accessor->getValue($value, 'translations')) { foreach ($translations as $translation) { if ($translation->getField() == $propertyName) { $content .= $translation->getContent(); } } } $content = trim($content); if (mb_strlen($content) == 0) { return; } $mappingType = $value->{$method}(); $files = $this->contentFileManager->findFilesByMappingType($mappingType); // extract all images from content property preg_match_all('/src=[\'\\"]*(.+?)[\'\\"]/', $content, $matches); array_shift($matches); if (count($matches[0]) > 0) { $matches = $matches[0]; foreach ($matches as $imgFile) { $imgFile = preg_replace('/\\?.*$/', '', $imgFile); $imgFile = pathinfo($imgFile, PATHINFO_BASENAME); foreach ($files as $key => $file) { /* @var \SciGroup\TinymcePluploadFileManagerBundle\Model\ContentFile $file */ if ($file->getFileName() == $imgFile) { $file->setIsSubmitted(true); unset($files[$key]); continue 2; } } // remove file $pathResolver = $this->mappingResolver->resolve($mappingType); $imgFile = $pathResolver->getDirectory(true) . '/' . $imgFile; if (file_exists($imgFile)) { unlink($imgFile); } } } foreach ($files as $file) { $this->contentFileManager->remove($file); } } } } }
public function preRemove(LifecycleEventArgs $event) { $object = $event->getObject(); if ($object instanceof ContentFile) { $pathResolver = $this->mappingResolver->resolve($object->getMappingType()); $file = $pathResolver->getDirectory(true) . '/' . $object->getFileName(); if (file_exists($file)) { unlink($file); } } elseif ($object instanceof ContentFiledInterface) { $contentFileManager = new ContentFileManager($event->getEntityManager(), 0); $filedManager = new ContentFiledManager($contentFileManager); $contentFiles = $filedManager->getContentFiles($object); foreach ($contentFiles as $contentFile) { $event->getEntityManager()->remove($contentFile); } } }