Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.

Differences Between: [Versions 402 and 403]

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * Renderable for display of license manager table.
  19   *
  20   * @package   tool_licensemanager
  21   * @copyright 2020 Tom Dickman <tomdickman@catalyst-au.net>
  22   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  namespace tool_licensemanager\output;
  25  
  26  use html_table;
  27  use html_table_cell;
  28  use html_table_row;
  29  use html_writer;
  30  use license_manager;
  31  
  32  defined('MOODLE_INTERNAL') || die();
  33  
  34  /**
  35   * Renderable for display of license manager table.
  36   *
  37   * @package   tool_licensemanager
  38   * @copyright 2020 Tom Dickman <tomdickman@catalyst-au.net>
  39   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  40   */
  41  class table implements \renderable {
  42  
  43      /**
  44       * 'Create License' link.
  45       *
  46       * @return string HTML string.
  47       */
  48      public function create_license_link() {
  49          $link = html_writer::link(\tool_licensemanager\helper::get_create_license_url(),
  50              get_string('createlicensebuttontext', 'tool_licensemanager'),
  51              ['class' => 'btn btn-secondary mb-3']);
  52  
  53          return $link;
  54      }
  55  
  56      /**
  57       * Create the HTML table for license management.
  58       *
  59       * @param array $licenses
  60       * @param \renderer_base $output
  61       *
  62       * @return string HTML for license manager table.
  63       */
  64      public function create_license_manager_table(array $licenses, \renderer_base $output) {
  65          $table = new html_table();
  66          $table->head  = [
  67              get_string('enable'),
  68              get_string('license', 'tool_licensemanager'),
  69              get_string('version'),
  70              get_string('order'),
  71              get_string('edit'),
  72              get_string('delete'),
  73          ];
  74          $table->colclasses = [
  75              'text-center',
  76              'text-left',
  77              'text-left',
  78              'text-center',
  79              'text-center',
  80              'text-center',
  81          ];
  82          $table->id = 'manage-licenses';
  83          $table->attributes['class'] = 'admintable generaltable';
  84          $table->data  = [];
  85  
  86          $rownumber = 0;
  87          $rowcount = count($licenses);
  88  
  89          foreach ($licenses as $key => $value) {
  90              $canmoveup = $rownumber > 0;
  91              $canmovedown = $rownumber < $rowcount - 1;
  92              $table->data[] = $this->get_license_table_row_data($value, $canmoveup, $canmovedown, $output);
  93              $rownumber++;
  94          }
  95  
  96          $html = html_writer::table($table);
  97  
  98          return $html;
  99      }
 100  
 101      /**
 102       * Get table row data for a license.
 103       *
 104       * @param object $license the license to populate row data for.
 105       * @param bool $canmoveup can this row move up.
 106       * @param bool $canmovedown can this row move down.
 107       * @param \renderer_base $output the renderer
 108       *
 109       * @return \html_table_row of columns values for row.
 110       */
 111      protected function get_license_table_row_data($license, bool $canmoveup, bool $canmovedown, \renderer_base $output) {
 112          global $CFG;
 113  
 114          $summary = $license->fullname . ' ('. $license->shortname . ')';
 115          if (!empty($license->source)) {
 116              $summary .= html_writer::empty_tag('br');
 117              $summary .= html_writer::link($license->source, $license->source, ['target' => '_blank']);
 118          }
 119          $summarycell = new html_table_cell($summary);
 120          $summarycell->attributes['class'] = 'license-summary';
 121          $versioncell = new html_table_cell($license->version);
 122          $versioncell->attributes['class'] = 'license-version';
 123  
 124          $deletelicense = '';
 125          if ($license->shortname == $CFG->sitedefaultlicense) {
 126              $hideshow = $output->pix_icon('t/locked', get_string('sitedefaultlicenselock', 'tool_licensemanager'));
 127          } else {
 128              if ($license->enabled == license_manager::LICENSE_ENABLED) {
 129                  $hideshow = html_writer::link(\tool_licensemanager\helper::get_disable_license_url($license->shortname),
 130                      $output->pix_icon('t/hide', get_string('disablelicensename', 'tool_licensemanager', $license->fullname)));
 131              } else {
 132                  $hideshow = html_writer::link(\tool_licensemanager\helper::get_enable_license_url($license->shortname),
 133                      $output->pix_icon('t/show', get_string('enablelicensename', 'tool_licensemanager', $license->fullname)));
 134              }
 135  
 136              if ($license->custom == license_manager::CUSTOM_LICENSE) {
 137                  // Link url is added by the JS `delete_license` modal used for confirmation of deletion, to avoid
 138                  // link being usable before JavaScript loads on page.
 139                  $deletelicense = html_writer::link('#', $output->pix_icon('i/trash',
 140                      get_string('deletelicensename', 'tool_licensemanager', $license->fullname)),
 141                      ['class' => 'delete-license', 'data-license' => $license->shortname]);
 142              }
 143          }
 144          $hideshowcell = new html_table_cell($hideshow);
 145          $hideshowcell->attributes['class'] = 'license-status';
 146  
 147          if ($license->custom == license_manager::CUSTOM_LICENSE) {
 148              $editlicense = html_writer::link(\tool_licensemanager\helper::get_update_license_url($license->shortname),
 149                  $output->pix_icon('t/editinline', get_string('editlicensename', 'tool_licensemanager', $license->fullname)),
 150                  ['class' => 'edit-license']);
 151          } else {
 152              $editlicense = '';
 153          }
 154          $editlicensecell = new html_table_cell($editlicense);
 155          $editlicensecell->attributes['class'] = 'edit-license';
 156  
 157          $spacer = $output->pix_icon('spacer', '', 'moodle', ['class' => 'iconsmall']);
 158          $updown = '';
 159          if ($canmoveup) {
 160              $updown .= html_writer::link(\tool_licensemanager\helper::get_moveup_license_url($license->shortname),
 161                      $output->pix_icon('t/up', get_string('movelicenseupname', 'tool_licensemanager', $license->fullname),
 162                          'moodle', ['class' => 'iconsmall']),
 163                      ['class' => 'move-up']) . '';
 164          } else {
 165              $updown .= $spacer;
 166          }
 167  
 168          if ($canmovedown) {
 169              $updown .= '&nbsp;'.html_writer::link(\tool_licensemanager\helper::get_movedown_license_url($license->shortname),
 170                      $output->pix_icon('t/down', get_string('movelicensedownname', 'tool_licensemanager', $license->fullname),
 171                          'moodle', ['class' => 'iconsmall']),
 172                      ['class' => 'move-down']);
 173          } else {
 174              $updown .= $spacer;
 175          }
 176          $updowncell = new html_table_cell($updown);
 177          $updowncell->attributes['class'] = 'license-order';
 178  
 179          $row = new html_table_row([$hideshowcell, $summarycell, $versioncell, $updowncell, $editlicensecell, $deletelicense]);
 180          $row->attributes['data-license'] = $license->shortname;
 181          $row->attributes['class'] = strtolower(get_string('license', 'tool_licensemanager'));
 182  
 183          return $row;
 184      }
 185  }