function genie_clevermail_auto_ajout_abonnes_dist()
{
    if ($autoListes = sql_select("lst_id, lst_name, lst_auto_subscribers, lst_auto_subscribers_mode", "spip_cm_lists", "lst_auto_subscribers != '' AND lst_auto_subscribers_updated < " . (time() - 60 * 60 * 24))) {
        include_spip('inc/distant');
        while ($liste = sql_fetch($autoListes)) {
            if ($adresses = recuperer_page($liste['lst_auto_subscribers'])) {
                if (!clevermail_verification_adresses_email($adresses)) {
                    // XXX : log en chaîne de langue
                    spip_log('Le format des adresses e-mail ne semble pas bon dans le fichier distant d\'adresses de la liste « ' . $liste['lst_name'] . ' » (id=' . $liste['lst_id'] . ') : ' . $liste['lst_auto_subscribers'], 'clevermail');
                } else {
                    $retour = clevermail_abonnes_ajout(array($liste['lst_id']), intval($liste['lst_auto_subscribers_mode']), $adresses);
                    sql_updateq("spip_cm_lists", array('lst_auto_subscribers_updated' => time()), "lst_id=" . $liste['lst_id']);
                    // XXX : log en chaîne de langue
                    $msg = 'Ajout automatique d\'abonnés à la liste « ' . $liste['lst_name'] . ' » (id=' . $liste['lst_id'] . ') à partir du fichier ' . $liste['lst_auto_subscribers'] . ' : ';
                    if ($retour === false) {
                        $msg .= _T('clevermail:aucun_nouvel_abonne');
                    } else {
                        $msg .= $retour['nb_nouv'] > 0 ? $retour['nb_nouv'] . _T('clevermail:n_nouveaux_abonnes') : _T('clevermail:aucun_nouvel_abonne');
                        $msg .= $retour['nb_nouv'] > 0 && $retour['nb_maj'] > 0 ? _T('clevermail:nouveaux_abonnes_et') : '';
                        $msg .= $retour['nb_maj'] > 0 ? $retour['nb_maj'] . _T('clevermail:changements_mode_abonnement') : '';
                        spip_log($msg, 'clevermail');
                    }
                }
            } else {
                // XXX : log en chaîne de langue
                spip_log('Impossible de télécharger le fichier distant d\'adresses de la liste « ' . $liste['lst_name'] . ' » (id=' . $liste['lst_id'] . ') : ' . $liste['lst_auto_subscribers'], 'clevermail');
            }
        }
    }
    return 1;
}
function clevermail_post_update($pst_id)
{
    if ($pst_id == intval($pst_id)) {
        $lst_id = sql_getfetsel('lst_id', 'spip_cm_posts', 'pst_id=' . intval($pst_id));
        $post = array('lst_id' => intval($lst_id), 'pst_date_create' => time());
        $list = sql_fetsel('*', 'spip_cm_lists', 'lst_id = ' . intval($lst_id));
        // Traitement de la source HTML
        if (strpos($list['lst_url_html'], 'http://') !== false) {
            include_spip('inc/distant');
            $url_html = $list['lst_url_html'] . (strpos($list['lst_url_html'], '?') !== false ? '&' : '?') . 'date=' . date("Y-m-d", $last_create) . '&lst_id=' . intval($lst_id);
            $post['pst_html'] = recuperer_page($url_html);
        } else {
            $contexte = array('date' => date("Y-m-d", $last_create), 'lst_id' => intval($lst_id));
            // on passe la globale lien_implicite_cible_public en true
            // pour avoir les liens internes en public (en non prive d'apres le contexte)
            // credit de l'astuce: denisb & rastapopoulos & erational
            $GLOBALS['lien_implicite_cible_public'] = true;
            $post['pst_html'] = recuperer_fond($list['lst_url_html'], $contexte);
            // on revient a la config initiale
            unset($GLOBALS['lien_implicite_cible_public']);
        }
        // Traitement de la source texte
        if ($list['lst_url_text'] != '') {
            if (strpos($list['lst_url_text'], 'http://') !== false) {
                include_spip('inc/distant');
                $url_text = $list['lst_url_text'] . (strpos($list['lst_url_text'], '?') !== false ? '&' : '?') . 'date=' . date("Y-m-d", $last_create) . '&lst_id=' . intval($lst_id);
                $post['pst_text'] = recuperer_page($url_text);
            } else {
                $contexte = array('date' => date("Y-m-d", $last_create), 'lst_id' => intval($lst_id));
                // on passe la globale lien_implicite_cible_public en true
                // pour avoir les liens internes en public (en non prive d'apres le contexte)
                // credit de l'astuce: denisb & rastapopoulos & erational
                $GLOBALS['lien_implicite_cible_public'] = true;
                $post['pst_text'] = recuperer_fond($list['lst_url_text'], $contexte);
                // on revient a la config initiale
                unset($GLOBALS['lien_implicite_cible_public']);
            }
            $post['pst_text'] = strip_tags($post['pst_text']);
        } else {
            // TODO : essayer d'utiliser TEN : http://www.headstar.com/ten/
            include_spip('classes/facteur');
            $post['pst_text'] = Facteur::html2text($post['pst_html']);
        }
        if (trim($post['pst_html']) != '' && trim($post['pst_text']) != '') {
            /*
            if (preg_match(",<title>(.*)</title>,", $post['pst_html'], $regs)) {
            		    $post['pst_subject'] = trim($regs[1]);
            		  } else {
            		    $post['pst_subject'] = 'Aucun sujet';
            		  }
            */
            $pst_id = sql_updateq('spip_cm_posts', $post, 'pst_id=' . $pst_id);
            spip_log('Mise a jour du message « ' . $post['pst_subject'] . ' » (id=' . $pst_id . ') dans la liste « ' . $list['lst_name'] . ' » (id=' . $lst_id . ')', 'clevermail');
            return $pst_id;
        } else {
            spip_log('Mise a jour d\'un message dans la liste « ' . $list['lst_name'] . ' » (id=' . $lst_id . ') impossible, contenu vide à ' . $url_html . ' et ' . $url_text, 'clevermail');
            return false;
        }
    }
}
Beispiel #3
0
function wha_check_offer_dist($id_abonnement)
{
    $res = spip_query('SELECT * FROM spip_abonnements WHERE id_abonnement=' . intval($id_abonnement));
    if (!($row = spip_fetch_array($res))) {
        return false;
    }
    if ($row['mode_paiement'] != 'wha' or !($uoid = $row['abonne_uid'])) {
        spip_log("wha_check_offer :Erreur : abonnement {$id_abonnement} n'a pas ete souscrit avec wha (ou pas d'uoid)", 'wha_abo_check');
        return false;
    }
    if (!($confirm = $row['confirm']) or !($confirm = unserialize($confirm))) {
        spip_log("wha_check_offer :Erreur : abonnement {$id_abonnement} n'a pas d'url node enregistree", 'wha_abo_check');
        return false;
    }
    $config = array('MERCHANT_ID' => $confirm['partner'], 'KEY_ID' => $confirm['key'], 'node' => $confirm['node']);
    $url_check = wha_url_check_abo($uoid, 'love', $config);
    include_spip('inc/distant');
    $ack = @recuperer_page($url_check);
    spip_log($t = "wha_check_offer : reponse a {$url_check} : {$ack}", 'wha_abo_check');
    if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign)))) {
        spip_log($t = "wha_check_offer : pas de reponse valide {$url_check} : {$ack}", 'wha_abo_check');
        return null;
    }
    if (isset($args['c']) and $args['c'] == 'ack') {
        return true;
    }
    if (isset($args['e']) and in_array($args['e'], array(0, 1, 14, 15))) {
        return false;
    }
    return null;
}
function radiobot_scan($id_syndic_article, $titre_parent = "Sans titre", $url, $date)
{
    include_spip('inc/distant');
    $page_distante = recuperer_page($url);
    //chercher un mp3 avec une url absolue
    preg_match_all(",http://[a-zA-Z0-9\\s()\\/\\:\\._%\\?+'=~-]*\\.mp3,Uims", $page_distante, $matches, PREG_SET_ORDER);
    if (count($matches)) {
        foreach ($matches as $m) {
            // virer ici les faux mp3
            if (!preg_match(",^http://twitter.com/intent/tweet,", $m[0])) {
                $enclosures[] = $m[0];
            }
        }
    } else {
        // chercher un lien relatif
        //chercher un mp3
        preg_match_all(",(href|src)=(\"|')([a-zA-Z0-9\\s()\\/\\:\\._%\\?+'=~-]*\\.mp3),Uims", $page_distante, $matches, PREG_SET_ORDER);
        foreach ($matches as $m) {
            $parse_url = parse_url($url);
            $enclosures[] = "http://" . $parse_url['host'] . $m[3];
        }
    }
    $enclosures = array_unique($enclosures);
    if (is_array($enclosures) and sizeof($enclosures) > 0) {
        if (!$date) {
            $date = date("Y-m-d h:i:s");
        }
        inserer_document_syndic_article($enclosures, $id_syndic_article, $date, $titre_parent);
    }
}
function hal_parse($url)
{
    $url = trim(html_entity_decode($url), "\"' ");
    $infos = parse_url($url);
    $ip = gethostbyname($infos['host']);
    if ($ip != '193.48.96.10') {
        spip_log("Url invalid", _LOG_ERREUR);
        return;
    }
    spip_log(sprintf("[hal_parse] init_http(%s)", $url), _LOG_DEBUG);
    $content = recuperer_page($url);
    spip_log(sprintf("[hal_parse] init_http(%s): Done", $url), _LOG_DEBUG);
    $dom = new DomDocument('1.0', 'UTF-8');
    $dom->preserveWhiteSpace = false;
    $str = mb_convert_encoding($content, "HTML-ENTITIES");
    @$dom->loadHTML($str);
    $xpath = new DOMXpath($dom);
    $entries = $xpath->query('//div[@id="res_script"]');
    if ($entries->length == 0) {
        spip_log("No tag found ...", _LOG_ERREUR);
        return;
    }
    $res_script = $dom->saveXML($entries->item(0));
    return $res_script;
}
/**
 * Recuperer une url en https avec curl ou recuperer_page sinon
 *
 * @param string $url
 * @param array|string $datas
 *   $datas peut etre un tableau de paire=>valeur, ou une chaine de get paire=valeur&...
 * @param string $user_agent
 * @return array
 */
