You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
5.7 KiB
206 lines
5.7 KiB
2 years ago
|
<?php
|
||
|
// This file is part of Moodle - http://moodle.org/
|
||
|
//
|
||
|
// Moodle is free software: you can redistribute it and/or modify
|
||
|
// it under the terms of the GNU General Public License as published by
|
||
|
// the Free Software Foundation, either version 3 of the License, or
|
||
|
// (at your option) any later version.
|
||
|
//
|
||
|
// Moodle is distributed in the hope that it will be useful,
|
||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
// GNU General Public License for more details.
|
||
|
//
|
||
|
// You should have received a copy of the GNU General Public License
|
||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
/**
|
||
|
* Class for loading/storing learning plan templates from the DB.
|
||
|
*
|
||
|
* @package core_competency
|
||
|
* @copyright 2015 Damyon Wiese
|
||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||
|
*/
|
||
|
namespace core_competency;
|
||
|
defined('MOODLE_INTERNAL') || die();
|
||
|
|
||
|
use context;
|
||
|
use lang_string;
|
||
|
use stdClass;
|
||
|
|
||
|
/**
|
||
|
* Class for loading/storing learning plan templates from the DB.
|
||
|
*
|
||
|
* @copyright 2015 Damyon Wiese
|
||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||
|
*/
|
||
|
class template extends persistent {
|
||
|
|
||
|
const TABLE = 'competency_template';
|
||
|
|
||
|
/** @var template object before update. */
|
||
|
protected $beforeupdate = null;
|
||
|
|
||
|
/**
|
||
|
* Return the definition of the properties of this model.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
protected static function define_properties() {
|
||
|
return array(
|
||
|
'shortname' => array(
|
||
|
'type' => PARAM_TEXT,
|
||
|
),
|
||
|
'description' => array(
|
||
|
'default' => '',
|
||
|
'type' => PARAM_CLEANHTML,
|
||
|
),
|
||
|
'descriptionformat' => array(
|
||
|
'choices' => array(FORMAT_HTML, FORMAT_MOODLE, FORMAT_PLAIN, FORMAT_MARKDOWN),
|
||
|
'type' => PARAM_INT,
|
||
|
'default' => FORMAT_HTML
|
||
|
),
|
||
|
'duedate' => array(
|
||
|
'default' => 0,
|
||
|
'type' => PARAM_INT,
|
||
|
),
|
||
|
'visible' => array(
|
||
|
'default' => 1,
|
||
|
'type' => PARAM_BOOL,
|
||
|
),
|
||
|
'contextid' => array(
|
||
|
'type' => PARAM_INT
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Hook to execute after an update.
|
||
|
*
|
||
|
* @param bool $result Whether or not the update was successful.
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function after_update($result) {
|
||
|
$this->beforeupdate = null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Hook to execute before validate.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function before_validate() {
|
||
|
$this->beforeupdate = null;
|
||
|
|
||
|
// During update.
|
||
|
if ($this->get('id')) {
|
||
|
$this->beforeupdate = new self($this->get('id'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Whether or not the current user can read the template.
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function can_manage() {
|
||
|
return self::can_manage_context($this->get_context());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Whether or not the current user can manage the template.
|
||
|
*
|
||
|
* @param context $context
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function can_manage_context($context) {
|
||
|
return has_capability('moodle/competency:templatemanage', $context);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Whether or not the current user can read the template.
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function can_read() {
|
||
|
return self::can_read_context($this->get_context());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Whether or not the current user can read the template.
|
||
|
*
|
||
|
* @param context $context
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function can_read_context($context) {
|
||
|
return has_capability('moodle/competency:templateview', $context) || self::can_manage_context($context);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the context.
|
||
|
*
|
||
|
* @return context The context
|
||
|
*/
|
||
|
public function get_context() {
|
||
|
return context::instance_by_id($this->get('contextid'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Validate the context ID.
|
||
|
*
|
||
|
* @param int $value The context ID.
|
||
|
* @return bool|lang_string
|
||
|
*/
|
||
|
protected function validate_contextid($value) {
|
||
|
$context = context::instance_by_id($value, IGNORE_MISSING);
|
||
|
if (!$context) {
|
||
|
return new lang_string('invalidcontext', 'error');
|
||
|
} else if ($context->contextlevel != CONTEXT_SYSTEM && $context->contextlevel != CONTEXT_COURSECAT) {
|
||
|
return new lang_string('invalidcontext', 'error');
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Validate the due date.
|
||
|
*
|
||
|
* The due date can always be changed, but when it is it must be:
|
||
|
* - unset
|
||
|
* - set in the future.
|
||
|
*
|
||
|
* @param int $value The due date.
|
||
|
* @return bool|lang_string
|
||
|
*/
|
||
|
protected function validate_duedate($value) {
|
||
|
|
||
|
// During update.
|
||
|
if ($this->get('id')) {
|
||
|
$before = $this->beforeupdate->get('duedate');
|
||
|
|
||
|
// The value has not changed, then it's always OK.
|
||
|
if ($before == $value) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// During create and update, the date must be set in the future, or not set.
|
||
|
if (!empty($value) && $value <= time() - 600) {
|
||
|
// We cannot set the date in the past. But we allow for 10 minutes of margin so that
|
||
|
// a user can set the due date to "now" without risking to hit a validation error.
|
||
|
return new lang_string('errorcannotsetduedateinthepast', 'core_competency');
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true when the template has user learning plans.
|
||
|
*
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public function has_plans() {
|
||
|
return plan::has_records_for_template($this->get('id'));
|
||
|
}
|
||
|
|
||
|
}
|