Пример #1
0
/**
 * Appeler le presta bancaire si celui-ci dispose d'une methode dans son API pour resilier un abonnement
 * @param string $abonne_uid
 * @param string $mode_paiement
 * @return bool
 *   renvoie false si le presta bancaire indique un echec, true dans tous les autres cas
 */
function abos_resilier_notify_bank($abonne_uid, $mode_paiement = null)
{
    if (!$mode_paiement) {
        $mode_paiement = sql_getfetsel("mode", "spip_transactions", "abo_uid=" . sql_quote($abonne_uid, '', 'text'), "", "id_transaction DESC");
    }
    spip_log("abos/resilier_notify_bank abonne_uid={$abonne_uid} mode={$mode_paiement}", "abos_resil");
    $ok = true;
    // notifier au presta bancaire si besoin
    if ($mode_paiement and $abonne_uid) {
        include_spip("inc/bank");
        if (!($config = bank_config($mode_paiement, true)) or !isset($config['presta']) or !($presta = $config['presta'])) {
            spip_log("abos/resilier_notify_bank presta inconnu pour mode={$mode_paiement}", "abos_resil" . _LOG_ERREUR);
        }
        if ($presta and $presta_resilier = charger_fonction('resilier_abonnement', "presta/{$presta}/call", true)) {
            $ok = $presta_resilier($abonne_uid);
            if (!$ok) {
                spip_log("Resiliation abo " . $abonne_uid . " refuse par le prestataire", 'abos_resil' . _LOG_ERREUR);
            }
        } else {
            spip_log("abos/resilier_notify_bank : pas de methode resilier_abonnement pour le presta {$presta}", "abos_resil" . _LOG_INFO_IMPORTANTE);
        }
        if (!$ok) {
            bank_simple_call_resilier_abonnement($abonne_uid, $mode_paiement);
            // TODO ajouter un message a l'abonnement pour le feedback user
            spip_log("Envoi email de desabo " . $abonne_uid . " au webmestre", 'abos_resil' . _LOG_INFO_IMPORTANTE);
            // neanmoins, si plus d'echeance prevue, on peut finir
            // (cas d'un abos deja resilie fin de mois qu'on veut forcer a resilier immediatement)
            // TODO eventuel
        }
    }
    return $ok;
}
Пример #2
0
/**
 * @param array $config
 * @param int $id_transaction
 * @param string $transaction_hash
 * @param array $options
 * @return array|string
 */
function presta_paypalexpress_payer_acte_dist($config, $id_transaction, $transaction_hash, $options = array())
{
    include_spip('presta/paypalexpress/inc/paypalexpress');
    $contexte = array('id_transaction' => $id_transaction, 'transaction_hash' => $transaction_hash, 'url_confirm' => parametre_url(self(), 'confirm', 'oui'), 'sandbox' => paypalexpress_is_sandbox($config) ? ' ' : '', 'logo' => bank_trouver_logo('paypal', 'PAYPAL.gif'), 'config' => $config);
    $contexte = array_merge($options, $contexte);
    return recuperer_fond('presta/paypalexpress/payer/acte', $contexte);
}
Пример #3
0
/**
 * Plugin SkelEditor
 * Editeur de squelette en ligne
 * (c) 2007-2010 erational
 * Licence GPL-v3
 *
 */

function action_skeleditor_new_from_dist(){
	$securiser_action = charger_fonction('securiser_action','inc');
	$arg = $securiser_action();

	// $arg est le fichier que l'on veut personaliser
	if (strncmp($arg,_DIR_RACINE,strlen(_DIR_RACINE)!==0))
		$arg = _DIR_RACINE.$arg;

	include_spip('inc/skeleditor');
	$file = skeleditor_nom_copie($arg);
	if ($file){
		include_spip('inc/skeleditor');
		$path_base = skeleditor_path_editable();
		list($chemin,) = skeleditor_cree_chemin($path_base, $file);
		if ($chemin){
			$file = basename($file);

			if (!file_exists($chemin . $file)) {
				lire_fichier($arg, $contenu);
				ecrire_fichier($chemin . $file, skeleditor_commente_copie($arg,$contenu));
			}

			if (file_exists($f=$chemin.$file))
				$GLOBALS['redirect'] = parametre_url(_request('redirect'),'f',$f);
		}
	}

}
Пример #4
0
function player_affiche_config_form ($exec_page){

		global $spip_lang_right, $spip_lang_left;
		
	  if ($player = _request('player')) {
			ecrire_meta('player', $player);
			if(version_compare($GLOBALS['spip_version_code'],'1.9300','<')) { 
				include_spip("inc/meta");
				ecrire_metas();
			}
		}
		
		$player_ = $GLOBALS['meta']['player'];
		
		$out = ""
			. debut_cadre_trait_couleur(_DIR_PLUGIN_PLAYER_IMAGES."player-son-24.png", true, "", "Player Audio")
			. "<form action='".generer_url_ecrire($exec_page)."' method='post' class='verdana2'><div>"
			. bouton_radio("player", "neoplayer", "Neolao player", $player_ == "neoplayer")
			. "<br />"
			. bouton_radio("player", "dewplayer", "Dew player", $player_ == "dewplayer")
			. "<br />"
			. bouton_radio("player", "pixplayer", "One pixel out player", $player_ == "pixplayer")
			. "<br />"
			. bouton_radio("player", "eraplayer", "Erational player", $player_ == "eraplayer")
			. "<div style='text-align:$spip_lang_right'><input type='submit' name='Valider' value='"._T('bouton_valider')."' class='fondo' /></div>"
			. "</div></form>"
			. fin_cadre_trait_couleur(true)
			;

		return ($out);
}
Пример #5
0
/**
 * Définir la liste des boutons du haut et de ses sous-menus
 *
 * On defini les boutons à mettre selon les droits de l'utilisateur
 * puis on balance le tout au pipeline "ajouter_menus" pour que des plugins
 * puissent y mettre leur grain de sel
 *
 * @param array $contexte
 * @param bool $icones Rechercher les icones
 * @param bool $autorise Ne renvoyer que les boutons autorisés
 * @return array
 */
