Internal: Fix queries, use iid instead of id

pull/3466/head
Julio Montoya 4 years ago
parent 1d8cb8fe80
commit 5c080a9113
  1. 11
      public/main/exercise/question.class.php
  2. 5
      public/main/forum/forumfunction.inc.php
  3. 4
      public/main/gradebook/gradebook_add_link.php
  4. 10
      public/main/gradebook/gradebook_edit_link.php
  5. 27
      public/main/gradebook/gradebook_flatview.php
  6. 1
      public/main/gradebook/gradebook_view_result.php
  7. 2
      public/main/gradebook/index.php
  8. 10
      public/main/gradebook/lib/GradebookUtils.php
  9. 19
      public/main/gradebook/lib/be/attendancelink.class.php
  10. 4
      public/main/gradebook/lib/be/exerciselink.class.php
  11. 18
      public/main/gradebook/lib/be/forumthreadlink.class.php
  12. 6
      public/main/gradebook/lib/be/learnpathlink.class.php
  13. 4
      public/main/gradebook/lib/be/result.class.php
  14. 2
      public/main/gradebook/lib/be/studentpublicationlink.class.php
  15. 31
      public/main/inc/lib/AnnouncementManager.php
  16. 9
      public/main/inc/lib/api.lib.php
  17. 14
      public/main/inc/lib/document.lib.php
  18. 7
      public/main/inc/lib/usermanager.lib.php
  19. 4
      src/CoreBundle/Entity/AbstractResource.php
  20. 6
      src/CoreBundle/Entity/GradebookCategory.php
  21. 3
      src/CoreBundle/Resources/config/services.yml

@ -581,6 +581,7 @@ abstract class Question
$current_position = Database::result($result, 0, 0);
$this->updatePosition($current_position + 1);
$position = $this->position;
$exerciseEntity = $exerciseRepo->find($exerciseId);
$question = new CQuizQuestion();
$question
@ -593,15 +594,13 @@ abstract class Question
->setExtra($this->extra)
->setLevel($this->level)
->setFeedback($this->feedback)
;
$exerciseEntity = $exerciseRepo->find($exerciseId);
$question->setParent($exerciseEntity);
$question->addCourseLink(
->setParent($exerciseEntity)
->addCourseLink(
api_get_course_entity(),
api_get_session_entity(),
api_get_group_entity()
);
)
;
$em->persist($question);
$em->flush();

@ -952,8 +952,9 @@ function store_forum($values, $courseInfo = [], $returnId = false)
if ($image_moved) {
$new_file_name = isset($new_file_name) ? $new_file_name : '';
}
$forum->setParent($course);
$forum->addCourseLink($course, $session);
$forum
->setParent($course)
->addCourseLink($course, $session);
$repo->getEntityManager()->persist($forum);
$repo->getEntityManager()->flush();