function inc_bank_recuperer_post_https_dist($url, $datas = '', $user_agent = '')
{
    if (!function_exists('curl_init')) {
        include_spip('inc/distant');
        $nvpreq = $datas;
        if (is_array($datas) and count($datas)) {
            $nvpreq = http_build_query($datas);
        }
        spip_log("bank_recuperer_post_https sur {$url} via recuperer_page : {$nvpreq}", 'bank');
        $response = recuperer_page($url, false, false, 1048576, $datas, null);
        $erreur = $response === false;
        $erreur_msg = "recuperer_page impossible";
    } else {
        //setting the curl parameters.
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        //curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        //turning off the server and peer verification(TrustManager Concept).
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        //curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cert/api_cert_chain.crt");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        //if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled.
        //Set proxy name to PROXY_HOST and port number to PROXY_PORT in constants.php
        #if(_PAYPAL_USE_PROXY)
        #curl_setopt ($ch, CURLOPT_PROXY, _PAYPAL_PROXY_HOST.":"._PAYPAL_PROXY_PORT);
        //NVPRequest for submitting to server
        $nvpreq = "";
        if (is_array($datas) and count($datas)) {
            $nvpreq = http_build_query($datas);
        }
        spip_log("bank_recuperer_post_https sur {$url} via curl : {$nvpreq}", 'bank');
        if (!$user_agent) {
            $user_agent = "SPIP/Bank";
        }
        //setting the nvpreq as POST FIELD to curl
        curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close', "User-Agent: {$user_agent}"));
        //getting response from server
        $response = curl_exec($ch);
        $erreur = curl_errno($ch);
        $erreur_msg = curl_error($ch);
        if (!$erreur) {
            //closing the curl
            curl_close($ch);
        }
    }
    return array($response, $erreur, $erreur ? $erreur_msg : '');
}
Beispiel #7
0
function presta_internetplus_inc_traiter_reponse_wha_dist($config, $m, $args, $partnerId, $keyId)
{
    $mode = 'wha';
    // historique...
    $config_id = bank_config_id($config);
    $v = $args['v'];
    $mp = $v['mp'];
    if (!isset($mp['id_transaction']) or !($id_transaction = $mp['id_transaction'])) {
        bank_transaction_invalide(0, array('where' => 'wha_traiter_reponse', 'mode' => $mode, 'erreur' => "pas de id_transaction en retour", 'log' => $m));
        return array(0, false, $mp);
    }
    // verifier que la transaction est connue
    $res = sql_select("*", "spip_transactions", "id_transaction=" . intval($id_transaction));
    if (!($row = sql_fetch($res))) {
        bank_transaction_invalide($id_transaction, array('where' => 'wha_traiter_reponse', 'mode' => $mode, 'erreur' => "transaction inconnue", 'log' => $m));
        return array($id_transaction, false, $mp);
    }
    if (!$row['id_auteur']) {
        if (!isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) {
            $_SESSION['wha_traiter_reponse_wha'] = array('m' => $m, 'args' => $args, 'partnerId' => $partnerId, 'keyId' => $keyId);
            return array($id_transaction, 'delayed', $mp);
        } else {
            sql_updateq("spip_transactions", array("id_auteur" => $row['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur']), "id_transaction=" . intval($id_transaction));
        }
    }
    if ($row['statut'] !== 'ok') {
        // ok, on traite le reglement
        $montant_regle = $row['montant'];
        // on verifie que le montant est bon !
        /*$montant_regle = isset($v['amt'])?$v['amt']:0;
        		if ($montant_regle!=$row['montant']){
        			spip_log($t = "wha_traiter_reponse : id_transaction $id_transaction, montant regle $montant_regle!=".$row['montant'].":".$m,'internetplus'._LOG_ERREUR);
        			// on log ca dans un journal dedie
        			spip_log($t,'internetplus_partiels'._LOG_ERREUR);
        			// on est sympa avec le client, dans le doute on livre le produit
        		}*/
        $authorisation_id = $v['tId'];
        // declencher l'url de confirmation de reglement
        $node_response = $v['rt'];
        $config = array('MERCHANT_ID' => $partnerId, 'KEY_ID' => $keyId, 'node' => $node_response);
        $url = wha_url_confirm($authorisation_id, $row['montant'], $config);
        include_spip('inc/distant');
        $ack = @recuperer_page($url);
        if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign))) or !isset($args['c']) or !$args['c'] == 'ack') {
            bank_transaction_invalide($id_transaction, array('where' => 'wha_traiter_reponse', 'mode' => $mode, 'erreur' => "pas de confirmation de debit / {$url} : {$ack}", 'update' => true, 'log' => $m));
            return array($id_transaction, false, $mp);
        }
        sql_updateq("spip_transactions", array("autorisation_id" => $authorisation_id, "mode" => "wha/{$config_id}", "montant_regle" => $montant_regle, "date_paiement" => date('Y-m-d H:i:s'), "statut" => 'ok', "reglee" => 'oui'), "id_transaction=" . intval($id_transaction));
        spip_log("wha_traiter_reponse : id_transaction {$id_transaction}, reglee", $mode . _LOG_INFO_IMPORTANTE);
        spip_log("{$m}", $mode . '_autorisations' . _LOG_INFO_IMPORTANTE);
    }
    $regler_transaction = charger_fonction('regler_transaction', 'bank');
    $regler_transaction($id_transaction, array('row_prec' => $row));
    return array($id_transaction, true, $mp);
}
Beispiel #8
0
function produire_image_math($tex) {
	global $traiter_math;
	switch ($traiter_math) {
		// Attention: mathml desactiv'e pour l'instant
		case 'mathml':
			$ext = '.xhtml';
			$server = $GLOBALS['mathml_server'];
			break;
		case 'tex':
			$ext = '.png';
			$server = $GLOBALS['tex_server'];
			break;
		default:
			return $tex;
	}

	// Regarder dans le repertoire local des images TeX et blocs MathML
	if (!@is_dir($dir_tex = _DIR_VAR.'cache-TeX/'))
		@mkdir ($dir_tex, _SPIP_CHMOD);
	$fichier = $dir_tex .md5(trim($tex)).$ext;
	

	if (!@file_exists($fichier)) {
		// Aller chercher l'image sur le serveur
		if ($server) {
			spip_log($url = $server.'?'.rawurlencode($tex));
			include_spip('inc/distant');
			recuperer_page($url,$fichier);
		}
	}


	// Composer la reponse selon presence ou non de l'image
	$tex = entites_html($tex);
	if (@file_exists($fichier)) {

		// MathML
		if ($traiter_math == 'mathml') {
			return join(file("$fichier"),"");
		}

		// TeX
		else {
			list(,,,$size) = @getimagesize($fichier);
			$alt = "alt=\"$tex\" title=\"$tex\""; 
			return "<img src=\"$fichier\" style=\"vertical-align:middle;\" $size $alt />";
		}

	}
	else // pas de fichier
		return "<tt><span class='spip_code' dir='ltr'>$tex</span></tt>";

}
Beispiel #9
0
function spip_xml_load($fichier, $strict=true, $clean=true, $taille_max = 1048576, $datas='', $profondeur = -1){
	$contenu = "";
	if (preg_match(",^(http|ftp)://,",$fichier)){
		include_spip('inc/distant');
		$contenu = recuperer_page($fichier,false,false,$taille_max, $datas);
	}
	else lire_fichier ($fichier, $contenu);
	$arbre = array();
	if ($contenu)
		$arbre = spip_xml_parse($contenu, $strict, $clean, $profondeur);
		
	return count($arbre)?$arbre:false;
}
Beispiel #10
0
function presta_internetplus_inc_confirm_offer_dist($id_transaction, $uoid, $confirm)
{
    $config = array('MERCHANT_ID' => $confirm['partner'], 'KEY_ID' => $confirm['key'], 'node' => $confirm['node']);
    $url_confirm = wha_url_confirm_abo($uoid, $config);
    include_spip('inc/distant');
    $ack = @recuperer_page($url_confirm);
    if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign))) or !isset($args['c']) or !$args['c'] == 'ack') {
        spip_log($t = "wha_confirm_offer : transaction {$id_transaction}, echec confirmation de debit {$uoid} / {$url_confirm} : {$ack}", 'internetplus_abo' . _LOG_ERREUR);
        spip_log($t, 'internetplus_abo_hs' . _LOG_ERREUR);
        return false;
    }
    return true;
}
Beispiel #11
0
function presta_paybox_payer_resilier_dist($uid)
{
    $parm = paybox_pbx_ids();
    $args = "VERSION=001" . "&TYPE=001" . "&SITE=" . str_pad($parm['PBX_SITE'], 7, "0", STR_PAD_LEFT) . "&MACH=" . str_pad($parm['PBX_RANG'], 3, "0", STR_PAD_LEFT) . "&IDENTIFIANT=" . $parm['PBX_IDENTIFIANT'] . "&ABONNEMENT=" . $uid;
    $url = _PAYBOX_URL_RESIL . "?" . $args;
    include_spip('inc/distant');
    $reponse = recuperer_page($url);
    spip_log("uid:{$uid}, {$url}, reponse:{$reponse}", 'paybox_abos_resil');
    parse_str($reponse, $res);
    if ($res['ACQ'] == 'OK' and $res['ABONNEMENT'] == $uid) {
        return true;
    }
    return false;
}
Beispiel #12
0
/**
 * Lit un fichier xml donné et renvoie son arbre.
 *
 * @example
 *     ```
 *     include_spip('inc/xml');
 *     $arbre = spip_xml_load(_DIR_PLUGINS . "$plug/plugin.xml");
 *     ```
 *
 * @uses spip_xml_parse()
 *
 * @param string $fichier
 *     Chemin local ou URL distante du fichier XML
 * @param bool $strict
 *     true pour râler si une balise n'est pas correctement fermée, false sinon.
 * @param bool $clean ?
 * @param int $taille_max
 *     Taille maximale si fichier distant
 * @param string|array $datas
 *     Données à envoyer pour récupérer le fichier distant
 * @param int $profondeur ?
 * @return array|bool
 *     - array : l'arbre XML,
 *     - false si l'arbre xml ne peut être créé ou est vide
 **/
