From 386940ecd4dcb7966efaeef40e66677256b482fa Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 26 Nov 2013 17:00:03 +0100 Subject: [PATCH] Fixing record issues see BT#6449 --- .../inc/lib/wami-recorder/record_document.php | 9 +++-- main/newscorm/learnpathItem.class.php | 35 +++++++++++++------ main/newscorm/lp_add_audio.php | 4 ++- main/newscorm/lp_controller.php | 14 +++++--- .../default/learnpath/record_voice.tpl | 7 ++-- 5 files changed, 44 insertions(+), 25 deletions(-) diff --git a/main/inc/lib/wami-recorder/record_document.php b/main/inc/lib/wami-recorder/record_document.php index 424b3d8292..ca1059377e 100644 --- a/main/inc/lib/wami-recorder/record_document.php +++ b/main/inc/lib/wami-recorder/record_document.php @@ -29,7 +29,6 @@ if ($wamiuserid != api_get_user_id() || api_get_user_id() == 0 || $wamiuserid == //clean $waminame = Security::remove_XSS($waminame); $waminame = Database::escape_string($waminame); -$waminame = addslashes(trim($waminame)); $waminame = replace_dangerous_char($waminame, 'strict'); $waminame = disable_dangerous_file($waminame); $wamidir = Security::remove_XSS($wamidir); @@ -68,7 +67,6 @@ if (file_exists($saveDir.'/'.$waminame_noex.'.'.$ext)) { } $documentPath = $saveDir.'/'.$waminame_to_save; - // Add to disk $fh = fopen($documentPath, 'w') or die("can't open file"); fwrite($fh, $content); @@ -79,7 +77,6 @@ $addToLP = false; if (isset($_REQUEST['lp_item_id']) && !empty($_REQUEST['lp_item_id'])) { $lpItemId = $_REQUEST['lp_item_id']; $lp = isset($_SESSION['oLP']) ? $_SESSION['oLP'] : null; - if (!empty($lp)) { $addToLP = true; // Converts wav into mp3 @@ -87,12 +84,14 @@ if (isset($_REQUEST['lp_item_id']) && !empty($_REQUEST['lp_item_id'])) { $ffmpeg = \FFMpeg\FFMpeg::create(); $oldWavFile = $documentPath; if (file_exists($oldWavFile)) { - $video = $ffmpeg->open($documentPath); + $video = $ffmpeg->open($oldWavFile); + $waminame_to_save = str_replace('wav', 'mp3', $waminame_to_save); $documentPath = $saveDir.'/'.$waminame_to_save; $title_to_save = $waminame_to_save; - + //$video->save(new \FFMpeg\Format\Audio\Vorbis()); $result = $video->save(new FFMpeg\Format\Audio\Mp3(), $documentPath); + if ($result) { unlink($oldWavFile); } diff --git a/main/newscorm/learnpathItem.class.php b/main/newscorm/learnpathItem.class.php index f9eacc84c3..73af6a7908 100644 --- a/main/newscorm/learnpathItem.class.php +++ b/main/newscorm/learnpathItem.class.php @@ -74,7 +74,8 @@ class learnpathItem * @param integer course int id * @return boolean True on success, false on failure */ - public function __construct($id, $user_id = null, $course_id = null, $item_content = null) { + public function __construct($id, $user_id = null, $course_id = null, $item_content = null) + { // Get items table. if (!isset($user_id)) { $user_id = api_get_user_id(); } if (self::debug > 0) { error_log("learnpathItem constructor: id: $id user_id: $user_id course_id: $course_id item_content: $item_content", 0); } @@ -2592,7 +2593,11 @@ class learnpathItem return true; } - function add_audio() { + /** + * @return bool|null|string + */ + public function add_audio() + { $course_info = api_get_course_info(); $filepath = api_get_path(SYS_COURSE_PATH).$course_info['path'].'/document/'; @@ -2600,7 +2605,7 @@ class learnpathItem mkdir($filepath.'audio', api_get_permissions_for_new_directories()); $audio_id = add_document($course_info, '/audio', 'folder', 0, 'audio'); api_item_property_update($course_info, TOOL_DOCUMENT, $audio_id, 'FolderCreated', api_get_user_id(), null, null, null, null, api_get_session_id()); - api_item_property_update($course_info, TOOL_DOCUMENT, $audio_id, 'invisible', api_get_user_id(), null, null, null, null, api_get_session_id()); + api_item_property_update($course_info, TOOL_DOCUMENT, $audio_id, 'invisible', api_get_user_id(), null, null, null, null, api_get_session_id()); } $key = 'file'; @@ -2623,7 +2628,12 @@ class learnpathItem return $file_path; } - function add_audio_from_documents($doc_id) { + /** + * @param int $doc_id + * @return string + */ + public function add_audio_from_documents($doc_id) + { $course_info = api_get_course_info(); $document_data = DocumentManager::get_document_data_by_id($doc_id, $course_info['code']); @@ -2631,24 +2641,29 @@ class learnpathItem $file_path = basename($document_data['path']); // Store the mp3 file in the lp_item table. $tbl_lp_item = Database::get_course_table(TABLE_LP_ITEM); - $sql_insert_audio = "UPDATE $tbl_lp_item SET audio = '".Database::escape_string($file_path)."' - WHERE c_id = {$course_info['real_id']} AND id = '".Database::escape_string($this->db_id)."'"; - Database::query($sql_insert_audio); + $sql = "UPDATE $tbl_lp_item SET audio = '".Database::escape_string($file_path)."' + WHERE c_id = {$course_info['real_id']} AND id = ".intval($this->db_id); + Database::query($sql); } return $file_path; } - function remove_audio() { + /** + * @return bool + */ + public function remove_audio() + { $tbl_lp_item = Database::get_course_table(TABLE_LP_ITEM); $course_id = api_get_course_int_id(); if (empty($this->db_id)) { return false; } - $sql = "UPDATE $tbl_lp_item SET audio = '' WHERE c_id = $course_id AND id IN (".$this->db_id.")"; + $sql = "UPDATE $tbl_lp_item SET audio = '' WHERE c_id = $course_id AND id IN (".$this->db_id.")"; Database::query($sql); } - static function humanize_status($status, $decorate = true) { + static function humanize_status($status, $decorate = true) + { $mylanglist = array( 'completed' => 'ScormCompstatus', 'incomplete' => 'ScormIncomplete', diff --git a/main/newscorm/lp_add_audio.php b/main/newscorm/lp_add_audio.php index a049047fc1..716c897814 100644 --- a/main/newscorm/lp_add_audio.php +++ b/main/newscorm/lp_add_audio.php @@ -96,6 +96,7 @@ $page = $_SESSION['oLP']->build_action_menu(true); $page .= '
'; $page .= '
'; $page .= $_SESSION['oLP']->return_new_tree(null, true); + // Show the template list. $page .= '
'; @@ -113,7 +114,8 @@ $form->addElement('header', get_lang('UplUpload')); $form->addElement('html', $lp_item->get_title()); $form->addElement('file', 'file', get_lang('AudioFile'), 'style="width: 250px"'); if (!empty($file)) { - $form->addElement('checkbox', 'delete_file', null, get_lang('RemoveAudio')); + $url = api_get_path(WEB_CODE_PATH).'newscorm/lp_controller.php?lp_id='.$_SESSION['oLP']->get_id().'&action=add_audio&id='.$lp_item_id.'&delete_file=1&'.api_get_cidreq(); + $form->addElement('label', null, Display::url(get_lang('RemoveAudio'), $url, array('class' => 'btn btn-danger'))); } $form->addElement('hidden', 'id', $lp_item_id); diff --git a/main/newscorm/lp_controller.php b/main/newscorm/lp_controller.php index 1e6f82dc3d..baeedff8ee 100644 --- a/main/newscorm/lp_controller.php +++ b/main/newscorm/lp_controller.php @@ -443,14 +443,18 @@ switch ($action) { if (isset($_REQUEST['id'])) { $lp_item_obj = new learnpathItem($_REQUEST['id']); - //Remove audio - if (isset($_POST['delete_file']) && $_POST['delete_file'] == 1) { - $lp_item_obj->remove_audio(); + // Remove audio + if (isset($_GET['delete_file']) && $_GET['delete_file'] == 1) { + $lp_item_obj->remove_audio(); + + $url = api_get_self().'?action=add_audio&lp_id='.intval($_SESSION['oLP']->lp_id).'&id='.$lp_item_obj->get_id().'&'.api_get_cidreq(); + header('Location: '.$url); + exit; } - //Upload audio + // Upload audio if (isset($_FILES['file']) && !empty($_FILES['file'])) { - //Updating the lp.modified_on + // Updating the lp.modified_on $_SESSION['oLP']->set_modified_on(); $lp_item_obj->add_audio(); } diff --git a/main/template/default/learnpath/record_voice.tpl b/main/template/default/learnpath/record_voice.tpl index 72acaf7010..1f9da94fed 100644 --- a/main/template/default/learnpath/record_voice.tpl +++ b/main/template/default/learnpath/record_voice.tpl @@ -36,12 +36,11 @@ function setupGUI() { var uniq = 'rec_' + (new Date()).getTime() + ".wav"; var gui = new Wami.GUI({ id : "wami-recorder", + singleButton : true, recordUrl : "{{ _p.web_lib }}wami-recorder/record_document.php?lp_item_id={{ lp_item_id }}&waminame="+uniq+"&wamidir={{ lp_dir }}&wamiuserid={{ _u.user_id }}", - //playUrl : "https://wami-recorder.appspot.com/audio", buttonUrl : "{{ _p.web_lib }}wami-recorder/buttons.png", buttonNoUrl: "{{ _p.web_img }}blank.gif", onRecordStart : function() { - $('#start-recording').show(); }, onRecordFinish: function() { @@ -49,8 +48,7 @@ function setupGUI() { window.location.reload(); }, onError : function() { - }, - singleButton : true + } }); gui.setPlayEnabled(true); @@ -69,6 +67,7 @@ function setupGUI() { $('#wami').show(); var recordWami = $('#record-wami'); + recordWami.on('click', function() { setupRecorder(); return false;