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.
159 lines
4.1 KiB
159 lines
4.1 KiB
<?php
|
|
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
use Chamilo\CoreBundle\Entity\SkillRelUser;
|
|
use Chamilo\CoreBundle\Framework\Container;
|
|
|
|
class SkillRelUserModel extends Model
|
|
{
|
|
public $columns = [
|
|
'id',
|
|
'user_id',
|
|
'skill_id',
|
|
'acquired_skill_at',
|
|
'assigned_by',
|
|
'course_id',
|
|
'session_id',
|
|
];
|
|
|
|
public function __construct()
|
|
{
|
|
$this->table = Database::get_main_table(TABLE_MAIN_SKILL_REL_USER);
|
|
}
|
|
|
|
/**
|
|
* @param array $skill_list
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getUserBySkills($skill_list)
|
|
{
|
|
$users = [];
|
|
if (!empty($skill_list)) {
|
|
$skill_list = array_map('intval', $skill_list);
|
|
$skill_list = implode("', '", $skill_list);
|
|
|
|
$sql = "SELECT user_id FROM {$this->table}
|
|
WHERE skill_id IN ('$skill_list') ";
|
|
|
|
$result = Database::query($sql);
|
|
$users = Database::store_result($result, 'ASSOC');
|
|
}
|
|
|
|
return $users;
|
|
}
|
|
|
|
/**
|
|
* Get the achieved skills for the user.
|
|
*
|
|
* @param int $userId
|
|
* @param int $courseId Optional. The course id
|
|
* @param int $sessionId Optional. The session id
|
|
*
|
|
* @return array The skill list. Otherwise return false
|
|
*/
|
|
public function getUserSkills($userId, $courseId = 0, $sessionId = 0)
|
|
{
|
|
if (empty($userId)) {
|
|
return [];
|
|
}
|
|
|
|
$courseId = (int) $courseId;
|
|
$sessionId = $sessionId ? (int) $sessionId : null;
|
|
$whereConditions = [
|
|
'user_id = ? ' => (int) $userId,
|
|
];
|
|
|
|
if ($courseId > 0) {
|
|
$whereConditions['AND course_id = ? '] = $courseId;
|
|
$whereConditions['AND session_id = ?'] = $sessionId;
|
|
}
|
|
|
|
$result = Database::select(
|
|
'skill_id',
|
|
$this->table,
|
|
[
|
|
'where' => $whereConditions,
|
|
],
|
|
'all'
|
|
);
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Get the relation data between user and skill.
|
|
*
|
|
* @param int $userId The user id
|
|
* @param int $skillId The skill id
|
|
* @param int $courseId Optional. The course id
|
|
* @param int $sessionId Optional. The session id
|
|
*
|
|
* @return array The relation data. Otherwise return false
|
|
*/
|
|
public function getByUserAndSkill($userId, $skillId, $courseId = 0, $sessionId = 0)
|
|
{
|
|
$sql = "SELECT * FROM {$this->table} WHERE user_id = %d AND skill_id = %d ";
|
|
|
|
if ($courseId > 0) {
|
|
$sql .= "AND course_id = %d ".api_get_session_condition($sessionId, true);
|
|
}
|
|
|
|
$sql = sprintf(
|
|
$sql,
|
|
$userId,
|
|
$skillId,
|
|
$courseId
|
|
);
|
|
|
|
$result = Database::query($sql);
|
|
|
|
return Database::fetch_assoc($result);
|
|
}
|
|
|
|
/**
|
|
* Get the URL for the issue.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function getIssueUrl(SkillRelUser $skillIssue)
|
|
{
|
|
return api_get_path(WEB_PATH)."badge/{$skillIssue->getId()}";
|
|
}
|
|
|
|
/**
|
|
* Get the URL for the All issues page.
|
|
*/
|
|
public static function getIssueUrlAll(SkillRelUser $skillIssue): string
|
|
{
|
|
$router = Container::$container->get('router');
|
|
|
|
return $router->generate(
|
|
'badge_issued_all',
|
|
[
|
|
'skillId' => $skillIssue->getSkill()->getId(),
|
|
'userId' => $skillIssue->getUser()->getId(),
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get the URL for the assertion.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function getAssertionUrl(SkillRelUser $skillIssue)
|
|
{
|
|
$url = api_get_path(WEB_CODE_PATH).'skills/assertion.php?';
|
|
|
|
$url .= http_build_query([
|
|
'user' => $skillIssue->getUser()->getId(),
|
|
'skill' => $skillIssue->getSkill()->getId(),
|
|
'course' => $skillIssue->getCourse() ? $skillIssue->getCourse()->getId() : 0,
|
|
'session' => $skillIssue->getSession() ? $skillIssue->getSession()->getId() : 0,
|
|
]);
|
|
|
|
return $url;
|
|
}
|
|
}
|
|
|