function spip_xml_load($fichier, $strict = true, $clean = true, $taille_max = 1048576, $datas = '', $profondeur = -1)
{
    $contenu = "";
    if (tester_url_absolue($fichier)) {
        include_spip('inc/distant');
        $contenu = recuperer_page($fichier, false, false, $taille_max, $datas);
    } else {
        lire_fichier($fichier, $contenu);
    }
    $arbre = array();
    if ($contenu) {
        $arbre = spip_xml_parse($contenu, $strict, $clean, $profondeur);
    }
    return count($arbre) ? $arbre : false;
}
Beispiel #13
0
/**
 * une fonction qui permet de si un lien est un feed ou nom, 
 * si c'est un feed elle retourne son type, si c'est pas un feed elle retourne 0, 
 * cette verification est évidemment très très légère
 * 
 * @param string $url
 * 		URL à analyser
 * @return string|0 
 * 		Retourne son type (rss|atom|rdf) ou 0 si pas feed
 */
function is_feed($url)
{
    /**
     * méthode SPIP
     */
    if (function_exists('recuperer_page')) {
        $buffer = recuperer_page($url);
        if (preg_match("/<(\\w*) .*/", $buffer, $matches)) {
            //ici on detecte la premiere balise
            $type_feed = $matches[1];
            switch ($type_feed) {
                case "rss":
                    return "rss";
                case "feed":
                    return "atom";
                case "rdf":
                    return "rdf";
            }
        }
        return '';
    }
    $fp = @fopen($url, "r");
    if (!$fp) {
        return 0;
    }
    //verifion la nature de ce fichier
    while (!feof($fp)) {
        $buffer = fgets($fp, 4096);
        if (preg_match("/<(\\w*) .*/", $buffer, $matches)) {
            //ici on detecte la premiere balise
            $type_feed = $matches[1];
            switch ($type_feed) {
                case "rss":
                    fclose($fp);
                    return "rss";
                case "feed":
                    fclose($fp);
                    return "atom";
                case "rdf":
                    fclose($fp);
                    return "rdf";
                default:
                    fclose($fp);
                    return 0;
            }
        }
    }
}
/**
 * on essaye de poser un htaccess rewrite global sur IMG/
 * si fonctionne on gardera des ulrs de document permanente
 * si ne fonctionne pas on se rabat sur creer_htaccess du core
 * qui pose un deny sur chaque sous repertoire de IMG/
 *
 * http://doc.spip.org/@gerer_htaccess
 *
 * @param bool $active
 * @return bool
 */
