Add image extra field as an Asset instead of app/upload

pull/3768/head
Julio Montoya 5 years ago
parent 1657fd5ab9
commit fab5ade276
  1. 89
      public/main/inc/lib/extra_field.lib.php
  2. 47
      public/main/inc/lib/extra_field_value.lib.php
  3. 14
      public/main/inc/lib/sessionmanager.lib.php
  4. 5
      public/main/session/session_edit.php
  5. 20
      src/CoreBundle/Entity/Asset.php
  6. 6
      src/CoreBundle/EventListener/AssetListener.php

@ -5,6 +5,7 @@
use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField; use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField;
use Chamilo\CoreBundle\Entity\ExtraFieldRelTag; use Chamilo\CoreBundle\Entity\ExtraFieldRelTag;
use Chamilo\CoreBundle\Entity\Tag; use Chamilo\CoreBundle\Entity\Tag;
use Chamilo\CoreBundle\Framework\Container;
/** /**
* Class ExtraField. * Class ExtraField.
@ -998,8 +999,9 @@ class ExtraField extends Model
} }
foreach ($extra as $field_details) { foreach ($extra as $field_details) {
$variable = $field_details['variable'];
if (!empty($showOnlyTheseFields)) { if (!empty($showOnlyTheseFields)) {
if (!in_array($field_details['variable'], $showOnlyTheseFields)) { if (!in_array($variable, $showOnlyTheseFields)) {
continue; continue;
} }
} }
@ -1028,15 +1030,15 @@ class ExtraField extends Model
continue; continue;
} }
if (in_array($field_details['variable'], $exclude)) { if (in_array($variable, $exclude)) {
continue; continue;
} }
} }
if (!empty($introductionTextList) && 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; $freezeElement = false;
@ -1135,14 +1137,14 @@ class ExtraField extends Model
$options[$option_details['option_value']] = $option_details['display_text']; $options[$option_details['option_value']] = $option_details['display_text'];
$group[] = $form->createElement( $group[] = $form->createElement(
'checkbox', 'checkbox',
'extra_'.$field_details['variable'], 'extra_'.$variable,
$option_details['option_value'], $option_details['option_value'],
$option_details['display_text'].'<br />', $option_details['display_text'].'<br />',
$option_details['option_value'] $option_details['option_value']
); );
} }
} else { } else {
$fieldVariable = "extra_{$field_details['variable']}"; $fieldVariable = "extra_$variable";
$checkboxAttributes = []; $checkboxAttributes = [];
if (is_array($extraData) && if (is_array($extraData) &&
array_key_exists($fieldVariable, $extraData) array_key_exists($fieldVariable, $extraData)
@ -1265,8 +1267,7 @@ class ExtraField extends Model
'itemId' => $itemId, 'itemId' => $itemId,
] ]
); );
// ofaj // ofaj.
for ($i = 0; $i < $separateValue; $i++) { for ($i = 0; $i < $separateValue; $i++) {
$tagsSelect = $form->addSelect( $tagsSelect = $form->addSelect(
'extra_'.$field_details['variable'].'['.$i.']', 'extra_'.$field_details['variable'].'['.$i.']',
@ -1535,9 +1536,12 @@ class ExtraField extends Model
]; ];
if (is_array($extraData) && array_key_exists($fieldVariable, $extraData)) { 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( $fieldTexts[] = Display::img(
api_get_path(WEB_UPLOAD_PATH).$extraData[$fieldVariable], $assetRepo->getAssetUrl($asset),
$field_details['display_text'], $field_details['display_text'],
['width' => '300'] ['width' => '300']
); );
@ -2906,7 +2910,6 @@ JAVASCRIPT;
$valuesData = []; $valuesData = [];
$fields = $this->get_all(); $fields = $this->get_all();
$em = Database::getManager(); $em = Database::getManager();
$repoTag = $em->getRepository(ExtraFieldRelTag::class); $repoTag = $em->getRepository(ExtraFieldRelTag::class);
foreach ($fields as $field) { foreach ($fields as $field) {
@ -2929,10 +2932,12 @@ JAVASCRIPT;
$field['id'], $field['id'],
true 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]); $tags = $repoTag->findBy(['fieldId' => $field['id'], 'itemId' => $itemId]);
if ($tags) { if ($tags) {
/** @var \Chamilo\CoreBundle\Entity\ExtraFieldRelTag $tag */ /** @var ExtraFieldRelTag $tag */
$data = []; $data = [];
foreach ($tags as $extraFieldTag) { foreach ($tags as $extraFieldTag) {
/** @var \Chamilo\CoreBundle\Entity\Tag $tag */ /** @var \Chamilo\CoreBundle\Entity\Tag $tag */
@ -2949,7 +2954,7 @@ JAVASCRIPT;
} }
$displayedValue = get_lang('None'); $displayedValue = get_lang('None');
switch ($field['field_type']) { switch ($fieldType) {
case self::FIELD_TYPE_CHECKBOX: case self::FIELD_TYPE_CHECKBOX:
if (false !== $valueData && '1' == $valueData['value']) { if (false !== $valueData && '1' == $valueData['value']) {
$displayedValue = get_lang('Yes'); $displayedValue = get_lang('Yes');
@ -2967,45 +2972,43 @@ JAVASCRIPT;
$displayedValue = $valueData; $displayedValue = $valueData;
} }
break; break;
case self::FIELD_TYPE_FILE:
case self::FIELD_TYPE_FILE_IMAGE: case self::FIELD_TYPE_FILE_IMAGE:
if (false === $valueData || empty($valueData['value'])) { if (false === $valueData || empty($valueData['value'])) {
break; 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; break;
} }
$image = Display::img( $url = $assetRepo->getAssetUrl($asset);
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;
}
if (!file_exists(api_get_path(SYS_UPLOAD_PATH).$valueData['value'])) { if ($fieldType === self::FIELD_TYPE_FILE_IMAGE) {
break; $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; break;
default: default:
$displayedValue = $valueData['value']; $displayedValue = $valueData['value'];

@ -119,6 +119,7 @@ class ExtraFieldValue extends Model
$extraField = new ExtraField($this->type); $extraField = new ExtraField($this->type);
$extraFields = $extraField->get_all(null, 'option_order'); $extraFields = $extraField->get_all(null, 'option_order');
$em = Database::getManager();
// Parse params. // Parse params.
foreach ($extraFields as $fieldDetails) { foreach ($extraFields as $fieldDetails) {
@ -189,7 +190,6 @@ class ExtraFieldValue extends Model
$params['item_id'], $params['item_id'],
$extraFieldInfo['id'] $extraFieldInfo['id']
); );
UserManager::process_tags( UserManager::process_tags(
$value, $value,
$params['item_id'], $params['item_id'],
@ -198,7 +198,6 @@ class ExtraFieldValue extends Model
break; break;
} }
$em = Database::getManager();
$currentTags = $em $currentTags = $em
->getRepository(ExtraFieldRelTag::class) ->getRepository(ExtraFieldRelTag::class)
->findBy([ ->findBy([
@ -258,9 +257,9 @@ class ExtraFieldValue extends Model
$em->flush(); $em->flush();
break; break;
case ExtraField::FIELD_TYPE_FILE_IMAGE: case ExtraField::FIELD_TYPE_FILE_IMAGE:
/*
$fileDir = $fileDirStored = ''; $fileDir = $fileDirStored = '';
switch ($this->type) {
/*switch ($this->type) {
case 'course': case 'course':
$fileDir = api_get_path(SYS_UPLOAD_PATH)."courses/"; $fileDir = api_get_path(SYS_UPLOAD_PATH)."courses/";
$fileDirStored = "courses/"; $fileDirStored = "courses/";
@ -281,13 +280,11 @@ class ExtraFieldValue extends Model
$fileName = ExtraField::FIELD_TYPE_FILE_IMAGE."_{$params['item_id']}.png"; $fileName = ExtraField::FIELD_TYPE_FILE_IMAGE."_{$params['item_id']}.png";
if (!empty($value['tmp_name']) && isset($value['error']) && 0 == $value['error']) { if (!empty($value['tmp_name']) && isset($value['error']) && 0 == $value['error']) {
$file = new UploadedFile($value['tmp_name'], $fileName, null, null, true); $file = new UploadedFile($value['tmp_name'], $fileName, null, null, true);
$em = Database::getManager();
$asset = new Asset(); $asset = new Asset();
$asset $asset
->setCategory(Asset::EXTRA_FIELD) ->setCategory(Asset::EXTRA_FIELD)
->setTitle($fileName) ->setTitle($fileName)
->setFile($file) ->setFile($file)
->setCompressed(true)
; ;
$cropVariable = 'extra_'.$field_variable.'_crop_result'; $cropVariable = 'extra_'.$field_variable.'_crop_result';
if (isset($params[$cropVariable])) { if (isset($params[$cropVariable])) {
@ -297,7 +294,6 @@ class ExtraFieldValue extends Model
$em->flush(); $em->flush();
$assetId = $asset->getId(); $assetId = $asset->getId();
//$repo = Container::getAssetRepository(); //$repo = Container::getAssetRepository();
if ($assetId) { if ($assetId) {
// Crop the image to adjust 16:9 ratio // Crop the image to adjust 16:9 ratio
/*$imageExtraField = new Image($value['tmp_name']); /*$imageExtraField = new Image($value['tmp_name']);
@ -314,7 +310,7 @@ class ExtraFieldValue extends Model
} }
break; break;
case ExtraField::FIELD_TYPE_FILE: case ExtraField::FIELD_TYPE_FILE:
$fileDir = $fileDirStored = ''; /*$fileDir = $fileDirStored = '';
switch ($this->type) { switch ($this->type) {
case 'course': case 'course':
$fileDir = api_get_path(SYS_UPLOAD_PATH).'courses/'; $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/'; $fileDir = api_get_path(SYS_UPLOAD_PATH).'scheduled_announcement/';
$fileDirStored = 'scheduled_announcement/'; $fileDirStored = 'scheduled_announcement/';
break; break;
} }*/
$cleanedName = api_replace_dangerous_char($value['name']); $cleanedName = api_replace_dangerous_char($value['name']);
$fileName = ExtraField::FIELD_TYPE_FILE."_{$params['item_id']}_$cleanedName"; $fileName = ExtraField::FIELD_TYPE_FILE."_{$params['item_id']}_$cleanedName";
if (!file_exists($fileDir)) { /*if (!file_exists($fileDir)) {
mkdir($fileDir, $dirPermissions, true); mkdir($fileDir, $dirPermissions, true);
} }*/
if (!empty($value['tmp_name']) && isset($value['error']) && 0 == $value['error']) { 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"; $fileName = ExtraField::FIELD_TYPE_FILE."_{$params['item_id']}_$cleanedName";
moveUploadedFile($value, $fileDir.$fileName); moveUploadedFile($value, $fileDir.$fileName);
@ -353,13 +349,30 @@ class ExtraFieldValue extends Model
'item_id' => $params['item_id'], 'item_id' => $params['item_id'],
'field_id' => $extraFieldInfo['id'], 'field_id' => $extraFieldInfo['id'],
'value' => $fileDirStored.$fileName, '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) { if ($assetId) {
$new_params['comment'] = $comment; $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; break;
case ExtraField::FIELD_TYPE_CHECKBOX: case ExtraField::FIELD_TYPE_CHECKBOX:

@ -299,9 +299,7 @@ class SessionManager
$em->persist($session); $em->persist($session);
$em->flush(); $em->flush();
$session_id = $session->getId(); $session_id = $session->getId();
$duration = (int) $duration; $duration = (int) $duration;
if (!empty($duration)) { if (!empty($duration)) {
$sql = "UPDATE $tbl_session SET $sql = "UPDATE $tbl_session SET
access_start_date = NULL, access_start_date = NULL,
@ -315,8 +313,8 @@ class SessionManager
Database::query($sql); Database::query($sql);
} else { } else {
$sql = "UPDATE $tbl_session $sql = "UPDATE $tbl_session
SET duration = 0 SET duration = 0
WHERE id = $session_id"; WHERE id = $session_id";
Database::query($sql); Database::query($sql);
} }
@ -1622,7 +1620,7 @@ class SessionManager
$visibility, $visibility,
$description = null, $description = null,
$showDescription = 0, $showDescription = 0,
$duration = null, $duration = 0,
$extraFields = [], $extraFields = [],
$sessionAdminId = 0, $sessionAdminId = 0,
$sendSubscriptionNotification = false, $sendSubscriptionNotification = false,
@ -1632,6 +1630,7 @@ class SessionManager
$coachId = (int) $coachId; $coachId = (int) $coachId;
$sessionCategoryId = (int) $sessionCategoryId; $sessionCategoryId = (int) $sessionCategoryId;
$visibility = (int) $visibility; $visibility = (int) $visibility;
$duration = (int) $duration;
$em = Database::getManager(); $em = Database::getManager();
@ -7933,7 +7932,10 @@ class SessionManager
'session_template', 'session_template',
get_lang('SessionTemplate'), 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',
]
); );
} }

@ -12,10 +12,6 @@ require_once __DIR__.'/../inc/global.inc.php';
$this_section = SECTION_PLATFORM_ADMIN; $this_section = SECTION_PLATFORM_ADMIN;
$formSent = 0; $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 // Database Table Definitions
$tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
@ -194,7 +190,6 @@ if ($form->validate()) {
} }
} }
// display the header
Display::display_header($tool_name); Display::display_header($tool_name);
$form->display(); $form->display();
?> ?>

@ -35,16 +35,14 @@ class Asset
protected $id; protected $id;
/** /**
* @var string
*
* @Assert\NotBlank() * @Assert\NotBlank()
* *
* @ORM\Column(type="string", length=255) * @ORM\Column(type="string", length=255)
*/ */
protected $title; protected string $title;
/** /**
* @var string * @Assert\NotBlank()
* *
* @Assert\Choice({ * @Assert\Choice({
* Asset::SCORM, * Asset::SCORM,
@ -56,7 +54,7 @@ class Asset
* *
* @ORM\Column(type="string", length=255) * @ORM\Column(type="string", length=255)
*/ */
protected $category; protected string $category;
/** /**
* @var File * @var File
@ -87,11 +85,9 @@ class Asset
protected $mimeType; protected $mimeType;
/** /**
* @var string
*
* @ORM\Column(type="text", nullable=true) * @ORM\Column(type="text", nullable=true)
*/ */
protected $originalName; protected ?string $originalName;
/** /**
* @var string * @var string
@ -102,11 +98,9 @@ class Asset
protected $dimensions; protected $dimensions;
/** /**
* @var int
*
* @ORM\Column(type="integer") * @ORM\Column(type="integer")
*/ */
protected $size; protected int $size;
/** /**
* @ORM\Column(name="crop", type="string", length=255, nullable=true) * @ORM\Column(name="crop", type="string", length=255, nullable=true)
@ -114,11 +108,9 @@ class Asset
protected ?string $crop; protected ?string $crop;
/** /**
* @var array
*
* @ORM\Column(type="array", nullable=true) * @ORM\Column(type="array", nullable=true)
*/ */
protected $metadata; protected ?array $metadata;
/** /**
* @var string * @var string

@ -6,18 +6,12 @@ namespace Chamilo\CoreBundle\EventListener;
use Chamilo\CoreBundle\Entity\Asset; use Chamilo\CoreBundle\Entity\Asset;
use Chamilo\CoreBundle\Repository\AssetRepository; use Chamilo\CoreBundle\Repository\AssetRepository;
use Symfony\Component\HttpFoundation\Request;
use Vich\UploaderBundle\Event\Event; use Vich\UploaderBundle\Event\Event;
class AssetListener class AssetListener
{ {
protected $assetRepository; protected $assetRepository;
/**
* @var Request
*/
protected $request;
public function __construct(AssetRepository $assetRepository) public function __construct(AssetRepository $assetRepository)
{ {
$this->assetRepository = $assetRepository; $this->assetRepository = $assetRepository;

Loading…
Cancel
Save