function definir_barre_boutons($contexte = array(), $icones = true, $autorise = true)
{
    include_spip('inc/autoriser');
    $boutons_admin = array();
    // les boutons du core, issus de prive/navigation.xml
    $liste_boutons = array();
    // ajouter les boutons issus des plugin via plugin.xml
    if (function_exists('boutons_plugins') and is_array($liste_boutons_plugins = boutons_plugins())) {
        $liste_boutons =& $liste_boutons_plugins;
    }
    foreach ($liste_boutons as $id => $infos) {
        $parent = "";
        // les boutons principaux ne sont pas soumis a autorisation
        if (!isset($infos['parent']) or !($parent = $infos['parent']) or !$autorise or autoriser('menu', "_{$id}", 0, null, array('contexte' => $contexte))) {
            if ($parent and $parent = preg_replace(',^bando_,', 'menu_', $parent) and isset($boutons_admin[$parent])) {
                if (!is_array($boutons_admin[$parent]->sousmenu)) {
                    $boutons_admin[$parent]->sousmenu = array();
                }
                $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
                if ($position < 0) {
                    $position = count($boutons_admin[$parent]->sousmenu) + 1 + $position;
                }
                $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position) + array($id => new Bouton(($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin[$parent]->sousmenu, $position, 100);
            }
            if (!$parent and !in_array($id, array('forum', 'statistiques_visites')) and (!$autorise or autoriser('menugrandeentree', "_{$id}", 0, null, array('contexte' => $contexte)))) {
                $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin);
                $boutons_admin = array_slice($boutons_admin, 0, $position) + array($id => new Bouton(($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin, $position, 100);
            }
        }
    }
    return pipeline('ajouter_menus', $boutons_admin);
}
Пример #6
0
/**
 * @param array $config
 * @param int $id_transaction
 * @param string $transaction_hash
 * @param array $options
 * @return array|string
 */
function presta_paypal_payer_acte_dist($config, $id_transaction, $transaction_hash, $options = array())
{
    include_spip('presta/paypal/inc/paypal');
    $contexte = array('action' => paypal_url_serveur($config), 'url_return' => bank_url_api_retour($config, "response"), 'url_notify' => bank_url_api_retour($config, "autoresponse"), 'url_cancel' => bank_url_api_retour($config, "cancel"), 'id_transaction' => $id_transaction, 'transaction_hash' => $transaction_hash, 'sandbox' => paypal_is_sandbox($config), 'logo' => bank_trouver_logo('paypal', 'PAYPAL.gif'), 'config' => $config);
    $contexte = array_merge($options, $contexte);
    return recuperer_fond('presta/paypal/payer/acte', $contexte);
}
Пример #7
0
/**
 * supprime/compte les elements listes d'un type donne
 *
 * @param nom $table
 * @param tableau $ids (si $id==-1, on vide/compte tout)
 * @param booleen $compter
 * @return array(nb objets, nb objets lies, ids trouves)
 */
function cs_corbeille_gerer($table, $ids=array(), $vider=false) {
	$params = cs_corbeille_table_infos($table);
	if (isset($params['table'])) $table = $params['table'];
	include_spip('base/abstract_sql');
	$type = objet_type($table);
	$table_sql = table_objet_sql($type);
	$id_table = id_table_objet($type);
	if (!$params['statut']) return false;
//echo "$type - $table_sql - $id_table - ",table_objet_sql($type),'<hr>';
	// determine les index des elements a supprimer
	$ids = $ids===-1
		?array_map('reset',sql_allfetsel($id_table,$table_sql,'statut='.sql_quote($params['statut'])))
		:array_map('reset',sql_allfetsel($id_table,$table_sql,sql_in($id_table,$ids).' AND statut='.sql_quote($params['statut'])));
	if (!count($ids)) return array(0, 0, array());
	// compte/supprime les elements definis par la liste des index
	if($vider) sql_delete($table_sql,sql_in($id_table,$ids));
	$nb = count($ids);

	// compte/supprime des elements lies
	$nb_lies = 0;
	$f = $vider?'sql_delete':'sql_countsel';
	if ($table_liee=$params['tableliee']) {
		$trouver_table = charger_fonction('trouver_table','base');
		foreach($table_liee as $unetable) {
			$desc = $trouver_table($unetable);
			if (isset($desc['field'][$id_table]))
				$nb_lies += $f($unetable,sql_in($id_table,$ids));
			elseif(isset($desc['field']['id_objet']) AND isset($desc['field']['objet']))
				$nb_lies += $f($unetable,sql_in('id_objet',$ids)." AND objet=".sql_quote($type));
		}
	}
	return array($nb, $vider?'-1':$nb_lies, $ids);
}
Пример #8
0
/**
 * Exec de la page de destruction des tables de SPIP
**/
function exec_base_delete_all_dist()
{
    include_spip('inc/autoriser');
    if (!autoriser('detruire')) {
        include_spip('inc/minipres');
        echo minipres();
    } else {
        include_spip('base/dump');
        $res = base_lister_toutes_tables('', array(), array(), true);
        if (!$res) {
            include_spip('inc/minipres');
            spip_log("Erreur base de donnees");
            echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique') . "<p><tt>" . sql_errno() . " " . sql_error() . "</tt></p>");
        } else {
            $res = base_saisie_tables('delete', $res);
            include_spip('inc/headers');
            $res = "\n<ol style='text-align:left'><li>\n" . join("</li>\n<li>", $res) . '</li></ol>';
            $admin = charger_fonction('admin', 'inc');
            $res = $admin('delete_all', _T('titre_page_delete_all'), $res);
            if (!$res) {
                redirige_url_ecrire('install', '');
            } else {
                echo $res;
            }
        }
    }
}
Пример #9
0
/**
 * http://doc.spip.org/@balise_FORMULAIRE_INSCRIPTION_stat
 *
 * [(#FORMULAIRE_INSCRIPTION{nom_inscription, #ID_RUBRIQUE})]
 *
 * @param array $args
 *   args[0] un statut d'auteur (redacteur par defaut)
 *   args[1] indique la rubrique eventuelle de proposition
 * @param array $context_compil
 * @return array|string
 */
function balise_FORMULAIRE_INSCRIPTION_stat($args, $context_compil)
{
    list($mode, $id) = $args;
    include_spip('action/inscrire_auteur');
    $mode = tester_statut_inscription($mode, $id);
    return $mode ? array($mode, $id) : '';
}
Пример #10
0
 function recuperer_parametres_url(&$fond, $url)
 {
     global $contexte;
     // traiter les injections du type domaine.org/spip.php/cestnimportequoi/ou/encore/plus/rubrique23
     if ($GLOBALS['profondeur_url'] > 0 and $fond == 'sommaire') {
         $fond = '404';
     }
     /*
      * Le bloc qui suit sert a faciliter les transitions depuis
      * le mode 'urls-propres' vers les modes 'urls-standard' et 'url-html'
      * Il est inutile de le recopier si vous personnalisez vos URLs
      * et votre .htaccess
      */
     // Si on est revenu en mode html, mais c'est une ancienne url_propre
     // on ne redirige pas, on assume le nouveau contexte (si possible)
     $url_propre = isset($_SERVER['REDIRECT_url_propre']) ? $_SERVER['REDIRECT_url_propre'] : (isset($_ENV['url_propre']) ? $_ENV['url_propre'] : '');
     include_spip('inc/urls');
     $objets = urls_liste_objets();
     if ($url_propre and preg_match(",^({$objets}|type_urls|404)\$,", $fond)) {
         if ($GLOBALS['profondeur_url'] <= 0) {
             $urls_anciennes = charger_fonction('propres', 'urls');
         } else {
             $urls_anciennes = charger_fonction('arbo', 'urls');
         }
         $p = $urls_anciennes($url_propre, $fond, $contexte);
         $contexte = $p[0];
     } else {
         if ($GLOBALS['profondeur_url'] <= 0 and preg_match(',[?/&](' . $objets . ')[=]?([0-9]+),', $url, $r)) {
             $fond = $r[1];
             $contexte[id_table_objet($r[1])] = $r[2];
         }
     }
     /* Fin compatibilite urls-page */
     return;
 }
function action_zengarden_activer_theme_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    if (strncmp('defaut:', $arg, 7) == 0) {
        $dir_theme = _DIR_RACINE . substr($arg, 7);
        $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'effacer'), 'data' => true));
        if ($flux) {
            include_spip('inc/meta');
            effacer_meta("zengarden_theme");
        }
    } elseif (strncmp('apercu:', $arg, 7) == 0) {
        $theme = substr($arg, 7);
        $dir_theme = _DIR_RACINE . $theme;
        if (is_dir($dir_theme)) {
            $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'apercevoir'), 'data' => true));
            if ($flux) {
                include_spip('inc/cookie');
                spip_setcookie('spip_zengarden_theme', $theme);
            }
        }
    } elseif (strncmp('activation:', $arg, 11) == 0) {
        $theme = substr($arg, 11);
        $dir_theme = _DIR_RACINE . $theme;
        if (is_dir($dir_theme)) {
            $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'activer'), 'data' => true));
            if ($flux) {
                include_spip('inc/meta');
                ecrire_meta("zengarden_theme", $theme);
            }
        }
    }
}
Пример #12
0
function action_desinstaller_plugin_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    list($dir_plugins, $plugin) = explode("::", $arg);
    $dir_type = "_DIR_PLUGINS";
    if (defined('_DIR_PLUGINS_SUPPL') and $dir_plugins == _DIR_PLUGINS_SUPPL) {
        $dir_type = "_DIR_PLUGINS_SUPPL";
    }
    $installer_plugins = charger_fonction('installer', 'plugins');
    $infos = $installer_plugins($plugin, 'uninstall', $dir_type);
    if ($infos and !$infos['install_test'][0]) {
        include_spip('inc/plugin');
        ecrire_plugin_actifs(array($plugin), false, 'enleve');
        $erreur = '';
    } else {
        $erreur = 'erreur_plugin_desinstalation_echouee';
    }
    if ($redirect = _request('redirect')) {
        include_spip('inc/headers');
        if ($erreur) {
            $redirect = parametre_url($redirect, 'erreur', $erreur);
        }
        $redirect = str_replace('&amp;', '&', $redirect);
        redirige_par_entete($redirect);
    }
}
Пример #13
0
function action_supprimer_adhcoti_dist()
{
    $debug1 = "DEBUG plugin JR : action/supprimer_adhcoti.php - action_supprimer_adhcoti_dist - Pt01 - <br />";
    echo "<br />", $debug1;
    adhclub_log("{$debug1}.", true);
    echo "id_coti= {$id_coti}.<br />";
    adhclub_log("id_coti= {$id_coti}", true);
    echo "FIN ", $debug1;
    adhclub_log("{$debug1} FIN.", true);
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    $debug1 = "DEBUG plugin JR : action/supprimer_adhcoti.php - action_supprimer_adhcoti_dist - Pt12 - <br />";
    echo "<br />", $debug1;
    adhclub_log("{$debug1}.", true);
    echo "id_coti= {$id_coti}.<br />";
    adhclub_log("id_coti= {$id_coti}", true);
    echo "args= {$args}.<br />";
    adhclub_log("args= {$args}", true);
    echo "FIN ", $debug1;
    adhclub_log("{$debug1} FIN.", true);
    if ($id_coti = intval($arg) and autoriser('supprimer', 'adhcoti', $id_coti)) {
        include_spip('action/editer_adhcoti');
        adhclub_supprime_adhcoti($id_coti);
    }
}
Пример #14
0
function formulaires_editer_balade_traiter_dist($id_collection = 'new', $retour = '')
{
    $message = array();
    // récupérer le rang des articles de la balade et le mettre à jour
    $rangs = _request('rang');
    foreach ($rangs as $rang => $id_article) {
        $rang = $rang + 1;
        $ok = sql_updateq('spip_collections_liens', array('rang' => intval($rang)), "objet='article' AND id_objet = {$id_article}");
    }
    // éditer le gis associé
    if ($action_editer = charger_fonction("editer_gis", 'action', true)) {
        list($id, $err) = $action_editer(_request('id_gis'));
    }
    // ne pas polluer l'url de retour avec des paramètres inutiles
    set_request('id_gis');
    set_request('id_objet');
    // invalider le cache
    include_spip('inc/invalideur');
    suivre_invalideur("id='gis/{$id}");
    // rediriger sur l'url de retour passée en paramètre
    if ($retour) {
        include_spip('inc/headers');
        $message['redirect'] = redirige_formulaire($retour);
    }
    return $message;
}
/**
 * Lister les objets éditoriaux disponibles pour peupler une saisie
 *
 * @return array : un tableau qu'on peut utiliser comme paramètre
 *                 "datas" dans une saisie
 */
