From fab5ade2762efea38e78c391eab147415d8e5d5f Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Sat, 6 Feb 2021 14:19:37 +0100 Subject: [PATCH] Add image extra field as an Asset instead of app/upload --- public/main/inc/lib/extra_field.lib.php | 89 ++++++++++--------- public/main/inc/lib/extra_field_value.lib.php | 47 ++++++---- public/main/inc/lib/sessionmanager.lib.php | 14 +-- public/main/session/session_edit.php | 5 -- src/CoreBundle/Entity/Asset.php | 20 ++--- .../EventListener/AssetListener.php | 6 -- 6 files changed, 90 insertions(+), 91 deletions(-) diff --git a/public/main/inc/lib/extra_field.lib.php b/public/main/inc/lib/extra_field.lib.php index ef8162f8bd..ea66984e1a 100644 --- a/public/main/inc/lib/extra_field.lib.php +++ b/public/main/inc/lib/extra_field.lib.php @@ -5,6 +5,7 @@ use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField; use Chamilo\CoreBundle\Entity\ExtraFieldRelTag; use Chamilo\CoreBundle\Entity\Tag; +use Chamilo\CoreBundle\Framework\Container; /** * Class ExtraField. @@ -998,8 +999,9 @@ class ExtraField extends Model } foreach ($extra as $field_details) { + $variable = $field_details['variable']; if (!empty($showOnlyTheseFields)) { - if (!in_array($field_details['variable'], $showOnlyTheseFields)) { + if (!in_array($variable, $showOnlyTheseFields)) { continue; } } @@ -1028,15 +1030,15 @@ class ExtraField extends Model continue; } - if (in_array($field_details['variable'], $exclude)) { + if (in_array($variable, $exclude)) { continue; } } if (!empty($introductionTextList) && - in_array($field_details['variable'], array_keys($introductionTextList)) + in_array($variable, array_keys($introductionTextList)) ) { - $form->addHtml($introductionTextList[$field_details['variable']]); + $form->addHtml($introductionTextList[$variable]); } $freezeElement = false; @@ -1135,14 +1137,14 @@ class ExtraField extends Model $options[$option_details['option_value']] = $option_details['display_text']; $group[] = $form->createElement( 'checkbox', - 'extra_'.$field_details['variable'], + 'extra_'.$variable, $option_details['option_value'], $option_details['display_text'].'
', $option_details['option_value'] ); } } else { - $fieldVariable = "extra_{$field_details['variable']}"; + $fieldVariable = "extra_$variable"; $checkboxAttributes = []; if (is_array($extraData) && array_key_exists($fieldVariable, $extraData) @@ -1265,8 +1267,7 @@ class ExtraField extends Model 'itemId' => $itemId, ] ); - // ofaj - + // ofaj. for ($i = 0; $i < $separateValue; $i++) { $tagsSelect = $form->addSelect( 'extra_'.$field_details['variable'].'['.$i.']', @@ -1535,9 +1536,12 @@ class ExtraField extends Model ]; if (is_array($extraData) && array_key_exists($fieldVariable, $extraData)) { - if (file_exists(api_get_path(SYS_UPLOAD_PATH).$extraData[$fieldVariable])) { + $assetId = $extraData[$fieldVariable]; + $assetRepo = Container::getAssetRepository(); + $asset = $assetRepo->find($assetId); + if (null !== $asset) { $fieldTexts[] = Display::img( - api_get_path(WEB_UPLOAD_PATH).$extraData[$fieldVariable], + $assetRepo->getAssetUrl($asset), $field_details['display_text'], ['width' => '300'] ); @@ -2906,7 +2910,6 @@ JAVASCRIPT; $valuesData = []; $fields = $this->get_all(); $em = Database::getManager(); - $repoTag = $em->getRepository(ExtraFieldRelTag::class); foreach ($fields as $field) { @@ -2929,10 +2932,12 @@ JAVASCRIPT; $field['id'], true ); - if (ExtraField::FIELD_TYPE_TAG == $field['field_type']) { + + $fieldType = (int) $field['field_type']; + if (ExtraField::FIELD_TYPE_TAG === (int) $fieldType) { $tags = $repoTag->findBy(['fieldId' => $field['id'], 'itemId' => $itemId]); if ($tags) { - /** @var \Chamilo\CoreBundle\Entity\ExtraFieldRelTag $tag */ + /** @var ExtraFieldRelTag $tag */ $data = []; foreach ($tags as $extraFieldTag) { /** @var \Chamilo\CoreBundle\Entity\Tag $tag */ @@ -2949,7 +2954,7 @@ JAVASCRIPT; } $displayedValue = get_lang('None'); - switch ($field['field_type']) { + switch ($fieldType) { case self::FIELD_TYPE_CHECKBOX: if (false !== $valueData && '1' == $valueData['value']) { $displayedValue = get_lang('Yes'); @@ -2967,45 +2972,43 @@ JAVASCRIPT; $displayedValue = $valueData; } break; + case self::FIELD_TYPE_FILE: case self::FIELD_TYPE_FILE_IMAGE: if (false === $valueData || empty($valueData['value'])) { break; } + $assetId = $valueData['value']; + $assetRepo = Container::getAssetRepository(); + $asset = $assetRepo->find($assetId); - if (!file_exists(api_get_path(SYS_UPLOAD_PATH).$valueData['value'])) { + if (null === $asset) { break; } - $image = Display::img( - api_get_path(WEB_UPLOAD_PATH).$valueData['value'], - $field['display_text'], - ['width' => '300'] - ); - - $displayedValue = Display::url( - $image, - api_get_path(WEB_UPLOAD_PATH).$valueData['value'], - ['target' => '_blank'] - ); - break; - case self::FIELD_TYPE_FILE: - if (false === $valueData || empty($valueData['value'])) { - break; - } + $url = $assetRepo->getAssetUrl($asset); - if (!file_exists(api_get_path(SYS_UPLOAD_PATH).$valueData['value'])) { - break; + if ($fieldType === self::FIELD_TYPE_FILE_IMAGE) { + $image = Display::img( + $url, + $field['display_text'], + ['width' => '300'] + ); + $displayedValue = Display::url( + $image, + $url, + ['target' => '_blank'] + ); + } else { + $displayedValue = Display::url( + get_lang('Download'), + $url, + [ + 'title' => $field['display_text'], + 'target' => '_blank', + 'class' => 'download_extra_field', + ] + ); } - - $displayedValue = Display::url( - get_lang('Download'), - api_get_path(WEB_UPLOAD_PATH).$valueData['value'], - [ - 'title' => $field['display_text'], - 'target' => '_blank', - 'class' => 'download_extra_field', - ] - ); break; default: $displayedValue = $valueData['value']; diff --git a/public/main/inc/lib/extra_field_value.lib.php b/public/main/inc/lib/extra_field_value.lib.php index b206cd0565..2f679dcc21 100644 --- a/public/main/inc/lib/extra_field_value.lib.php +++ b/public/main/inc/lib/extra_field_value.lib.php @@ -119,6 +119,7 @@ class ExtraFieldValue extends Model $extraField = new ExtraField($this->type); $extraFields = $extraField->get_all(null, 'option_order'); + $em = Database::getManager(); // Parse params. foreach ($extraFields as $fieldDetails) { @@ -189,7 +190,6 @@ class ExtraFieldValue extends Model $params['item_id'], $extraFieldInfo['id'] ); - UserManager::process_tags( $value, $params['item_id'], @@ -198,7 +198,6 @@ class ExtraFieldValue extends Model break; } - $em = Database::getManager(); $currentTags = $em ->getRepository(ExtraFieldRelTag::class) ->findBy([ @@ -258,9 +257,9 @@ class ExtraFieldValue extends Model $em->flush(); break; case ExtraField::FIELD_TYPE_FILE_IMAGE: + /* $fileDir = $fileDirStored = ''; - - /*switch ($this->type) { + switch ($this->type) { case 'course': $fileDir = api_get_path(SYS_UPLOAD_PATH)."courses/"; $fileDirStored = "courses/"; @@ -281,13 +280,11 @@ class ExtraFieldValue extends Model $fileName = ExtraField::FIELD_TYPE_FILE_IMAGE."_{$params['item_id']}.png"; if (!empty($value['tmp_name']) && isset($value['error']) && 0 == $value['error']) { $file = new UploadedFile($value['tmp_name'], $fileName, null, null, true); - $em = Database::getManager(); $asset = new Asset(); $asset ->setCategory(Asset::EXTRA_FIELD) ->setTitle($fileName) ->setFile($file) - ->setCompressed(true) ; $cropVariable = 'extra_'.$field_variable.'_crop_result'; if (isset($params[$cropVariable])) { @@ -297,7 +294,6 @@ class ExtraFieldValue extends Model $em->flush(); $assetId = $asset->getId(); //$repo = Container::getAssetRepository(); - if ($assetId) { // Crop the image to adjust 16:9 ratio /*$imageExtraField = new Image($value['tmp_name']); @@ -314,7 +310,7 @@ class ExtraFieldValue extends Model } break; case ExtraField::FIELD_TYPE_FILE: - $fileDir = $fileDirStored = ''; + /*$fileDir = $fileDirStored = ''; switch ($this->type) { case 'course': $fileDir = api_get_path(SYS_UPLOAD_PATH).'courses/'; @@ -336,16 +332,16 @@ class ExtraFieldValue extends Model $fileDir = api_get_path(SYS_UPLOAD_PATH).'scheduled_announcement/'; $fileDirStored = 'scheduled_announcement/'; break; - } + }*/ $cleanedName = api_replace_dangerous_char($value['name']); $fileName = ExtraField::FIELD_TYPE_FILE."_{$params['item_id']}_$cleanedName"; - if (!file_exists($fileDir)) { + /*if (!file_exists($fileDir)) { mkdir($fileDir, $dirPermissions, true); - } + }*/ if (!empty($value['tmp_name']) && isset($value['error']) && 0 == $value['error']) { - $cleanedName = api_replace_dangerous_char($value['name']); + /*$cleanedName = api_replace_dangerous_char($value['name']); $fileName = ExtraField::FIELD_TYPE_FILE."_{$params['item_id']}_$cleanedName"; moveUploadedFile($value, $fileDir.$fileName); @@ -353,13 +349,30 @@ class ExtraFieldValue extends Model 'item_id' => $params['item_id'], 'field_id' => $extraFieldInfo['id'], 'value' => $fileDirStored.$fileName, - ]; + ];*/ + $file = new UploadedFile($value['tmp_name'], $fileName, null, null, true); + $asset = new Asset(); + $asset + ->setCategory(Asset::EXTRA_FIELD) + ->setTitle($fileName) + ->setFile($file) + ; + $em->persist($asset); + $em->flush(); + $assetId = $asset->getId(); - if ('session' !== $this->type && 'course' !== $this->type) { - $new_params['comment'] = $comment; - } + if ($assetId) { + $new_params = [ + 'item_id' => $params['item_id'], + 'field_id' => $extraFieldInfo['id'], + 'value' => $assetId, + ]; + if ('session' !== $this->type && 'course' !== $this->type) { + $new_params['comment'] = $comment; + } - $this->save($new_params); + $this->save($new_params); + } } break; case ExtraField::FIELD_TYPE_CHECKBOX: diff --git a/public/main/inc/lib/sessionmanager.lib.php b/public/main/inc/lib/sessionmanager.lib.php index 6c0e2a28a1..46bbd0f983 100644 --- a/public/main/inc/lib/sessionmanager.lib.php +++ b/public/main/inc/lib/sessionmanager.lib.php @@ -299,9 +299,7 @@ class SessionManager $em->persist($session); $em->flush(); $session_id = $session->getId(); - $duration = (int) $duration; - if (!empty($duration)) { $sql = "UPDATE $tbl_session SET access_start_date = NULL, @@ -315,8 +313,8 @@ class SessionManager Database::query($sql); } else { $sql = "UPDATE $tbl_session - SET duration = 0 - WHERE id = $session_id"; + SET duration = 0 + WHERE id = $session_id"; Database::query($sql); } @@ -1622,7 +1620,7 @@ class SessionManager $visibility, $description = null, $showDescription = 0, - $duration = null, + $duration = 0, $extraFields = [], $sessionAdminId = 0, $sendSubscriptionNotification = false, @@ -1632,6 +1630,7 @@ class SessionManager $coachId = (int) $coachId; $sessionCategoryId = (int) $sessionCategoryId; $visibility = (int) $visibility; + $duration = (int) $duration; $em = Database::getManager(); @@ -7933,7 +7932,10 @@ class SessionManager 'session_template', get_lang('SessionTemplate'), [], - ['url' => api_get_path(WEB_AJAX_PATH).'session.ajax.php?a=search_template_session', 'id' => 'system_template'] + [ + 'url' => api_get_path(WEB_AJAX_PATH).'session.ajax.php?a=search_template_session', + 'id' => 'system_template', + ] ); } diff --git a/public/main/session/session_edit.php b/public/main/session/session_edit.php index e464231d45..8208f72e61 100644 --- a/public/main/session/session_edit.php +++ b/public/main/session/session_edit.php @@ -12,10 +12,6 @@ require_once __DIR__.'/../inc/global.inc.php'; $this_section = SECTION_PLATFORM_ADMIN; $formSent = 0; -// Crop picture plugin for session images -//$htmlHeadXtra[] = api_get_css_asset('cropper/dist/cropper.min.css'); -//$htmlHeadXtra[] = api_get_asset('cropper/dist/cropper.min.js'); - // Database Table Definitions $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); @@ -194,7 +190,6 @@ if ($form->validate()) { } } -// display the header Display::display_header($tool_name); $form->display(); ?> diff --git a/src/CoreBundle/Entity/Asset.php b/src/CoreBundle/Entity/Asset.php index fe78c457db..9bff9fb11c 100644 --- a/src/CoreBundle/Entity/Asset.php +++ b/src/CoreBundle/Entity/Asset.php @@ -35,16 +35,14 @@ class Asset protected $id; /** - * @var string - * * @Assert\NotBlank() * * @ORM\Column(type="string", length=255) */ - protected $title; + protected string $title; /** - * @var string + * @Assert\NotBlank() * * @Assert\Choice({ * Asset::SCORM, @@ -56,7 +54,7 @@ class Asset * * @ORM\Column(type="string", length=255) */ - protected $category; + protected string $category; /** * @var File @@ -87,11 +85,9 @@ class Asset protected $mimeType; /** - * @var string - * * @ORM\Column(type="text", nullable=true) */ - protected $originalName; + protected ?string $originalName; /** * @var string @@ -102,11 +98,9 @@ class Asset protected $dimensions; /** - * @var int - * * @ORM\Column(type="integer") */ - protected $size; + protected int $size; /** * @ORM\Column(name="crop", type="string", length=255, nullable=true) @@ -114,11 +108,9 @@ class Asset protected ?string $crop; /** - * @var array - * * @ORM\Column(type="array", nullable=true) */ - protected $metadata; + protected ?array $metadata; /** * @var string diff --git a/src/CoreBundle/EventListener/AssetListener.php b/src/CoreBundle/EventListener/AssetListener.php index a77d7fefd0..62c96f5927 100644 --- a/src/CoreBundle/EventListener/AssetListener.php +++ b/src/CoreBundle/EventListener/AssetListener.php @@ -6,18 +6,12 @@ namespace Chamilo\CoreBundle\EventListener; use Chamilo\CoreBundle\Entity\Asset; use Chamilo\CoreBundle\Repository\AssetRepository; -use Symfony\Component\HttpFoundation\Request; use Vich\UploaderBundle\Event\Event; class AssetListener { protected $assetRepository; - /** - * @var Request - */ - protected $request; - public function __construct(AssetRepository $assetRepository) { $this->assetRepository = $assetRepository;