Esempio n. 1
0
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('&amp;', '&', htmlentities($r3[$i]['title'][0], ENT_NOQUOTES, "UTF-8"));
		 $t = preg_replace(',\s*&#8364;(&brvbar;)?,', '&nbsp;(&hellip;)', $t);
		 $t = preg_replace(',^(.*?):,', "&bull; <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);
}
Esempio n. 2
0
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("&amp;","&",urldecode($redirect)));
}
Esempio n. 3
0
/**
 * 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]:"";
}
Esempio n. 4
0
/**
 * 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;
}
Esempio n. 5
0
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);
	}
}
Esempio n. 6
0
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("&amp;","&",urldecode($redirect)),'id_article',$id_article,'&'));
}