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.
pull/3124/head
Julio Montoya 6 years ago
parent fe6195e69d
commit 5bbf6cfc51
  1. 32
      src/CoreBundle/Component/Utils/ResourceSettings.php
  2. 166
      src/CoreBundle/Component/Utils/ResourceTemplate.php
  3. 8
      src/CoreBundle/Controller/CourseHomeController.php
  4. 54
      src/CoreBundle/Controller/ResourceController.php
  5. 4
      src/CoreBundle/Entity/Course.php
  6. 20
      src/CoreBundle/Repository/ResourceRepository.php
  7. 4
      src/CourseBundle/Entity/CCourseDescription.php
  8. 22
      src/CourseBundle/Repository/CCourseDescriptionRepository.php
  9. 6
      src/CourseBundle/Repository/CLinkCategoryRepository.php
  10. 6
      src/CourseBundle/Repository/CLinkRepository.php
  11. 6
      src/CourseBundle/Repository/CShortcutRepository.php
  12. 144
      src/ThemeBundle/Resources/views/Resource/course_description/grid_theme.html.twig
  13. 11
      src/ThemeBundle/Resources/views/Resource/course_description/index.html.twig
  14. 25
      src/ThemeBundle/Resources/views/Resource/course_description/view_resource.html.twig
  15. 1
      src/ThemeBundle/Resources/views/Resource/edit.html.twig
  16. 2
      src/ThemeBundle/Resources/views/Resource/grid.html.twig
  17. 2
      src/ThemeBundle/Resources/views/Resource/grid_theme.html.twig
  18. 39
      src/ThemeBundle/Resources/views/Resource/index.html.twig
  19. 38
      src/ThemeBundle/Resources/views/Resource/toolbar.html.twig

@ -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;
}
}

@ -0,0 +1,166 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\CoreBundle\Component\Utils;
class ResourceTemplate
{
protected $index;
protected $list;
protected $edit;
protected $viewResource;
protected $new;
protected $newFolder;
protected $diskSpace;
protected $info;
protected $preview;
protected $upload;
public function __construct()
{
$this->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;
}
}

@ -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();

@ -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;
}

