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\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'].'<br />',
$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'];

@ -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:

@ -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',
]
);
}

@ -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();
?>

@ -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

@ -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;

Loading…
Cancel
Save