\n", $texte))); } function filtre_decode_html($texte) { return html_entity_decode($texte); } function filtre_libreavous_supp_numero($texte) { $idx = strpos($texte, "-"); return trim(substr($texte, $idx +1)); } // plutot utiliser la fonction spip taille_en_octets function libreavous_mio($number) { $mio = round($number / (1024 * 1024), 1); if ($mio < 10) { $mio = round($mio, 2); return number_format($mio, 2, ',', ' '); } else if ($mio < 100) { $mio = round($mio, 1); return number_format($mio, 1, ',', ' '); } else { $mio = round($mio, 0); return number_format($mio, 0, ',', ' '); } return $mio; } function titre_chronique_court($titre) { // annuler le filtre return $titre; } // calculer la durée d'un chapitre // $start et $end sous form hh:mm:ss function libreavous_duree($start,$end) { $timestart = new DateTime($start); $timeend = new DateTime($end); $timeduree = $timestart->diff($timeend); $duree = $timeduree->format('%h h %i min. %s s.'); return $duree; } // retirer l'heure si 0 h dans la duree function libreavous_sanszeroh($chaine) { $chaine = str_replace('0 h ','',$chaine); return $chaine; } // ajoute un 0 si un seul chiffre (date du jour < à 10) function libreavous_aveczerod($chaine) { $chaineaveczero = $chaine; if (strlen($chaine) == '1') { $chaineaveczero = '0'.$chaine; } return $chaineaveczero; } /*************************************** * Importation du JSON des chapitres * et des autres informations (durée, taille, etc) ***************************************/ function balise_LIBREAVOUS_IMPORT($p) { $id_article = "''"; if (($v = interprete_argument_balise(1,$p))!==NULL){ $id_article = $v; } $p->code = "libreavous_import_run($id_article)"; return $p; } function libreavous_import_run($id_article) { $id_article = intval($id_article); $existant = sql_select("podcast_code","spip_articles","id_article=".$id_article); if ($existant and sql_count($existant)>0) { $r = sql_fetch($existant); $code_emission = $r["podcast_code"]; if(strlen($code_emission) == 0) { return "Le code de l'émission n'est pas renseigné"; } } else { return "Émission inconnue = ".$id_article; } $erreurs = array(); $json = false; $podcast_duree = ""; $ogg_size = ""; $mp3_size = ""; try { $jsonContents = file_get_contents("https://forge.april.org/libreavous/lav-outils/raw/branch/master/podcasts/config/lav-".$code_emission.".json"); $json = json_decode($jsonContents, true); if (!$json) { $erreurs[] = "JSON incorrect"; } } catch (Exception $e) { $erreurs[] = $e->getMessage(); } try { $podcast_duree = libreavous_import_getDuration($code_emission, null); } catch (Exception $e) { $erreurs[] = $e->getMessage(); } try { $ogg_size = libreavous_import_getSize($code_emission, null, "ogg"); } catch (Exception $e) { $erreurs[] = $e->getMessage(); } try { $mp3_size = libreavous_import_getSize($code_emission, null, "mp3"); } catch (Exception $e) { $erreurs[] = $e->getMessage(); } $chapitres = array(); if (array_key_exists("chapters", $json)) { $chapters = $json["chapters"]; $count = count($chapters); if ($count > 0) { $duree_sujetlong = 30 * 60; $sujetlongIndex = -1; for($i = 0; $i < $count; $i++) { $chapter = $chapters[$i]; $chapter["type"] = ""; $debutSecondes = libreavous_import_toSeconde($chapter["start_timestamp"]); $finSecondes = libreavous_import_toSeconde($chapter["end_timestamp"]); if ($debutSecondes === false) { $erreurs[] = "start_timestamp incorrect : ".$chapter["start_timestamp"]; } else if ($finSecondes === false) { $erreurs[] = "end_timestamp incorrect : ".$chapter["end_timestamp"]; } else if ($debutSecondes == $finSecondes) { $erreurs[] = "start_timestamp et end_timestamp identiques : ".$chapter["end_timestamp"]; } else { $duree = $finSecondes - $debutSecondes; if ($duree > $duree_sujetlong) { $sujetlongIndex = $i; $duree_sujetlong = $duree; } $chapter["duree"] = $duree; } if (!array_key_exists("chapter_title", $chapter)) { $chapter["chapter_title"] = ""; $erreurs[] = "Titre de chapitre manquant"; } $chapter["ogg_size"] = ""; $chapter["mp3_size"] = ""; if (!array_key_exists("short_chapter_name", $chapter)) { $chapter["short_chapter_name"] = ""; $erreurs[] = "Nom de fichier manquant"; } else { try { $chapter["ogg_size"] = libreavous_import_getSize($code_emission, $chapter["short_chapter_name"], "ogg"); } catch (Exception $e) { $erreurs[] = $e->getMessage(); } try { $chapter["mp3_size"] = libreavous_import_getSize($code_emission, $chapter["short_chapter_name"], "mp3"); } catch (Exception $e) { $erreurs[] = $e->getMessage(); } } $chapter["chronique"]=""; $chapitres[] = $chapter; } for($i = 0; $i < count($chapitres); $i++) { if ($i == $sujetlongIndex) { $chapitres[$i]["type"] = "SL"; } else { $array = libreavous_import_checkType($chapitres[$i]); $chapitres[$i]["type"] = $array[0]; if (count($array) > 1) { $chapitres[$i]["chronique"] = $array[1]; } } } } } $emissionArray = array( 'podcast_duree' =>$podcast_duree, 'podcast_mp3' => $mp3_size, 'podcast_ogg' => $ogg_size ); sql_updateq("spip_articles", $emissionArray, "id_article=".$id_article); foreach ($chapitres as $chapitre) { $code_chapitre = $chapitre["short_chapter_name"]; $chapitreArray = array( 'titre' => $chapitre["chapter_title"], 'code' => $code_chapitre, 'id_article' => $id_article, 'code_fichier' => $chapitre["short_chapter_name"], 'code_podcast' => $code_emission, 'debut' => $chapitre["start_timestamp"], 'fin' => $chapitre["end_timestamp"], 'type_sujet' => $chapitre["type"], 'chronique' => $chapitre["chronique"], 'mp3' => $chapitre["mp3_size"], 'ogg' => $chapitre["ogg_size"] ); $chapitreExistant = sql_select("id_chapitre","spip_chapitres",array("id_article=".$id_article, "code=".sql_quote($code_chapitre))); if ($chapitreExistant and sql_count($chapitreExistant)>0) { $r = sql_fetch($chapitreExistant); $id_chapitre = $r["id_chapitre"]; sql_updateq("spip_chapitres", $chapitreArray, "id_chapitre=".$id_chapitre); } else { $id_nouveau_chapitre = sql_insertq("spip_chapitres", $chapitreArray); } } $texteReponse = "Émission traitée : ". $code_emission; if (count($erreurs) > 0) { $texteReponse .= "

