From 407671de3f44639dcf79145f7468db4c1056cd63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Carlos=20Ra=C3=B1a?= Date: Sun, 29 Apr 2012 19:43:52 +0200 Subject: [PATCH] Feature #4022 fix pediaphon files, and some bugs --- main/document/create_audio.php | 85 +++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 21 deletions(-) diff --git a/main/document/create_audio.php b/main/document/create_audio.php index e2d63b0e7a..5f49dc82b6 100644 --- a/main/document/create_audio.php +++ b/main/document/create_audio.php @@ -391,12 +391,26 @@ function downloadMP3_google($filepath, $dir) { } $clean_title=Security::remove_XSS($clean_title); $clean_title=Database::escape_string($clean_title); + $clean_title=str_replace(' ','_', $clean_title);//compound file names + $clean_text=Security::remove_XSS($clean_text); $clean_lang=Security::remove_XSS($_POST['lang']); + $extension='mp3'; + $audio_filename=$clean_title.'.'.$extension; + $audio_title = str_replace('_',' ',$clean_title); + + //prevent duplicates + if (file_exists($filepath.'/'.$clean_title.'.'.$extension)){ + $i = 1; + while (file_exists($filepath.'/'.$clean_title.'_'.$i.'.'.$extension)) $i++; + $audio_filename = $clean_title . '_' . $i . '.'.$extension; + $audio_title = $clean_title . '_' . $i . '.'.$extension; + $audio_title = str_replace('_',' ',$audio_title); + } + + $documentPath = $filepath.'/'.$audio_filename; - $AudioFilename=$clean_title.'.mp3'; - $documentPath = $filepath.$AudioFilename; //prev for a fine unicode, borrowed from main api TODO:clean // Safe replacements for some non-letter characters (whitout blank spaces) @@ -413,7 +427,6 @@ function downloadMP3_google($filepath, $dir) { $clean_text = str_replace($search, $replace, $filename); //adding the file - if (!file_exists($documentPath)) { //add new file to disk file_put_contents($documentPath, file_get_contents("http://translate.google.com/translate_tts?tl=".$clean_lang."&q=".urlencode($clean_text)."")); //add document to database @@ -421,10 +434,9 @@ function downloadMP3_google($filepath, $dir) { $groupId=$_SESSION['_gid']; $file_size = filesize($documentPath); $relativeUrlPath=$dir; - $doc_id = add_document($_course, $relativeUrlPath.$AudioFilename, 'file', filesize($documentPath), $AudioFilename); + $doc_id = add_document($_course, $relativeUrlPath.$audio_filename, 'file', filesize($documentPath), $audio_title); api_item_property_update($_course, TOOL_DOCUMENT, $doc_id, 'DocumentAdded', $_user['user_id'], $groupId, null, null, null, $current_session_id); Display::display_confirmation_message(get_lang('DocumentCreated')); - } } /** @@ -442,20 +454,37 @@ function downloadMP3_pediaphone($filepath, $dir){ } global $_course, $_user; $clean_title=trim($_POST['title']); + $clean_title= Database::escape_string($clean_title); $clean_text=trim($_POST['text']); if(empty($clean_title) || empty($clean_text)){ return; } $clean_title=Security::remove_XSS($clean_title); $clean_title=Database::escape_string($clean_title); + $clean_title=str_replace(' ','_', $clean_title);//compound file names $clean_text=Security::remove_XSS($clean_text); $clean_lang=Security::remove_XSS($_POST['lang']); $clean_voices=Security::remove_XSS($_POST['voices']); $clean_speed=Security::remove_XSS($_POST['speed']); - $AudioFilename=$clean_title.'.mp3'; - $documentPath = $filepath.$AudioFilename; + $extension='mp3'; + $audio_filename=$clean_title.'.'.$extension; + $audio_title = str_replace('_',' ',$clean_title); + //prevent duplicates + if (file_exists($filepath.'/'.$clean_title.'.'.$extension)){ + $i = 1; + while (file_exists($filepath.'/'.$clean_title.'_'.$i.'.'.$extension)) $i++; + $audio_filename = $clean_title . '_' . $i . '.'.$extension; + $audio_title = $clean_title . '_' . $i . '.'.$extension; + $audio_title = str_replace('_',' ',$audio_title); + } + + $documentPath = $filepath.'/'.$audio_filename; + + + + //prev for a fine unicode, borrowed from main api TODO:clean // Safe replacements for some non-letter characters (whitout blank spaces) $search = array("\0", "\t", "\n", "\r", "\x0B", '/', "\\", '"', "'", '?', '*', '>', '<', '|', ':', '$', '(', ')', '^', '[', ']', '#', '+', '&', '%'); @@ -471,30 +500,44 @@ function downloadMP3_pediaphone($filepath, $dir){ $clean_text = str_replace($search, $replace, $filename); //adding the file - if (!file_exists($documentPath)){ - //add new file to disk + if($clean_lang=='de'){ $url_pediaphon='http://www.pediaphon.org/~bischoff/radiopedia/sprich_multivoice.cgi'; + $find_t2v = '/http\:\/\/www\.pediaphon\.org\/\~bischoff\/radiopedia\/mp3\/(.*)\.mp3\"/'; } - elseif($clean_lang=='en'){ - $url_pediaphon='http://www.pediaphon.org/~bischoff/radiopedia/sprich_multivoice_en.cgi'; - } - elseif($clean_lang=='es'){ - $url_pediaphon='http://www.pediaphon.org/~bischoff/radiopedia/sprich_multivoice_es.cgi'; + else{ + $url_pediaphon='http://www.pediaphon.org/~bischoff/radiopedia/sprich_multivoice_'.$clean_lang.'.cgi';//en, es, fr + $find_t2v = '/http\:\/\/www\.pediaphon\.org\/\~bischoff\/radiopedia\/mp3\/'.$clean_lang.'\/(.*)\.mp3\"/'; } - elseif($clean_lang=='fr'){ - $url_pediaphon='http://www.pediaphon.org/~bischoff/radiopedia/sprich_multivoice_fr.cgi'; - } - - file_put_contents($documentPath, file_get_contents($url_pediaphon."?stimme=".$clean_voices."&inputtext=".urlencode($clean_text)."&speed=".$clean_speed."&go=Sprich"));///speed + + $data="stimme=".$clean_voices."&inputtext=".$clean_text."&speed=".$clean_speed."&go=go"; + $opts = array('http' => + array( + 'method' => 'POST', + 'header' =>"Content-Type: application/x-www-form-urlencoded\r\n", + "Content-Length: " . strlen($data) . "\r\n", + 'content' => $data + ) + ); + $context = stream_context_create($opts); + $previous_returntext2voice = file_get_contents($url_pediaphon,false,$context); + + //clean file contents + + $search_source=preg_match($find_t2v, $previous_returntext2voice, $hits); + $souce_end=substr($hits[0], 0,-1); + $returntext2voice = file_get_contents($souce_end); + + //save file + file_put_contents($documentPath, $returntext2voice); + //add document to database $current_session_id = api_get_session_id(); $groupId=$_SESSION['_gid']; $file_size = filesize($documentPath); $relativeUrlPath=$dir; - $doc_id = add_document($_course, $relativeUrlPath.$AudioFilename, 'file', filesize($documentPath), $AudioFilename); + $doc_id = add_document($_course, $relativeUrlPath.$audio_filename, 'file', filesize($documentPath), $audio_title); api_item_property_update($_course, TOOL_DOCUMENT, $doc_id, 'DocumentAdded', $_user['user_id'], $groupId, null, null, null, $current_session_id); Display::display_confirmation_message(get_lang('DocumentCreated')); - } } \ No newline at end of file