function accesrestreint_gerer_htaccess($active = true)
{
    if (!$active) {
        spip_unlink(_DIR_IMG . _ACCESS_FILE_NAME);
        effacer_meta("creer_htaccess");
        // effacer les xx/.htaccess crees eventuellement par le core
        include_spip("inc/acces");
        gerer_htaccess();
        return false;
    } else {
        $rewrite = <<<rewrite
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(\\d+/[\\da-f]+)\$
RewriteRule ^\\w+/.*\$     ../spip.php?action=api_docrestreint&arg=%1/\$0 [skip=100]
RewriteRule ^\\w+/.*\$     ../spip.php?action=api_docrestreint&arg=0/0/\$0 [skip=100]
rewrite;
        // On cherche si le dossier racine a un RewriteBase plus long que "/"
        if (file_exists(_DIR_RACINE . _ACCESS_FILE_NAME)) {
            $ht = '';
            lire_fichier(_DIR_RACINE . _ACCESS_FILE_NAME, $ht);
            if ($ht and preg_match('|^RewriteBase\\s+/.+$|m', $ht, $rewritebase)) {
                $rewritebase = rtrim(trim($rewritebase[0]), '/') . '/' . _NOM_PERMANENTS_ACCESSIBLES;
                $rewrite = $rewritebase . "\n" . $rewrite;
            }
        }
        ecrire_fichier(_DIR_IMG . _ACCESS_FILE_NAME, $rewrite);
        // verifier sur l'url de test
        include_spip('inc/distant');
        $url_test = url_absolue(_DIR_IMG . "test/.test?0/1");
        $test = recuperer_page($url_test);
        // si l'url de test renvoie bien "OK" alors rewrite rule fonctionne et on peut baser la protection de document sur ce shema
        if ($test == "OK") {
            effacer_meta("creer_htaccess");
            // securite, et permet de generer des urls permanentes
        } else {
            // sinon on se rabat sur un deny et on generera des urls moches
            spip_unlink(_DIR_IMG . _ACCESS_FILE_NAME);
            ecrire_meta("creer_htaccess", "oui");
        }
        // dans tous les cas on passe par gerer_htaccess pour enlever ou mettre les .htaccess dans les sous rep
        include_spip("inc/acces");
        gerer_htaccess();
        return true;
    }
}
Beispiel #15
0
/**
 * Récupérer la source et détecter son extension
 *
 * @uses  teleporter_http_extension()
 *
 * @param string $source
 *     URL de la source HTTP
 * @param string $dest_tmp
 *     Répertoire de destination
 * @return array|string
 *     - Texte d'erreur si une erreur survient,
 *     - Liste sinon (répertoire de destination temporaire, extension du fichier source)
 */
function teleporter_http_recuperer_source($source, $dest_tmp)
{
    # securite : ici on repart toujours d'une source neuve
    if (file_exists($dest_tmp)) {
        spip_unlink($dest_tmp);
    }
    $extension = "";
    # si on ne dispose pas encore du fichier
    # verifier que le zip en est bien un (sans se fier a son extension)
    #	en chargeant son entete car l'url initiale peut etre une simple
    # redirection et ne pas comporter d'extension .zip
    include_spip('inc/distant');
    $head = recuperer_page($source, false, true, 0);
    if (preg_match(",^Content-Type:\\s*?(.*)\$,Uims", $head, $m) and include_spip('base/typedoc')) {
        $mime = $m[1];
        // passer du mime a l'extension !
        if ($e = array_search($mime, $GLOBALS['tables_mime'])) {
            $extension = $e;
        }
    }
    if (!$extension or in_array($extension, array('bin', 'gz'))) {
        if (preg_match(",^Content-Disposition:\\s*attachment;\\s*filename=(.*)['\"]?\$,Uims", $head, $m) and $e = teleporter_http_extension($m[1])) {
            $extension = $e;
        } else {
            $extension = teleporter_http_extension($source);
        }
    }
    # format de fichier inconnu
    if (!$extension) {
        spip_log("Type de fichier inconnu pour la source {$source}", "teleport" . _LOG_ERREUR);
        return _T('svp:erreur_teleporter_type_fichier_inconnu', array('source' => $source));
    }
    $dest_tmp = preg_replace(";\\.[\\w]{2,3}\$;i", "", $dest_tmp) . ".{$extension}";
    if (!defined('_SVP_PAQUET_MAX_SIZE')) {
        define('_SVP_PAQUET_MAX_SIZE', 67108864);
    }
    // 64Mo
    include_spip('inc/distant');
    $dest_tmp = copie_locale($source, 'force', $dest_tmp, _SVP_PAQUET_MAX_SIZE);
    if (!$dest_tmp or !file_exists($dest_tmp = _DIR_RACINE . $dest_tmp)) {
        spip_log("Chargement impossible de la source {$source}", "teleport" . _LOG_ERREUR);
        return _T('svp:erreur_teleporter_chargement_source_impossible', array('source' => $source));
    }
    return array($dest_tmp, $extension);
}
Beispiel #16
0
/**
 * Jamais appele directement dans le plugin bank/
 * mais par une eventuelle methode abos/resilier d'un plugin externe
 *
 * @param string $uid
 * @param array|string $config
 * @return bool
 */
function presta_paybox_call_resilier_abonnement_dist($uid, $config = 'paybox')
{
    include_spip('inc/bank');
    if (!is_array($config)) {
        $mode = sql_getfetsel("mode", "spip_transactions", "abo_uid=" . sql_quote($uid) . " AND statut=" . sql_quote('ok') . " AND mode LIKE " . sql_quote($config . '%'));
        $config = bank_config($mode);
    }
    $args = "VERSION=001" . "&TYPE=001" . "&SITE=" . str_pad($config['PBX_SITE'], 7, "0", STR_PAD_LEFT) . "&MACH=" . str_pad($config['PBX_RANG'], 3, "0", STR_PAD_LEFT) . "&IDENTIFIANT=" . $config['PBX_IDENTIFIANT'] . "&ABONNEMENT=" . $uid;
    $url = paybox_url_resil($config) . "?" . $args;
    include_spip('inc/distant');
    $reponse = recuperer_page($url);
    spip_log("uid:{$uid}, {$url}, reponse:{$reponse}", 'paybox_abos_resil');
    parse_str($reponse, $res);
    if ($res['ACQ'] == 'OK' and $res['ABONNEMENT'] == $uid) {
        return true;
    }
    return false;
}
/**
 * Recuperer une url en https avec curl ou recuperer_page sinon
 *
 * @param string $url
 * @param array/string $datas
 *   $datas peut etre un tableau de paire=>valeur, ou une chaine de get paire=valeur&...
 */
