Messages: Fix audio recording upload using resources

pull/3890/head
Julio Montoya 4 years ago
parent 617553f0ef
commit b315eb76e3
  1. 10
      public/main/inc/ajax/record_audio_rtc.ajax.php
  2. 133
      public/main/inc/lib/message.lib.php
  3. 2
      public/main/inc/lib/social.lib.php
  4. 13
      public/main/messages/new_message.php
  5. 2
      src/CoreBundle/Entity/Message.php

@ -98,8 +98,6 @@ switch ($type) {
//'message' => Display::getFlashToString(),
'fileUrl' => $data['document_url'],
]);
//Display::cleanFlashMessages();
exit;
}
@ -108,8 +106,10 @@ switch ($type) {
break;
case 'message':
Session::write('current_audio_id', $file['name']);
api_upload_file('audio_message', $file, api_get_user_id());
if (isset($_FILES['audio_blob']['tmp_name'])) {
$file['content'] = file_get_contents($_FILES['audio_blob']['tmp_name']);
Session::write('current_audio', $file);
echo 1;
}
break;
}

@ -12,8 +12,6 @@ use Doctrine\Common\Collections\Criteria;
use Symfony\Component\HttpFoundation\File\UploadedFile;
/**
* Class MessageManager.
*
* This class provides methods for messages management.
* Include/require it in your code to use its features.
*/
@ -497,7 +495,7 @@ class MessageManager
}
// Disabling messages for inactive users.
if (0 == $userRecipient->getActive()) {
if (!$userRecipient->getActive()) {
return false;
}
@ -537,8 +535,7 @@ class MessageManager
'end_pause_date'
);
if (
!empty($startDate) && isset($startDate['value']) && !empty($startDate['value']) &&
if (!empty($startDate) && isset($startDate['value']) && !empty($startDate['value']) &&
!empty($endDate) && isset($endDate['value']) && !empty($endDate['value'])
) {
$now = time();
@ -558,8 +555,8 @@ class MessageManager
if (is_array($attachments)) {
$counter = 0;
foreach ($attachments as $attachment) {
$attachment['comment'] = isset($fileCommentList[$counter]) ? $fileCommentList[$counter] : '';
$fileSize = isset($attachment['size']) ? $attachment['size'] : 0;
$attachment['comment'] = $fileCommentList[$counter] ?? '';
$fileSize = $attachment['size'] ?? 0;
if (is_array($fileSize)) {
foreach ($fileSize as $size) {
$totalFileSize += $size;
@ -574,21 +571,11 @@ class MessageManager
if ($checkCurrentAudioId) {
// Add the audio file as an attachment
$audioId = Session::read('current_audio_id');
if (!empty($audioId)) {
$file = api_get_uploaded_file('audio_message', api_get_user_id(), $audioId);
if (!empty($file)) {
$audioAttachment = [
'name' => basename($file),
'comment' => 'audio_message',
'size' => filesize($file),
'tmp_name' => $file,
'error' => 0,
'type' => DocumentManager::file_get_mime_type(basename($file)),
];
// create attachment from audio message
$attachmentList[] = $audioAttachment;
}
$audio = Session::read('current_audio');
if (!empty($audio) && isset($audio['name']) && !empty($audio['name'])) {
$audio['comment'] = 'audio_message';
// create attachment from audio message
$attachmentList[] = $audio;
}
}
@ -613,9 +600,6 @@ class MessageManager
return false;
}
$now = api_get_utc_datetime();
$table = Database::get_main_table(TABLE_MESSAGE);
$em = Database::getManager();
$repo = $em->getRepository(Message::class);
$parent = null;
@ -624,17 +608,17 @@ class MessageManager
}
$message = null;
// Just in case we replace the and \n and \n\r while saving in the DB
if (!empty($receiverUserId) || !empty($group_id)) {
// message for user friend
//@todo it's possible to edit a message? yes, only for groups
if (!empty($editMessageId)) {
$query = " UPDATE $table SET
update_date = '".$now."',
content = '".Database::escape_string($content)."'
WHERE id = '$editMessageId' ";
Database::query($query);
$message = $repo->find($editMessageId);
if (null !== $message) {
$message->setContent($content);
$em->persist($message);
$em->flush();
}
$messageId = $editMessageId;
} else {
$message = new Message();
@ -668,15 +652,11 @@ class MessageManager
// Save attachment file for inbox messages
if (is_array($attachmentList)) {
foreach ($attachmentList as $attachment) {
if (0 == $attachment['error']) {
$comment = $attachment['comment'];
if (0 === $attachment['error']) {
self::saveMessageAttachmentFile(
$attachment,
$comment,
$attachment['comment'] ?? '',
$message,
null,
$receiverUserId,
$group_id
);
}
}
@ -976,7 +956,7 @@ class MessageManager
$new_file_name = add_ext_on_mime(stripslashes($file['name']), $type);
// user's file name
$file_name = $file['name'];
$fileName = $file['name'];
if (!filter_extension($new_file_name)) {
Display::addFlash(
Display::return_message(
@ -984,38 +964,56 @@ class MessageManager
'error'
)
);
} else {
$em = Database::getManager();
$attachmentRepo = Container::getMessageAttachmentRepository();
$attachment = new MessageAttachment();
$attachment
->setSize($file['size'])
->setPath($file_name)
->setFilename($file_name)
->setComment($comment)
->setParent($message->getUserSender())
->setMessage($message)
;
$request = Container::getRequest();
$fileToUpload = null;
/** @var UploadedFile $fileRequest */
return false;
}
$em = Database::getManager();
$attachmentRepo = Container::getMessageAttachmentRepository();
$attachment = new MessageAttachment();
$attachment
->setSize($file['size'])
->setPath($fileName)
->setFilename($fileName)
->setComment($comment)
->setParent($message->getUserSender())
->setMessage($message)
;
$request = Container::getRequest();
$fileToUpload = null;
// Search for files inside the $_FILES, when uploading several files from the form.
if ($request->files->count()) {
/** @var UploadedFile|null $fileRequest */
foreach ($request->files->all() as $fileRequest) {
if (null === $fileRequest) {
continue;
}
if ($fileRequest->getClientOriginalName() === $file['name']) {
$fileToUpload = $fileRequest;
break;
}
}
}
$em->persist($attachment);
// If no found file, try with $file['content'].
if (null === $fileToUpload && isset($file['content'])) {
$handle = tmpfile();
fwrite($handle, $file['content']);
$meta = stream_get_meta_data($handle);
$fileToUpload = new UploadedFile($meta['uri'], $fileName, $file['type'], null, true);
}
if (null !== $fileToUpload) {
$attachmentRepo->addFile($attachment, $fileToUpload);
$attachment->addUserLink($message->getUserSender());
$attachment->addUserLink($message->getUserReceiver());
}
if (null !== $fileToUpload) {
$em->persist($attachment);
$attachmentRepo->addFile($attachment, $fileToUpload);
$attachment->addUserLink($message->getUserSender());
$attachment->addUserLink($message->getUserReceiver());
$em->flush();
return true;
}
return false;
@ -1361,12 +1359,6 @@ class MessageManager
$userImage = '';
if (null !== $message->getUserSender()) {
$name = UserManager::formatUserFullName($message->getUserSender());
/*$userImage = Display::img(
$fromUser['avatar_small'],
$name,
['title' => $name, 'class' => 'img-responsive img-circle', 'style' => 'max-width:35px'],
false
);*/
}
$messageContent = Display::page_subheader(str_replace("\\", '', $title));
@ -2000,7 +1992,6 @@ class MessageManager
*/
public static function getAttachmentLinkList(Message $message)
{
//$files = self::getAttachmentList($message);
$files = $message->getAttachments();
// get file attachments by message id
$list = [];
@ -2927,11 +2918,7 @@ class MessageManager
*/
public static function cleanAudioMessage()
{
$audioId = Session::read('current_audio_id');
if (!empty($audioId)) {
api_remove_uploaded_file_by_id('audio_message', api_get_user_id(), $audioId);
Session::erase('current_audio_id');
}
Session::erase('current_audio');
}
/**

@ -1512,7 +1512,7 @@ class SocialManager extends UserManager
$allowedTypes[] = 'ogg';
if (in_array($extension, $allowedTypes)) {
return MessageManager::saveMessageAttachmentFile($fileAttach, $fileComment, $message, $userId);
return MessageManager::saveMessageAttachmentFile($fileAttach, $fileComment, $message);
}
return false;

@ -266,9 +266,9 @@ function manageForm($default, $select_from_user_list = null, $sent_to = '', $tpl
$file_comments = $_POST['legend'];
$title = $default['title'];
$content = $default['content'];
$group_id = isset($default['group_id']) ? $default['group_id'] : null;
$parent_id = isset($default['parent_id']) ? $default['parent_id'] : null;
$forwardId = isset($_POST['forward_id']) ? $_POST['forward_id'] : false;
$group_id = $default['group_id'] ?? null;
$parent_id = $default['parent_id'] ?? null;
$forwardId = $_POST['forward_id'] ?? false;
if (is_array($user_list) && count($user_list) > 0) {
// All is well, send the message
@ -375,12 +375,10 @@ if ($allowSocial) {
Display::return_icon('back.png', get_lang('Back'), [], 32).'</a>';
$social_right_content .= Display::toolbarAction('toolbar', [$actions]);
$social_right_content .= '</div>';
$social_right_content .= '<div class="col-md-12">';
}
// MAIN CONTENT
if (!isset($_POST['compose'])) {
if (isset($_GET['re_id'])) {
$social_right_content .= show_compose_reply_to_message(
@ -422,7 +420,10 @@ if (!isset($_POST['compose'])) {
}
$social_right_content .= manageForm($default, null, null, $tpl);
} else {
$social_right_content .= Display::return_message(get_lang('There was an error while trying to send the message.'), 'error');
$social_right_content .= Display::return_message(
get_lang('There was an error while trying to send the message.'),
'error'
);
}
}
}

@ -10,6 +10,7 @@ use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -88,6 +89,7 @@ class Message
protected ?Message $parent = null;
/**
* @Gedmo\Timestampable(on="update")
* @ORM\Column(name="update_date", type="datetime", nullable=true)
*/
protected ?DateTime $updateDate;

Loading…
Cancel
Save