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 400 and 402] [Versions 401 and 402]

   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   * Output the user submission actionbar for this activity.
  19   *
  20   * @package   mod_assign
  21   * @copyright 2021 Adrian Greeve <adrian@moodle.com>
  22   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  namespace mod_assign\output;
  26  
  27  use templatable;
  28  use renderable;
  29  use moodle_url;
  30  use help_icon;
  31  use single_button;
  32  use stdClass;
  33  
  34  /**
  35   * Output the user submission actionbar for this activity.
  36   *
  37   * @package   mod_assign
  38   * @copyright 2021 Adrian Greeve <adrian@moodle.com>
  39   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  40   */
  41  class user_submission_actionmenu implements templatable, renderable {
  42  
  43      /** @var int The course module ID. */
  44      protected $cmid;
  45      /** @var bool Whether to show the submit button. */
  46      protected $showsubmit;
  47      /** @var bool Whether to show the edit button. */
  48      protected $showedit;
  49      /** @var stdClass A submission for this activity. */
  50      protected $submission;
  51      /** @var stdClass A team submission for this activity. */
  52      protected $teamsubmission;
  53      /** @var int The time limit for the submission. 0 = no time limit. */
  54      protected $timelimit;
  55  
  56      /**
  57       * Constructor for this object.
  58       *
  59       * @param int $cmid The course module ID.
  60       * @param bool $showsubmit Whether to show the submit button.
  61       * @param bool $showedit Whether to show the edit button.
  62       * @param stdClass|null $submission A submission for this activity.
  63       * @param stdClass|null $teamsubmission A team submission for this activity.
  64       * @param int $timelimit The time limit for completing this activity.
  65       */
  66      public function __construct(int $cmid, bool $showsubmit, bool $showedit, stdClass $submission = null,
  67              stdClass $teamsubmission = null, int $timelimit = 0) {
  68  
  69          $this->cmid = $cmid;
  70          $this->showsubmit = $showsubmit;
  71          $this->showedit = $showedit;
  72          $this->submission = $submission;
  73          $this->teamsubmission = $teamsubmission;
  74          $this->timelimit = $timelimit;
  75      }
  76  
  77      /**
  78       * Get the submission status.
  79       *
  80       * @return string The status of the submission.
  81       */
  82      protected function get_current_status(): string {
  83          if (!is_null($this->teamsubmission) && isset($this->teamsubmission->status)) {
  84              return $this->teamsubmission->status;
  85          } else if (!empty((array)$this->submission)) {
  86              return $this->submission->status;
  87          } else {
  88              return ASSIGN_SUBMISSION_STATUS_NEW;
  89          }
  90      }
  91  
  92      /**
  93       * Export the submission buttons for the page.
  94       *
  95       * @param  \renderer_base $output renderer base output.
  96       * @return array The data to be rendered.
  97       */
  98      public function export_for_template(\renderer_base $output): array {
  99          $data = ['edit' => false, 'submit' => false, 'remove' => false, 'previoussubmission' => false];
 100          if ($this->showedit) {
 101              $url = new moodle_url('/mod/assign/view.php', ['id' => $this->cmid, 'action' => 'editsubmission']);
 102              $button = new single_button($url, get_string('editsubmission', 'mod_assign'), 'get');
 103              $data['edit'] = [
 104                  'button' => $button->export_for_template($output),
 105              ];
 106              $status = $this->get_current_status();
 107              if ($status !== ASSIGN_SUBMISSION_STATUS_NEW && $status !== ASSIGN_SUBMISSION_STATUS_REOPENED) {
 108                  $url = new moodle_url('/mod/assign/view.php', ['id' => $this->cmid, 'action' => 'removesubmissionconfirm']);
 109                  $button = new single_button($url, get_string('removesubmission', 'mod_assign'), 'get');
 110                  $data['remove'] = ['button' => $button->export_for_template($output)];
 111              }
 112              if ($status === ASSIGN_SUBMISSION_STATUS_REOPENED) {
 113                  $params = ['id' => $this->cmid, 'action' => 'editprevioussubmission', 'sesskey' => sesskey()];
 114                  $url = new moodle_url('/mod/assign/view.php', $params);
 115                  $button = new single_button($url, get_string('addnewattemptfromprevious', 'mod_assign'), 'get');
 116                  $help = new help_icon('addnewattemptfromprevious', 'mod_assign');
 117                  $data['previoussubmission'] = [
 118                      'button' => $button->export_for_template($output),
 119                      'help' => $help->export_for_template($output)
 120                  ];
 121                  $url = new moodle_url('/mod/assign/view.php', ['id' => $this->cmid, 'action' => 'editsubmission']);
 122                  $newattemptbutton = new single_button(
 123                      $url,
 124                      get_string('addnewattempt', 'mod_assign'),
 125                      'get',
 126                      single_button::BUTTON_PRIMARY
 127                  );
 128                  $newattempthelp = new help_icon('addnewattempt', 'mod_assign');
 129                  $data['edit']['button'] = $newattemptbutton->export_for_template($output);
 130                  $data['edit']['help'] = $newattempthelp->export_for_template($output);
 131              }
 132              if ($status === ASSIGN_SUBMISSION_STATUS_NEW) {
 133  
 134                  if ($this->timelimit && empty($this->submission->timestarted)) {
 135                      $confirmation = new \confirm_action(
 136                          get_string('confirmstart', 'assign', format_time($this->timelimit)),
 137                          null,
 138                          get_string('beginassignment', 'assign')
 139                      );
 140                      $urlparams = array('id' => $this->cmid, 'action' => 'editsubmission');
 141                      $beginbutton = new \action_link(
 142                          new moodle_url('/mod/assign/view.php', $urlparams),
 143                              get_string('beginassignment', 'assign'),
 144                              $confirmation,
 145                              ['class' => 'btn btn-primary']
 146                      );
 147                      $data['edit']['button'] = $beginbutton->export_for_template($output);
 148                      $data['edit']['begin'] = true;
 149                      $data['edit']['help'] = '';
 150                  } else {
 151                      $newattemptbutton = new single_button(
 152                          $url,
 153                          get_string('addsubmission', 'mod_assign'),
 154                          'get',
 155                          single_button::BUTTON_PRIMARY
 156                      );
 157                      $data['edit']['button'] = $newattemptbutton->export_for_template($output);
 158                      $data['edit']['help'] = '';
 159                  }
 160              }
 161          }
 162          if ($this->showsubmit) {
 163              $url = new moodle_url('/mod/assign/view.php', ['id' => $this->cmid, 'action' => 'submit']);
 164              $button = new single_button($url, get_string('submitassignment', 'mod_assign'), 'get', single_button::BUTTON_PRIMARY);
 165              $help = new help_icon('submitassignment', 'mod_assign');
 166              $data['submit'] = [
 167                  'button' => $button->export_for_template($output),
 168                  'help' => $help->export_for_template($output)
 169              ];
 170          }
 171          return $data;
 172      }
 173  }