function inc_bank_recuperer_post_https_dist($url, $datas = '')
{
    if (!function_exists('curl_init')) {
        include_spip('inc/distant');
        if (is_string($datas) and strlen($datas)) {
            parse_str($datas, $args);
            // passer en tableau
            $datas = $args;
        }
        $response = recuperer_page($url, false, false, 1048576, $datas);
        $erreur = $response === false;
        $erreur_msg = "recuperer_page impossible";
    } else {
        //setting the curl parameters.
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        //turning off the server and peer verification(TrustManager Concept).
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        //if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled.
        //Set proxy name to PROXY_HOST and port number to PROXY_PORT in constants.php
        #if(_PAYPAL_USE_PROXY)
        #curl_setopt ($ch, CURLOPT_PROXY, _PAYPAL_PROXY_HOST.":"._PAYPAL_PROXY_PORT);
        //NVPRequest for submitting to server
        $nvpreq = "";
        if (is_array($datas) and count($datas)) {
            $nvpreq = http_build_query($datas);
        }
        //setting the nvpreq as POST FIELD to curl
        curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
        //getting response from server
        $response = curl_exec($ch);
        $erreur = curl_errno($ch);
        $erreur_msg = curl_error($ch);
        if (!$erreur) {
            //closing the curl
            curl_close($ch);
        }
    }
    return array($response, $erreur, $erreur ? $erreur_msg : '');
}
function formulaires_configurer_relayeur_verifier_dist()
{
    $erreurs = array();
    $http_proxy = relayeur_saisie_ou_config(_request('http_proxy'), lire_config('http_proxy', ''));
    $http_noproxy = _request('http_noproxy');
    if ($http_proxy and !tester_url_absolue($http_proxy)) {
        $erreurs['http_proxy'] = _T('info_url_proxy_pas_conforme');
    }
    if (!isset($erreurs['http_proxy']) and _request('tester_proxy')) {
        if (!$http_proxy) {
            $erreurs['http_proxy'] = _T('info_obligatoire');
        } else {
            include_spip('inc/distant');
            $test_proxy = _request('test_proxy');
            $t = parse_url($test_proxy);
            if (!@$t['host']) {
                $erreurs['test_proxy'] = _T('info_adresse_non_indiquee');
            } else {
                include_spip('inc/texte');
                // pour aide, couper, lang
                $info = "";
                if (!need_proxy($t['host'], $http_proxy, $http_noproxy)) {
                    $info = "<strong>" . _T('page_pas_proxy') . "</strong><br />";
                }
                // il faut fausser le proxy actuel pour faire le test !
                $cur_http_proxy = $GLOBALS['meta']['http_proxy'];
                $cur_http_noproxy = $GLOBALS['meta']['http_noproxy'];
                $GLOBALS['meta']['http_proxy'] = $http_proxy;
                $GLOBALS['meta']['http_noproxy'] = $http_noproxy;
                $page = recuperer_page($test_proxy, true);
                $GLOBALS['meta']['http_proxy'] = $cur_http_proxy;
                $GLOBALS['meta']['http_noproxy'] = $cur_http_noproxy;
                if ($page) {
                    $erreurs['message_ok'] = _T('info_proxy_ok') . "<br />{$info}\n<tt>" . couper(entites_html($page), 300) . "</tt>";
                    $erreurs['message_erreur'] = '';
                } else {
                    $erreurs['message_erreur'] = $info . _T('info_impossible_lire_page', array('test_proxy' => "<tt>{$test_proxy}</tt>")) . " <b><tt>" . no_password_proxy_url($http_proxy) . "</tt></b>." . aide('confhttpproxy');
                }
            }
        }
    }
    return $erreurs;
}
Beispiel #19
0
function formulaires_site_verifier_dist($id_rubrique)
{
    $erreurs = array();
    if (!($nom = _request('nom_site'))) {
        $erreurs['nom_site'] = _T("info_obligatoire");
    } else {
        if (strlen($nom) < 2 or strlen(_request('nobot')) > 0) {
            $erreurs['email_message_auteur'] = _T('form_prop_indiquer_nom_site');
        }
    }
    if (!($url = _request('url_site'))) {
        $erreurs['url_site'] = _T("info_obligatoire");
    }
    if (!count($erreurs)) {
        // Tester l'URL du site
        include_spip('inc/distant');
        if (!recuperer_page($url)) {
            $erreurs['url_site'] = _T('form_pet_url_invalide');
        }
    }
    return $erreurs;
}
Beispiel #20
0
function filtre_text_html_dist($t)
{
    if (!preg_match(',^(.*?)<body[^>]*>(.*)</body>,is', $t, $r)) {
        return appliquer_filtre($t, 'text/plain');
    }
    list(, $h, $t) = $r;
    $style = '';
    // recuperer les styles internes
    if (preg_match_all(',<style>(.*?)</style>,is', $h, $r, PREG_PATTERN_ORDER)) {
        $style = join("\n", $r[1]);
    }
    // ... et externes
    include_spip('inc/distant');
    if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER)) {
        foreach ($r[0] as $l) {
            preg_match("/href='([^']*)'/", str_replace('"', "'", $l), $m);
            $style .= "\n/* {$l} */\n" . str_replace('<', '', recuperer_page($m[1]));
        }
    }
    // Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
    $t = safehtml(preg_replace(',<script' . '.*?</script>,is', '', $t));
    return (!$style ? '' : "\n<style>" . $style . "</style>") . $t;
}
Beispiel #21
0
function exec_cs_version_dist() {
	cs_minipres();
	$version = _request('version');
	$force = _request('force')=='oui';

	// pour la version disponible, on regarde toutes les 2h00
	$maj = isset($GLOBALS['meta']['tweaks_maj'])?unserialize($GLOBALS['meta']['tweaks_maj']):array(0, '');
	if (!$force && $maj[1] && (time()-$maj[0] < 2*3600)) $distant = $maj[1];
	else {
		include_spip('inc/distant');
		$distant = recuperer_page(_URL_CS_PLUGIN_XML);
		if ($distant) $distant = $maj[1] = preg_match(',<version>([0-9.]+)</version>,', $distant, $regs)?$regs[1]:'';
		$maj[0] = time();
		if ($distant) ecrire_meta('tweaks_maj', serialize($maj));
		ecrire_metas();
	}
	include_spip('inc/texte');
	include_spip('cout_fonctions'); // fonctions pour les pipelines
	if (!$distant)
		return ajax_retour('<span style="color: red;">'._T('couteauprive:erreur:probleme', array('pb'=>cs_lien(_URL_CS_PLUGIN_XML,_T('couteauprive:erreur:distant')))).'</span>');
	ajax_retour(ptobr(propre($distant==$version?_T('couteauprive:version_a_jour'):(
		$distant?_T('couteauprive:version_nouvelle', array('version' => "[{$distant}->http://files.spip.org/spip-zone/couteau_suisse.zip]")):''
	))));
}
Beispiel #22
0
 /**
  * Aller chercher les donnees de la boucle DATA
  * depuis une source
  * {source format, [URL], [arg2]...}
  */
 protected function select_source()
 {
     # un peu crado : avant de charger le cache il faut charger
     # les class indispensables, sinon PHP ne saura pas gerer
     # l'objet en cache ; cf plugins/icalendar
     # perf : pas de fonction table_to_array ! (table est deja un array)
     if (isset($this->command['sourcemode']) and !in_array($this->command['sourcemode'], array('table', 'array', 'tableau'))) {
         charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true);
     }
     # le premier argument peut etre un array, une URL etc.
     $src = $this->command['source'][0];
     # avons-nous un cache dispo ?
     $cle = null;
     if (is_string($src)) {
         $cle = 'datasource_' . md5($this->command['sourcemode'] . ':' . var_export($this->command['source'], true));
     }
     $cache = $this->cache_get($cle);
     if (isset($this->command['datacache'])) {
         $ttl = intval($this->command['datacache']);
     }
     if ($cache and $cache['time'] + (isset($ttl) ? $ttl : $cache['ttl']) > time() and !(_request('var_mode') === 'recalcul' and include_spip('inc/autoriser') and autoriser('recalcul'))) {
         $this->tableau = $cache['data'];
     } else {
         try {
             # dommage que ca ne soit pas une option de yql_to_array...
             if ($this->command['sourcemode'] == 'yql') {
                 if (!isset($ttl)) {
                     $ttl = 3600;
                 }
             }
             if (isset($this->command['sourcemode']) and in_array($this->command['sourcemode'], array('table', 'array', 'tableau'))) {
                 if (is_array($a = $src) or is_string($a) and $a = str_replace('&quot;', '"', $a) and is_array($a = @unserialize($a))) {
                     $this->tableau = $a;
                 }
             } else {
                 if (preg_match(',^https?://,', $src)) {
                     include_spip('inc/distant');
                     $u = recuperer_page($src, false, false, _DATA_SOURCE_MAX_SIZE);
                     if (!$u) {
                         throw new Exception("404");
                     }
                     if (!isset($ttl)) {
                         $ttl = 24 * 3600;
                     }
                 } else {
                     if (@is_dir($src)) {
                         $u = $src;
                         if (!isset($ttl)) {
                             $ttl = 10;
                         }
                     } else {
                         if (@is_readable($src) && @is_file($src)) {
                             $u = spip_file_get_contents($src);
                             if (!isset($ttl)) {
                                 $ttl = 10;
                             }
                         } else {
                             $u = $src;
                             if (!isset($ttl)) {
                                 $ttl = 10;
                             }
                         }
                     }
                 }
                 if (!$this->err and $g = charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true)) {
                     $args = $this->command['source'];
                     $args[0] = $u;
                     if (is_array($a = call_user_func_array($g, $args))) {
                         $this->tableau = $a;
                     }
                 }
             }
             if (!is_array($this->tableau)) {
                 $this->err = true;
             }
             if (!$this->err and isset($ttl) and $ttl > 0) {
                 $this->cache_set($cle, $ttl);
             }
         } catch (Exception $e) {
             $e = $e->getMessage();
             $err = sprintf("[%s, %s] {$e}", $src, $this->command['sourcemode']);
             erreur_squelette(array($err, array()));
             $this->err = true;
         }
     }
     # en cas d'erreur, utiliser le cache si encore dispo
     if ($this->err and $cache) {
         $this->tableau = $cache['data'];
         $this->err = false;
     }
 }