function lister_datas_objets_editoriaux()
{
    include_spip('base/objets');
    return array_map(function ($el) {
        return _T($el['texte_objets']);
    }, lister_tables_objets_sql());
}
Пример #16
0
/**
 * Un exec d'acces interdit
 *
 * @param string $message
 */
function exec_403_dist($message = '')
{
    $exec = _request('exec');
    $titre = "exec_{$exec}";
    $navigation = "";
    $extra = "";
    if (!$message) {
        $message = _L("Vous n'avez pas le droit d'acc&eacute;der à la page <b>@exec@</b>.", array('exec' => _request('exec')));
    }
    $contenu = "<h1 class='grostitre'>" . _T('info_acces_interdit') . "</h1>" . $message;
    if (_request('var_zajax')) {
        include_spip('inc/actions');
        ajax_retour($contenu);
    } else {
        include_spip('inc/presentation');
        // alleger les inclusions avec un inc/presentation_mini
        $commencer_page = charger_fonction('commencer_page', 'inc');
        echo $commencer_page($titre);
        echo debut_gauche("403_{$exec}", true);
        echo recuperer_fond('prive/squelettes/navigation/dist', array());
        echo pipeline('affiche_gauche', array('args' => array('exec' => '403', 'exec_erreur' => $exec), 'data' => ''));
        echo creer_colonne_droite("403", true);
        echo pipeline('affiche_droite', array('args' => array('exec' => '403', 'exec_erreur' => $exec), 'data' => ''));
        echo debut_droite("403", true);
        echo pipeline('affiche_milieu', array('args' => array('exec' => '403', 'exec_erreur' => $exec), 'data' => $contenu));
        echo fin_gauche(), fin_page();
    }
}
Пример #17
0
/**
 * Envoi une requette de conversion a zencoder.
 *
 * @param int $id_document l'id du document original
 * @param int $id_objet
 */
