From 5bbf6cfc511ff8fd02f7c0c8cd89bf92d83d8b31 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 5 Mar 2020 14:43:35 +0100 Subject: [PATCH] Add CCourseDescription as a resource, add resource templates Show grid as divs instead of the table view, add option to set specific templates for a resource. --- .../Component/Utils/ResourceSettings.php | 32 +--- .../Component/Utils/ResourceTemplate.php | 166 ++++++++++++++++++ .../Controller/CourseHomeController.php | 8 +- .../Controller/ResourceController.php | 54 +++--- src/CoreBundle/Entity/Course.php | 4 +- .../Repository/ResourceRepository.php | 20 ++- .../Entity/CCourseDescription.php | 4 +- .../CCourseDescriptionRepository.php | 22 ++- .../Repository/CLinkCategoryRepository.php | 6 +- .../Repository/CLinkRepository.php | 6 +- .../Repository/CShortcutRepository.php | 6 +- .../course_description/grid_theme.html.twig | 144 +++++++++++++++ .../course_description/index.html.twig | 11 ++ .../view_resource.html.twig | 25 +++ .../Resources/views/Resource/edit.html.twig | 1 - .../Resources/views/Resource/grid.html.twig | 2 +- .../views/Resource/grid_theme.html.twig | 2 +- .../Resources/views/Resource/index.html.twig | 39 +--- .../views/Resource/toolbar.html.twig | 38 ++++ 19 files changed, 463 insertions(+), 127 deletions(-) create mode 100644 src/CoreBundle/Component/Utils/ResourceTemplate.php create mode 100644 src/ThemeBundle/Resources/views/Resource/course_description/grid_theme.html.twig create mode 100644 src/ThemeBundle/Resources/views/Resource/course_description/index.html.twig create mode 100644 src/ThemeBundle/Resources/views/Resource/course_description/view_resource.html.twig create mode 100644 src/ThemeBundle/Resources/views/Resource/toolbar.html.twig diff --git a/src/CoreBundle/Component/Utils/ResourceSettings.php b/src/CoreBundle/Component/Utils/ResourceSettings.php index 729b1ceefc..0bd544e23a 100644 --- a/src/CoreBundle/Component/Utils/ResourceSettings.php +++ b/src/CoreBundle/Component/Utils/ResourceSettings.php @@ -16,14 +16,16 @@ class ResourceSettings public $allowResourceEdit; public $allowDownloadAll; public $allowDiskSpace; + // Shows an extra ckeditor input to save the HTML content into a ResourceFile. public $allowToSaveEditorToResourceFile; + public $templates; public function __construct() { - $this->allowNodeCreation = true; - $this->allowResourceCreation = true; - $this->allowResourceUpload = true; - $this->allowResourceEdit = true; + $this->allowNodeCreation = false; + $this->allowResourceCreation = false; + $this->allowResourceUpload = false; + $this->allowResourceEdit = false; $this->allowDownloadAll = false; $this->allowDiskSpace = false; $this->allowToSaveEditorToResourceFile = false; @@ -89,45 +91,27 @@ class ResourceSettings return $this; } - /** - * @return bool - */ public function isAllowDiskSpace(): bool { return $this->allowDiskSpace; } - /** - * @param bool $allowDiskSpace - * - * @return ResourceSettings - */ - public function setAllowDiskSpace(bool $allowDiskSpace): ResourceSettings + public function setAllowDiskSpace(bool $allowDiskSpace): self { $this->allowDiskSpace = $allowDiskSpace; return $this; } - /** - * @return bool - */ public function isAllowToSaveEditorToResourceFile(): bool { return $this->allowToSaveEditorToResourceFile; } - /** - * @param bool $allowToSaveEditorToResourceFile - * - * @return ResourceSettings - */ - public function setAllowToSaveEditorToResourceFile(bool $allowToSaveEditorToResourceFile): ResourceSettings + public function setAllowToSaveEditorToResourceFile(bool $allowToSaveEditorToResourceFile): self { $this->allowToSaveEditorToResourceFile = $allowToSaveEditorToResourceFile; return $this; } - - } diff --git a/src/CoreBundle/Component/Utils/ResourceTemplate.php b/src/CoreBundle/Component/Utils/ResourceTemplate.php new file mode 100644 index 0000000000..ddc30d0424 --- /dev/null +++ b/src/CoreBundle/Component/Utils/ResourceTemplate.php @@ -0,0 +1,166 @@ +index = '@ChamiloTheme/Resource/index.html.twig'; + $this->list = '@ChamiloTheme/Resource/index.html.twig'; + $this->edit = '@ChamiloTheme/Resource/edit.html.twig'; + // New resource + $this->new = '@ChamiloTheme/Resource/new.html.twig'; + // New resource node (new folder) + $this->newFolder = '@ChamiloTheme/Resource/new_folder.html.twig'; + $this->viewResource = '@ChamiloTheme/Resource/view_resource.html.twig'; + $this->diskSpace = '@ChamiloTheme/Resource/disk_space.html.twig'; + $this->info = '@ChamiloTheme/Resource/info.html.twig'; + $this->preview = '@ChamiloTheme/Resource/preview.html.twig'; + $this->upload = '@ChamiloTheme/Resource/upload.html.twig'; + } + + public function getFromAction(string $action) + { + $action = str_replace('Action', '', $action); + + if (property_exists($this, $action)) { + return $this->$action; + } + + throw new \InvalidArgumentException("No template found for action: $action"); + } + + /** + * @param string $index + * + * @return ResourceTemplate + */ + public function setIndex(string $index): ResourceTemplate + { + $this->index = $index; + + return $this; + } + + /** + * @param string $list + * + * @return ResourceTemplate + */ + public function setList(string $list): ResourceTemplate + { + $this->list = $list; + + return $this; + } + + /** + * @param string $edit + * + * @return ResourceTemplate + */ + public function setEdit(string $edit): ResourceTemplate + { + $this->edit = $edit; + + return $this; + } + + /** + * @param string $viewResource + * + * @return ResourceTemplate + */ + public function setViewResource(string $viewResource): ResourceTemplate + { + $this->viewResource = $viewResource; + + return $this; + } + + /** + * @param string $new + * + * @return ResourceTemplate + */ + public function setNew(string $new): ResourceTemplate + { + $this->new = $new; + + return $this; + } + + /** + * @param string $newFolder + * + * @return ResourceTemplate + */ + public function setNewFolder(string $newFolder): ResourceTemplate + { + $this->newFolder = $newFolder; + + return $this; + } + + /** + * @param string $diskSpace + * + * @return ResourceTemplate + */ + public function setDiskSpace(string $diskSpace): ResourceTemplate + { + $this->diskSpace = $diskSpace; + + return $this; + } + + /** + * @param string $info + * + * @return ResourceTemplate + */ + public function setInfo(string $info): ResourceTemplate + { + $this->info = $info; + + return $this; + } + + /** + * @param string $preview + * + * @return ResourceTemplate + */ + public function setPreview(string $preview): ResourceTemplate + { + $this->preview = $preview; + + return $this; + } + + /** + * @param string $upload + * + * @return ResourceTemplate + */ + public function setUpload(string $upload): ResourceTemplate + { + $this->upload = $upload; + + return $this; + } +} diff --git a/src/CoreBundle/Controller/CourseHomeController.php b/src/CoreBundle/Controller/CourseHomeController.php index 7b8aff8c8e..0414e2b488 100644 --- a/src/CoreBundle/Controller/CourseHomeController.php +++ b/src/CoreBundle/Controller/CourseHomeController.php @@ -70,10 +70,6 @@ class CourseHomeController extends ToolBaseController } } - // Deleting group session - $session->remove('toolgroup'); - $session->remove('_gid'); - $isSpecialCourse = CourseManager::isSpecialCourse($courseId); if ($isSpecialCourse) { @@ -85,7 +81,7 @@ class CourseHomeController extends ToolBaseController } $action = !empty($_GET['action']) ? Security::remove_XSS($_GET['action']) : ''; - if ('subscribe' == $action) { + if ('subscribe' === $action) { if (Security::check_token('get')) { Security::clear_token(); $result = CourseManager::autoSubscribeToCourse($courseCode); @@ -186,9 +182,11 @@ class CourseHomeController extends ToolBaseController } // Deleting the objects + $session->remove('toolgroup'); $session->remove('_gid'); $session->remove('oLP'); $session->remove('lpobject'); + api_remove_in_gradebook(); \Exercise::cleanSessionVariables(); \DocumentManager::removeGeneratedAudioTempFile(); diff --git a/src/CoreBundle/Controller/ResourceController.php b/src/CoreBundle/Controller/ResourceController.php index 234c451ef9..449819ca6e 100644 --- a/src/CoreBundle/Controller/ResourceController.php +++ b/src/CoreBundle/Controller/ResourceController.php @@ -52,6 +52,7 @@ use ZipStream\ZipStream; class ResourceController extends AbstractResourceController implements CourseControllerInterface { use CourseControllerTrait; + private $fileContentName = 'file_content'; /** @@ -84,7 +85,7 @@ class ResourceController extends AbstractResourceController implements CourseCon $id = $parentResourceNode->getId(); return $grid->getGridResponse( - '@ChamiloTheme/Resource/index.html.twig', + $repository->getTemplates()->getFromAction(__FUNCTION__), [ 'tool' => $tool, 'type' => $type, @@ -115,7 +116,7 @@ class ResourceController extends AbstractResourceController implements CourseCon $parentResourceNode = $this->getParentResourceNode($request); return $grid->getGridResponse( - '@ChamiloTheme/Resource/index.html.twig', + $repository->getTemplates()->getFromAction(__FUNCTION__), [ 'parent_id' => $resourceNodeId, 'tool' => $tool, @@ -172,6 +173,7 @@ class ResourceController extends AbstractResourceController implements CourseCon /** @var Column $titleColumn */ $titleColumn = $repository->getTitleColumn($grid); + $titleColumn->setSafe(false); // allows links in the title // Title link. @@ -492,7 +494,9 @@ class ResourceController extends AbstractResourceController implements CourseCon $data[] = $size; $sessions = $course->getSessions(); - foreach ($sessions as $session) { + foreach ($sessions as $sessionRelCourse) { + $session = $sessionRelCourse->getSession(); + $labels[] = $course->getTitle().' - '.$session->getName(); $size = $repository->getResourceNodeRepository()->getSize( $resourceNode, @@ -521,7 +525,7 @@ class ResourceController extends AbstractResourceController implements CourseCon $data[] = $totalSize - $used; return $this->render( - '@ChamiloTheme/Resource/disk_space.html.twig', + $repository->getTemplates()->getFromAction(__FUNCTION__), [ 'resourceNode' => $resourceNode, 'labels' => $labels, @@ -607,7 +611,7 @@ class ResourceController extends AbstractResourceController implements CourseCon } return $this->render( - '@ChamiloTheme/Resource/edit.html.twig', + $repository->getTemplates()->getFromAction(__FUNCTION__), [ 'form' => $form->createView(), 'parent' => $resourceNodeParentId, @@ -650,7 +654,7 @@ class ResourceController extends AbstractResourceController implements CourseCon 'type' => $type, ]; - return $this->render('@ChamiloTheme/Resource/info.html.twig', $params); + return $this->render($repository->getTemplates()->getFromAction(__FUNCTION__), $params); } /** @@ -686,7 +690,7 @@ class ResourceController extends AbstractResourceController implements CourseCon 'type' => $type, ]; - return $this->render('@ChamiloTheme/Resource/preview.html.twig', $params); + return $this->render($repository->getTemplates()->getFromAction(__FUNCTION__), $params); } /** @@ -857,8 +861,10 @@ class ResourceController extends AbstractResourceController implements CourseCon /** @var AbstractResource $resource */ $resource = $repository->getResourceFromResourceNode($id); + $tool = $request->get('tool'); $type = $request->get('type'); + $this->setBreadCrumb($request); $params = [ 'resource' => $resource, @@ -866,8 +872,7 @@ class ResourceController extends AbstractResourceController implements CourseCon 'type' => $type, ]; - return $this->render('@ChamiloTheme/Resource/view_resource.html.twig', $params); - + return $this->render($repository->getTemplates()->getFromAction(__FUNCTION__), $params); //return $this->showFile($request, $resourceNode, $mode, $filter); } @@ -979,15 +984,14 @@ class ResourceController extends AbstractResourceController implements CourseCon $routeParams['type'] = $type; $routeParams['id'] = $id; - return $this->render('@ChamiloTheme/Resource/upload.html.twig', $routeParams); + return $this->render($repository->getTemplates()->getFromAction(__FUNCTION__), $routeParams); } - public function setBreadCrumb(Request $request) + private function setBreadCrumb(Request $request) { $tool = $request->get('tool'); $type = $request->get('type'); $resourceNodeId = $request->get('id'); - $routeParams = $this->getResourceParams($request); if (!empty($resourceNodeId)) { @@ -1004,8 +1008,9 @@ class ResourceController extends AbstractResourceController implements CourseCon ); $repo = $this->getRepositoryFromRequest($request); + $settings = $repo->getResourceSettings(); - /** @var ResourceInterface $parent */ + /** @var AbstractResource $originalResource */ $originalResource = $repo->findOneBy(['resourceNode' => $resourceNodeId]); if (null === $originalResource) { return; @@ -1027,7 +1032,7 @@ class ResourceController extends AbstractResourceController implements CourseCon } $parentList = array_reverse($parentList); - /** @var ResourceInterface $item */ + /** @var AbstractResource $item */ foreach ($parentList as $item) { $params = $routeParams; $params['id'] = $item->getResourceNode()->getId(); @@ -1041,13 +1046,16 @@ class ResourceController extends AbstractResourceController implements CourseCon $params = $routeParams; $params['id'] = $originalParent->getId(); - - $breadcrumb->addChild( - $originalResource->getResourceName(), - [ - 'uri' => $this->generateUrl('chamilo_core_resource_list', $params), - ] - ); + if (false === $settings->isAllowNodeCreation() || $originalResource->getResourceNode()->hasResourceFile()) { + $breadcrumb->addChild($originalResource->getResourceName()); + } else { + $breadcrumb->addChild( + $originalResource->getResourceName(), + [ + 'uri' => $this->generateUrl('chamilo_core_resource_list', $params), + ] + ); + } } } @@ -1269,11 +1277,11 @@ class ResourceController extends AbstractResourceController implements CourseCon switch ($fileType) { case 'folder': - $template = '@ChamiloTheme/Resource/new_folder.html.twig'; + $template = $repository->getTemplates()->getFromAction('newFolderAction'); break; case 'file': - $template = '@ChamiloTheme/Resource/new.html.twig'; + $template = $repository->getTemplates()->getFromAction('newAction'); break; } diff --git a/src/CoreBundle/Entity/Course.php b/src/CoreBundle/Entity/Course.php index b3e55fed37..7b06ff5b04 100644 --- a/src/CoreBundle/Entity/Course.php +++ b/src/CoreBundle/Entity/Course.php @@ -76,6 +76,8 @@ class Course extends AbstractResource implements ResourceInterface protected $urls; /** + * @var SessionRelCourse[] + * * @ORM\OneToMany(targetEntity="SessionRelCourse", mappedBy="course", cascade={"persist", "remove"}) */ protected $sessions; @@ -380,7 +382,7 @@ class Course extends AbstractResource implements ResourceInterface } /** - * @return Session[]|ArrayCollection + * @return SessionRelCourse[]|ArrayCollection */ public function getSessions() { diff --git a/src/CoreBundle/Repository/ResourceRepository.php b/src/CoreBundle/Repository/ResourceRepository.php index a48575abe2..cf861dfbaf 100644 --- a/src/CoreBundle/Repository/ResourceRepository.php +++ b/src/CoreBundle/Repository/ResourceRepository.php @@ -7,6 +7,7 @@ namespace Chamilo\CoreBundle\Repository; use APY\DataGridBundle\Grid\Action\RowAction; use APY\DataGridBundle\Grid\Row; use Chamilo\CoreBundle\Component\Utils\ResourceSettings; +use Chamilo\CoreBundle\Component\Utils\ResourceTemplate; use Chamilo\CoreBundle\Entity\Course; use Chamilo\CoreBundle\Entity\Resource\AbstractResource; use Chamilo\CoreBundle\Entity\Resource\ResourceFile; @@ -19,6 +20,7 @@ use Chamilo\CoreBundle\Entity\Session; use Chamilo\CoreBundle\Entity\Usergroup; use Chamilo\CoreBundle\Security\Authorization\Voter\ResourceNodeVoter; use Chamilo\CoreBundle\ToolChain; +use Chamilo\CourseBundle\Component\CourseCopy\Resources\Resource; use Chamilo\CourseBundle\Entity\CDocument; use Chamilo\CourseBundle\Entity\CGroupInfo; use Chamilo\UserBundle\Entity\User; @@ -81,6 +83,8 @@ class ResourceRepository extends BaseEntityRepository /** @var ToolChain */ protected $toolChain; + protected $settings; + protected $templates; /** * ResourceRepository constructor. @@ -100,6 +104,8 @@ class ResourceRepository extends BaseEntityRepository $this->resourceNodeRepository = $resourceNodeRepository; $this->slugify = $slugify; $this->toolChain = $toolChain; + $this->settings = new ResourceSettings(); + $this->templates = new ResourceTemplate(); } public function getAuthorizationChecker(): AuthorizationCheckerInterface @@ -114,7 +120,7 @@ class ResourceRepository extends BaseEntityRepository { $class = $this->repository->getClassName(); - return new $class; + return new $class(); } public function getRouter(): RouterInterface @@ -765,14 +771,12 @@ class ResourceRepository extends BaseEntityRepository public function getResourceSettings(): ResourceSettings { - $settings = new ResourceSettings(); - $settings - ->setAllowNodeCreation(false) - ->setAllowResourceCreation(false) - ->setAllowResourceUpload(false) - ; + return $this->settings; + } - return $settings; + public function getTemplates(): ResourceTemplate + { + return $this->templates; } /** diff --git a/src/CourseBundle/Entity/CCourseDescription.php b/src/CourseBundle/Entity/CCourseDescription.php index b36143441c..c2a3c52382 100644 --- a/src/CourseBundle/Entity/CCourseDescription.php +++ b/src/CourseBundle/Entity/CCourseDescription.php @@ -12,7 +12,7 @@ use Doctrine\ORM\Mapping as ORM; /** * CCourseDescription. * - * @GRID\Source(columns="iid, title, resourceNode.createdAt", filterable=false, groups={"resource"}) + * @GRID\Source(columns="iid, title, content", filterable=false, groups={"resource"}) * * @ORM\Table(name="c_course_description", indexes={@ORM\Index(name="session_id", columns={"session_id"})}) * @ORM\Entity @@ -88,8 +88,6 @@ class CCourseDescription extends AbstractResource implements ResourceInterface /** * CCourseDescription constructor. - * - * @param int $iid */ public function __construct() { diff --git a/src/CourseBundle/Repository/CCourseDescriptionRepository.php b/src/CourseBundle/Repository/CCourseDescriptionRepository.php index b7c03892ec..f785c15f7a 100644 --- a/src/CourseBundle/Repository/CCourseDescriptionRepository.php +++ b/src/CourseBundle/Repository/CCourseDescriptionRepository.php @@ -7,6 +7,7 @@ namespace Chamilo\CourseBundle\Repository; use APY\DataGridBundle\Grid\Column\Column; use APY\DataGridBundle\Grid\Grid; use Chamilo\CoreBundle\Component\Utils\ResourceSettings; +use Chamilo\CoreBundle\Component\Utils\ResourceTemplate; use Chamilo\CoreBundle\Entity\Course; use Chamilo\CoreBundle\Entity\Resource\ResourceNode; use Chamilo\CoreBundle\Entity\Session; @@ -25,16 +26,23 @@ final class CCourseDescriptionRepository extends ResourceRepository implements R { $settings = parent::getResourceSettings(); + $settings->setAllowResourceCreation(true); + + return $settings; + } + + public function getTemplates(): ResourceTemplate + { + $settings = parent::getTemplates(); + $settings - ->setAllowNodeCreation(false) - ->setAllowResourceCreation(true) - ->setAllowResourceUpload(false) - ->setAllowDownloadAll(false) - ; + ->setViewResource('@ChamiloTheme/Resource/course_description/view_resource.html.twig') + ->setIndex('@ChamiloTheme/Resource/course_description/index.html.twig'); return $settings; } + public function getResources(User $user, ResourceNode $parentNode, Course $course = null, Session $session = null, CGroupInfo $group = null): QueryBuilder { return $this->getResourcesByCourse($course, $session, $group, $parentNode); @@ -45,8 +53,8 @@ final class CCourseDescriptionRepository extends ResourceRepository implements R return $grid->getColumn('title'); } - public function saveUpload(UploadedFile $file) { - + public function saveUpload(UploadedFile $file) + { } public function saveResource(FormInterface $form, $course, $session, $fileType) diff --git a/src/CourseBundle/Repository/CLinkCategoryRepository.php b/src/CourseBundle/Repository/CLinkCategoryRepository.php index 504dae1e22..f12060f4d7 100644 --- a/src/CourseBundle/Repository/CLinkCategoryRepository.php +++ b/src/CourseBundle/Repository/CLinkCategoryRepository.php @@ -33,11 +33,7 @@ final class CLinkCategoryRepository extends ResourceRepository implements Resour { $settings = parent::getResourceSettings(); - $settings - ->setAllowNodeCreation(false) - ->setAllowResourceCreation(true) - ->setAllowResourceUpload(false) - ; + $settings->setAllowResourceCreation(true); return $settings; } diff --git a/src/CourseBundle/Repository/CLinkRepository.php b/src/CourseBundle/Repository/CLinkRepository.php index 2319638748..575b97e3fd 100644 --- a/src/CourseBundle/Repository/CLinkRepository.php +++ b/src/CourseBundle/Repository/CLinkRepository.php @@ -33,11 +33,7 @@ final class CLinkRepository extends ResourceRepository implements ResourceReposi { $settings = parent::getResourceSettings(); - $settings - ->setAllowNodeCreation(false) - ->setAllowResourceCreation(true) - ->setAllowResourceUpload(false) - ; + $settings->setAllowResourceCreation(true); return $settings; } diff --git a/src/CourseBundle/Repository/CShortcutRepository.php b/src/CourseBundle/Repository/CShortcutRepository.php index d5a704ec6d..09f2787819 100644 --- a/src/CourseBundle/Repository/CShortcutRepository.php +++ b/src/CourseBundle/Repository/CShortcutRepository.php @@ -73,11 +73,7 @@ final class CShortcutRepository extends ResourceRepository implements ResourceRe { $settings = parent::getResourceSettings(); - $settings - ->setAllowNodeCreation(false) - ->setAllowResourceCreation(true) - ->setAllowResourceUpload(false) - ; + $settings->setAllowResourceCreation(true); return $settings; } diff --git a/src/ThemeBundle/Resources/views/Resource/course_description/grid_theme.html.twig b/src/ThemeBundle/Resources/views/Resource/course_description/grid_theme.html.twig new file mode 100644 index 0000000000..8de057a1a4 --- /dev/null +++ b/src/ThemeBundle/Resources/views/Resource/course_description/grid_theme.html.twig @@ -0,0 +1,144 @@ +{% extends 'APYDataGridBundle::blocks.html.twig' %} + +{# This file is loaded from config/services.yaml and then used in all grids. #} + +{# See block documentation here: #} +{# https://github.com/APY/APYDataGridBundle/blob/master/Resources/doc/template/overriding_internal_blocks.md #} + + +{% block grid_column_massaction_cell %} +{# #} +{% endblock grid_column_massaction_cell %} + +{% block grid_column_content_cell %} +
+ {{ value | raw }} +
+{% endblock grid_column_content_cell %} + +{% block grid_column_title_cell %} +
+ {{ value | raw }} +
+{% endblock grid_column_title_cell %} + +{% block grid_rows %} + {% for row in grid.rows %} + {% set last_row = loop.last %} + {% spaceless %} + {% set gridColumns %} + {% for column in grid.columns %} + {% if column.visible(grid.isReadyForExport) %} + {{ grid_cell(column, row, grid)|raw }} + {% endif %} + {% endfor %} + {% endset %} +
+ {{ gridColumns }} +
+ {% endspaceless %} + {% endfor %} +{% endblock grid_rows %} + +{% block grid_actions %} +{% endblock grid_actions %} + +{# Bootstrap changes #} +{% block grid_column_actions_cell %} + {% set actions = column.getActionsToRender(row) %} +
+ {% for action in actions %} + {% if action.attributes.form_delete is defined and action.attributes.form_delete %} +
+
+ + +
+
+ {% else %} + + {% if action.attributes.icon is defined and action.attributes.icon %} + + {% else %} + {{ action.title|trans }} + {% endif %} + + {% endif %} + {% endfor %} +
+{% endblock grid_column_actions_cell %} + +{% block grid %} +
+
+
+ {% if grid.totalCount > 0 or grid.isFiltered or grid.noDataMessage is same as(false) %} +
+
+ +{# {% if grid.isTitleSectionVisible %}#} +{# {{ grid_titles(grid) }}#} +{# {% endif %}#} +{# {% if grid.isFilterSectionVisible %}#} +{# {{ grid_filters(grid) }}#} +{# {% endif %}#} + {{ grid_rows(grid) }} + +
+ + {% if withjs %} + {{ grid_scripts(grid) }} + {% endif %} +
+ {% else %} + {{ grid_no_data(grid) }} + {% endif %} +
+
+
+{% endblock grid %} + +{% block grid_search %} + +{% endblock grid_search %} + +{% block grid_column_filter_type_input %} + {% set btwOperator = constant('APY\\DataGridBundle\\Grid\\Column\\Column::OPERATOR_BTW') %} + {% set btweOperator = constant('APY\\DataGridBundle\\Grid\\Column\\Column::OPERATOR_BTWE') %} + {% set isNullOperator = constant('APY\\DataGridBundle\\Grid\\Column\\Column::OPERATOR_ISNULL') %} + {% set isNotNullOperator = constant('APY\\DataGridBundle\\Grid\\Column\\Column::OPERATOR_ISNOTNULL') %} + {% set op = column.data.operator is defined ? column.data.operator : column.defaultOperator %} + {% set from = column.data.from is defined ? column.data.from : null %} + {% set to = column.data.to is defined ? column.data.to : null %} +
+ +
+ +
+
+{% endblock grid_column_filter_type_input %} diff --git a/src/ThemeBundle/Resources/views/Resource/course_description/index.html.twig b/src/ThemeBundle/Resources/views/Resource/course_description/index.html.twig new file mode 100644 index 0000000000..a5b7278a6e --- /dev/null +++ b/src/ThemeBundle/Resources/views/Resource/course_description/index.html.twig @@ -0,0 +1,11 @@ +{% extends "@ChamiloTheme/Layout/layout_one_col.html.twig" %} + +{% block content %} + {% include '@ChamiloTheme/Resource/toolbar.html.twig' %} + + {# Use a custom grid#} + + + {{ grid(grid, '@ChamiloTheme/Resource/course_description/grid_theme.html.twig') }} + +{% endblock %} diff --git a/src/ThemeBundle/Resources/views/Resource/course_description/view_resource.html.twig b/src/ThemeBundle/Resources/views/Resource/course_description/view_resource.html.twig new file mode 100644 index 0000000000..5da0be4d1d --- /dev/null +++ b/src/ThemeBundle/Resources/views/Resource/course_description/view_resource.html.twig @@ -0,0 +1,25 @@ +{% extends "@ChamiloTheme/Layout/layout_one_col.html.twig" %} + +{% block content %} + {% autoescape false %} +

{{ resource }}

+

{{ resource.content }}

+ + {{ 'Created at' | trans }}: {{ resource.resourceNode.createdAt | date_to_time_ago }}
+ {{ 'Updated at' | trans }}: {{ resource.resourceNode.updatedAt | date_to_time_ago }}
+
+ + {% if is_granted('DELETE', resource.resourceNode) %} + + {{ 'Delete'|trans }} + + {% endif %} + {% endautoescape %} +{% endblock %} diff --git a/src/ThemeBundle/Resources/views/Resource/edit.html.twig b/src/ThemeBundle/Resources/views/Resource/edit.html.twig index b65d3321df..997dac93ef 100644 --- a/src/ThemeBundle/Resources/views/Resource/edit.html.twig +++ b/src/ThemeBundle/Resources/views/Resource/edit.html.twig @@ -3,7 +3,6 @@ {% block content %}
{{ form_start(form) }} - {{ form_errors(form) }} {# {{ form_row(form.title) }}#} diff --git a/src/ThemeBundle/Resources/views/Resource/grid.html.twig b/src/ThemeBundle/Resources/views/Resource/grid.html.twig index e8e61e9122..b6d6addc88 100644 --- a/src/ThemeBundle/Resources/views/Resource/grid.html.twig +++ b/src/ThemeBundle/Resources/views/Resource/grid.html.twig @@ -1,4 +1,4 @@ +{# Customization of the grid is located here: grid_theme.html.twig #} {{ grid_search(grid) }} - {{ grid(grid) }} diff --git a/src/ThemeBundle/Resources/views/Resource/grid_theme.html.twig b/src/ThemeBundle/Resources/views/Resource/grid_theme.html.twig index e0c88d5ee9..053a7cc53c 100644 --- a/src/ThemeBundle/Resources/views/Resource/grid_theme.html.twig +++ b/src/ThemeBundle/Resources/views/Resource/grid_theme.html.twig @@ -1,6 +1,6 @@ {% extends 'APYDataGridBundle::blocks.html.twig' %} -{# This file is loaded from config/services.yaml #} +{# This file is loaded from config/services.yaml and then used in all grids. #} {# See block documentation here: #} {# https://github.com/APY/APYDataGridBundle/blob/master/Resources/doc/template/overriding_internal_blocks.md #} diff --git a/src/ThemeBundle/Resources/views/Resource/index.html.twig b/src/ThemeBundle/Resources/views/Resource/index.html.twig index b2db4da278..9471a1e04b 100644 --- a/src/ThemeBundle/Resources/views/Resource/index.html.twig +++ b/src/ThemeBundle/Resources/views/Resource/index.html.twig @@ -1,44 +1,7 @@ {% extends "@ChamiloTheme/Layout/layout_one_col.html.twig" %} {% block content %} - {% if is_granted('CREATE', parent_resource_node) %} -
- {% if resource_settings.allowNodeCreation %} - - {{ 'New folder' | trans }} - - {% endif %} - - {% if resource_settings.allowResourceCreation %} - - {{ 'Create new ' ~ tool | trans }} - - {% endif %} - - {% if resource_settings.allowResourceUpload %} - - {{ 'Upload' | trans }} - - {% endif %} - - {% if resource_settings.allowDownloadAll %} - - {{ 'Download all' | trans }} - - {% endif %} - - {% if resource_settings.allowToSaveEditorToResourceFile %} - - {{ 'Disk Space' | trans }} - - {% endif %} -
- {% endif %} + {% include '@ChamiloTheme/Resource/toolbar.html.twig' %}