Beispiel #23
0
function url_absolue_css($css)
{
    if (!preg_match(',\\.css$,i', $css, $r)) {
        return $css;
    }
    $url_absolue_css = url_absolue($css);
    $f = basename($css, '.css');
    $f = sous_repertoire(_DIR_VAR, 'cache-css') . preg_replace(",(.*?)(_rtl|_ltr)?\$,", "\\1-urlabs-" . substr(md5("{$css}-urlabs"), 0, 4) . "\\2", $f) . '.css';
    if (@filemtime($f) > @filemtime($css) and _VAR_MODE != 'recalcul') {
        return $f;
    }
    if ($url_absolue_css == $css) {
        if (strncmp($GLOBALS['meta']['adresse_site'], $css, $l = strlen($GLOBALS['meta']['adresse_site'])) != 0 or !lire_fichier(_DIR_RACINE . substr($css, $l), $contenu)) {
            include_spip('inc/distant');
            if (!($contenu = recuperer_page($css))) {
                return $css;
            }
        }
    } elseif (!lire_fichier($css, $contenu)) {
        return $css;
    }
    // passer les url relatives a la css d'origine en url absolues
    $contenu = urls_absolues_css($contenu, $css);
    // ecrire la css
    if (!ecrire_fichier($f, $contenu)) {
        return $css;
    }
    return $f;
}
Beispiel #24
0
function recuperer_infos_distantes($source, $max = 0, $charger_si_petite_image = true)
{
    # charger les alias des types mime
    include_spip('base/typedoc');
    global $mime_alias;
    $a = array();
    $mime_type = '';
    // On va directement charger le debut des images et des fichiers html,
    // de maniere a attrapper le maximum d'infos (titre, taille, etc). Si
    // ca echoue l'utilisateur devra les entrer...
    if ($headers = recuperer_page($source, false, true, $max, '', '', true)) {
        list($headers, $a['body']) = preg_split(',\\n\\n,', $headers, 2);
        if (preg_match(",\nContent-Type: *([^[:space:];]*),i", "\n{$headers}", $regs)) {
            $mime_type = trim($regs[1]);
        } else {
            $mime_type = '';
        }
        // inconnu
        // Appliquer les alias
        while (isset($mime_alias[$mime_type])) {
            $mime_type = $mime_alias[$mime_type];
        }
        // Si on a un mime-type insignifiant
        // text/plain,application/octet-stream ou vide
        // c'est peut-etre que le serveur ne sait pas
        // ce qu'il sert ; on va tenter de detecter via l'extension de l'url
        // ou le Content-Disposition: attachment; filename=...
        $t = null;
        if (in_array($mime_type, array('text/plain', '', 'application/octet-stream'))) {
            if (!$t and preg_match(',\\.([a-z0-9]+)(\\?.*)?$,i', $source, $rext)) {
                $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1], '', 'text'));
            }
            if (!$t and preg_match(",^Content-Disposition:\\s*attachment;\\s*filename=(.*)\$,Uims", $headers, $m) and preg_match(',\\.([a-z0-9]+)(\\?.*)?$,i', $m[1], $rext)) {
                $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1], '', 'text'));
            }
        }
        // Autre mime/type (ou text/plain avec fichier d'extension inconnue)
        if (!$t) {
            $t = sql_fetsel("extension", "spip_types_documents", "mime_type=" . sql_quote($mime_type));
        }
        // Toujours rien ? (ex: audio/x-ogg au lieu de application/ogg)
        // On essaie de nouveau avec l'extension
        if (!$t and $mime_type != 'text/plain' and preg_match(',\\.([a-z0-9]+)(\\?.*)?$,i', $source, $rext)) {
            $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1], '', 'text'));
            # eviter xxx.3 => 3gp (> SPIP 3)
        }
        if ($t) {
            spip_log("mime-type {$mime_type} ok, extension " . $t['extension']);
            $a['extension'] = $t['extension'];
        } else {
            # par defaut on retombe sur '.bin' si c'est autorise
            spip_log("mime-type {$mime_type} inconnu");
            $t = sql_fetsel("extension", "spip_types_documents", "extension='bin'");
            if (!$t) {
                return false;
            }
            $a['extension'] = $t['extension'];
        }
        if (preg_match(",\nContent-Length: *([^[:space:]]*),i", "\n{$headers}", $regs)) {
            $a['taille'] = intval($regs[1]);
        }
    }
    // Echec avec HEAD, on tente avec GET
    if (!$a and !$max) {
        spip_log("tenter GET {$source}");
        $a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
    }
    // S'il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller
    // recharger le document en GET et recuperer des donnees supplementaires...
    if (preg_match(',^image/(jpeg|gif|png|swf),', $mime_type)) {
        if ($max == 0 and $a['taille'] < _INC_DISTANT_MAX_SIZE and strpos($GLOBALS['meta']['formats_graphiques'], $a['extension']) !== false and $charger_si_petite_image) {
            $a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
        } else {
            if ($a['body']) {
                $a['fichier'] = _DIR_RACINE . nom_fichier_copie_locale($source, $a['extension']);
                ecrire_fichier($a['fichier'], $a['body']);
                $size_image = @getimagesize($a['fichier']);
                $a['largeur'] = intval($size_image[0]);
                $a['hauteur'] = intval($size_image[1]);
                $a['type_image'] = true;
            }
        }
    }
    // Fichier swf, si on n'a pas la taille, on va mettre 425x350 par defaut
    // ce sera mieux que 0x0
    if ($a and $a['extension'] == 'swf' and !$a['largeur']) {
        $a['largeur'] = 425;
        $a['hauteur'] = 350;
    }
    if ($mime_type == 'text/html') {
        include_spip('inc/filtres');
        $page = recuperer_page($source, true, false, _INC_DISTANT_MAX_SIZE);
        if (preg_match(',<title>(.*?)</title>,ims', $page, $regs)) {
            $a['titre'] = corriger_caracteres(trim($regs[1]));
        }
        if (!$a['taille']) {
            $a['taille'] = strlen($page);
        }
        # a peu pres
    }
    return $a;
}
Beispiel #25
0
/**
 * Préparer un fichier CSS avant sa minification
 * 
 * @param string $css
 * @param bool|string $is_inline
 * @param string $fonctions
 * @return bool|int|null|string
 */
function &compresseur_callback_prepare_css(&$css, $is_inline = false, $fonctions = null)
{
    if ($is_inline) {
        return compresseur_callback_prepare_css_inline($css, $is_inline);
    }
    if (!preg_match(',\\.css$,i', $css, $r)) {
        return $css;
    }
    $url_absolue_css = url_absolue($css);
    if (!$fonctions) {
        $fonctions = compresseur_liste_fonctions_prepare_css();
    } elseif (is_string($fonctions)) {
        $fonctions = array($fonctions);
    }
    $sign = implode(",", $fonctions);
    $sign = substr(md5("{$css}-{$sign}"), 0, 8);
    $file = basename($css, '.css');
    $file = sous_repertoire(_DIR_VAR, 'cache-css') . preg_replace(",(.*?)(_rtl|_ltr)?\$,", "\\1-f-" . $sign . "\\2", $file) . '.css';
    if (@filemtime($file) > @filemtime($css) and (!defined('_VAR_MODE') or _VAR_MODE != 'recalcul')) {
        return $file;
    }
    if ($url_absolue_css == $css) {
        if (strncmp($GLOBALS['meta']['adresse_site'] . "/", $css, $l = strlen($GLOBALS['meta']['adresse_site'] . "/")) != 0 or !lire_fichier(_DIR_RACINE . substr($css, $l), $contenu)) {
            include_spip('inc/distant');
            if (!($contenu = recuperer_page($css))) {
                return $css;
            }
        }
    } elseif (!lire_fichier($css, $contenu)) {
        return $css;
    }
    // retirer le protocole de $url_absolue_css
    $url_absolue_css = protocole_implicite($url_absolue_css);
    $contenu = compresseur_callback_prepare_css_inline($contenu, $url_absolue_css, $fonctions);
    // ecrire la css
    if (!ecrire_fichier($file, $contenu)) {
        return $css;
    }
    return $file;
}
Beispiel #26
0
/**
 * Analyser une URL de site distant, qui peut être une syndication.
 *
 * @param string $url
 *     URL du site à analyser
 * @return array|bool
 *     - array : informations du site
 *     - false : site impossible à récupérer
 **/