function zencoder_new_job($id_document)
{
    spip_log('start zencoder_new_job', 'zencoder');
    $cwd = getcwd();
    chdir(realpath(_DIR_ZENCODER_LIB));
    require_once "Services/Zencoder.php";
    chdir($cwd);
    include_spip('inc/config');
    include_spip('inc/utils');
    $api_key = lire_config('zencoder/api_key');
    $document = generer_url_entite_absolue($id_document, 'document');
    $url_notification = generer_url_action('zencoder_notification', 'id_document=' . $id_document, true, false);
    $clip_length = '10';
    try {
        // Initialize the Services_Zencoder class
        $zencoder = new Services_Zencoder($api_key);
        // New Encoding Job
        $encoding_job = $zencoder->jobs->create(array("input" => $document, "outputs" => array(array("label" => "webm", "size" => "640x480", "format" => "webm", "notifications" => array("format" => "json", "url" => $url_notification, "clip_length" => $clip_length)), array("label" => "ogg", "format" => "ogg", "size" => "640x480", "notifications" => array("format" => "json", "url" => $url_notification, "clip_length" => $clip_length)), array("label" => "mp4 low", "size" => "640x480", "notifications" => array("format" => "json", "url" => $url_notification, "clip_length" => $clip_length)))));
        // Success if we got here
        spip_log('success- Job ID: ' . $encoding_job->id . ' Output ID:' . $encoding_job->outputs['web']->id, 'zencoder');
    } catch (Services_Zencoder_Exception $e) {
        // If were here, an error occured
        spip_log('error: ' . print_r($e), 'zencoder');
    }
    return;
}
Пример #18
0
function action_instituer_langue_rubrique_dist() {

	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();
	$changer_lang = _request('changer_lang');

	list($id_rubrique, $id_parent) = preg_split('/\W/', $arg);

	if ($changer_lang
	AND $id_rubrique>0
	AND $GLOBALS['meta']['multi_rubriques'] == 'oui'
	AND ($GLOBALS['meta']['multi_secteurs'] == 'non' OR $id_parent == 0)) {
		if ($changer_lang != "herit")
			sql_updateq('spip_rubriques', array('lang'=>$changer_lang, 'langue_choisie'=>'oui'), "id_rubrique=$id_rubrique");
		else {
			if ($id_parent == 0)
				$langue_parent = $GLOBALS['meta']['langue_site'];
			else {
				$langue_parent = sql_getfetsel("lang", "spip_rubriques", "id_rubrique=$id_parent");
			}
			sql_updateq('spip_rubriques', array('lang'=>$langue_parent, 'langue_choisie'=>'non'), "id_rubrique=$id_rubrique");
		}
		include_spip('inc/rubriques');
		calculer_langues_rubriques();

		// invalider les caches marques de cette rubrique
		include_spip('inc/invalideur');
		suivre_invalideur("id='id_rubrique/$id_rubrique'");
	}
}
Пример #19
0
function inc_informer_dist($id, $col, $exclus, $rac, $type, $do = 'aff')
{
    include_spip('inc/texte');
    if ($type == "rubrique") {
        $row = sql_fetsel("titre, descriptif", "spip_rubriques", "id_rubrique = {$id}");
        if ($row) {
            $titre = typo($row["titre"]);
            $descriptif = propre($row["descriptif"]);
        } else {
            $titre = _T('info_racine_site');
        }
    } else {
        $titre = '';
    }
    $res = '';
    if ($type == "rubrique" and $GLOBALS['spip_display'] != 1 and isset($GLOBALS['meta']['image_process'])) {
        if ($GLOBALS['meta']['image_process'] != "non") {
            $chercher_logo = charger_fonction('chercher_logo', 'inc');
            if ($res = $chercher_logo($id, 'id_rubrique', 'on')) {
                list($fid, $dir, $nom, $format) = $res;
                include_spip('inc/filtres_images_mini');
                $res = image_reduire("<img src='{$fid}' alt='' />", 100, 48);
                if ($res) {
                    $res = "<div style='float: " . $GLOBALS['spip_lang_right'] . "; margin-" . $GLOBALS['spip_lang_right'] . ": -5px; margin-top: -5px;'>{$res}</div>";
                }
            }
        }
    }
    $rac = spip_htmlentities($rac);
    # ce lien provoque la selection (directe) de la rubrique cliquee
    # et l'affichage de son titre dans le bandeau
    $titre = strtr(str_replace("'", "&#8217;", str_replace('"', "&#34;", textebrut($titre))), "\n\r", "  ");
    $js_func = $do . '_selection_titre';
    return "<div style='display: none;'>" . "<input type='text' id='" . $rac . "_sel' value='{$id}' />" . "<input type='text' id='" . $rac . "_sel2' value=\"" . entites_html($titre) . "\" />" . "</div>" . "<div class='informer' style='padding: 5px; border-top: 0px;'>" . (!$res ? '' : $res) . "<p><b>" . safehtml($titre) . "</b></p>" . (!$descriptif ? '' : "<div>" . safehtml($descriptif) . "</div>") . "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>" . "<input type='submit' class='fondo' value='" . _T('bouton_choisir') . "'\nonclick=\"{$js_func}('{$titre}',{$id},'selection_rubrique','id_parent'); return false;\" />" . "</div>" . "</div>";
}
Пример #20
0
function action_snippet_exporte(){
	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_exporte-$arg",$hash,$id_auteur)==TRUE) {
		$table = $args[0];
		$id = $args[1];
		
		$f = snippets_fond_exporter($table, false);
			
		if ($f) {
			include_spip('public/assembler');
			$out = recuperer_fond($f,array('id'=>intval($id)));
			//$out = preg_replace(",\n\n[\s]*(?=\n),","",$out);
			
			$filename=str_replace(":","_",$arg);
			if (preg_match(",<titre>(.*)</titre>,Uims",$out,$regs))
				$filename = preg_replace(',[^-_\w]+,', '_', trim(translitteration(textebrut(typo($regs[1])))));
			$extension = "xml";
			
			Header("Content-Type: text/xml; charset=".$GLOBALS['meta']['charset']);
			Header("Content-Disposition: attachment; filename=$filename.$extension");
			Header("Content-Length: ".strlen($out));
			echo $out;
			exit();
		}
	}	
	redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
}
function action_dereferencer_traduction_rubrique_dist() {
	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	list($type, $id_objet) = explode('/', $arg);
	if (!$type = objet_type($type) or !$id_objet = intval($id_objet)) {
		if (!_AJAX) {
			include_spip('inc/minipres');
			minipres('Arguments incompris');
		}
		else {
			spip_log('Arguments incompris dans action dereferencer_traduction_rubrique');
			return false;
		}
	}

	$objet = table_objet($type);
	$_id_objet = id_table_objet($objet);
	$table = table_objet_sql($objet);

	$id_trad_old = sql_getfetsel('id_trad', $table, "$_id_objet = " . sql_quote($id_objet));

	if ($id_trad_old) {
		include_spip('inc/modifier');
		modifier_contenu($objet, $id_objet, array('invalideur' => "id='$objet/$id_objet'"), array('id_trad' => 0));

		// si la deliaison fait qu'il ne reste plus que la source
		// dans le groupe de traduction on lui remet l'id_trad a 0
		if (1 == $nb_dans_groupe = sql_countsel($table, array('id_trad = ' . sql_quote($id_trad_old)))) {
			modifier_contenu($objet, $id_trad_old, array('invalideur' => "id='$objet/$id_trad_old'"), array('id_trad' => 0));
		}
	}
}
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;
}
Пример #23
0
/**
 * Contexte du formulaire
 * Mots-cles dans les forums :
 * Si la variable de personnalisation $afficher_groupe[] est definie
 * dans le fichier d'appel, et si la table de reference est OK, proposer
 * la liste des mots-cles
 * #FORMULAIRE_FORUM seul calcule (objet, id_objet) depuis la boucle parente
 * #FORMULAIRE_FORUM{#SELF} pour forcer l'url de retour
 * #FORMULAIRE_FORUM{#SELF, article, 3} pour forcer l'objet et son identifiant
 * http://code.spip.net/@balise_FORMULAIRE_FORUM
 *
 * @param Object $p
 * @return Object
 */
