From c6fd81c9cda9880290b32f64970be421bc3a2db8 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 6 Aug 2021 11:41:42 +0200 Subject: [PATCH] Skills: Update legacy code to use the Asset entity. --- public/main/admin/skill_badge_create.php | 90 +++++++------------ public/main/admin/skill_list.php | 3 +- public/main/inc/lib/SkillModel.php | 31 ++++--- .../default/skill/badge_create.html.twig | 30 ++++--- .../default/skill/badge_list.html.twig | 75 ++++++++-------- .../template/default/skill/list.html.twig | 12 +-- .../default/skill/skill_wheel.html.twig | 28 +++--- .../default/skill/skill_wheel.js.html.twig | 2 +- .../EventListener/AssetListener.php | 2 +- src/CoreBundle/Framework/Container.php | 6 ++ .../Repository/ExtraFieldValuesRepository.php | 2 - 11 files changed, 141 insertions(+), 140 deletions(-) diff --git a/public/main/admin/skill_badge_create.php b/public/main/admin/skill_badge_create.php index 6ad9f0aab5..3727f29bb8 100644 --- a/public/main/admin/skill_badge_create.php +++ b/public/main/admin/skill_badge_create.php @@ -2,11 +2,16 @@ /* For licensing terms, see /license.txt */ +use Chamilo\CoreBundle\Entity\Asset; +use Chamilo\CoreBundle\Framework\Container; + /** * Show information about Mozilla OpenBadges. * * @author Angel Fernando Quiroz Campos + * @author Julio Montoya */ + $cidReset = true; require_once __DIR__.'/../inc/global.inc.php'; @@ -17,10 +22,10 @@ SkillModel::isAllowed(); $this_section = SECTION_PLATFORM_ADMIN; $skillId = (int) ($_GET['id'] ?? 0); -$objSkill = new SkillModel(); -$skill = $objSkill->get($skillId); +$skillRepo = Container::getSkillRepository(); +$skill = $skillRepo->find($skillId); -$htmlHeadXtra[] = ''; +$htmlHeadXtra[] = ''; // Add badge studio paths $badgeStudio = [ @@ -32,66 +37,36 @@ $badgeStudio = [ ]; if ('POST' === $_SERVER['REQUEST_METHOD']) { - $params = [ - 'id' => $skillId, - ]; - throw new Exception('implement skill badge'); if ((isset($_FILES['image']) && 0 == $_FILES['image']['error']) || - !empty($_POST['badge_studio_image']) + (isset($_POST['badge_studio_image']) && !empty($_POST['badge_studio_image'])) ) { - /* - $dirPermissions = api_get_permissions_for_new_directories(); - $fileName = sha1($skill['name']); - $badgePath = api_get_path(SYS_UPLOAD_PATH).'badges/'; - $existsBadgesDirectory = is_dir($badgePath); - - if (!$existsBadgesDirectory) { - //$existsBadgesDirectory = api_create_protected_dir('badges', api_get_path(SYS_UPLOAD_PATH)); + $assetRepo = Container::getAssetRepository(); + $skillRepo->deleteAsset($skill); + $title = sprintf("%s.png", $skill->getName()); + + $asset = (new Asset()) + ->setCategory(Asset::SKILL) + ->setTitle($title) + ; + + if (isset($_POST['badge_studio_image']) && !empty($_POST['badge_studio_image'])) { + $badgeImage = base64_decode( + preg_replace('#^data:image/\w+;base64,#i', '', $_POST['badge_studio_image']) + ); + $asset = $assetRepo->createFromString($asset, 'image/png', $badgeImage); } - if ($existsBadgesDirectory) { - if (!empty($skill['icon'])) { - $iconFileAbsolutePath = $badgePath.$skill['icon']; - - if (Security::check_abs_path($iconFileAbsolutePath, $badgePath)) { - unlink($badgePath.$skill['icon']); - } - } - - $skillImagePath = sprintf("%s%s.png", $badgePath, $fileName); - if (!empty($_POST['badge_studio_image'])) { - $badgeImage = base64_decode( - preg_replace('#^data:image/\w+;base64,#i', '', $_POST['badge_studio_image']) - ); - file_put_contents($skillImagePath, $badgeImage); - $skillImage = new Image($skillImagePath); - } else { - $skillImage = new Image($_FILES['image']['tmp_name']); - } - - $skillImage->send_image($skillImagePath, -1, 'png'); - - $skillThumbPath = sprintf("%s%s-small.png", $badgePath, $fileName); - - $skillImageThumb = new Image($skillImagePath); - $skillImageThumb->resize(ICON_SIZE_BIG); - $skillImageThumb->send_image($skillThumbPath); - - $params['icon'] = sprintf("%s.png", $fileName); - } else { - Display::addFlash( - Display::return_message( - get_lang('The uploaded file could not be saved (perhaps a permission problem?)') - ), - 'warning' - ); - }*/ + if (isset($_FILES['image'])) { + $asset = $assetRepo->createFromRequest($asset, $_FILES['image']); + } + + $skill->setAsset($asset); + $skillRepo->update($skill); + + Display::addFlash(Display::return_message(get_lang('Update successful'))); } - Display::addFlash(Display::return_message(get_lang('Update successful'))); - $objSkill->update($params); - header('Location: '.api_get_path(WEB_CODE_PATH).'admin/skill_list.php'); - exit; + api_location(api_get_path(WEB_CODE_PATH).'admin/skill_list.php'); } $interbreadcrumb[] = [ @@ -100,6 +75,7 @@ $interbreadcrumb[] = [ ]; $interbreadcrumb[] = ['url' => 'skill_list.php', 'name' => get_lang('Manage skills')]; +$objSkill = new SkillModel(); $toolbar = $objSkill->getToolBar(); $tpl = new Template(get_lang('Create badge')); diff --git a/public/main/admin/skill_list.php b/public/main/admin/skill_list.php index 5972120996..45457201cc 100644 --- a/public/main/admin/skill_list.php +++ b/public/main/admin/skill_list.php @@ -158,10 +158,9 @@ switch ($action) { } } - /* View */ $skill = new SkillModel(); $skillList = $skill->getAllSkills(); - $extraFieldSearchTagId = isset($_REQUEST['tag_id']) ? $_REQUEST['tag_id'] : 0; + $extraFieldSearchTagId = $_REQUEST['tag_id'] ?? 0; if ($extraFieldSearchTagId) { $skills = []; diff --git a/public/main/inc/lib/SkillModel.php b/public/main/inc/lib/SkillModel.php index 30eea1a157..940cfb6e29 100644 --- a/public/main/inc/lib/SkillModel.php +++ b/public/main/inc/lib/SkillModel.php @@ -13,6 +13,7 @@ use Chamilo\CoreBundle\Entity\SkillRelItemRelUser; use Chamilo\CoreBundle\Entity\SkillRelSkill; use Chamilo\CoreBundle\Entity\SkillRelUser; use Chamilo\CoreBundle\Entity\User; +use Chamilo\CoreBundle\Framework\Container; use Chamilo\CourseBundle\Entity\CAttendance; use Chamilo\CourseBundle\Entity\CForumThread; use Chamilo\CourseBundle\Entity\CLink; @@ -80,7 +81,7 @@ class SkillModel extends Model // @todo fix badges icons //$path = api_get_path(WEB_UPLOAD_PATH).'badges/'; $path = ''; - if (!empty($result['icon'])) { + /*if (!empty($result['icon'])) { $iconSmall = sprintf( '%s-small.png', sha1($result['name']) @@ -98,15 +99,15 @@ class SkillModel extends Model $iconMini = Display::returnIconPath('badges-default.png', ICON_SIZE_MEDIUM); $iconSmall = Display::returnIconPath('badges-default.png', ICON_SIZE_BIG); $iconBig = Display::returnIconPath('badges-default.png', ICON_SIZE_HUGE); - } + }*/ - $result['icon_mini'] = $iconMini; + /*$result['icon_mini'] = $iconMini; $result['icon_small'] = $iconSmall; $result['icon_big'] = $iconBig; $result['img_mini'] = Display::img($iconBig, $result['name'], ['width' => ICON_SIZE_MEDIUM]); $result['img_big'] = Display::img($iconBig, $result['name']); - $result['img_small'] = Display::img($iconSmall, $result['name']); + $result['img_small'] = Display::img($iconSmall, $result['name']);*/ $result['name'] = self::translateName($result['name']); $result['short_code'] = self::translateCode($result['short_code']); @@ -297,6 +298,9 @@ class SkillModel extends Model } } + $skillRepo = Container::getSkillRepository(); + $assetRepo = Container::getAssetRepository(); + $sql = "SELECT s.id, s.name, @@ -313,21 +317,22 @@ class SkillModel extends Model $result = Database::query($sql); $skills = []; - //$webPath = api_get_path(WEB_UPLOAD_PATH); if (Database::num_rows($result)) { while ($row = Database::fetch_array($result, 'ASSOC')) { - $skillInfo = self::get($row['id']); + $skillId = $row['id']; + $skill = $skillRepo->find($skillId); - $row['img_mini'] = $skillInfo['img_mini']; - $row['img_big'] = $skillInfo['img_big']; - $row['img_small'] = $skillInfo['img_small']; + $row['asset'] = ''; + if ($skill->getAsset()) { + $row['asset'] = $assetRepo->getAssetUrl($skill->getAsset()); + } - $row['name'] = self::translateName($row['name']); - $row['short_code'] = self::translateCode($row['short_code']); + $row['name'] = self::translateName($skill->getName()); + $row['short_code'] = self::translateCode($skill->getShortCode()); $skillRelSkill = new SkillRelSkillModel(); - $parents = $skillRelSkill->getSkillParents($row['id']); + $parents = $skillRelSkill->getSkillParents($skillId); $row['level'] = count($parents) - 1; - $row['gradebooks'] = $this->getGradebooksBySkill($row['id']); + $row['gradebooks'] = $this->getGradebooksBySkill($skillId); $skills[$row['id']] = $row; } } diff --git a/public/main/template/default/skill/badge_create.html.twig b/public/main/template/default/skill/badge_create.html.twig index b58517b604..e53e3adbad 100644 --- a/public/main/template/default/skill/badge_create.html.twig +++ b/public/main/template/default/skill/badge_create.html.twig @@ -37,6 +37,7 @@ }); })(); +
@@ -52,7 +53,7 @@ type="file" name="image" id="image" class="help-badges-img" accept="image/*">
-
+