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.
   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   * Represents the timer panel.
  19   *
  20   * @package   mod_assign
  21   * @copyright  2020 Ilya Tregubov <ilyatregubov@catalyst-au.net>
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  namespace mod_assign\output;
  25  
  26  use renderable;
  27  use renderer_base;
  28  use stdClass;
  29  use templatable;
  30  
  31  /**
  32   * Represents the timer panel.
  33   *
  34   * @package   mod_assign
  35   * @copyright  2020 Ilya Tregubov <ilyatregubov@catalyst-au.net>
  36   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  37   */
  38  class timelimit_panel implements templatable, renderable {
  39      /** @var \stdClass assign submission attempt.*/
  40      protected $submission;
  41      /** @var object assign object.*/
  42      protected $assign;
  43  
  44      /**
  45       * Constructor.
  46       *
  47       * @param \stdClass $submission assign submission.
  48       * @param \stdClass $assign assign object.
  49       */
  50      public function __construct(\stdClass $submission, \stdClass $assign) {
  51          $this->submission = $submission;
  52          $this->assign = $assign;
  53      }
  54  
  55      /**
  56       * Render timer.
  57       *
  58       * @param renderer_base $output The current page renderer.
  59       * @return stdClass - Flat list of exported data.
  60       */
  61      public function export_for_template(renderer_base $output): stdClass {
  62          return (object)['timerstartvalue' => $this->end_time() - time()];
  63      }
  64  
  65      /**
  66       * Compute end time for this assign attempt.
  67       *
  68       * @return int the time when assign attempt is due.
  69       */
  70      private function end_time(): int {
  71          $timedue = $this->submission->timestarted + $this->assign->timelimit;
  72          if ($this->assign->duedate) {
  73              return min($timedue, $this->assign->duedate);
  74          }
  75  
  76          if ($this->assign->cutoffdate) {
  77              return min($timedue, $this->assign->cutoffdate);
  78          }
  79  
  80          return $timedue;
  81      }
  82  }