function balise_FORMULAIRE_FORUM($p)
{
    /**
     * On recupere $objet et $id_objet depuis une boucle englobante si possible
     * Sinon, on essaie aussi de recuperer des id_xx dans l'URL qui pourraient indiquer
     * sur quoi le formulaire porte.
     * Enfin, on pourra aussi forcer objet et id_objet depuis l'appel du formulaire
     */
    $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle;
    $_id_objet = $p->boucles[$i_boucle]->primary;
    $_type = $p->boucles[$i_boucle]->id_table;
    /**
     * On essaye de trouver les forums en fonction de l'environnement
     * pour cela, on recupere l'ensemble des id_xxx possibles dans l'env
     */
    $ids = forum_get_objets_depuis_env();
    $ids = array_values($ids);
    $obtenir = array($_id_objet, 'id_forum', 'ajouter_mot', 'ajouter_groupe', 'afficher_texte');
    if ($ids) {
        $obtenir = array_merge($obtenir, $ids);
    }
    $p = calculer_balise_dynamique($p, 'FORMULAIRE_FORUM', $obtenir, array("'{$_type}'", count($ids)));
    // Ajouter le code d'invalideur specifique aux forums
    include_spip('inc/invalideur');
    if ($i = charger_fonction('code_invalideur_forums', '', true)) {
        $p->code = $i($p, $p->code);
    }
    return $p;
}
Пример #24
0
/**
 * Envoi du Mail des nouveautés
 *
 * Ce mail est basé sur le squelette nouveautes.html
 *
 * La meta `dernier_envoi_neuf` permet de marquer la date du dernier envoi
 * et de determiner les nouveautes publiees depuis cette date
 *
 * @param int $t
 * @return int
 */
