setAllowNodeFolderCreation(true) ->setAllowResourceContentCreation(true) ->setAllowResourceUploadCreation(true) ; return $settings; } public function saveUpload(UploadedFile $file) { $resource = new CDocument(); $resource ->setFiletype('file') ->setSize($file->getSize()) ->setTitle($file->getClientOriginalName()) ; return $resource; } public function saveResource(FormInterface $form, $course, $session, $fileType) { $newResource = $form->getData(); $newResource ->setCourse($course) ->setSession($session) ->setFiletype($fileType) //->setTitle($title) // already added in $form->getData() ->setReadonly(false) ; return $newResource; } /** * @return string */ public function getDocumentUrl(CDocument $document) { // There are no URL for folders. if ($document->getFiletype() === 'folder') { return ''; } $file = $document->getResourceNode()->getResourceFile(); if ($file === null) { return ''; } $params = [ 'course' => $document->getCourse()->getCode(), 'file' => ltrim($document->getPath(), '/'), 'tool' => 'document', 'type' => 'files', ]; return $this->getRouter()->generate( 'chamilo_core_resource_view', $params ); } /** * @return CDocument|null */ public function getParent(CDocument $document) { $resourceParent = $document->getResourceNode()->getParent(); if ($resourceParent !== null) { $resourceParentId = $resourceParent->getId(); $criteria = [ 'resourceNode' => $resourceParentId, ]; return $this->findOneBy($criteria); } return null; } /** * @param int $courseId * @param string $path * * @throws \Doctrine\ORM\NonUniqueResultException * * @return mixed */ public function getFolderSize($courseId, $path) { $path = str_replace('_', '\_', $path); $addedSlash = $path === '/' ? '' : '/'; $repo = $this->getRepository(); $qb = $repo->createQueryBuilder('d'); $query = $qb ->select('SUM(d.size)') ->innerJoin('d.resourceNode', 'r') ->innerJoin('r.resourceLinks', 'l') ->where('d.path LIKE :path') ->andWhere('d.path NOT LIKE :deleted') ->andWhere('d.path NOT LIKE :extra_path ') ->andWhere('l.visibility <> :visibility') ->andWhere('d.course = :course') ->setParameters([ 'path' => $path.$addedSlash.'%', 'extra_path' => $path.$addedSlash.'%/%', 'course' => $courseId, 'deleted' => '%_DELETED_%', 'visibility' => ResourceLink::VISIBILITY_DELETED, ]) ->getQuery(); return $query->getSingleScalarResult(); } /** * @param int $courseId * @param int $groupId * @param int $sessionId * * @throws \Doctrine\ORM\NonUniqueResultException * * @return mixed */ public function getTotalSpace($courseId, $groupId = null, $sessionId = null) { $repo = $this->getRepository(); $groupId = empty($groupId) ? null : $groupId; $sessionId = empty($sessionId) ? null : $sessionId; $qb = $repo->createQueryBuilder('d'); $query = $qb ->select('SUM(d.size)') ->innerJoin('d.resourceNode', 'r') ->innerJoin('r.resourceLinks', 'l') ->where('l.course = :course') ->andWhere('l.group = :group') ->andWhere('l.session = :session') ->andWhere('l.visibility <> :visibility') ->setParameters([ 'course' => $courseId, 'group' => $groupId, 'session' => $sessionId, 'visibility' => ResourceLink::VISIBILITY_DELETED, ]) ->getQuery(); return $query->getSingleScalarResult(); } /** * @param int $userId * * @return array */ public function getAllDocumentsByAuthor($userId) { $repo = $this->repository; $qb = $repo->createQueryBuilder('d'); $query = $qb ->innerJoin('d.resourceNode', 'r') ->innerJoin('r.resourceLinks', 'l') ->where('l.user = :user') ->andWhere('l.visibility <> :visibility') ->setParameters([ 'user' => $userId, 'visibility' => ResourceLink::VISIBILITY_DELETED, ]) ->getQuery(); return $query->getResult(); } public function getTitleColumn(Grid $grid): Column { return $grid->getColumn('title'); } }