function exec_cs_boite_rss_dist() { cs_minipres(); // Constantes distantes include_spip('cout_define'); if(defined('_CS_PAS_DE_DISTANT')) { ajax_retour(_T('couteauprive:version_distante_off')); return; } $p = ''; // on cherche le flux rss toutes les _CS_RSS_UPDATE minutes $force = _request('force')=='oui'; if(!$force) { $lastmodified = @file_exists(_CS_TMP_RSS)?@filemtime(_CS_TMP_RSS):0; if(time()-$lastmodified < _CS_RSS_UPDATE) lire_fichier(_CS_TMP_RSS, $p); } if(strlen($p)) { ajax_retour($p); return; } include_spip('inc/filtres'); include_spip('action/editer_site'); include_spip('inc/xml'); $r = spip_xml_load(_CS_RSS_SOURCE); if(function_exists('spip_xml_match_nodes')) $c = spip_xml_match_nodes(',^item$,', $r, $r2); else { $r2 = !is_array($r)?array():array_shift(array_shift(array_shift(array_shift($r)))); $c = count($r2); } if($c) { $r3 = &$r2['item']; $c = count($r3); $p=''; for($i=0; $i<min($c, _CS_RSS_COUNT); $i++) { $l = $r3[$i]['link'][0]; $d = affdate_court(date('Y-m-d', strtotime($r3[$i]['pubDate'][0]))); $t = str_replace('&', '&', htmlentities($r3[$i]['title'][0], ENT_NOQUOTES, "UTF-8")); $t = preg_replace(',\s*€(¦)?,', ' (…)', $t); $t = preg_replace(',^(.*?):,', "• <a href='$l' class='spip_out' target='_cout'>$1</a> <i>($d)</i><br/>", $t); $p .= "<li style='padding-top:0.6em;'>$t</li>"; } } else { // pour cs_lien() include_spip('cout_fonctions'); $p = '<span style="color: red;">'._T('couteauprive:erreur:probleme', array('pb'=>cs_lien(_CS_RSS_SOURCE,_T('couteauprive:erreur:distant')))).'</span>'; } $du = affdate_heure(date('Y-m-d H:i:s',time())); $p = '<ul style="list-style-type:none; padding:0; margin:0; ">'.$p .'</ul><p class="spip_xx-small" style="border-top:solid gray thin;"><b>' ._T('couteauprive:rss_edition')."</b><br/>$du</p>" .'<p style="text-align:right"><a href="' .generer_url_ecrire('admin_couteau_suisse','var_mode=calcul', true).'" onclick="' ."javascipt:jQuery('div.cs_boite_rss').children().css('opacity', 0.5).parent().load('".generer_url_ecrire('cs_boite_rss', 'force=oui', true).'\');return false;">' ._T('couteauprive:rss_actualiser').'</a> | <a href="' ._CS_RSS_SOURCE.'">' ._T('couteauprive:rss_source').'</a></p>'; if($c) ecrire_fichier(_CS_TMP_RSS, $p); ajax_retour($p); }
function action_snippet_importe(){ global $auteur_session; $arg = _request('arg'); $args = explode(":",$arg); $hash = _request('hash'); $id_auteur = $auteur_session['id_auteur']; $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); if (verifier_action_auteur("snippet_importe-$arg",$hash,$id_auteur)==TRUE) { $table = $args[0]; $id = $args[1]; $contexte = $args[2]; $source = isset($args[3])?$args[3]:""; $unlink = false; if (!strlen($source)){ if (($val = $_FILES['snippet_xml']) AND (isset($val['tmp_name']))) { $source = $val['tmp_name']; $unlink = true; } } if (($id==$table OR ($id=intval($id))) AND strlen($source)){ $f = snippets_fonction_importer($table); if ($f){ include_spip('inc/xml'); $arbre = spip_xml_load($source, false); $translations = $f($id,$arbre,$contexte); snippets_translate_raccourcis_modeles($translations); } } if ($unlink) @unlink($source); } $redirect = str_replace("ecrire/./","./",$redirect); redirige_par_entete(str_replace("&","&",urldecode($redirect))); }
/** * Charger les informations contenues dans le xml d'une composition * * @param string $nom * @param string $info * @return array|string */ function compositions_charger_infos($nom,$info=""){ // on peut appeller avec le nom du squelette $nom = preg_replace(',[.]html$,i','',$nom).".xml"; include_spip('inc/xml'); $composition = array(); if ($xml = spip_xml_load($nom,false)){ if (count($xml['composition'])){ $xml = reset($xml['composition']); $composition['nom'] = _T_ou_typo(spip_xml_aplatit($xml['nom'])); $composition['description'] = isset($xml['description'])?_T_ou_typo(spip_xml_aplatit($xml['description'])):''; if (isset($xml['icon'])) { $icon = chemin_image(reset($xml['icon'])); if (!$icon) { $icon = find_in_path(reset($xml['icon'])); } } else { $icon = ''; } $composition['image_exemple'] = isset($xml['image_exemple']) ? find_in_path(reset($xml['image_exemple'])) : ''; $composition['icon'] = $icon; $composition['class'] = isset($xml['class']) ? trim(reset($xml['class'])) : ''; $composition['configuration'] = isset($xml['configuration']) ? spip_xml_aplatit($xml['configuration']) : ''; $composition['branche'] = array(); if (spip_xml_match_nodes(',^branche,', $xml, $branches)){ foreach (array_keys($branches) as $branche){ list($balise, $attributs) = spip_xml_decompose_tag($branche); $composition['branche'][$attributs['type']] = $attributs['composition']; } } } } if (!$info) return $composition; else return isset($composition[$info])?$composition[$info]:""; }
/** * charger le fichier des infos meteos correspondant au code * si le fichier analyse est trop vieux ou absent, on charge le xml et on l'analyse * puis on stocke les infos apres analyse * * @param string $code_meteo * @return string * @author Cedric Morin */ function charger_meteo($code_meteo, $mode = 'previsions') { $code_meteo = strtoupper($code_meteo); $dir = sous_repertoire(_DIR_CACHE, "rainette"); $dir = sous_repertoire($dir, substr(md5($code_meteo), 0, 1)); $f = $dir . $code_meteo . "_" . $mode . ".txt"; if ($mode == 'infos') { // Traitement du fichier d'infos if (!file_exists($f)) { $flux = "http://xml.weather.com/weather/local/" . $code_meteo . "?unit=" . _RAINETTE_SYSTEME_MESURE; include_spip('inc/xml'); $xml = spip_xml_load($flux); $tableau = xml2tab_infos($xml, $code_meteo); ecrire_fichier($f, serialize($tableau)); } } else { // Traitement du fichier de donnees requis $reload_time = $mode == 'previsions' ? _RAINETTE_RELOAD_TIME_PREVISIONS : _RAINETTE_RELOAD_TIME_CONDITIONS; if (!file_exists($f) || !filemtime($f) || time() - filemtime($f) > $reload_time) { $flux = "http://xml.weather.com/weather/local/" . $code_meteo . "?unit=" . _RAINETTE_SYSTEME_MESURE; $flux .= $mode == 'previsions' ? "&dayf=" . _RAINETTE_JOURS_PREVISION : "&cc=*"; include_spip('inc/xml'); $xml = spip_xml_load($flux); $tableau = $mode == 'previsions' ? xml2tab_previsions($xml) : xml2tab_conditions($xml); ecrire_fichier($f, serialize($tableau)); } } return $f; }
function add_outils_xml($f) { include_spip('inc/xml'); $arbre = spip_xml_load($f); if(isset($arbre['variable'])) foreach($arbre['variable'] as $a) add_variable(parse_variable_xml($a)); if(isset($arbre['outil'])) foreach($arbre['outil'] as $a) { $out = parse_outil_xml($a); if(isset($out['nom']) && is_string($out['nom']) && strlen($out['nom']) && !preg_match(',couteau_suisse/outils/,', $f)) $outil['nom'] = "<i>$out[nom]</i>"; add_outil($out); } }
function action_odt2spip_importe() { global $visiteur_session; $id_auteur = $visiteur_session['id_auteur']; $arg = _request('arg'); $args = explode(":",$arg); // le 1er element de _request('arg') est id_rubrique=XXX $Targs = explode("=", $args[0]); $id_rubrique = $Targs[1]; $hash = _request('hash'); $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); if (!autoriser('creerarticledans', 'rubrique', $id_rubrique)) die(_T('avis_non_acces_page')); // ss-rep temporaire specifique de l'auteur en cours: tmp/odt2spip/id_auteur/ => le creer si il n'existe pas $base_dezip = _DIR_TMP."odt2spip/"; // avec / final if (!is_dir($base_dezip)) if (!sous_repertoire(_DIR_TMP,'odt2spip')) die (_T('odtspip:err_repertoire_tmp')); $rep_dezip = $base_dezip.$id_auteur.'/'; if (!is_dir($rep_dezip)) if (!sous_repertoire($base_dezip,$id_auteur)) die (_T('odtspip:err_repertoire_tmp')); // traitement d'un fichier odt envoye par $_POST $fichier_zip = addslashes($_FILES['fichier_odt']['name']); if ($_FILES['fichier_odt']['name'] == '' OR $_FILES['fichier_odt']['error'] != 0 OR !move_uploaded_file($_FILES['fichier_odt']['tmp_name'], $rep_dezip.$fichier_zip) ) die(_T('odtspip:err_telechargement_fichier')); // dezipper le fichier odt a la mode SPIP include_spip("inc/pclzip"); $zip = new PclZip($rep_dezip.$fichier_zip); $ok = $zip->extract( PCLZIP_OPT_PATH, $rep_dezip, PCLZIP_OPT_SET_CHMOD, _SPIP_CHMOD, PCLZIP_OPT_REPLACE_NEWER ); if ($zip->error_code < 0) { spip_log('charger_decompresser erreur zip ' . $zip->error_code .' pour fichier ' . $rep_dezip.$fichier_zip); die($zip->errorName(true)); //$zip->error_code } // Creation du fichier necessaire a snippets $odt2spip_generer_sortie = charger_fonction('odt2spip_generer_sortie','inc'); list($fichier_sortie,$xml_sortie) = $odt2spip_generer_sortie($id_auteur,$rep_dezip); // generer l'article a partir du fichier xml de sortie (code pompe sur plugins/snippets/action/snippet_importe.php) include_spip('inc/snippets'); $table = $id = 'articles'; $contexte = $args[0]; $source = $fichier_sortie; if (!$f = snippets_fonction_importer($table)) die(_T('odtspip:err_import_snippet')); include_spip('inc/xml'); $arbre = spip_xml_load($source, false); $translations = $f($id,$arbre,$contexte); snippets_translate_raccourcis_modeles($translations); $id_article = $translations[0][2]; // si on est en 2.0 passer le statut de l'article en prepa sql_updateq('spip_articles', array('statut' => 'prop'), 'id_article='.$id_article); // si necessaire attacher le fichier odt original a l'article et lui mettre un titre signifiant if (_request('attacher_odt') == '1') { // recuperer le titre preg_match('/<titre>(.*?)<\/titre>/', $xml_sortie, $match); $titre = $match[1]; if (!isset($ajouter_documents)) $ajouter_documents = charger_fonction('ajouter_documents','inc'); // la y'a un bogue super-bizarre avec la fonction spip_abstract_insert() qui est donnee comme absente lors de l'appel de ajouter_document() if (!function_exists('spip_abstract_insert')) include_spip('base/abstract_sql'); $id_doc_odt = $ajouter_documents($rep_dezip.$fichier_zip, $fichier_zip, "article", $id_article, 'document', 0, $toto=''); $c = array( 'titre' => $titre, 'descriptif' => _T('odtspip:cet_article_version_odt') ); include_spip('inc/modifier'); revision_document($id_doc_odt,$c); } if (!function_exists('effacer_repertoire_temporaire')) include_spip('inc/getdocument'); // vider le contenu du rep de dezippage effacer_repertoire_temporaire($rep_dezip); // aller sur la page de l'article qui vient d'etre cree redirige_par_entete(parametre_url(str_replace("&","&",urldecode($redirect)),'id_article',$id_article,'&')); }