/** * Serialize a single file. * * @param AbstractFile $File * * @return array */ public function serialize(AbstractFile $file) { $fileFile = $file->getFile(); $data = ['id' => $file->getId(), 'name' => $file->getFileName(), 'path' => $this->vich->asset($file, 'file'), 'size' => $this->formatSize(is_null($fileFile) ? $file->getFileSize() : $fileFile->getSize()), 'mime' => is_null($fileFile) ? $file->getMimeType() : $fileFile->getMimeType()]; if ($file->isImage()) { $fileName = $this->vich->asset($file, 'file'); $data['thumb'] = $this->imagine->getBrowserPath($fileName, 'tgmedia_thumbnail'); } else { $data['type'] = $file->getExtension(); } return $data; }
/** * Retrieve a filtered and ordered list of files. * * @param string $type optional filter for file types * @param string $order optional sorting * @param int $page * @param int $max * * @return Paginator */ public function findSubset($type = 'all', $order = 'newest', $page = 1, $max = 18) { $qb = $this->createQueryBuilder('f')->setMaxResults($max)->setFirstResult($max * ($page - 1)); if ($type === 'images') { $qb->where($qb->expr()->in('f.mimeType', '?1')); $qb->setParameter(1, array_merge(AbstractFile::getImageMimetypes())); } elseif ($type === 'documents') { $qb->where($qb->expr()->notIn('f.mimeType', '?1')); $qb->setParameter(1, array_merge(AbstractFile::getImageMimetypes())); } $mapping = self::getOrderMapping(); if (in_array($order, array_keys($mapping))) { $qb->orderBy($mapping[$order]['field'], $mapping[$order]['direction']); } $query = $qb->getQuery(); $paginator = new Paginator($query, false); return $paginator; }