@ -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()
{

@ -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;
}
/**

@ -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()
{

@ -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)

@ -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;
}

@ -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;
}

@ -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;
}

@ -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 %}
{# <input type="checkbox" class="action" value="1" name="{{ grid.hash }}[{{ column.id }}][{{ row.primaryFieldValue }}]"/>#}
{% endblock grid_column_massaction_cell %}
{% block grid_column_content_cell %}
<div class="card-body">
{{ value | raw }}
</div>
{% endblock grid_column_content_cell %}
{% block grid_column_title_cell %}
<div class="card-header">
{{ value | raw }}
</div>
{% 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 %}
<div class="card">
{{ gridColumns }}
</div >
{% endspaceless %}
{% endfor %}
{% endblock grid_rows %}
{% block grid_actions %}
{% endblock grid_actions %}
{# Bootstrap changes #}
{% block grid_column_actions_cell %}
{% set actions = column.getActionsToRender(row) %}
<div class="btn-group">
{% for action in actions %}
{% if action.attributes.form_delete is defined and action.attributes.form_delete %}
<div class="btn-group">
<form method="post" action="{{ url(action.route, column.routeParameters(row, action), false) }}">
<input type="hidden" name="_method" value="DELETE" />
<button type="submit" class="btn btn-danger">
{{ action.title|trans }}
</button>
</form>
</div>
{% else %}
<a
href="{{ url(action.route, column.routeParameters(row, action), false) }}"
target="{{ action.target }}"
{% if action.confirm %} onclick="return confirm('{{ action.confirmMessage }}')"{% endif %}
{% for name, value in action.attributes %} {{ name }}="{{ value }}" {% endfor %}
{% if action.attributes.data_hidden is defined and action.attributes.data_hidden %}
style="display: none"
{% endif %}
>
{% if action.attributes.icon is defined and action.attributes.icon %}
<i class="fas {{ action.attributes.icon }} "></i>
{% else %}
{{ action.title|trans }}
{% endif %}
</a>
{% endif %}
{% endfor %}
</div>
{% endblock grid_column_actions_cell %}
{% block grid %}
<div class="col-md-12">
<div class="box box-primary">
<div class="box-body table-responsive no-padding">
{% if grid.totalCount > 0 or grid.isFiltered or grid.noDataMessage is same as(false) %}
<form id="{{ grid.hash }}" action="{{ grid.routeUrl }}"
method="post">
<div class="grid_body">
{# {% if grid.isTitleSectionVisible %}#}
{# {{ grid_titles(grid) }}#}
{# {% endif %}#}
{# {% if grid.isFilterSectionVisible %}#}
{# {{ grid_filters(grid) }}#}
{# {% endif %}#}
{{ grid_rows(grid) }}
</div>
<div class="grid_footer">
{% if grid.isPagerSectionVisible %}
{{ grid_pager(grid) }}
{% endif %}
{% if grid.exports|length > 0 %}
{{ grid_exports(grid) }}
{% endif %}
{% if grid.tweaks|length > 0 %}
{{ grid_tweaks(grid) }}
{% endif %}
</div>
{% if withjs %}
{{ grid_scripts(grid) }}
{% endif %}
</form>
{% else %}
{{ grid_no_data(grid) }}
{% endif %}
</div>
</div>
</div>
{% 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 %}
<div class="form-group row">
<label for="staticEmail" class="col-sm-2 col-form-label">
{{ grid_column_operator(column, grid, op, submitOnChange) }}
<input type="{{ column.inputType }}" value="{{ to }}" class="grid-filter-input-query-to" name="{{ grid.hash }}[{{ column.id }}][to]" id="{{ grid.hash }}__{{ column.id }}__query__to" {% if submitOnChange is same as (true) %}onkeypress="return {{ grid.hash }}_submitForm(event, this.form);"{% endif%} {{ ( op == btwOperator or op == btweOperator ) ? '': 'style="display: none;" disabled="disabled"' }} />
</label>
<div class="col-sm-10">
<input type="{{ column.inputType }}" value="{{ from }}" class="form-control grid-filter-input-query-from" name="{{ grid.hash }}[{{ column.id }}][from]" id="{{ grid.hash }}__{{ column.id }}__query__from" {% if submitOnChange is same as (true) %}onkeypress="return {{ grid.hash }}_submitForm(event, this.form);"{% endif%} {{ ( op == isNullOperator or op == isNotNullOperator ) ? 'style="display: none;" disabled="disabled"' : '' }} />
</div>
</div>
{% endblock grid_column_filter_type_input %}

@ -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 %}

@ -0,0 +1,25 @@
{% extends "@ChamiloTheme/Layout/layout_one_col.html.twig" %}
{% block content %}
{% autoescape false %}
<h3>{{ resource }}</h3>
<h3>{{ resource.content }}</h3>
{{ 'Created at' | trans }}: {{ resource.resourceNode.createdAt | date_to_time_ago }}<br />
{{ 'Updated at' | trans }}: {{ resource.resourceNode.updatedAt | date_to_time_ago }}<br />
<br />
{% if is_granted('DELETE', resource.resourceNode) %}
<a class="btn btn-danger" href="{{ url('chamilo_core_resource_delete', {
'id': resource.resourceNode.id,
'cid': course.id,
'sid': session.id,
'type' : type,
'tool' : tool,
})
}}">
{{ 'Delete'|trans }}
</a>
{% endif %}
{% endautoescape %}
{% endblock %}

@ -3,7 +3,6 @@
{% block content %}
<div class="box-body">
{{ form_start(form) }}
{{ form_errors(form) }}
{# {{ form_row(form.title) }}#}

@ -1,4 +1,4 @@
{# Customization of the grid is located here: grid_theme.html.twig #}
{{ grid_search(grid) }}
{{ grid(grid) }}

@ -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 #}

@ -1,44 +1,7 @@
{% extends "@ChamiloTheme/Layout/layout_one_col.html.twig" %}
{% block content %}
{% if is_granted('CREATE', parent_resource_node) %}
<div class="actions">
{% if resource_settings.allowNodeCreation %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_new_folder', {'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'New folder' | trans }}
</a>
{% endif %}
{% if resource_settings.allowResourceCreation %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_new', { 'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'Create new ' ~ tool | trans }}
</a>
{% endif %}
{% if resource_settings.allowResourceUpload %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_upload', { 'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'Upload' | trans }}
</a>
{% endif %}
{% if resource_settings.allowDownloadAll %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_download', { 'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'Download all' | trans }}
</a>
{% endif %}
{% if resource_settings.allowToSaveEditorToResourceFile %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_disk_space', { 'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'Disk Space' | trans }}
</a>
{% endif %}
</div>
{% endif %}
{% include '@ChamiloTheme/Resource/toolbar.html.twig' %}
<style>
.fancybox-slide--iframe .fancybox-content {

@ -0,0 +1,38 @@
{% if is_granted('CREATE', parent_resource_node) %}
<div class="actions">
{% if resource_settings.allowNodeCreation %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_new_folder', {'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'New folder' | trans }}
</a>
{% endif %}
{% if resource_settings.allowResourceCreation %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_new', { 'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'Create new ' ~ tool | trans }}
</a>
{% endif %}
{% if resource_settings.allowResourceUpload %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_upload', { 'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'Upload' | trans }}
</a>
{% endif %}
{% if resource_settings.allowDownloadAll %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_download', { 'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'Download all' | trans }}
</a>
{% endif %}
{% if resource_settings.allowToSaveEditorToResourceFile %}
<a class="btn btn-secondary"
href="{{ url('chamilo_core_resource_disk_space', { 'tool': tool, 'type': type, 'cid': course.id, 'sid': session.id, 'id': id }) }}">
{{ 'Disk Space' | trans }}
</a>
{% endif %}
</div>
{% endif %}
Loading…
Cancel
Save