From c0acb1585f992ede461c0e260973cd723df0e05a Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Fri, 19 Aug 2022 17:39:55 -0500 Subject: [PATCH] Portfolio: Fix HTML structure for articles - refs BT#18201 --- main/inc/lib/PortfolioController.php | 102 +++++++++--- .../default/portfolio/items.html.twig | 119 +++++++------- .../template/default/portfolio/view.html.twig | 150 +++++------------- 3 files changed, 189 insertions(+), 182 deletions(-) diff --git a/main/inc/lib/PortfolioController.php b/main/inc/lib/PortfolioController.php index bac71c31bb..84cc0fad76 100644 --- a/main/inc/lib/PortfolioController.php +++ b/main/inc/lib/PortfolioController.php @@ -1063,8 +1063,8 @@ class PortfolioController $query->getArrayResult(), [ 'decorate' => true, - 'rootOpen' => '', + 'rootOpen' => '
', + 'rootClose' => '
', 'childOpen' => function ($node) use ($commentsRepo) { /** @var PortfolioComment $comment */ $comment = $commentsRepo->find($node['id']); @@ -1080,12 +1080,12 @@ class PortfolioController ] ); - return '
  • + return '
    '
                         .$author->getCompleteName().'
    '; }, - 'childClose' => '
  • ', + 'childClose' => '', 'nodeDecorator' => function ($node) use ($commentsRepo, $clockIcon, $item) { /** @var PortfolioComment $comment */ $comment = $commentsRepo->find($node['id']); @@ -1163,22 +1163,23 @@ class PortfolioController } } - $nodeHtml = '

    '.PHP_EOL - .$comment->getAuthor()->getCompleteName().PHP_EOL.''.$clockIcon.PHP_EOL - .Display::dateToStringAgoAndLongDate($comment->getDate()).''.PHP_EOL; + $nodeHtml = '

    '.implode(PHP_EOL, $commentActions).'
    '.PHP_EOL + .''.PHP_EOL + .Security::remove_XSS($comment->getContent()).PHP_EOL; $nodeHtml .= $this->generateAttachmentList($comment); @@ -1219,12 +1220,79 @@ class PortfolioController $interbreadcrumb[] = ['name' => get_lang('Portfolio'), 'url' => $this->baseUrl]; + $editLink = $actions[] = Display::url( + Display::return_icon('edit.png', get_lang('Edit'), [], ICON_SIZE_MEDIUM), + $this->baseUrl.http_build_query(['action' => 'edit_item', 'id' => $item->getId()]) + ); + $actions = []; $actions[] = Display::url( Display::return_icon('back.png', get_lang('Back'), [], ICON_SIZE_MEDIUM), $this->baseUrl ); + if ($this->itemBelongToOwner($item)) { + $actions[] = $editLink; + + $visibilityUrl = $this->baseUrl.http_build_query(['action' => 'visibility', 'id' => $item->getId()]); + + if ($item->getVisibility() === Portfolio::VISIBILITY_HIDDEN) { + $actions[] = Display::url( + Display::return_icon('invisible.png', get_lang('MakeVisible'), [], ICON_SIZE_MEDIUM), + $visibilityUrl + ); + } elseif ($item->getVisibility() === Portfolio::VISIBILITY_VISIBLE) { + $actions[] = Display::url( + Display::return_icon('visible.png', get_lang('MakeVisibleForTeachers'), [], ICON_SIZE_MEDIUM), + $visibilityUrl + ); + } elseif ($item->getVisibility() === Portfolio::VISIBILITY_HIDDEN_EXCEPT_TEACHER) { + $actions[] = Display::url( + Display::return_icon('eye-slash.png', get_lang('MakeInvisible'), [], ICON_SIZE_MEDIUM), + $visibilityUrl + ); + } + + $actions[] = Display::url( + Display::return_icon('delete.png', get_lang('Delete'), [], ICON_SIZE_MEDIUM), + $this->baseUrl.http_build_query(['action' => 'delete_item', 'id' => $item->getId()]) + ); + } else { + $actions[] = Display::url( + Display::return_icon('copy.png', get_lang('CopyToMyPortfolio'), [], ICON_SIZE_MEDIUM), + $this->baseUrl.http_build_query(['action' => 'copy', 'id' => $item->getId()]) + ); + } + + if (api_is_allowed_to_edit()) { + $actions[] = Display::url( + Display::return_icon('copy.png', get_lang('CopyToStudentPortfolio'), [], ICON_SIZE_MEDIUM), + $this->baseUrl.http_build_query(['action' => 'teacher_copy', 'copy' => 'item', 'id' => $item->getId()]) + ); + $actions[] = $editLink; + + $highlightedUrl = $this->baseUrl.http_build_query(['action' => 'highlighted', 'id' => $item->getId()]); + + if ($item->isHighlighted()) { + $actions[] = Display::url( + Display::return_icon('award_red.png', get_lang('UnmarkAsHighlighted'), [], ICON_SIZE_MEDIUM), + $highlightedUrl + ); + } else { + $actions[] = Display::url( + Display::return_icon('award_red_na.png', get_lang('MarkAsHighlighted'), [], ICON_SIZE_MEDIUM), + $highlightedUrl + ); + } + + if ($itemCourse && '1' === api_get_course_setting('qualify_portfolio_item')) { + $actions[] = Display::url( + Display::return_icon('quiz.png', get_lang('QualifyThisPortfolioItem'), [], ICON_SIZE_MEDIUM), + $this->baseUrl.http_build_query(['action' => 'qualify', 'item' => $item->getId()]) + ); + } + } + $this->renderView($content, $item->getTitle(true), $actions, false); } @@ -2403,7 +2471,7 @@ class PortfolioController } if ($actions) { - $actions = implode(PHP_EOL, $actions); + $actions = implode('', $actions); $actionsStr .= Display::toolbarAction('portfolio-toolbar', [$actions]); } @@ -2852,6 +2920,7 @@ class PortfolioController $formAction = $this->baseUrl.http_build_query(['action' => 'view', 'id' => $item->getId()]); $form = new FormValidator('frm_comment', 'post', $formAction); + $form->addHeader(get_lang('AddNewComment')); $form->addHtmlEditor('content', get_lang('Comments'), true, false, ['ToolbarSet' => 'Minimal']); $form->addHidden('item', $item->getId()); $form->addHidden('parent', 0); @@ -2948,10 +3017,7 @@ class PortfolioController } if ($attachment->getComment()) { - $listItems .= PHP_EOL.Display::span( - Security::remove_XSS($attachment->getComment()), - ['class' => 'text-muted'] - ); + $listItems .= '

    '.Security::remove_XSS($attachment->getComment()).'

    '; } $listItems .= ''; @@ -2960,7 +3026,7 @@ class PortfolioController $listItems .= ''; if ($includeHeader) { - $listItems = Display::page_subheader(get_lang('AttachmentFiles'), null, 'h5', ['class' => 'h4']) + $listItems = '

    '.get_lang('AttachmentFiles').'

    ' .$listItems; } diff --git a/main/template/default/portfolio/items.html.twig b/main/template/default/portfolio/items.html.twig index e7d6a68375..5d20e6dcff 100644 --- a/main/template/default/portfolio/items.html.twig +++ b/main/template/default/portfolio/items.html.twig @@ -5,58 +5,61 @@ {% set delete_img = 'delete.png'|img(22, 'Delete'|get_lang) %} {% set baseurl = _p.web_self ~ '?' ~ (_p.web_cid_query ? _p.web_cid_query ~ '&' : '') %} -
    +
    {% for item in items %} {% set item_url = baseurl ~ {'action':'view', 'id':item.id}|url_encode %} {% set comments = item.lastComments %} -
    -
    -
    -
    - {% if _u.id == item.user.id %} - - {{ 'edit.png'|img(22, 'Edit'|get_lang) }} +
    +
    +
    + {% if _u.id == item.user.id %} + + {{ 'edit.png'|img(22, 'Edit'|get_lang) }} + + {% if item.visibility == 0 %} + + {{ 'invisible.png'|img(22, 'MakeVisible'|get_lang) }} - {% if item.visibility == 0 %} - - {{ 'invisible.png'|img(22, 'MakeVisible'|get_lang) }} - - {% elseif item.visibility == 1 %} - - {{ 'visible.png'|img(22, 'MakeVisibleForTeachers'|get_lang) }} - - {% elseif item.visibility == 2 %} - - {{ 'eye-slash.png'|img(22, 'MakeInvisible'|get_lang) }} - - {% endif %} - - {{ 'delete.png'|img(22, 'Delete'|get_lang) }} + {% elseif item.visibility == 1 %} + + {{ 'visible.png'|img(22, 'MakeVisibleForTeachers'|get_lang) }} - {% elseif false|api_is_allowed_to_edit %} - - {{ 'edit.png'|img(22, 'Edit'|get_lang) }} + {% elseif item.visibility == 2 %} + + {{ 'eye-slash.png'|img(22, 'MakeInvisible'|get_lang) }} {% endif %} + + {{ 'delete.png'|img(22, 'Delete'|get_lang) }} + + {% elseif false|api_is_allowed_to_edit %} + + {{ 'edit.png'|img(22, 'Edit'|get_lang) }} + + {% endif %} - {% if false|api_is_allowed_to_edit %} - {% if item.isHighlighted %} - - {{ 'award_red.png'|img(22, 'UnmarkAsHighlighted'|get_lang) }} - - {% else %} - - {{ 'award_red_na.png'|img(22, 'MarkAsHighlighted'|get_lang) }} - - {% endif %} + {% if false|api_is_allowed_to_edit %} + {% if item.isHighlighted %} + + {{ 'award_red.png'|img(22, 'UnmarkAsHighlighted'|get_lang) }} + {% else %} - {% if item.isHighlighted %} - {{ 'award_red.png'|img(22, 'MarkedAsHighlighted'|get_lang) }} - {% endif %} + + {{ 'award_red_na.png'|img(22, 'MarkAsHighlighted'|get_lang) }} + {% endif %} -
    + {% endif %} +
    + + {% if item.isHighlighted %} + + + {{ 'Highlighted'|get_lang }} + + {% endif %} +

    {{ item.title|remove_xss }}

    @@ -93,13 +96,15 @@ {% endif %} +
    -
    +
    -

    {{ item.excerpt }}

    +

    {{ item.excerpt }}

    -
    +
    +
    {% if comments|length > 0 %}

    @@ -108,27 +113,25 @@ · {{ 'AddNewComment'|get_lang }}

    -
      - {% for comment in comments %} -
    • - -
      - {{ comment.author.completeName }} - - {{ comment.date|date_to_time_ago }} -
      -

      {{ comment.excerpt }}

      -
    • - {% endfor %} -
    + {% for comment in comments %} +
    +
    + + {{ comment.author.completeName }} + + {{ comment.date|date_to_time_ago }} +
    +

    {{ comment.excerpt }}

    +
    + {% endfor %} {% else %} {{ 'AddNewComment'|get_lang }} {% endif %} -
    -
    + +
    {% endfor %}
    diff --git a/main/template/default/portfolio/view.html.twig b/main/template/default/portfolio/view.html.twig index 27f186db25..3f52974ab3 100644 --- a/main/template/default/portfolio/view.html.twig +++ b/main/template/default/portfolio/view.html.twig @@ -1,68 +1,36 @@ -
    -
    -
    - {% if _u.id == item.user.id %} - - {{ 'edit.png'|img(22, 'Edit'|get_lang) }} - - {% if item.visibility == 0 %} - - {{ 'invisible.png'|img(22, 'MakeVisible'|get_lang) }} - - {% elseif item.visibility == 1 %} - - {{ 'visible.png'|img(22, 'MakeVisibleForTeachers'|get_lang) }} - - {% elseif item.visibility == 2 %} - - {{ 'eye-slash.png'|img(22, 'MakeInvisible'|get_lang) }} - - {% endif %} - - {{ 'delete.png'|img(22, 'Delete'|get_lang) }} - - {% endif %} - - {% if _u.id != item.user.id %} - - {{ 'copy.png'|img(22, 'CopyToMyPortfolio'|get_lang) }} - - {% endif %} +{% if item.isHighlighted %} + + + {{ 'Highlighted'|get_lang }} + +{% endif %} + +
    +
    +

    {{ item.title|remove_xss }}

    - {% if false|api_is_allowed_to_edit %} - - {{ 'copy.png'|img(22, 'CopyToStudentPortfolio'|get_lang) }} - - - - {{ 'edit.png'|img(22, 'Edit'|get_lang) }} - - - {% if item.isHighlighted %} - - {{ 'award_red.png'|img(22, 'UnmarkAsHighlighted'|get_lang) }} - - {% else %} - - {{ 'award_red_na.png'|img(22, 'MarkAsHighlighted'|get_lang) }} - - {% endif %} +
      +
    • + + {{ item.user.completeName }} +
    • +
    • + + {{ 'CreationDate'|get_lang ~ ': ' ~ item.creationDate|date_to_time_ago }} +
    • - {% if item.course and '1' == 'qualify_portfolio_item'|api_get_course_setting %} - - {{ 'quiz.png'|img(22, 'QualifyThisPortfolioItem'|get_lang) }} - - {% endif %} - {% else %} - {% if item.isHighlighted %} - {{ 'award_red.png'|img(22, 'Highlighted'|get_lang) }} - {% endif %} + {% if last_edit %} +
    • + + {{ 'UpdatedDateXByUserY'|get_lang|format(last_edit.date|date_to_time_ago, last_edit.user) }} +
    • + {% elseif item.creationDate != item.updateDate %} +
    • + + {{ 'UpdatedDateX'|get_lang|format(item.updateDate|date_to_time_ago) }} +
    • {% endif %} -
    -

    {{ item.title|remove_xss }}

    - -
      {% if _c is empty %} {% if item.session %}
    • @@ -75,59 +43,29 @@ {{ 'Course'|get_lang ~ ': ' ~ item.course.title }}
    • {% endif %} - {% else %} -
    • - - {{ item.user.completeName }} -
    • {% endif %} - -
    • - - {{ 'CreationDate'|get_lang ~ ': ' ~ item.creationDate|date_to_time_ago }} -
    • - -
    • - - {{ 'XComments'|get_lang|format(item.comments.count) }} -
    + -
    - - {{ item_content }} - - {% if attachment_list %} -
    + {{ item_content }} + {% if attachment_list %} +
    {{ attachment_list }} - {% endif %} - - {% if last_edit %} -
    -

    - - {{ 'UpdatedOnDateXByUserY'|get_lang|format(last_edit.date|date_to_time_ago, last_edit.user) }} -

    - {% elseif item.creationDate != item.updateDate %} -
    -

    - - {{ 'UpdatedOnDateX'|get_lang|format(item.updateDate|date_to_time_ago) }} -

    - {% endif %} -
    -
    + + {% endif %} -
    +
    +

    + + {{ 'XComments'|get_lang|format(item.comments.count) }} +

    -
    -
    {{ 'XComments'|get_lang|format(item.comments.count) }}
    + {{ comments }} - {{ comments }} - - {{ form }} -
    + {{ form }} +
    +