@ -102,7 +102,7 @@ if (isset($typeSelected) && '0' != $typeSelected) {
$sql1 = 'SELECT thread_title from '.$tbl_forum_thread.'
WHERE
c_id = '.$course_info['real_id'].' AND
thread_id = '.$addvalues['select_link'];
iid = '.$addvalues['select_link'];
$res1 = Database::query($sql1);
$rowtit = Database::fetch_row($res1);
$course_id = api_get_course_id();
@ -120,7 +120,7 @@ if (isset($typeSelected) && '0' != $typeSelected) {
thread_weight= "'.api_float_val($addvalues['weight']).'",
thread_title_qualify = "'.$rowtit[0].'"
WHERE
thread_id='.$addvalues['select_link'].' AND
iid ='.$addvalues['select_link'].' AND
c_id = '.$course_info['real_id'].' ';
Database::query($sql);
}

@ -73,11 +73,11 @@ if ($form->validate()) {
}
//Update weight into forum thread
$sql = 'UPDATE '.$tbl_forum_thread.' SET
$sql = 'UPDATE '.$tbl_forum_thread.' SET
thread_weight = '.api_float_val($final_weight).'
WHERE
c_id = '.$course_id.' AND
thread_id = (
WHERE
c_id = '.$course_id.' AND
iid = (
SELECT ref_id FROM '.$tbl_grade_links.'
WHERE id='.intval($_GET['editlink']).' AND type = 5
)';
@ -89,7 +89,7 @@ if ($form->validate()) {
UPDATE ChamiloCourseBundle:CStudentPublication w
SET w.weight = :final_weight
WHERE w.cId = :course
AND w.id = (
AND w.iid = (
SELECT l.refId FROM ChamiloCoreBundle:GradebookLink l
WHERE l.id = :link AND l.type = :type
)

@ -269,24 +269,17 @@ if (isset($_GET['exportpdf'])) {
} else {
Display::display_header(get_lang('List View'));
}
if (isset($_GET['isStudentView']) && 'false' === $_GET['isStudentView']) {
DisplayGradebook::display_header_reduce_flatview(
$cat[0],
$showeval,
$showlink,
$simple_search_form
);
$flatViewTable->display();
} elseif (isset($_GET['selectcat']) && ($_SESSION['studentview'] === 'teacherview')) {
DisplayGradebook::display_header_reduce_flatview(
$cat[0],
$showeval,
$showlink,
$simple_search_form
);
$studentView = api_is_student_view_active();
DisplayGradebook::display_header_reduce_flatview(
$cat[0],
$showeval,
$showlink,
$simple_search_form
);
$flatViewTable->display();
// Table
$flatViewTable->display();
if (false === $studentView) {
//@todo load images with jquery
echo '<div id="contentArea" style="text-align: center;" >';
$flatViewTable->display_graph_by_resource();

@ -2,7 +2,6 @@
/* For licensing terms, see /license.txt */
require_once __DIR__.'/../inc/global.inc.php';
require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/fe/exportgradebook.php';

@ -457,7 +457,7 @@ if (isset($_GET['deletelink'])) {
thread_qualify_max = 0,
thread_weight = 0,
thread_title_qualify = ""
WHERE c_id = '.$course_id.' AND thread_id = (
WHERE c_id = '.$course_id.' AND iid = (
SELECT ref_id FROM '.$tbl_grade_links.'
WHERE id='.$get_delete_link.' AND type = '.LINK_FORUM_THREAD.'
)';

@ -744,17 +744,17 @@ class GradebookUtils
{
$table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$sql = 'SELECT DISTINCT u.user_id, u.lastname, u.firstname, u.username, gc.created_at
$sql = 'SELECT DISTINCT u.id as user_id, u.lastname, u.firstname, u.username, gc.created_at
FROM '.$table_user.' u
INNER JOIN '.$table_certificate.' gc
ON u.user_id=gc.user_id ';
ON u.id = gc.user_id ';
if (!is_null($cat_id) && $cat_id > 0) {
$sql .= ' WHERE cat_id='.intval($cat_id);
}
if (!empty($userList)) {
$userList = array_map('intval', $userList);
$userListCondition = implode("','", $userList);
$sql .= " AND u.user_id IN ('$userListCondition')";
$sql .= " AND u.id IN ('$userListCondition')";
}
$sql .= ' ORDER BY '.(api_sort_by_first_name() ? 'u.firstname' : 'u.lastname');
$rs = Database::query($sql);
@ -1355,7 +1355,7 @@ class GradebookUtils
thread_weight = '.api_float_val($weight).'
WHERE
c_id = '.$course_id.' AND
thread_id = (
iid = (
SELECT ref_id FROM '.$table_link.'
WHERE id='.$linkId.' AND type='.LINK_FORUM_THREAD.'
)
@ -1367,7 +1367,7 @@ class GradebookUtils
UPDATE ChamiloCourseBundle:CStudentPublication w
SET w.weight = :final_weight
WHERE w.cId = :course
AND w.id = (
AND w.iid = (
SELECT l.refId FROM ChamiloCoreBundle:GradebookLink l
WHERE l.id = :link AND l.type = :type
)

@ -49,7 +49,7 @@ class AttendanceLink extends AbstractLink
$tbl_attendance = $this->get_attendance_table();
$sessionId = $this->get_session_id();
$sql = 'SELECT att.id, att.name, att.attendance_qualify_title
$sql = 'SELECT att.iid, att.name, att.attendance_qualify_title
FROM '.$tbl_attendance.' att
WHERE
att.c_id = '.$this->course_id.' AND
@ -60,14 +60,13 @@ class AttendanceLink extends AbstractLink
while ($data = Database::fetch_array($result)) {
if (isset($data['attendance_qualify_title']) && '' != $data['attendance_qualify_title']) {
$cats[] = [$data['id'], $data['attendance_qualify_title']];
$cats[] = [$data['iid'], $data['attendance_qualify_title']];
} else {
$cats[] = [$data['id'], $data['name']];
$cats[] = [$data['iid'], $data['name']];
}
}
$my_cats = isset($cats) ? $cats : [];
return $my_cats;
return isset($cats) ? $cats : [];
}
/**
@ -104,7 +103,7 @@ class AttendanceLink extends AbstractLink
FROM '.$this->get_attendance_table().' att
WHERE
att.c_id = '.$this->course_id.' AND
att.id = '.$this->get_ref_id().' AND
att.iid = '.$this->get_ref_id().' AND
att.session_id = '.$sessionId;
$query = Database::query($sql);
$attendance = Database::fetch_array($query, 'ASSOC');
@ -216,8 +215,8 @@ class AttendanceLink extends AbstractLink
*/
public function is_valid_link()
{
$sql = 'SELECT count(att.id) FROM '.$this->get_attendance_table().' att
WHERE att.c_id = '.$this->course_id.' AND att.id = '.$this->get_ref_id();
$sql = 'SELECT count(att.iid) FROM '.$this->get_attendance_table().' att
WHERE att.c_id = '.$this->course_id.' AND att.iid = '.$this->get_ref_id();
$result = Database::query($sql);
$number = Database::fetch_row($result);
@ -229,7 +228,7 @@ class AttendanceLink extends AbstractLink
// it was extracts the attendance id
$sessionId = $this->get_session_id();
$sql = 'SELECT * FROM '.$this->get_attendance_table().' att
WHERE att.c_id = '.$this->course_id.' AND att.id = '.$this->get_ref_id();
WHERE att.c_id = '.$this->course_id.' AND att.iid = '.$this->get_ref_id();
$result = Database::query($sql);
$row = Database::fetch_array($result, 'ASSOC');
$attendance_id = $row['id'];
@ -266,7 +265,7 @@ class AttendanceLink extends AbstractLink
return false;
} elseif (!isset($this->attendance_data)) {
$sql = 'SELECT * FROM '.$this->get_attendance_table().' att
WHERE att.c_id = '.$this->course_id.' AND att.id = '.$this->get_ref_id();
WHERE att.c_id = '.$this->course_id.' AND att.iid = '.$this->get_ref_id();
$query = Database::query($sql);
$this->attendance_data = Database::fetch_array($query);
}

@ -60,7 +60,7 @@ class ExerciseLink extends AbstractLink
$sqlLp = "SELECT e.iid, e.title
FROM $exerciseTable e
INNER JOIN $lpItemTable i
ON (e.c_id = i.c_id AND e.id = i.path)
ON (e.c_id = i.c_id AND e.iid = i.path)
WHERE
e.c_id = $this->course_id AND
active = 0 AND
@ -253,7 +253,7 @@ class ExerciseLink extends AbstractLink
ON (hp.exe_name = doc.path AND doc.c_id = hp.c_id)
WHERE
hp.c_id = $courseId AND
doc.id = $exerciseId";
doc.iid = $exerciseId";
if (!empty($stud_id)) {
$sql .= " AND hp.exe_user_id = $stud_id ";

@ -58,7 +58,7 @@ class ForumThreadLink extends AbstractLink
$session_condition = '(tl.session_id = 0 OR tl.session_id IS NULL)';
}
$sql = 'SELECT tl.thread_id, tl.thread_title, tl.thread_title_qualify
$sql = 'SELECT tl.iid as thread_id, tl.thread_title, tl.thread_title_qualify
FROM '.$tbl_grade_links.' tl
WHERE
tl.c_id = '.$this->course_id.' AND
@ -90,7 +90,7 @@ class ForumThreadLink extends AbstractLink
$sql = "SELECT count(*) AS number FROM $table
WHERE
c_id = ".$this->course_id." AND
thread_id = '".$this->get_ref_id()."'
iid = '".$this->get_ref_id()."'
";
$result = Database::query($sql);
$number = Database::fetch_row($result);
@ -121,7 +121,7 @@ class ForumThreadLink extends AbstractLink
FROM '.Database::get_course_table(TABLE_FORUM_THREAD)."
WHERE
c_id = ".$this->course_id." AND
thread_id = '".$this->get_ref_id()."'
iid = '".$this->get_ref_id()."'
$sessionCondition
";
$query = Database::query($sql);
@ -130,7 +130,7 @@ class ForumThreadLink extends AbstractLink
$sql = "SELECT * FROM $thread_qualify
WHERE
c_id = ".$this->course_id." AND
thread_id = ".$this->get_ref_id()."
iid = ".$this->get_ref_id()."
$sessionCondition
";
if (isset($stud_id)) {
@ -264,7 +264,7 @@ class ForumThreadLink extends AbstractLink
$sql = 'SELECT count(id) from '.$this->get_forum_thread_table().'
WHERE
c_id = '.$this->course_id.' AND
thread_id = '.$this->get_ref_id().' AND
iid = '.$this->get_ref_id().' AND
session_id='.$sessionId;
$result = Database::query($sql);
$number = Database::fetch_row($result);
@ -279,7 +279,7 @@ class ForumThreadLink extends AbstractLink
$sql = 'SELECT * FROM '.$this->get_forum_thread_table()."
WHERE
c_id = '.$this->course_id.' AND
thread_id = '".$this->get_ref_id()."' AND
iid = '".$this->get_ref_id()."' AND
session_id = $sessionId ";
$result = Database::query($sql);
$row = Database::fetch_array($result, 'ASSOC');
@ -303,7 +303,7 @@ class ForumThreadLink extends AbstractLink
if (!empty($ref_id)) {
$sql = 'UPDATE '.$this->get_forum_thread_table().' SET
thread_weight='.api_float_val($weight).'
WHERE c_id = '.$this->course_id.' AND thread_id= '.$ref_id;
WHERE c_id = '.$this->course_id.' AND iid = '.$ref_id;
Database::query($sql);
}
}
@ -317,7 +317,7 @@ class ForumThreadLink extends AbstractLink
thread_qualify_max = 0,
thread_weight = 0,
thread_title_qualify = ""
WHERE c_id = '.$this->course_id.' AND thread_id= '.$ref_id;
WHERE c_id = '.$this->course_id.' AND iid = '.$ref_id;
Database::query($sql);
}
}
@ -343,7 +343,7 @@ class ForumThreadLink extends AbstractLink
$sql = 'SELECT * FROM '.$this->get_forum_thread_table().'
WHERE
c_id = '.$this->course_id.' AND
thread_id = '.$this->get_ref_id().' AND
iid = '.$this->get_ref_id().' AND
'.$session_condition;
$query = Database::query($sql);
$this->exercise_data = Database::fetch_array($query);

@ -40,7 +40,7 @@ class LearnpathLink extends AbstractLink
$session_condition = api_get_session_condition($session_id, true, true);
}
$sql = 'SELECT id, name FROM '.$this->get_learnpath_table().'
$sql = 'SELECT iid, name FROM '.$this->get_learnpath_table().'
WHERE c_id = '.$this->course_id.' '.$session_condition.' ';
$result = Database::query($sql);
@ -192,7 +192,7 @@ class LearnpathLink extends AbstractLink
*/
public function is_valid_link()
{
$sql = 'SELECT count(id) FROM '.$this->get_learnpath_table().'
$sql = 'SELECT count(iid) FROM '.$this->get_learnpath_table().'
WHERE c_id = '.$this->course_id.' AND id = '.$this->get_ref_id().' ';
$result = Database::query($sql);
$number = Database::fetch_row($result, 'NUM');
@ -247,7 +247,7 @@ class LearnpathLink extends AbstractLink
{
if (!isset($this->learnpath_data)) {
$sql = 'SELECT * FROM '.$this->get_learnpath_table().'
WHERE c_id = '.$this->course_id.' AND id = '.$this->get_ref_id().' ';
WHERE c_id = '.$this->course_id.' AND iid = '.$this->get_ref_id().' ';
$result = Database::query($sql);
$this->learnpath_data = Database::fetch_array($result);
}

@ -150,10 +150,10 @@ class Result
$sql = "SELECT lastname, gr.id, gr.user_id, gr.evaluation_id, gr.created_at, gr.score
FROM $tbl_grade_results gr
INNER JOIN $tbl_user u
ON gr.user_id = u.user_id ";
ON gr.user_id = u.id ";
if (!empty($userIdList)) {
$sql .= " AND u.user_id IN ('$userIdListToString')";
$sql .= " AND u.id IN ('$userIdListToString')";
}
$paramcount = 0;

@ -216,7 +216,7 @@ class StudentPublicationLink extends AbstractLink
case 'first':
default:
// first attempt
$dql .= ' ORDER BY a.id';
$dql .= ' ORDER BY a.iid';
break;
}

@ -483,6 +483,8 @@ class AnnouncementManager
$html .= "<table height=\"100\" width=\"100%\" cellpadding=\"5\" cellspacing=\"0\" class=\"data_table\">";
$html .= "<tr><td><h2>".$title."</h2></td></tr>";
$isVisible = $announcement->isVisible($course, $session);
if (api_is_allowed_to_edit(false, true) ||
(api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())
) {
@ -492,7 +494,7 @@ class AnnouncementManager
$image_visibility = 'invisible';
$alt_visibility = get_lang('Visible');
$setNewStatus = 'visible';
if ($announcement->isVisible($course, $session)) {
if ($isVisible) {
$image_visibility = 'visible';
$alt_visibility = get_lang('Hide');
$setNewStatus = 'invisible';
@ -507,6 +509,10 @@ class AnnouncementManager
"</a>";
}
$html .= "<tr><th style='text-align:right'>$modify_icons</th></tr>";
} else {
if (false === $isVisible) {
api_not_allowed(true);
}
}
// The user id is always the current one.
@ -647,25 +653,22 @@ class AnnouncementManager
$session = api_get_session_entity($sessionId);
$group = api_get_group_entity();
$em = Database::getManager();
$announcement = new CAnnouncement();
$announcement
->setContent($newContent)
->setTitle($title)
->setEndDate(new DateTime($end_date))
->setDisplayOrder($order)
;
$announcement
->setParent($course)
->addCourseLink(
$course,
$session,
$group
)
->setParent($course)
;
$em = Database::getManager();
$em->persist($announcement);
$em->flush();
$last_id = $announcement->getIid();
@ -2074,9 +2077,6 @@ class AnnouncementManager
{
// Maximum title messages to display
$maximum = '12';
// Database Table Definitions
$tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT);
$tbl_item_property = Database::get_course_table(TABLE_ITEM_PROPERTY);
$session_id = api_get_session_id();
$courseInfo = api_get_course_info();
@ -2124,18 +2124,19 @@ class AnnouncementManager
$qb = $repo->getResourcesByCourse($course, $session, $group);
$qb->select('count(resource)');
$count = $qb->getQuery()->getSingleScalarResult();
return $count;
return $qb->getQuery()->getSingleScalarResult();
}
} else {
$user = api_get_user_entity($userId);
if (null === $user) {
return 0;
}
$qb = $repo->getResourcesByCourseLinkedToUser($user, $course, $session, $group);
$qb->select('count(resource)');
$count = $qb->getQuery()->getSingleScalarResult();
return $count;
return $qb->getQuery()->getSingleScalarResult();
// students only get to see the visible announcements
if (empty($_GET['origin']) || 'learnpath' !== $_GET['origin']) {

@ -2221,13 +2221,8 @@ function api_get_course_info($course_code = null)
{
if (!empty($course_code)) {
$course = Container::getCourseRepository()->findOneByCode($course_code);
if (empty($course)) {
return [];
}
$courseInfo = api_format_course_array($course);
return $courseInfo;
return api_format_course_array($course);
}
/*$course_code = Database::escape_string($course_code);
@ -2358,7 +2353,7 @@ function api_get_course_info_by_id($id = 0)
*
* @todo eradicate the false "id"=code field of the $_course array and use the int id
*/
function api_format_course_array(Course $course)
function api_format_course_array(Course $course = null)
{
if (empty($course)) {
return [];

@ -1,4 +1,5 @@
<?php
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\ResourceFile;
@ -1609,16 +1610,17 @@ class DocumentManager
$my_content_html = null;
if ($document_id) {
$sql = "SELECT path FROM $tbl_document
WHERE c_id = $course_id AND id = $document_id";
WHERE c_id = $course_id AND iid = $document_id";
$rs = Database::query($sql);
$new_content = '';
$all_user_info = [];
if (Database::num_rows($rs)) {
$row = Database::fetch_array($rs);
$filepath = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/document'.$row['path'];
/*$filepath = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/document'.$row['path'];
if (is_file($filepath)) {
$my_content_html = file_get_contents($filepath);
}
}*/
$my_content_html = '';
$all_user_info = self::get_all_info_to_certificate(
$user_id,
$courseInfo,
@ -1652,12 +1654,12 @@ class DocumentManager
*
* @return array
*/
public static function get_all_info_to_certificate($user_id, $course_id, $sessionId, $is_preview = false)
public static function get_all_info_to_certificate($user_id, $course_info, $sessionId, $is_preview = false)
{
$info_list = [];
$user_id = (int) $user_id;
$course_info = api_get_course_info($course_id);
$sessionId = (int) $sessionId;
$courseCode = $course_info['code'];
// Portal info
$organization_name = api_get_setting('Institution');
@ -1690,7 +1692,7 @@ class DocumentManager
$teacher_last_name = $teacher_info['lastname'];
// info gradebook certificate
$info_grade_certificate = UserManager::get_info_gradebook_certificate($courseCode, $sessionId, $user_id);
$info_grade_certificate = UserManager::get_info_gradebook_certificate($course_info, $sessionId, $user_id);
$date_long_certificate = '';
$date_certificate = '';
$url = '';

@ -5287,18 +5287,19 @@ class UserManager
/**
* Gets the info about a gradebook certificate for a user by course.
*
* @param string $course_code The course code
* @param array $course_info The course code
* @param int $session_id
* @param int $user_id The user id
*
* @return array if there is not information return false
*/
public static function get_info_gradebook_certificate($course_code, $session_id, $user_id)
public static function get_info_gradebook_certificate($course_info, $session_id, $user_id)
{
$tbl_grade_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
$tbl_grade_category = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
$session_id = (int) $session_id;
$user_id = (int) $user_id;
$courseId = $course_info['real_id'];
if (empty($session_id)) {
$session_condition = ' AND (session_id = "" OR session_id = 0 OR session_id IS NULL )';
@ -5310,7 +5311,7 @@ class UserManager
WHERE cat_id = (
SELECT id FROM '.$tbl_grade_category.'
WHERE
course_code = "'.Database::escape_string($course_code).'" '.$session_condition.'
c_id = "'.$courseId.'" '.$session_condition.'
LIMIT 1
) AND user_id='.$user_id;

@ -81,6 +81,10 @@ abstract class AbstractResource
public function addCourseLink(Course $course, Session $session = null, CGroup $group = null)
{
if (null === $this->getParent()) {
throw new \Exception('addCourseLink requires to set the parent.');
}
$resourceLink = new ResourceLink();
$resourceLink
->setVisibility(ResourceLink::VISIBILITY_PUBLISHED)

@ -277,12 +277,10 @@ class GradebookCategory
* Set weight.
*
* @param float $weight
*
* @return GradebookCategory
*/
public function setWeight($weight)
public function setWeight($weight): self
{
$this->weight = $weight;
$this->weight = (float) $weight;
return $this;
}

@ -149,8 +149,7 @@ services:
- {name: kernel.event_listener, event: kernel.controller, method: onKernelController}
# Locale listener
chamilo_core.listener.locale:
class: Chamilo\CoreBundle\EventListener\LocaleListener
Chamilo\CoreBundle\EventListener\LocaleListener:
arguments: ['%kernel.default_locale%', '@chamilo.settings.manager', '@parameter_bag']
tags:
- {name: kernel.event_subscriber, priority: 15}

Loading…
Cancel
Save