function genie_mail_dist($t)
{
    $adresse_neuf = $GLOBALS['meta']['adresse_neuf'];
    $jours_neuf = $GLOBALS['meta']['jours_neuf'];
    $now = time();
    if (!isset($GLOBALS['meta']['dernier_envoi_neuf'])) {
        ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now - 3600 * 24 * $jours_neuf));
    }
    $page = recuperer_fond('nouveautes', array('date' => $GLOBALS['meta']['dernier_envoi_neuf'], 'jours_neuf' => $jours_neuf), array('raw' => true));
    if (strlen(trim($page['texte']))) {
        // recuperer les entetes envoyes par #HTTP_HEADER
        $headers = "";
        if (isset($page['entetes']) and count($page['entetes'])) {
            foreach ($page['entetes'] as $k => $v) {
                $headers .= (strlen($v) ? "{$k}: {$v}" : $k) . "\n";
            }
        }
        include_spip("inc/notifications");
        notifications_envoyer_mails($adresse_neuf, $page['texte'], "", "", $headers);
        ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now));
    } else {
        spip_log("mail nouveautes : rien de neuf depuis {$jours_neuf} jours");
    }
    return 1;
}
Пример #25
0
/**
 * Calculs de paramètres de contexte automatiques pour la balise FORMULAIRE_ECRIRE_AUTEUR
 *
 * Retourne le contexte du formulaire uniquement si l'email de l'auteur
 * est valide, sinon rien (pas d'exécution/affichage du formulaire)
 * 
 * @param array $args
 *   Liste des arguments demandés obtenus du contexte (id_auteur, id_article, email)
 * @param array $context_compil
 *   Tableau d'informations sur la compilation
 * @return array|string
 *   - Liste (id_auteur, id_article, email) des paramètres du formulaire CVT
 *   - chaîne vide sinon (erreur ou non affichage).
 */
