Portfolio: Allow teacher mark item as highlighted - refs BT#18201

pull/4368/head
Angel Fernando Quiroz Campos 3 years ago
parent 39d474729a
commit e98713a355
  1. 27
      main/inc/lib/PortfolioController.php
  2. 1
      main/install/configuration.dist.php
  3. 14
      main/portfolio/index.php
  4. 34
      main/template/default/portfolio/items.html.twig
  5. 18
      main/template/default/portfolio/view.html.twig
  6. 19
      src/Chamilo/CoreBundle/Entity/Portfolio.php

@ -2348,6 +2348,33 @@ class PortfolioController
exit;
}
/**
* @throws \Doctrine\ORM\OptimisticLockException
* @throws \Doctrine\ORM\ORMException
*/
public function markAsHighlighted(Portfolio $item)
{
if ($item->getCourse()->getId() !== (int) api_get_course_int_id()) {
api_not_allowed(true);
}
$item->setIsHighlighted(
!$item->isHighlighted()
);
Database::getManager()->flush();
Display::addFlash(
Display::return_message(
$item->isHighlighted() ? get_lang('MarkedAsHighlighted') : get_lang('UnmarkedAsHighlighted'),
'success'
)
);
header("Location: $this->baseUrl".http_build_query(['action' => 'view', 'id' => $item->getId()]));
exit;
}
/**
* @param bool $showHeader
*/

@ -1055,6 +1055,7 @@ ALTER TABLE portfolio ADD CONSTRAINT FK_A9ED106291D79BD3 FOREIGN KEY (c_id) REFE
ALTER TABLE portfolio ADD CONSTRAINT FK_A9ED1062613FECDF FOREIGN KEY (session_id) REFERENCES session (id) ON DELETE CASCADE;
ALTER TABLE portfolio ADD CONSTRAINT FK_A9ED106212469DE2 FOREIGN KEY (category_id) REFERENCES portfolio_category (id) ON DELETE SET NULL;
ALTER TABLE portfolio CHANGE is_visible visibility SMALLINT DEFAULT 1 NOT NULL;
ALTER TABLE portfolio ADD is_highlighted TINYINT(1) DEFAULT '0' NOT NULL;
ALTER TABLE portfolio_category ADD CONSTRAINT FK_7AC64359A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE;
ALTER TABLE portfolio_comment ADD CONSTRAINT FK_C2C17DA2F675F31B FOREIGN KEY (author_id) REFERENCES user (id) ON DELETE CASCADE;
ALTER TABLE portfolio_comment ADD CONSTRAINT FK_C2C17DA2126F525E FOREIGN KEY (item_id) REFERENCES portfolio (id) ON DELETE CASCADE;

@ -270,6 +270,20 @@ switch ($action) {
case 'delete_attachment':
$controller->deleteAttachment($httpRequest);
break;
case 'highlighted':
api_protect_teacher_script();
$id = $httpRequest->query->getInt('id');
/** @var Portfolio $item */
$item = $em->find('ChamiloCoreBundle:Portfolio', $id);
if (empty($item)) {
break;
}
$controller->markAsHighlighted($item);
break;
case 'list':
default:
$controller->index($httpRequest);

@ -10,11 +10,11 @@
{% set item_url = baseurl ~ {'action':'view', 'id':item.id}|url_encode %}
{% set comments = item.lastComments %}
<div class="col-md-12" id="portfolio-item-{{ item.id }}">
<div class="thumbnail">
<div class="caption">
{% if _u.id == item.user.id %}
<div class="portfolio-actions pull-right">
<div class="col-md-12">
<div class="panel {{ item.isHighlighted ? 'panel-success' : 'panel-default' }} portfolio-item" id="portfolio-item-{{ item.id }}">
<div class="panel-body">
<div class="portfolio-actions pull-right">
{% if _u.id == item.user.id %}
<a href="{{ baseurl ~ {'action':'edit_item', 'id':item.id}|url_encode }}">
{{ 'edit.png'|img(22, 'Edit'|get_lang) }}
</a>
@ -34,14 +34,28 @@
<a href="{{ baseurl ~ {'action':'delete_item', 'id':item.id}|url_encode }}" class="btn-delete">
{{ 'delete.png'|img(22, 'Delete'|get_lang) }}
</a>
</div>
{% elseif false|api_is_allowed_to_edit %}
<div class="portfolio-actions pull-right">
{% elseif false|api_is_allowed_to_edit %}
<a href="{{ baseurl ~ {'action':'edit_item', 'id':item.id}|url_encode }}">
{{ 'edit.png'|img(22, 'Edit'|get_lang) }}
</a>
</div>
{% endif %}
{% endif %}
{% if false|api_is_allowed_to_edit %}
{% if item.isHighlighted %}
<a href="{{ baseurl ~ {'action':'highlighted', 'id':item.id}|url_encode }}">
{{ 'award_red.png'|img(22, 'UnmarkAsHighlighted'|get_lang) }}
</a>
{% else %}
<a href="{{ baseurl ~ {'action':'highlighted', 'id':item.id}|url_encode }}">
{{ 'award_red_na.png'|img(22, 'MarkAsHighlighted'|get_lang) }}
</a>
{% endif %}
{% else %}
{% if item.isHighlighted %}
{{ 'award_red.png'|img(22, 'MarkedAsHighlighted'|get_lang) }}
{% endif %}
{% endif %}
</div>
<h3>
<a href="{{ item_url }}">{{ item.title|remove_xss }}</a>

@ -1,5 +1,5 @@
<article class="thumbnail portfolio-item">
<div class="caption">
<article class="panel {{ item.isHighlightedd ? 'panel-success' : 'panel-default' }} portfolio-item">
<div class="panel-body">
<div class="portfolio-actions pull-right">
{% if _u.id == item.user.id %}
<a href="{{ baseurl ~ {'action':'edit_item', 'id':item.id}|url_encode }}">
@ -38,11 +38,25 @@
{{ 'edit.png'|img(22, 'Edit'|get_lang) }}
</a>
{% if item.isHighlighted %}
<a href="{{ baseurl ~ {'action':'highlighted', 'id':item.id}|url_encode }}">
{{ 'award_red.png'|img(22, 'UnmarkAsHighlighted'|get_lang) }}
</a>
{% else %}
<a href="{{ baseurl ~ {'action':'highlighted', 'id':item.id}|url_encode }}">
{{ 'award_red_na.png'|img(22, 'MarkAsHighlighted'|get_lang) }}
</a>
{% endif %}
{% if item.course and '1' == 'qualify_portfolio_item'|api_get_course_setting %}
<a href="{{ baseurl ~ {'action':'qualify', 'item':item.id}|url_encode }}">
{{ 'quiz.png'|img(22, 'QualifyThisPortfolioItem'|get_lang) }}
</a>
{% endif %}
{% else %}
{% if item.isHighlighted %}
{{ 'award_red.png'|img(22, 'Highlighted'|get_lang) }}
{% endif %}
{% endif %}
</div>

@ -137,6 +137,13 @@ class Portfolio
*/
private $score;
/**
* @var bool
*
* @ORM\Column(name="is_highlighted", type="boolean", options={"default": false})
*/
private $isHighlighted = false;
/**
* Portfolio constructor.
*/
@ -415,4 +422,16 @@ class Portfolio
{
$this->score = $score;
}
public function isHighlighted(): bool
{
return $this->isHighlighted;
}
public function setIsHighlighted(bool $isHighlighted): Portfolio
{
$this->isHighlighted = $isHighlighted;
return $this;
}
}

Loading…
Cancel
Save