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/>.
|
||
|
|
||
|
/**
|
||
|
* User evidence persistent.
|
||
|
*
|
||
|
* @package core_competency
|
||
|
* @copyright 2015 Frédéric Massart - FMCorz.net
|
||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||
|
*/
|
||
|
|
||
|
namespace core_competency;
|
||
|
defined('MOODLE_INTERNAL') || die();
|
||
|
|
||
|
use context_user;
|
||
|
use lang_string;
|
||
|
|
||
|
/**
|
||
|
* User evidence persistent class.
|
||
|
*
|
||
|
* @package core_competency
|
||
|
* @copyright 2015 Frédéric Massart - FMCorz.net
|
||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||
|
*/
|
||
|
class user_evidence extends persistent {
|
||
|
|
||
|
const TABLE = 'competency_userevidence';
|
||
|
|
||
|
/**
|
||
|
* Return the definition of the properties of this model.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
protected static function define_properties() {
|
||
|
return array(
|
||
|
'userid' => array(
|
||
|
'type' => PARAM_INT
|
||
|
),
|
||
|
'name' => array(
|
||
|
'type' => PARAM_TEXT
|
||
|
),
|
||
|
'description' => array(
|
||
|
'type' => PARAM_CLEANHTML,
|
||
|
'default' => '',
|
||
|
),
|
||
|
'descriptionformat' => array(
|
||
|
'choices' => array(FORMAT_HTML, FORMAT_MOODLE, FORMAT_PLAIN, FORMAT_MARKDOWN),
|
||
|
'type' => PARAM_INT,
|
||
|
'default' => FORMAT_HTML,
|
||
|
),
|
||
|
'url' => array(
|
||
|
'type' => PARAM_URL,
|
||
|
'default' => '',
|
||
|
'message' => new lang_string('invalidurl', 'core_competency')
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Can the current user manage this user evidence?
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function can_manage() {
|
||
|
return self::can_manage_user($this->get('userid'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Can the current user view this user evidence?
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function can_read() {
|
||
|
return self::can_read_user($this->get('userid'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the context of this user evidence.
|
||
|
*
|
||
|
* @return context
|
||
|
*/
|
||
|
public function get_context() {
|
||
|
return context_user::instance($this->get('userid'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get link competencies.
|
||
|
*/
|
||
|
public function get_competencies() {
|
||
|
return user_evidence_competency::get_competencies_by_userevidenceid($this->get('id'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get link user competencies.
|
||
|
*/
|
||
|
public function get_user_competencies() {
|
||
|
return user_evidence_competency::get_user_competencies_by_userevidenceid($this->get('id'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return true if the user of the evidence has plan.
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function user_has_plan() {
|
||
|
return plan::record_exists_select('userid = ?', array($this->get('userid')));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return the files associated with this evidence.
|
||
|
*
|
||
|
* @return object[]
|
||
|
*/
|
||
|
public function get_files() {
|
||
|
$fs = get_file_storage();
|
||
|
$files = $fs->get_area_files($this->get_context()->id, 'core_competency', 'userevidence', $this->get('id'),
|
||
|
'filename', false);
|
||
|
return $files;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Validate the URL.
|
||
|
*
|
||
|
* @param int $value
|
||
|
* @return true|lang_string
|
||
|
*/
|
||
|
protected function validate_url($value) {
|
||
|
if (empty($value) && !is_numeric($value)) {
|
||
|
return true;
|
||
|
}
|
||
|
if (!preg_match('@^https?://.+@', $value)) {
|
||
|
return new lang_string('invalidurl', 'core_competency');
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Validate the user ID.
|
||
|
*
|
||
|
* @param int $value
|
||
|
* @return true|lang_string
|
||
|
*/
|
||
|
protected function validate_userid($value) {
|
||
|
global $DB;
|
||
|
|
||
|
// During create.
|
||
|
if (!$this->get('id')) {
|
||
|
|
||
|
// Check that the user exists. We do not need to do that on update because
|
||
|
// the userid of an evidence should never change.
|
||
|
if (!$DB->record_exists('user', array('id' => $value))) {
|
||
|
return new lang_string('invaliddata', 'error');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Can the current user manage a user's evidence?
|
||
|
*
|
||
|
* @param int $evidenceuserid The user to whom the evidence would belong.
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function can_manage_user($evidenceuserid) {
|
||
|
global $USER;
|
||
|
$context = context_user::instance($evidenceuserid);
|
||
|
|
||
|
$capabilities = array('moodle/competency:userevidencemanage');
|
||
|
if ($context->instanceid == $USER->id) {
|
||
|
$capabilities[] = 'moodle/competency:userevidencemanageown';
|
||
|
}
|
||
|
|
||
|
return has_any_capability($capabilities, $context);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Can the current user view a user's evidence?
|
||
|
*
|
||
|
* @param int $evidenceuserid The user to whom the evidence would belong.
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function can_read_user($evidenceuserid) {
|
||
|
$context = context_user::instance($evidenceuserid);
|
||
|
|
||
|
$capabilities = array('moodle/competency:userevidenceview');
|
||
|
|
||
|
return has_any_capability($capabilities, $context) || self::can_manage_user($evidenceuserid);
|
||
|
}
|
||
|
|
||
|
}
|