function balise_FORMULAIRE_ECRIRE_AUTEUR_stat($args, $context_compil)
{
    include_spip('inc/filtres');
    // Pas d'id_auteur ni d'id_article ? Erreur de contexte
    $id = intval($args[1]);
    if (!$args[0] and !$id) {
        $msg = array('zbug_champ_hors_motif', array('champ' => 'FORMULAIRE_ECRIRE_AUTEUR', 'motif' => 'AUTEURS/ARTICLES'));
        erreur_squelette($msg, $context_compil);
        return '';
    }
    // Si on est dans un contexte article,
    // sortir tous les mails des auteurs de l'article
    if (!$args[0] and $id) {
        $r = '';
        $s = sql_allfetsel('email', 'spip_auteurs AS A LEFT JOIN spip_auteurs_liens AS L ON (A.id_auteur=L.id_auteur AND L.objet=\'article\')', "A.email != '' AND L.id_objet={$id}");
        foreach ($s as $row) {
            if (email_valide($row['email'])) {
                $r .= ', ' . $row['email'];
            }
        }
        $args[2] = substr($r, 2);
    }
    // On ne peut pas ecrire a un auteur dont le mail n'est pas valide
    if (!$args[2] or !email_valide($args[2])) {
        return '';
    }
    // OK
    return $args;
}
Пример #26
0
/**
 * mise a jour des donnees si envoi via formulaire
 * 
 * @link http://doc.spip.org/@enregistre_modif_plugin 
 * @global array $GLOBALS['visiteur_session']
 * @global array $GLOBALS['meta']
 * @return void
 */
