From 5627cd959c35256156b043cf8ec973202184b4e2 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 31 Oct 2019 14:20:55 +0100 Subject: [PATCH] Fix course picture using Illustration resource --- config/services.yaml | 2 +- main/auth/courses_categories.php | 5 +- main/course_info/about.php | 2 +- main/course_info/infocours.php | 3 +- main/inc/lib/api.lib.php | 201 +++++++++--------- main/inc/lib/course.lib.php | 2 +- src/CoreBundle/Entity/Course.php | 20 ++ .../Repository/IllustrationRepository.php | 10 +- .../Repository/ResourceRepository.php | 18 -- .../Component/CourseCopy/CourseBuilder.php | 4 +- 10 files changed, 143 insertions(+), 124 deletions(-) diff --git a/config/services.yaml b/config/services.yaml index c495a6b304..6f5e939f9e 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -36,7 +36,7 @@ parameters: course_picture_small: w: 85 h: 47 - course_picture: + course_picture_medium: w: 400 h: 225 document_thumbnail_small: diff --git a/main/auth/courses_categories.php b/main/auth/courses_categories.php index 237bd70971..c34ba26198 100755 --- a/main/auth/courses_categories.php +++ b/main/auth/courses_categories.php @@ -325,7 +325,10 @@ function returnThumbnail($course) true ); - $illustrationUrl = Container::getIllustrationRepository()->getIllustrationUrl($courseEntity); + $illustrationUrl = Container::getIllustrationRepository()->getIllustrationUrl( + $courseEntity, + 'course_picture_medium' + ); if ($illustrationUrl) { $courseMediumImage = $illustrationUrl; } diff --git a/main/course_info/about.php b/main/course_info/about.php index 1eea5d8a81..aa95b0b16e 100644 --- a/main/course_info/about.php +++ b/main/course_info/about.php @@ -149,7 +149,7 @@ $courseItem = [ 'code' => $course->getCode(), 'title' => $course->getTitle(), 'description' => $courseDescription, - 'image' => Container::getIllustrationRepository()->getIllustrationUrl($course), + 'image' => Container::getIllustrationRepository()->getIllustrationUrl($course, 'course_picture_medium'), 'syllabus' => $topics, 'tags' => $courseTags, 'teachers' => $teachersData, diff --git a/main/course_info/infocours.php b/main/course_info/infocours.php index 8075ec0795..90d96c6a05 100755 --- a/main/course_info/infocours.php +++ b/main/course_info/infocours.php @@ -23,7 +23,6 @@ api_protect_course_script(true); api_block_anonymous_users(); $_course = api_get_course_info(); $courseEntity = api_get_course_entity(); -$currentCourseRepository = $_course['path']; $isAllowToEdit = api_is_course_admin() || api_is_platform_admin(); $course_code = api_get_course_id(); $courseId = api_get_course_int_id(); @@ -87,7 +86,7 @@ function card_settings_close() $form->addHtml(card_settings_open('course_settings', get_lang('Course settings'), true, 'settings.png', 'accordionSettings')); $image = ''; -$illustrationUrl = $illustrationRepo->getIllustrationUrl($courseEntity); +$illustrationUrl = $illustrationRepo->getIllustrationUrl($courseEntity, 'course_picture_medium'); if (!empty($illustrationUrl)) { $image = '
diff --git a/main/inc/lib/api.lib.php b/main/inc/lib/api.lib.php index c2b720d079..fd9fd6d111 100644 --- a/main/inc/lib/api.lib.php +++ b/main/inc/lib/api.lib.php @@ -2058,39 +2058,49 @@ function api_remove_in_gradebook() function api_get_course_info($course_code = null) { if (!empty($course_code)) { - $course_code = Database::escape_string($course_code); - $courseId = api_get_course_int_id($course_code); - - if (empty($courseId)) { + $course = Container::getCourseRepository()->findOneByCode($course_code); + if (empty($course)) { return []; } - $course_table = Database::get_main_table(TABLE_MAIN_COURSE); - $course_cat_table = Database::get_main_table(TABLE_MAIN_CATEGORY); - $sql = "SELECT - course.*, - course_category.code faCode, - course_category.name faName - FROM $course_table - LEFT JOIN $course_cat_table - ON course.category_code = course_category.code - WHERE course.id = $courseId"; - $result = Database::query($sql); - $courseInfo = []; - if (Database::num_rows($result) > 0) { - $data = Database::fetch_array($result); - $courseInfo = api_format_course_array($data); - } + $courseInfo = api_format_course_array($course); + + Session::write('_course', $courseInfo); return $courseInfo; } - $_course = Session::read('_course'); - if ($_course == '-1') { - $_course = []; + /*$course_code = Database::escape_string($course_code); + $courseId = api_get_course_int_id($course_code); + if (empty($courseId)) { + return []; + } + + $course_table = Database::get_main_table(TABLE_MAIN_COURSE); + $course_cat_table = Database::get_main_table(TABLE_MAIN_CATEGORY); + $sql = "SELECT + course.*, + course_category.code faCode, + course_category.name faName + FROM $course_table + LEFT JOIN $course_cat_table + ON course.category_code = course_category.code + WHERE course.id = $courseId"; + $result = Database::query($sql); + $courseInfo = []; + if (Database::num_rows($result) > 0) { + $data = Database::fetch_array($result); + $courseInfo = api_format_course_array($data); + } + + return $courseInfo;*/ + + $course = Session::read('_course'); + if ($course == '-1') { + $course = []; } - return $_course; + return $course; } /** @@ -2168,96 +2178,79 @@ function api_get_course_info_by_id($id = 0) return $course; } - $course_table = Database::get_main_table(TABLE_MAIN_COURSE); - $course_cat_table = Database::get_main_table(TABLE_MAIN_CATEGORY); - $sql = "SELECT - course.*, - course_category.code faCode, - course_category.name faName, - course_category.id faId - FROM $course_table - LEFT JOIN $course_cat_table - ON course.category_code = course_category.code - WHERE course.id = $id"; - $result = Database::query($sql); - - if (Database::num_rows($result) > 0) { - $row = Database::fetch_array($result); - $course = api_format_course_array($row); - - return $course; + $course = Container::getCourseRepository()->find($id); + if (empty($course)) { + return []; } - return []; + return api_format_course_array($course); } /** * Reformat the course array (output by api_get_course_info()) in order, mostly, - * to switch from 'code' to 'id' in the array. This is a legacy feature and is - * now possibly causing massive confusion as a new "id" field has been added to - * the course table in 1.9.0. + * to switch from 'code' to 'id' in the array. * - * @param $course_data + * @param Course $course * * @return array * * @todo eradicate the false "id"=code field of the $_course array and use the int id */ -function api_format_course_array($course_data) +function api_format_course_array(Course $course) { - if (empty($course_data)) { + if (empty($course)) { return []; } - $_course = []; - $_course['id'] = $course_data['code']; - $_course['real_id'] = $course_data['id']; + $categoryCode = $course->getCategoryCode(); + + $courseData = []; + $courseData['categoryCode'] = ''; + $courseData['categoryName'] = ''; + if (!empty($categoryCode)) { + $categoryRepo = Database::getManager()->getRepository('ChamiloCoreBundle:CourseCategory'); + $category = $categoryRepo->findOneBy(['code' => $categoryCode]); + $courseData['categoryCode'] = $category->getCode(); + $courseData['categoryName'] = $category->getName(); + } + + $courseData['id'] = $courseData['real_id'] = $course->getId(); // Added - $_course['code'] = $course_data['code']; - $_course['name'] = $course_data['title']; - $_course['title'] = $course_data['title']; - $_course['official_code'] = $course_data['visual_code']; - $_course['visual_code'] = $course_data['visual_code']; - $_course['sysCode'] = $course_data['code']; - $_course['path'] = $course_data['directory']; // Use as key in path. - $_course['directory'] = $course_data['directory']; - $_course['creation_date'] = $course_data['creation_date']; - $_course['titular'] = $course_data['tutor_name']; - $_course['language'] = $course_data['course_language']; - $_course['extLink']['url'] = $course_data['department_url']; - $_course['extLink']['name'] = $course_data['department_name']; - $_course['categoryCode'] = $course_data['faCode']; - $_course['categoryName'] = $course_data['faName']; - $_course['visibility'] = $course_data['visibility']; - $_course['subscribe_allowed'] = $course_data['subscribe']; - $_course['subscribe'] = $course_data['subscribe']; - $_course['unsubscribe'] = $course_data['unsubscribe']; - $_course['course_language'] = $course_data['course_language']; - $_course['activate_legal'] = isset($course_data['activate_legal']) ? $course_data['activate_legal'] : false; - $_course['legal'] = $course_data['legal']; - $_course['show_score'] = $course_data['show_score']; //used in the work tool - $_course['department_name'] = $course_data['department_name']; - $_course['department_url'] = $course_data['department_url']; - - $courseSys = api_get_path(SYS_COURSE_PATH).$course_data['directory']; - $webCourseHome = api_get_path(WEB_COURSE_PATH).$course_data['directory']; + $courseData['code'] = $courseData['sysCode'] = $course->getCode(); + $courseData['name'] = $courseData['title'] = $course->getTitle(); + $courseData['official_code'] = $courseData['visual_code'] = $course->getVisualCode(); + //$courseData['path'] = $course_data['directory']; // Use as key in path. + //$courseData['directory'] = $course_data['directory']; + $courseData['creation_date'] = $course->getCreationDate()->format('Y-m-d H:i:s'); + $courseData['titular'] = $course->getTutorName(); + $courseData['language'] = $courseData['course_language'] = $course->getCourseLanguage(); + $courseData['extLink']['url'] = $courseData['department_url'] = $course->getDepartmentUrl(); + $courseData['extLink']['name'] = $courseData['department_name'] = $course->getDepartmentName(); + + $courseData['visibility'] = $course->getVisibility(); + $courseData['subscribe_allowed'] = $courseData['subscribe'] = $course->getSubscribe(); + $courseData['unsubscribe'] = $course->getUnsubscribe(); + $courseData['activate_legal'] = $course->getActivateLegal(); + $courseData['legal'] = $course->getLegal(); + $courseData['show_score'] = $course->getShowScore(); //used in the work tool + + //$courseSys = api_get_path(SYS_COURSE_PATH).$course_data['directory']; + $webCourseHome = api_get_path(WEB_COURSE_PATH).$courseData['code']; // Course password - $_course['registration_code'] = !empty($course_data['registration_code']) ? sha1($course_data['registration_code']) : null; - $_course['disk_quota'] = $course_data['disk_quota']; - $_course['course_public_url'] = $webCourseHome.'/index.php'; - $_course['course_sys_path'] = $courseSys.'/'; - - if (array_key_exists('add_teachers_to_sessions_courses', $course_data)) { - $_course['add_teachers_to_sessions_courses'] = $course_data['add_teachers_to_sessions_courses']; - } + $courseData['registration_code'] = $course->getRegistrationCode(); + $courseData['disk_quota'] = $course->getDiskQuota(); + $courseData['course_public_url'] = $webCourseHome.'/index.php'; + //$courseData['course_sys_path'] = $courseSys.'/'; + $courseData['add_teachers_to_sessions_courses'] = $course->isAddTeachersToSessionsCourses(); + $courseData['entity'] = $course; // Course image - $_course['course_image_source'] = ''; + /*$courseData['course_image_source'] = ''; if (file_exists($courseSys.'/course-pic85x85.png')) { $url_image = $webCourseHome.'/course-pic85x85.png'; - $_course['course_image_source'] = $courseSys.'/course-pic85x85.png'; + $courseData['course_image_source'] = $courseSys.'/course-pic85x85.png'; } else { $url_image = Display::return_icon( 'course.png', @@ -2268,14 +2261,30 @@ function api_format_course_array($course_data) true, false ); + }*/ + + $image = Display::return_icon( + 'course.png', + null, + null, + ICON_SIZE_BIG, + null, + true, + false + ); + + $illustration = Container::getIllustrationRepository()->getIllustrationUrl($course); + if (!empty($illustration)) { + $image = $illustration; } - $_course['course_image'] = $url_image; + + $courseData['course_image'] = $image.'?filter=course_picture_small'; // Course large image - $_course['course_image_large_source'] = ''; + /*$courseData['course_image_large_source'] = ''; if (file_exists($courseSys.'/course-pic.png')) { $url_image = $webCourseHome.'/course-pic.png'; - $_course['course_image_large_source'] = $courseSys.'/course-pic.png'; + $courseData['course_image_large_source'] = $courseSys.'/course-pic.png'; } else { $url_image = Display::return_icon( 'session_default.png', @@ -2286,11 +2295,11 @@ function api_format_course_array($course_data) true, true ); - } + }*/ - $_course['course_image_large'] = $url_image; + $courseData['course_image_large'] = $image.'?filter=course_picture_medium'; - return $_course; + return $courseData; } /** diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 4ec76615b5..016a93033b 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -3810,7 +3810,7 @@ class CourseManager ); } - $courseUrl = api_get_path(WEB_COURSE_PATH).$course_info['path'].'/index.php?id_session=0'; + $courseUrl = $course_info['course_public_url'].'?id_session=0'; $teachers = []; if (api_get_setting('display_teacher_in_courselist') === 'true') { $teachers = self::getTeachersFromCourse( diff --git a/src/CoreBundle/Entity/Course.php b/src/CoreBundle/Entity/Course.php index 18b284bfa4..328635236f 100644 --- a/src/CoreBundle/Entity/Course.php +++ b/src/CoreBundle/Entity/Course.php @@ -1177,6 +1177,26 @@ class Course extends AbstractResource implements ResourceInterface return $this->activateLegal; } + /** + * @return bool + */ + public function isAddTeachersToSessionsCourses() + { + return $this->addTeachersToSessionsCourses; + } + + /** + * @param bool $addTeachersToSessionsCourses + * + * @return Course + */ + public function setAddTeachersToSessionsCourses($addTeachersToSessionsCourses): Course + { + $this->addTeachersToSessionsCourses = $addTeachersToSessionsCourses; + + return $this; + } + /** * Set courseTypeId. * diff --git a/src/CoreBundle/Repository/IllustrationRepository.php b/src/CoreBundle/Repository/IllustrationRepository.php index 53d514608c..12b5bcbce0 100644 --- a/src/CoreBundle/Repository/IllustrationRepository.php +++ b/src/CoreBundle/Repository/IllustrationRepository.php @@ -75,17 +75,23 @@ class IllustrationRepository extends ResourceRepository /** * @param AbstractResource $resource + * @param string $filter * * @return string */ - public function getIllustrationUrl(AbstractResource $resource) + public function getIllustrationUrl(AbstractResource $resource, $filter = '') { $node = $this->getIllustrationNodeFromResource($resource); if ($node !== null) { + $params = ['id' => $node->getId()]; + if (!empty($filter)) { + $params['filter'] = $filter; + } + return $this->router->generate( 'core_tool_resource', - ['id' => $node->getId(), 'filter' => 'course_picture'] + $params ); } diff --git a/src/CoreBundle/Repository/ResourceRepository.php b/src/CoreBundle/Repository/ResourceRepository.php index b7903f4062..f631436588 100644 --- a/src/CoreBundle/Repository/ResourceRepository.php +++ b/src/CoreBundle/Repository/ResourceRepository.php @@ -138,24 +138,6 @@ class ResourceRepository extends EntityRepository return $this->getRepository()->findOneBy($criteria, $orderBy); } - /** - * @param AbstractResource $resource - * - * @return ResourceNode|mixed - */ - /*public function getIllustration(AbstractResource $resource) - { - $node = $resource->getResourceNode(); - // @todo also filter by the resource type = Illustration - $criteria = Criteria::create()->where( - Criteria::expr()->eq('name', 'course_picture') - ); - - $illustration = $node->getChildren()->matching($criteria)->first(); - - return $illustration; - }*/ - /** * @param ResourceNode $resourceNode * @param UploadedFile $file diff --git a/src/CourseBundle/Component/CourseCopy/CourseBuilder.php b/src/CourseBundle/Component/CourseCopy/CourseBuilder.php index 24dead9a24..d59e87dc7c 100644 --- a/src/CourseBundle/Component/CourseCopy/CourseBuilder.php +++ b/src/CourseBundle/Component/CourseCopy/CourseBuilder.php @@ -269,7 +269,7 @@ class CourseBuilder } // Add asset - if ($course['course_image_source'] && basename($course['course_image_source']) !== 'course.png') { + /*if ($course['course_image_source'] && basename($course['course_image_source']) !== 'course.png') { // Add course image courses/XXX/course-pic85x85.png $asset = new Asset( $course['course_image_source'], @@ -284,7 +284,7 @@ class CourseBuilder basename($course['course_image_large_source']) ); $this->course->add_resource($asset); - } + }*/ // Once we've built the resources array a bit more, try to get items // from the item_property table and order them in the "resources" array