| Current Path : /var/www/html/components/com_jchat/Model/ |
| Current File : /var/www/html/components/com_jchat/Model/RecorderModel.php |
<?php
namespace JExtstore\Component\JChat\Site\Model;
/**
* @package JCHAT::RECORDER::components::com_jchat
* @subpackage models
* @author Joomla! Extensions Store
* @copyright (C) 2024 - Joomla! Extensions Store
* @license GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html
*/
defined( '_JEXEC' ) or die( 'Restricted access' );
use Joomla\CMS\Language\Text;
use Joomla\Filesystem\Folder;
use JExtstore\Component\JChat\Administrator\Framework\Model as JChatModel;
/**
* Here the entity is the file media file XHR2 uploaded
*
* @package JCHAT::RECORDER::components::com_jchat
* @subpackage models
* @since 2.9
*/
class RecorderModel extends JChatModel {
/**
* Store the media uploaded file on a dedicated table for the backend manager
*
* @access private
* @return boolean
*/
private function storeDBMessage() {
$table = $this->getTable ( $this->getName (), 'Administrator' );
// Bind values to the ORM
$table->title = $this->getState('blobfilename');
$table->size = $this->getState('blobfilesize');
$table->timerecord = $this->getState('timerecord');
$table->peer1 = $this->getState('peer1');
$table->peer2 = $this->getState('peer2');
if (! $table->store ()) {
return false;
}
return true;
}
/**
* Store uploaded file to the media recordings folder,
* fully manage error messages and ask for database insert
*
* @access public
* @param bool $updateNulls
* @return Object
*/
public function storeEntity($updateNulls = false) {
// Response JSON object
$response = new \stdClass ();
$this->getComponentParams();
$recordedMediaFolder = JPATH_ROOT . '/media/com_jchat/recordings';
$alreadyExists = false;
// Get uploaded model state
$uploadedMediaFile = $this->getState('blobfile');
$uploadedMediaFileName = $this->getState('blobfilename');
try {
$tmpFile = $uploadedMediaFile['tmp_name'];
if(!$tmpFile) {
throw new \Exception(Text::_('COM_JCHAT_NOFILE_SELECTED'));
}
if(!is_dir($recordedMediaFolder)) {
Folder::create($recordedMediaFolder);
}
if(!is_writable($recordedMediaFolder)) {
if(!chmod($recordedMediaFolder, 0775)) {
throw new \Exception( Text::_('COM_JCHAT_MEDIADIR_WRITABLE'));
}
}
// Check if file already esists
if(file_exists($recordedMediaFolder . '/' . $uploadedMediaFileName)) {
unlink($recordedMediaFolder . '/' . $uploadedMediaFileName);
$alreadyExists = true;
}
if(!move_uploaded_file($tmpFile, $recordedMediaFolder . '/' . $uploadedMediaFileName)) {
throw new \Exception( Text::_('COM_JCHAT_MEDIAUPLOAD_ERROR'));
}
if(!$alreadyExists) {
if(!$this->storeDBMessage($uploadedMediaFileName)) {
throw new \Exception( Text::_('COM_JCHAT_STORING_MEDIADB_ERROR'));
}
}
} catch ( \Exception $e ) {
$response->result = false;
$response->exception_message = $e->getMessage ();
return $response;
}
// Manage exceptions from DB Model and return to JS domain
$response->result = true;
return $response;
}
}