function enregistre_modif_plugin()
{
    include_spip('inc/plugin');
    // recuperer les plugins dans l'ordre des $_POST
    $test = array();
    foreach (liste_plugin_files() as $file) {
        $test['s' . substr(md5($file), 0, 16)] = $file;
    }
    $plugin = array();
    foreach ($_POST as $choix => $val) {
        if (isset($test[$choix]) && $val == 'O') {
            $plugin[] = $test[$choix];
        }
    }
    spip_log("Changement des plugins actifs par l'auteur " . $GLOBALS['visiteur_session']['id_auteur'] . ": " . join(',', $plugin));
    ecrire_plugin_actifs($plugin);
    // Chaque fois que l'on valide des plugins, on memorise la liste de ces plugins comme etant "interessants", avec un score initial, qui sera decremente a chaque tour : ainsi un plugin active pourra reter visible a l'ecran, jusqu'a ce qu'il tombe dans l'oubli.
    $plugins_interessants = @unserialize($GLOBALS['meta']['plugins_interessants']);
    if (!is_array($plugins_interessants)) {
        $plugins_interessants = array();
    }
    $plugins_interessants2 = array();
    foreach ($plugins_interessants as $plug => $score) {
        if ($score > 1) {
            $plugins_interessants2[$plug] = $score - 1;
        }
    }
    foreach ($plugin as $plug) {
        $plugins_interessants2[$plug] = 10;
    }
    // score initial
    ecrire_meta('plugins_interessants', serialize($plugins_interessants2));
}
Пример #27
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 balise_ECATALOGUE_COMPOSITE_QUANTITY_dyn($id_composite, $id_article)
{
    if (!($id_composite = intval($id_composite)) || !($id_article = intval($id_article))) {
        return false;
    }
    include_spip('functions/pdk_common.php');
    $cart = pdk_load_class('Alohacart', 'classes');
    // If some exceptions are thrown - return empty value
    try {
        // If user changed number of this product, we will use this value
        if (!($quantity = $cart->GetCompositeProduct($id_composite, $id_article))) {
            //var_Dump($quantity);
            $composite_article_mdl = pdk_load_class('CompositeArticleModel', 'classes');
            $row = $composite_article_mdl->select("id_composite=" . $id_composite . " AND id_article=" . $id_article);
            if (isset($row[0]) && isset($row[0]["quantity"])) {
                $quantity = $row[0]["quantity"];
            } else {
                $quantity = '';
            }
        }
    } catch (Exception $e) {
        $quantity = '';
    }
    //$product = $cart->GetProduct($id_composite);
    //if ($product)
    //  $quantity = $quantity * $product;
    return array('balise/ecatalogue_composite_quantity', 0, array('quantity' => $quantity));
}
/**
 * Modifier la langue d'un objet
 *
 * @param string $objet
 * @param int $id
 * @param int $id_rubrique
 * @param string $changer_lang
 * @return string
 */
function action_instituer_langue_objet_dist($objet, $id, $id_rubrique, $changer_lang)
{
    if ($changer_lang) {
        $table_objet_sql = table_objet_sql($objet);
        $id_table_objet = id_table_objet($objet);
        if ($changer_lang != "herit") {
            sql_updateq($table_objet_sql, array('lang' => $changer_lang, 'langue_choisie' => 'oui'), "{$id_table_objet}=" . intval($id));
            include_spip('inc/rubriques');
            if ($table_objet_sql == 'spip_rubriques') {
                calculer_langues_rubriques();
            }
            $langues = calculer_langues_utilisees();
            ecrire_meta('langues_utilisees', $langues);
        } else {
            $langue_parent = sql_getfetsel("lang", "spip_rubriques", "id_rubrique=" . intval($id_rubrique));
            if (!$langue_parent) {
                $langue_parent = $GLOBALS['meta']['langue_site'];
            }
            sql_updateq($table_objet_sql, array('lang' => $langue_parent, 'langue_choisie' => 'non'), "{$id_table_objet}=" . intval($id));
            $changer_lang = $langue_parent;
            if ($table_objet_sql == 'spip_rubriques') {
                include_spip('inc/rubriques');
                calculer_langues_rubriques();
            }
        }
    }
    return $changer_lang;
}
Пример #30
0
/**
 * http://code.spip.net/@action_copier_local_post
 *
 * @param  $id_document
 * @return bool|mixed|string
 */
function action_copier_local_post($id_document)
{
    // Il faut la source du document pour le copier
    $row = sql_fetsel("mode,fichier, descriptif, credits", "spip_documents", "id_document={$id_document}");
    $source = $row['fichier'];
    include_spip('inc/distant');
    // pour 'copie_locale'
    $fichier = copie_locale($source);
    if ($fichier) {
        $fichier = _DIR_RACINE . $fichier;
        $files[] = array('tmp_name' => $fichier, 'name' => basename($fichier));
        $ajouter_documents = charger_fonction('ajouter_documents', 'action');
        spip_log("convertit doc {$id_document} en local: {$source} => {$fichier}");
        $liste = array();
        $ajouter_documents($id_document, $files, '', 0, $row['mode'], $liste);
        spip_unlink($fichier);
        // ajouter l'origine du document aux credits
        include_spip('action/editer_document');
        document_modifier($id_document, array('credits' => ($row['credits'] ? $row['credits'] . ', ' : '') . $source));
        return true;
    } else {
        spip_log("echec copie locale {$source}");
    }
    return _T('medias:erreur_copie_fichier', array('nom' => $source));
}