Bonjour,
Je rencontre un problème avec un composant d’elearning Shika.
Avec ce composant, il est possible de créer des leçons, et pour chaque leçon d’associer un ou plusieurs fichiers (par exemple des fichiers PDF ou PPTX).
Le problème est que les fichiers sont randomisés au moment de l’import sur le site.
L’import se fait via le composant.
Si mon fichier se nomme : « fichier.pdf », quand je vais sur l’interface utilisateur frontend (en tant qu'étudiant), je vois bien dans la section des fichiers à télécharger le nom correct de mon fichier, mais quand je le télécharge, il est intitulé par exemple « 2247054353.pdf ».
Sur le FTP, le fichier se retrouve dans le répertoire / media / com_tjlms / lessons
Je pense qu’il faudrait modifier le fichier qui traite de l’import pour agir sur ce point, car c’est au moment de l’import que le fichier est renommé. Mais je ne vois pas où chercher…
Voici par exemple une partie du fichier fileupload.json.php qui se trouve dans les controllers du composant :
Voyez-vous dans ce fichier la commande qui indique de changer le nom du fichier ?
[Précision : dans la base de données, la table pour les fichier uploadé comporte les champs suivants : "org_filename" (qui affiche le nom d’origine) et "source" (qui affiche le nom avec la suite de 10 chiffres)
Merci à l'avance pour votre aide.
Je rencontre un problème avec un composant d’elearning Shika.
Avec ce composant, il est possible de créer des leçons, et pour chaque leçon d’associer un ou plusieurs fichiers (par exemple des fichiers PDF ou PPTX).
Le problème est que les fichiers sont randomisés au moment de l’import sur le site.
L’import se fait via le composant.
Si mon fichier se nomme : « fichier.pdf », quand je vais sur l’interface utilisateur frontend (en tant qu'étudiant), je vois bien dans la section des fichiers à télécharger le nom correct de mon fichier, mais quand je le télécharge, il est intitulé par exemple « 2247054353.pdf ».
Sur le FTP, le fichier se retrouve dans le répertoire / media / com_tjlms / lessons
Je pense qu’il faudrait modifier le fichier qui traite de l’import pour agir sur ce point, car c’est au moment de l’import que le fichier est renommé. Mais je ne vois pas où chercher…
Voici par exemple une partie du fichier fileupload.json.php qui se trouve dans les controllers du composant :
public function addTableEntries()
{
$input = JFactory::getApplication()->input;
$post = $input->post;
$uploadPathData = $mediaData = [];
$testData = $post->get('test', array(), 'ARRAY');
$lessonData = $post->get('lesson', array(), 'ARRAY');
$format = $uploadPathData['mediaformat'] = $post->get('mediaformat', '', 'STRING');
$subformat = $uploadPathData['subformat'] = $post->get('subformat', '', 'STRING');
$file = $post->get('fileToUpload', '', 'Array');
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tjlms/models');
$mediaModel = JModelLegacy::getInstance('Media', 'TjlmsModel');
if (!empty($file))
{
$mediaData['source'] = JFile::makeSafe($file['source']);
$mediaData['org_filename'] = JFile::makeSafe($file['name']);
$mediaData['format'] = $format;
$mediaData['sub_format'] = $subformat;
// $mediaData['path'] = $this->getuploadFolder($uploadPathData);
$mediaData['created_by'] = JFactory::getUser()->id;
$path = $this->getuploadFolder($uploadPathData);
if (JFile::exists($path . $mediaData['source']))
{
$mediaModel->save($mediaData);
$mediaId = $mediaModel->getState($mediaModel->getName() . '.id');
if (!empty($format))
{
if ($format == 'test' && $subformat == 'answer.upload')
{
$mediaData['path'] = JRoute::_('index.php?option=com_tjlms&task=lesson. downloadMedia&mid=' . $mediaId);
JTable::addIncludePath(JPATH_ROOT . '/administrator/components/com_tmt/tables');
$testAnswersTable = JTable::getInstance('testanswers', 'TmtTable', array('dbo', JFactory::getDbo()));
$test = $post->get('test', array(), "Array");
$olUserId = JFactory::getUser()->id;
$testAnswersTable->load(
array("question_id" => $test['answer']['qid'],
"user_id" => $olUserId, "test_id" => $test['answer']['testid'],
"invite_id" => $test['answer']['ltid']
)
);
$mediaData['answer_id'] = $testAnswersTable->id;
$mediaData['qid'] = $testData['answer']['qid'];
}
elseif ($format == 'associate')
{
$db = JFactory::getDbo();
$fileData = new stdClass;
$fileData->id = '';
$fileData->lesson_id = $lessonData['associate']['lessonId'];
$fileData->media_id = $mediaId;
$db->insertObject('#__tjlms_associated_files', $fileData, 'id');
}
}
$mediaData['media_id'] = $mediaId;
$msg = JText::_("COM_TJLMS_FILE_TABLE_ENTRIES_ADDED");
echo new JResponseJson($mediaData, $msg);
}
else
{
echo new JResponseJson(0, JText::_("COM_TJLMS_ERROR_FILENOTSAFE_TO_UPLOAD"), true);
}
}
else
{
echo new JResponseJson(0, JText::_("COM_TJLMS_ERROR_FILENOTSAFE_TO_UPLOAD"), true);
}
}
}
{
$input = JFactory::getApplication()->input;
$post = $input->post;
$uploadPathData = $mediaData = [];
$testData = $post->get('test', array(), 'ARRAY');
$lessonData = $post->get('lesson', array(), 'ARRAY');
$format = $uploadPathData['mediaformat'] = $post->get('mediaformat', '', 'STRING');
$subformat = $uploadPathData['subformat'] = $post->get('subformat', '', 'STRING');
$file = $post->get('fileToUpload', '', 'Array');
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tjlms/models');
$mediaModel = JModelLegacy::getInstance('Media', 'TjlmsModel');
if (!empty($file))
{
$mediaData['source'] = JFile::makeSafe($file['source']);
$mediaData['org_filename'] = JFile::makeSafe($file['name']);
$mediaData['format'] = $format;
$mediaData['sub_format'] = $subformat;
// $mediaData['path'] = $this->getuploadFolder($uploadPathData);
$mediaData['created_by'] = JFactory::getUser()->id;
$path = $this->getuploadFolder($uploadPathData);
if (JFile::exists($path . $mediaData['source']))
{
$mediaModel->save($mediaData);
$mediaId = $mediaModel->getState($mediaModel->getName() . '.id');
if (!empty($format))
{
if ($format == 'test' && $subformat == 'answer.upload')
{
$mediaData['path'] = JRoute::_('index.php?option=com_tjlms&task=lesson. downloadMedia&mid=' . $mediaId);
JTable::addIncludePath(JPATH_ROOT . '/administrator/components/com_tmt/tables');
$testAnswersTable = JTable::getInstance('testanswers', 'TmtTable', array('dbo', JFactory::getDbo()));
$test = $post->get('test', array(), "Array");
$olUserId = JFactory::getUser()->id;
$testAnswersTable->load(
array("question_id" => $test['answer']['qid'],
"user_id" => $olUserId, "test_id" => $test['answer']['testid'],
"invite_id" => $test['answer']['ltid']
)
);
$mediaData['answer_id'] = $testAnswersTable->id;
$mediaData['qid'] = $testData['answer']['qid'];
}
elseif ($format == 'associate')
{
$db = JFactory::getDbo();
$fileData = new stdClass;
$fileData->id = '';
$fileData->lesson_id = $lessonData['associate']['lessonId'];
$fileData->media_id = $mediaId;
$db->insertObject('#__tjlms_associated_files', $fileData, 'id');
}
}
$mediaData['media_id'] = $mediaId;
$msg = JText::_("COM_TJLMS_FILE_TABLE_ENTRIES_ADDED");
echo new JResponseJson($mediaData, $msg);
}
else
{
echo new JResponseJson(0, JText::_("COM_TJLMS_ERROR_FILENOTSAFE_TO_UPLOAD"), true);
}
}
else
{
echo new JResponseJson(0, JText::_("COM_TJLMS_ERROR_FILENOTSAFE_TO_UPLOAD"), true);
}
}
}
Voyez-vous dans ce fichier la commande qui indique de changer le nom du fichier ?
[Précision : dans la base de données, la table pour les fichier uploadé comporte les champs suivants : "org_filename" (qui affiche le nom d’origine) et "source" (qui affiche le nom avec la suite de 10 chiffres)
Merci à l'avance pour votre aide.
Commentaire