Erreurs :
".implode("
", $erreurs); } return $texteReponse; } function libreavous_import_getDuration($code_emission, $code_sujet) { $fileName = "libre-a-vous-".$code_emission; if ($code_sujet) { $fileName .= "-".$code_sujet; } $fileName .= ".ogg.duration"; return libreavous_import_getMediaFileContent($code_emission, $fileName); } function libreavous_import_getSize($code_emission, $code_sujet, $extension) { $fileName = "libre-a-vous-".$code_emission; if ($code_sujet) { $fileName .= "-".$code_sujet; } $fileName .= ".".$extension.".size"; return libreavous_import_getMediaFileContent($code_emission, $fileName); } function libreavous_import_getMediaFileContent($code, $fileName) { $url = "https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/".$code."/".$fileName; $contents = file_get_contents($url); $resultat = trim($contents); if (strlen($resultat) == 0) { throw new Exception("Fichier manquant ou vide : ".$url); } return $resultat; } function libreavous_import_toSeconde($time) { $test = preg_match('/^(\d+):(\d+):(\d+)/', $time, $matches); if ($test !== false) { return ($matches[1] * 60 * 60) + ($matches[2] * 60) + ($matches[3]); } else { return false; } } function libreavous_import_checkType($chapitre) { $code = $chapitre["short_chapter_name"]; $result = array(); if ($code == "annonces") { $result[] = "AN"; } else { $idx = strpos($code, "chronique-"); if ($idx === 0) { $result[] = "CH"; $nom_chronique = substr($code, strlen("chronique-")); } else { $result[] = "SC"; } } return $result; }