function analyser_site($url)
{
    include_spip('inc/filtres');
    include_spip('inc/distant');
    // Accepter les URLs au format feed:// ou qui ont oublie le http://
    $url = preg_replace(',^feed://,i', 'http://', $url);
    if (!preg_match(',^[a-z]+://,i', $url)) {
        $url = 'http://' . $url;
    }
    $texte = recuperer_page($url, true);
    if (!$texte) {
        return false;
    }
    include_spip('inc/syndic');
    cdata_echappe($texte, $echappe_cdata);
    if (preg_match(',<(channel|feed)([\\:[:space:]][^>]*)?' . '>(.*)</\\1>,ims', $texte, $regs)) {
        $result['syndication'] = 'oui';
        $result['url_syndic'] = $url;
        $channel = $regs[3];
        // Pour recuperer l'entete, on supprime tous les items
        $b = array_merge(extraire_balises($channel, 'item'), extraire_balises($channel, 'entry'));
        $header = str_replace($b, array(), $channel);
        if ($t = extraire_balise($header, 'title')) {
            cdata_echappe_retour($t, $echappe_cdata);
            $result['nom_site'] = filtrer_entites(supprimer_tags($t));
        }
        if ($t = extraire_balises($header, 'link')) {
            cdata_echappe_retour($t, $echappe_cdata);
            foreach ($t as $link) {
                $u = supprimer_tags(filtrer_entites($link));
                if (!strlen($u)) {
                    $u = extraire_attribut($link, 'href');
                }
                if (strlen($u)) {
                    // on installe l'url comme url du site
                    // si c'est non vide, en donnant la priorite a rel=alternate
                    if (preg_match(',\\balternate\\b,', extraire_attribut($link, 'rel')) or !isset($result['url_site'])) {
                        $result['url_site'] = filtrer_entites($u);
                    }
                }
            }
        }
        $result['url_site'] = url_absolue($result['url_site'], $url);
        if ($a = extraire_balise($header, 'description') or $a = extraire_balise($header, 'tagline')) {
            cdata_echappe_retour($a, $echappe_cdata);
            $result['descriptif'] = filtrer_entites(supprimer_tags($a));
        }
        if (preg_match(',<image.*<url.*>(.*)</url>.*</image>,Uims', $header, $r) and preg_match(',(https?://.*/.*(gif|png|jpg)),ims', $r[1], $r) and $image = recuperer_infos_distantes($r[1])) {
            if (in_array($image['extension'], array('gif', 'jpg', 'png'))) {
                $result['format_logo'] = $image['extension'];
                $result['logo'] = $r[1];
            } else {
                if ($image['fichier']) {
                    spip_unlink($image['fichier']);
                }
            }
        }
    } else {
        $result['syndication'] = 'non';
        $result['url_site'] = $url;
        if (preg_match(',<head>(.*(description|title).*)</head>,Uims', $texte, $regs)) {
            $head = filtrer_entites($regs[1]);
        } else {
            $head = $texte;
        }
        if (preg_match(',<title[^>]*>(.*),ims', $head, $regs)) {
            $titre = trim($regs[1]);
            if (!strlen($titre)) {
                $titre = substr($head, strpos($head, $regs[0]));
            }
            $result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*$,ims', '', $titre)));
        }
        if ($a = array_merge(extraire_balises($head, 'meta'), extraire_balises($head, 'http-equiv'))) {
            foreach ($a as $meta) {
                if (extraire_attribut($meta, 'name') == 'description') {
                    $desc = trim(extraire_attribut($meta, 'content'));
                    if (!strlen($desc)) {
                        $desc = trim(extraire_attribut($meta, 'value'));
                    }
                    $result['descriptif'] = $desc;
                }
            }
        }
        // Cherchons quand meme un backend
        include_spip('inc/distant');
        include_spip('inc/feedfinder');
        $feeds = get_feed_from_url($url, $texte);
        // si on a a trouve un (ou plusieurs) on le note avec select:
        // ce qui constitue un signal pour exec=sites qui proposera de choisir
        // si on syndique, et quelle url.
        if (count($feeds) >= 1) {
            spip_log("feedfinder.php :\n" . join("\n", $feeds));
            $result['url_syndic'] = "select: " . join(' ', $feeds);
        }
    }
    cdata_echappe_retour($result, $echappe_cdata);
    return $result;
}
Beispiel #27
0
/**
 * Vérifie le formatage d'un xml
 *
 * @see valider_resultats()
 * @see valider_dir()
 * @see valider_pseudo_url()
 *
 * @param string $url
 * @param string $req_ext
 * @param int $limit
 * @param array|bool $rec
 *
 **/
function valider_xml_ok($url, $req_ext, $limit, $rec)
{
    $url = urldecode($url);
    $rec = !$rec ? false : array();
    if (!$limit) {
        $limit = 200;
    }
    $titre = _T('analyse_xml');
    if (!$url) {
        $url_aff = 'http://';
        $onfocus = "this.value='';";
        $texte = $bandeau = $err = '';
    } else {
        include_spip('inc/distant');
        if (is_dir($url)) {
            $dir = substr($url, -1, 1) === '/' ? $url : "{$url}/";
            $ext = !preg_match('/^[.*\\w]+$/', $req_ext) ? 'php' : $req_ext;
            $files = preg_files($dir, "{$ext}\$", $limit, $rec);
            if (!$files and $ext !== 'html') {
                $files = preg_files($dir, 'html$', $limit, $rec);
                if ($files) {
                    $ext = 'html';
                }
            }
            if ($files) {
                $res = valider_dir($files, $ext, $url);
                list($err, $res) = valider_resultats($res, $ext === 'html');
                $err = ' (' . $err . '/' . count($files) . ')';
            } else {
                $res = _T('texte_vide');
                $err = '';
            }
            $bandeau = $dir . '*' . $ext . $err;
        } else {
            if (preg_match('@^((?:[.]/)?[^?]*)[?]([0-9a-z_]+)=([^&]*)(.*)$@', $url, $r)) {
                list(, $server, $dir, $script, $args) = $r;
                if ((!$server or $server == './' or strpos($server, url_de_base()) === 0) and is_dir($dir)) {
                    $url = $script;
                    // Pour quand le validateur saura simuler
                    // une query-string...
                    // $args = preg_split('/&(amp;)?[a-z0-9_]+=/', $args);
                    $args = true;
                }
            } else {
                $dir = 'exec';
                $script = $url;
                $args = true;
            }
            $transformer_xml = charger_fonction('valider', 'xml');
            $onfocus = "this.value='" . addslashes($url) . "';";
            if (preg_match(',^[a-z][0-9a-z_]*$,i', $url)) {
                $res = $transformer_xml(charger_fonction($url, $dir), $args);
                $url_aff = valider_pseudo_url($dir, $script);
            } else {
                $res = $transformer_xml(recuperer_page($url));
                $url_aff = entites_html($url);
            }
            list($texte, $err) = emboite_texte($res);
            if (!$err) {
                $err = '<h3>' . _T('spip_conforme_dtd') . '</h3>';
            }
            $res = "<div style='text-align: center'>" . $err . "</div>" . "<div style='margin: 10px; text-align: left'>" . $texte . '</div>';
            $bandeau = "<a href='{$url_aff}'>{$url}</a>";
        }
    }
    $commencer_page = charger_fonction('commencer_page', 'inc');
    $debut = $commencer_page($titre);
    $jq = http_script("", 'jquery.js');
    echo str_replace('<head>', "<head>{$jq}", $debut);
    $onfocus = '<input type="text" size="70" value="' . $url_aff . '" name="var_url" id="var_url" onfocus="' . $onfocus . '" />';
    $onfocus = generer_form_ecrire('valider_xml', $onfocus, " method='get'");
    echo "<h1>", $titre, '<br>', $bandeau, '</h1>', "<div style='text-align: center'>", $onfocus, "</div>", $res, fin_page();
}
function formulaires_signature_verifier_dist($id_article)
{
    $erreurs = array();
    $oblis = array('session_nom', 'session_email');
    include_spip('base/abstract_sql');
    $row = sql_fetsel('*', 'spip_petitions', 'id_article=' . intval($id_article));
    if (!$row) {
        $erreurs['message_erreur'] = _T('petitions:form_pet_probleme_technique');
    }
    $id_petition = $row['id_petition'];
    if ($row['site_obli'] == 'oui') {
        $oblis[] = 'signature_nom_site';
        $oblis[] = 'signature_url_site';
        set_request('signature_url_site', vider_url(_request('signature_url_site')));
    }
    foreach ($oblis as $obli) {
        if (!_request($obli)) {
            $erreurs[$obli] = _T('info_obligatoire');
        }
    }
    if ($nom = _request('session_nom') and strlen($nom) < 2) {
        $erreurs['session_nom'] = _T('form_indiquer_nom');
    }
    include_spip('inc/filtres');
    if (($mail = _request('session_email')) == _T('info_mail_fournisseur')) {
        $erreurs['session_email'] = _T('form_indiquer_email');
    } elseif ($mail and !email_valide($mail)) {
        $erreurs['session_email'] = _T('form_email_non_valide');
    } elseif (strlen(_request('nobot')) or @preg_match_all(',\\bhref=[\'"]?http,i', _request('message')) > 2) {
        #$envoyer_mail = charger_fonction('envoyer_mail','inc');
        #envoyer_mail('*****@*****.**', 'spam intercepte', var_export($_POST,1));
        $erreurs['message_erreur'] = _T('petitions:form_pet_probleme_liens');
    }
    if ($row['site_obli'] == 'oui') {
        if (!vider_url($url_site = _request('signature_url_site'))) {
            $erreurs['signature_url_site'] = _T('form_indiquer_nom_site');
        } elseif (!count($erreurs)) {
            include_spip('inc/distant');
            if (!recuperer_page($url_site, false, true, 0)) {
                $erreurs['signature_url_site'] = _T('petitions:form_pet_url_invalide');
            }
        }
    }
    if (!count($erreurs)) {
        // tout le monde est la.
        $email_unique = $row['email_unique'] == "oui";
        $site_unique = $row['site_unique'] == "oui";
        // Refuser si deja signe par le mail ou le site quand demande
        // Il y a un acces concurrent potentiel,
        // mais ca n'est qu'un cas particulier de qq n'ayant jamais confirme'.
        // On traite donc le probleme a la confirmation.
        if ($email_unique) {
            $r = sql_countsel('spip_signatures', "id_petition=" . intval($id_petition) . " AND ad_email=" . sql_quote($mail) . " AND statut='publie'");
            if ($r) {
                $erreurs['message_erreur'] = _T('petitions:form_pet_deja_signe');
            }
        }
        if ($site_unique) {
            $r = sql_countsel('spip_signatures', "id_petition=" . intval($id_petition) . " AND url_site=" . sql_quote($url_site) . " AND (statut='publie' OR statut='poubelle')");
            if ($r) {
                $erreurs['message_erreur'] = _T('petitions:form_pet_site_deja_enregistre');
            }
        }
    }
    return $erreurs;
}
Beispiel #29
0
function configuration_relayeur_post ($http_proxy, $http_noproxy, $test_proxy, $tester_proxy) 
{
	// http_proxy : ne pas prendre en compte la modif si le password est '****'
	if (preg_match(',:\*\*\*\*@,', $http_proxy))
		$http_proxy = $GLOBALS['meta']['http_proxy'];

	$retour = $page = '';

	if ($tester_proxy AND preg_match(",https?://,", $http_proxy)) {
		include_spip('inc/distant');
		$t = parse_url($test_proxy);

		if (!@$t['host']) {
			$retour = _T('info_adresse_non_indiquee');
		} elseif (!need_proxy($t['host'])) {

			$retour = "<p>"._T('page_pas_proxy')."</p>\n";
		} elseif ($page = recuperer_page($test_proxy, true)) {
			include_spip('inc/texte'); // pour aide, couper, lang
			$retour = "<p>"._T('info_proxy_ok')."</p>\n<tt>"
			. couper(entites_html($page),300)."</tt>";
		} else	$retour = _T('info_impossible_lire_page',
					array('test_proxy' => $test_proxy))
			. " <tt>".no_password_proxy_url($http_proxy)."</tt>."
			. aide('confhttpproxy');
	}

	if ($http_proxy !== NULL) {
		ecrire_meta('http_proxy', $http_proxy);
	}
	if ($http_noproxy !== NULL) {
		ecrire_meta('http_noproxy', $http_noproxy);
	}
	if ($page) {
		include_spip('install/etape_fin');
		$retour .= install_verifier_htaccess();
	}
	return $retour;
}
Beispiel #30
0
function cs_action_fichiers_distants(&$outil, $forcer=false, $tester=false) {
	if(!isset($outil['fichiers_distants'])) return '';
	$lib = sous_repertoire(_DIR_PLUGIN_COUTEAU_SUISSE, 'lib');
	$a = array();
	foreach($outil['fichiers_distants'] as $i) {
		$erreur = false;
		$res_pipe = '';
		$dir = sous_repertoire($lib, $outil['id']);
		preg_match('/[^?]*/', basename($outil[$i]), $reg); 
		$f = 'distant_' . $reg[0];
		$file = pipeline('fichier_distant', array('outil'=>$outil['id'], 'fichier_local'=>$dir.$f));
		$file = $file['fichier_local'];
		$f = basename($file);
		$size = ($forcer || @(!file_exists($file)) ? 0 : filesize($file));
		if($size) $statut = _T('couteauprive:distant_present', array('date'=>cs_date_long(date('Y-m-d H:i:s', filemtime($file)))));
		elseif($outil['actif'] || $forcer) {
			include_spip('inc/distant');
			if($distant = recuperer_page($outil[$i])) {
				$distant = pipeline('fichier_distant', array('outil'=>$outil['id'], 'fichier_local'=>$file, 
						'fichier_distant'=>$outil[$i], 'message'=>'', 'texte'=>$distant, 'actif'=>$outil['actif']));
				$file = $distant['fichier_local'];
				$message = $distant['message'] . "\n_ " . _T('couteauprive:copie_vers', array('dir'=>dirname($distant['fichier_local']).'/'));
				$distant = $distant['texte'];
				if(preg_match(',\.php\d?$,', $file)) {
					$test = preg_replace(',^.*?\<\?php|\?\>.*?$,', '', $distant);
					if(!@eval("return true; $test")) $distant = false;
					else $distant = ecrire_fichier($file, '<'."?php\n\n".trim($test)."\n\n?".'>');
				} else
					$distant = ecrire_fichier($file, $distant);
			}
			if($distant) $statut = '<span style="color:green">'._T('couteauprive:distant_charge').'</span>';
			else $erreur = $statut = '<span style="color:red">'._T('couteauprive:distant_echoue').'</span>';
		} else $erreur = $statut = _T('couteauprive:distant_inactif');
		$a[] = "[{$f}->{$outil[$i]}]\n_ ".$statut.$message;
	}
	if($tester) return $a;
	$a = '<ul style="margin:0.6em 0 0.6em 4em;"><li>' . join("</li><li style='margin-top:0.4em;'>", $a) . '</li></ul>';
	$b = ($outil['actif'] || !$erreur)?'rss_actualiser':($erreur?'distant_charger':false);
	$b = $b?"\n<p class='cs_sobre'><input class='cs_sobre' type='submit' value=\" ["
			. attribut_html(_T('couteauprive:'.$b)).']" /></p>':'';
	return ajax_action_auteur('action_rapide', 'fichiers_distants', 'admin_couteau_suisse', "arg=$outil[id]|fichiers_distants&cmd=descrip#cs_action_rapide",
			'<p>' . _T('couteauprive:distant_aide') . '</p>'
			. '<p style="margin-top:1em"><strong>' . definir_puce() . '&nbsp;' . _T('couteauprive:detail_fichiers_distant') . '</strong></p>'
			. '<div>' . propre($a) . '</div>' . $b);
	
}