function formulaires_editer_mot_article_traiter_dist($id_article = 'new', $id_groupe = '', $retour = '')
{
    $message = array('editable' => true, 'message_ok' => '');
    $id_mot_ancien = sql_getfetsel('mot.id_mot', 'spip_mots as mot left join spip_mots_liens as mots_liens ON (mot.id_mot=mots_liens.id_mot)', 'mots_liens.id_objet=' . intval($id_article) . ' AND mots_liens.objet = "article" AND mot.id_groupe=' . intval($id_groupe));
    include_spip('action/editer_liens');
    // si aucun mot selectionne on delie le mot de ce groupe
    if (!($id_mot = _request('id_mot'))) {
        objet_dissocier(array("mot" => $id_mot_ancien), array("article" => $id_article));
    } else {
        if ($id_mot_ancien != $id_mot) {
            // on delie l'ancien mot
            objet_dissocier(array("mot" => $id_mot_ancien), array("article" => $id_article));
            // on lie le nouveau
            objet_associer(array("mot" => $id_mot), array("article" => $id_article));
        }
    }
    // on invalide le cache
    include_spip('inc/invalideur');
    suivre_invalideur("id='id_article/{$id_article}'");
    if ($retour) {
        include_spip('inc/headers');
        $message .= redirige_formulaire($retour);
    }
    return $message;
}
Example #2
0
function genie_depublier_dist($time)
{
    //va chercher les objets de spip_depublies avec une date_depublie pour aujourd'hui
    include_spip('base/abstract_sql');
    $today = date('Y-m-d H:i:s');
    if ($depublications = sql_allfetsel('*', 'spip_depublies', 'DATE_FORMAT(date_depublie, "%Y-%m-%d %H:%i:%s") <= ' . sql_quote($today) . ' AND DATE_FORMAT(date_depublie, "%Y-%m-%d %H:%i:%s") >0') and is_array($depublications)) {
        foreach ($depublications as $depublication) {
            $objet = $depublication['objet'];
            $id_objet = $depublication['id_objet'];
            $statut_depublication = $depublication['statut'];
            $date_depublie = $depublication['date_depublie'];
            spip_log("on veut depublier {$objet} {$id_objet} {$statut_depublication}", 'depublication');
            //on cherche la table de l'objet donné
            $_id_objet = id_table_objet($objet);
            //id_article
            $table = table_objet_sql($objet);
            //articles
            //si le statut est différent de celui demandé
            if ($a_depublier = sql_getfetsel($_id_objet, $table, "statut != " . sql_quote($statut_depublication) . " AND {$_id_objet} = " . intval($id_objet))) {
                //si les conditions sont remplies, on change le statut dans cette table
                sql_updateq($table, array("statut" => $statut_depublication), "{$_id_objet}= " . intval($id_objet));
                //et on supprime l'entrée
                sql_delete('spip_depublies', 'id_objet=' . intval($id_objet) . ' AND objet=' . sql_quote($objet));
            }
        }
    }
    return 1;
}
 /**
  *  Checks whether given rubrique is EcataloguE products rubrique
  *
  * @param int $id_rubrique ID rubrique
  * @return bool
 **/
 public function IsEcatalogueRubrique($id_rubrique)
 {
     static $rubs = array();
     static $rubs_catalogue = false;
     // deja trouve
     if (isset($rubs[$id_rubrique])) {
         return $rubs[$id_rubrique];
     }
     // init
     if ($rubs_catalogue === false) {
         $r = lire_config('ecatalogue/branches');
         include_spip('formulaires/selecteur/generique_fonctions');
         $rubs_catalogue = picker_selected($r, 'rubrique');
         // fn de spip bonux
     }
     // trouve
     if (in_array($id_rubrique, $rubs_catalogue)) {
         $rubs[$id_rubrique] = true;
         return true;
     }
     // rechercher dans la parente
     if ($id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . $id_rubrique)) {
         $rubs[$id_rubrique] = $this->IsEcatalogueRubrique($id_parent);
         return $rubs[$id_rubrique];
     }
     // perdu :)
     return false;
 }
Example #4
0
function shop_liste_etapes($id_panier)
{
    static $lesetapes = array();
    $etapes = array('panier', 'qui', 'commande', 'livraison', 'paiement');
    if (!$id_panier) {
        return $etapes;
    }
    if (isset($lesetapes["{$id_panier}"])) {
        return $lesetapes["{$id_panier}"];
    }
    if ($id_auteur = intval(sql_getfetsel('id_auteur', 'spip_paniers', 'id_panier=' . intval($id_panier)))) {
        $etapes = array_diff($etapes, array('qui'));
    }
    $items = sql_allfetsel("*", "spip_paniers_liens", "id_panier=" . intval($id_panier));
    $livrable = false;
    foreach ($items as $item) {
        $table = table_objet_sql($item['objet']);
        $primary = id_table_objet($item['objet']);
        $objet = sql_fetsel("*", $table, "{$primary}=" . intval($item['id_objet']));
        if (!isset($objet['immateriel']) or !$objet['immateriel']) {
            $livrable = true;
            break;
        }
    }
    if (!$livrable) {
        $etapes = array_diff($etapes, array('livraison'));
    }
    return $lesetapes["{$id_panier}"] = $etapes;
}
/**
 * Envoyer les notifications consecutives a l'envoi d'un message
 * (ie passage en statut=publie)
 *
 * @param string $quoi
 * @param int $id_message
 * @param array $options
 */
function notifications_instituermessage_dist($quoi, $id_message, $options = array())
{
    // ne devrait jamais se produire
    if ($options['statut'] == $options['statut_ancien']) {
        spip_log("statut inchange", 'notifications');
        return;
    }
    if ($options['statut'] == 'publie') {
        include_spip('inc/messages');
        $type = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message));
        $vue = "notifications/message_{$type}_publie";
        if (trouver_fond($vue)) {
            $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
            // pour nettoyer_titre_email
            $texte = recuperer_fond($vue, array('id_message' => $id_message));
            // recuperer tous les emails des auteurs qui ont recu le message dans leur boite
            // si c'est une annonce generale, on envoie a tout le monde
            include_spip('inc/messages');
            $where = array("email!=''", "statut!='5poubelle'", sql_in('statut', messagerie_statuts_destinataires_possibles()));
            // pour une annonce : tous ceux qui recoivent des messages
            if ($type !== 'affich') {
                $ids = sql_allfetsel('id_auteur', 'spip_auteurs_liens', "objet='message' AND id_objet=" . intval($id_message));
                $ids = array_map('reset', $ids);
                $where[] = sql_in('id_auteur', $ids);
            }
            $emails = sql_allfetsel('email', "spip_auteurs", $where);
            $emails = array_map('reset', $emails);
            include_spip('inc/notifications');
            notifications_envoyer_mails($emails, $texte);
        }
    }
}
/**
 * EcataloguE
 *
 * @author     Aleksey Yaroshchuk (aleksey.yaroshchuk@gmail.com)
 * @license    GNU/GPL
 * @package    plugins
 * @subpackage ecatalogue
 * @copyright  (c) Aleksey Yaroshchuk 2011-2012
 * @link       http://www.spip-contrib.net/EcataloguE
 */
function ecatalogue_affiche_milieu($flux)
{
    $exec = $flux['args']['exec'];
    // Attach to articles
    if ($exec == 'article' and $id_article = $flux['args']['id_article']) {
        //$id_article = $flux['args']['id_article'];
        if (!($id_rubrique = $flux['args']['id_rubrique'])) {
            $id_rubrique = sql_getfetsel('id_rubrique', 'spip_articles', 'id_article=' . $id_article);
        }
        include_spip('classes/class.Ecatalogue');
        $catalogue = new Ecatalogue();
        if ($catalogue->IsEcatalogueRubrique($id_rubrique)) {
            $contexte = $_GET;
            //$flux['data'] .= recuperer_fond('prive/box/ecatalogue_article', $contexte, array('ajax'=>true));
            $texte = recuperer_fond('prive/box/ecatalogue_article', $contexte, array('ajax' => true));
            ecatalogue_attach_text_to_flux_for_affiche_milieu_pipeline($texte, $flux);
        }
    }
    // Attach to rubriques
    if ($exec == 'rubrique' and $id_rubrique = $flux['args']['id_rubrique']) {
        include_spip('classes/class.Ecatalogue');
        $catalogue = new Ecatalogue();
        if ($catalogue->IsEcatalogueRubrique($id_rubrique)) {
            $contexte = $_GET;
            $texte = recuperer_fond('prive/box/ecatalogue_rubrique', $contexte, array('ajax' => true));
            ecatalogue_attach_text_to_flux_for_affiche_milieu_pipeline($texte, $flux);
        }
    }
    return $flux;
}
function inserer_document_syndic_article($liens, $id_syndic_article, $date, $titre_parent)
{
    include_spip("base/abstract_sql");
    $id_article_syndic = sql_getfetsel("id_syndic_article", "spip_syndic_articles", "id_syndic_article=" . _q($id_syndic_article), "", "date desc", "0,1");
    if (!$date) {
        $date = date("Y-m-d h:i:s");
    }
    foreach ($liens as $link) {
        $id3 = recuperer_id3($link);
        $champs = array('titre' => $titre_parent, 'fichier' => $link, 'tag_auteur' => $id3['artiste'], 'tag_titre' => $id3['titre'], 'date' => date("Y-m-d H:i:s", $date), 'distant' => 'oui', 'statut' => 'publie', 'date' => $date, 'extension' => 'mp3');
        $s = sql_getfetsel("id_document", "spip_documents", "fichier=" . _q($champs['fichier']), "", "date desc", "0,1");
        if ($s) {
            // maj le document distant
            sql_updateq('spip_documents', $champs, 'id_document=' . intval($s));
            // a t'on un lien entre ce doc et cet article ?
            $l = sql_getfetsel("id_document", "spip_documents_liens", "id_document=" . _q($s) . " and id_objet=" . _q($id_article_syndic));
            if (!$l) {
                $champs_liens = array('id_document' => $s, 'id_objet' => $id_article_syndic, 'objet' => 'syndic_article');
                sql_insertq('spip_documents_liens', $champs_liens);
            }
        } else {
            // enregistrer le document distant
            $id_document = sql_insertq('spip_documents', $champs);
            // le lier a son syndic article
            $champs_liens = array('id_document' => $id_document, 'id_objet' => $id_article_syndic, 'objet' => 'syndic_article');
            sql_insertq('spip_documents_liens', $champs_liens);
        }
    }
}
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;
        }
    }
}
/**
 * Traiter
 *
 * @param int $id_article
 * @return array
 */
function formulaires_activer_petition_article_traiter_dist($id_article)
{
    include_spip('inc/autoriser');
    if (autoriser('modererpetition', 'article', $id_article)) {
        switch (_request('change_petition')) {
            case 'on':
                foreach (array('email_unique', 'site_obli', 'site_unique', 'message') as $k) {
                    if (_request($k) != 'oui') {
                        set_request($k, 'non');
                    }
                }
                include_spip('action/editer_petition');
                if (!($id_petition = sql_getfetsel('id_petition', 'spip_petitions', 'id_article=' . intval($id_article)))) {
                    $id_petition = petition_inserer($id_article);
                }
                petition_modifier($id_petition, array('email_unique' => _request('email_unique'), 'site_obli' => _request('site_obli'), 'site_unique' => _request('site_unique'), 'message' => _request('message'), 'texte' => _request('texte_petition'), 'statut' => 'publie'));
                break;
            case 'off':
                if ($id_petition = sql_getfetsel('id_petition', 'spip_petitions', 'id_article=' . intval($id_article))) {
                    include_spip('action/editer_petition');
                    petition_modifier($id_petition, array('statut' => 'poubelle'));
                }
                break;
        }
    }
    return array('message_ok' => _T('config_info_enregistree'));
}
function formulaires_illustrer_document_traiter_dist($id_document)
{
    $id_vignette = sql_getfetsel('id_vignette', 'spip_documents', 'id_document=' . intval($id_document));
    $res = array('editable' => true);
    if (_request('supprimer')) {
        $supprimer_document = charger_fonction('supprimer_document', 'action');
        if ($id_vignette and $supprimer_document($id_vignette)) {
            $res['message_ok'] = _T('medias:vignette_supprimee');
        } else {
            $res['message_erreur'] = _T('medias:erreur_suppression_vignette');
        }
    } else {
        $ajouter_documents = charger_fonction('ajouter_documents', 'action');
        include_spip('inc/joindre_document');
        $files = joindre_trouver_fichier_envoye();
        $ajoute = $ajouter_documents($id_vignette, $files, '', 0, 'vignette');
        if (is_numeric(reset($ajoute)) and $id_vignette = reset($ajoute)) {
            include_spip('action/editer_document');
            document_modifier($id_document, array("id_vignette" => $id_vignette, 'mode' => 'document'));
            $res['message_ok'] = _T('medias:document_installe_succes');
        } else {
            $res['message_erreur'] = reset($ajoute);
        }
    }
    // todo :
    // generer les case docs si c'est necessaire
    // rediriger sinon
    return $res;
}
function action_clevermail_list_subscriber_remove_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    $lsr_id = $arg;
    if (sql_countsel("spip_cm_lists_subscribers", "lsr_id=" . sql_quote($lsr_id)) == 1) {
        include_spip('inc/autoriser');
        if (autoriser('supprimer', 'cm_list_subscriber', sql_quote($lsr_id))) {
            $abonnement = sql_fetsel("sub_id, lst_id", "spip_cm_lists_subscribers", "lsr_id=" . sql_quote($lsr_id));
            $abonne = sql_getfetsel("sub_email", "spip_cm_subscribers", "sub_id=" . intval($abonnement['sub_id']));
            $liste = sql_fetsel("lst_moderator_email, lst_name", "spip_cm_lists", "lst_id=" . intval($abonnement['lst_id']));
            sql_delete("spip_cm_lists_subscribers", "lsr_id = " . sql_quote($lsr_id));
            sql_delete("spip_cm_posts_queued", "sub_id = " . intval($abonnement['sub_id']));
            if (sql_countsel("spip_cm_lists_subscribers", "sub_id=" . intval($abonnement['sub_id'])) == 0) {
                // No more subscription, subscriber address is removed
                sql_delete("spip_cm_pending", "sub_id = " . intval($abonnement['sub_id']));
                sql_updateq("spip_cm_subscribers", array('sub_email' => md5($abonne) . '@example.com'), "sub_id = " . intval($abonnement['sub_id']));
            }
            $destinataire = $liste['lst_moderator_email'];
            $sujet = '[' . $liste['lst_name'] . '] Désinscription de ' . addslashes($abonne);
            $corps = _T('clevermail:mail_info_desinscription_corps', array('nom_site' => $GLOBALS['meta']['nom_site'], 'url_site' => $GLOBALS['meta']['adresse_site'], 'sub_email' => addslashes($abonne), 'lst_name' => $liste['lst_name']));
            $expediteur = sql_getfetsel("set_value", "spip_cm_settings", "set_name='CM_MAIL_FROM'");
            $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
            if ($envoyer_mail($destinataire, $sujet, $corps, $expediteur)) {
                spip_log('Envoie du mail OK', 'clevermail');
            } else {
                spip_log('Envoie du mail KO', 'clevermail');
            }
            spip_log('Suppression de l\'abonnement de « ' . $abonne . ' » à la liste « ' . $liste['lst_name'] . ' » (id=' . $abonnement['lst_id'] . ')', 'clevermail');
        }
    }
}
Example #12
0
function admin_verifie_session($script, $anonymous=false) {

	include_spip('base/abstract_sql');
	$pref = sprintf("_%d_",$GLOBALS['visiteur_session']['id_auteur']);
	$signal = fichier_admin($script, "$script$pref");
	$valeur = sql_getfetsel('valeur', 'spip_meta', "nom='admin'");
	if ($valeur === NULL) {
		ecrire_meta('admin', $signal, 'non');
	} else {
		if (!$anonymous AND ($valeur != $signal)) {
			if (intval(substr($valeur, strpos($valeur,'_')+1))<>
			    $GLOBALS['visiteur_session']['id_auteur']) {
				include_spip('inc/minipres');
				spip_log("refus de lancer $script, priorite a $valeur");
				return minipres(_T('info_travaux_texte'));
			}
		}
	}
	$journal = "spip";
	if (autoriser('configurer')) // c'est une action webmestre, soit par ftp soit par statut webmestre
		$journal = 'webmestre';
	// on pourrait statuer automatiquement les webmestres a l'init d'une action auth par ftp ... ?

	spip_log("admin $pref" . ($valeur ? " (reprise)" : ' (init)'),$journal);
	return '';
}
Example #13
0
function informer_auteur($bof)
{
    include_spip('inc/json');
    include_spip('formulaires/login');
    include_spip('inc/auth');
    $login = strval(_request('var_login'));
    $row = auth_informer_login($login);
    if ($row and is_array($row)) {
        unset($row['id_auteur']);
    } else {
        // permettre d'autoriser l'envoi de password non crypte lorsque
        // l'auteur n'est pas (encore) declare dans SPIP, par exemple pour les cas
        // de premiere authentification via SPIP a une autre application.
        if (defined('_AUTORISER_AUTH_FAIBLE') and _AUTORISER_AUTH_FAIBLE) {
            $row = array();
        } elseif ($n = sql_countsel('spip_auteurs', "login<>''")) {
            $n = abs(crc32($login)) % $n;
            $row = auth_informer_login(sql_getfetsel('login', 'spip_auteurs', "login<>''", '', '', "{$n},1"));
            if ($row and is_array($row)) {
                unset($row['id_auteur']);
                $row['login'] = $login;
            }
        } else {
            $row = array();
        }
    }
    return json_export($row);
}
function action_spiplistes_liste_des_abonnes_dist () {

	include_spip('inc/autoriser');
	include_spip('inc/spiplistes_api');
	
	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	if(!preg_match(",^(\d+) (\d+) (\S+)$,", $arg, $r)) {
		spiplistes_log("action_spiplistes_liste_des_abonnes_dist $arg pas compris");
		return;
	}
	$id_liste = intval($r[1]);
	$debut = intval($r[2]);
	$tri = $r[3];
	$redirect = rawurldecode(_request('redirect'));
	
	$statut_liste = ($id_liste > 0)
		? sql_getfetsel('statut', 'spip_listes', "id_liste=".sql_quote($id_liste), '', '', 1)
		: false
		;
	echo(spiplistes_listes_boite_abonnes ($id_liste, $statut_liste, $tri, $debut, $redirect));
	
	exit(0);

} //
function action_instituer_forum_sujet_dist()
{
    static $statuts_sujet = array('verrou_on' => 'verrouille', 'verrou_off' => 'verrouille', 'resolu_on' => 'resolu', 'resolu_off' => 'resolu');
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $args = $securiser_action();
    list($objet, $id_forum, $action) = explode('/', $args);
    if (!$action or !array_key_exists($action, $statuts_sujet)) {
        return;
    }
    if ($id_forum = intval($id_forum)) {
        $titre = sql_getfetsel('titre', 'spip_forum', 'id_forum=' . sql_quote($id_forum));
        $pattern = '_' . $statuts_sujet[$action] . '_';
        // On supprime systematique le statut demande. Ainsi si l'action demandee est d'enlever un
        // statut c'est fait sinon on evite de rajouter le meme statut
        $titre_modifie = trim(preg_replace(",{$pattern},UimsS", '', $titre));
        // Si l'action demandee est de positionner un nouveau statut on le rajoute au titre
        if ($action == 'verrou_on' or $action == 'resolu_on') {
            $titre_modifie .= $pattern;
        }
        sql_updateq('spip_forum', array('titre' => $titre_modifie), 'id_forum =' . sql_quote($id_forum));
        // Invalider les pages comportant ce forum
        include_spip('inc/invalideur');
        suivre_invalideur("id='id_forum/{$id_forum}'");
    }
}
Example #16
0
function taa_recuperer_fond($flux){
	//Insertion des onglets de langue
    if ($flux['args']['fond'] == 'prive/squelettes/contenu/article'){
		include_spip('inc/config');
    	$id_article= $flux['args']['contexte']['id_article'];
    	
    	// Vérifier si il y des secteurs à exclure
    	$id_secteur=sql_getfetsel('id_secteur','spip_articles','id_article='.$id_article);
    	$limiter_secteur=lire_config('taa/limiter_secteur')?lire_config('taa/limiter_secteur'):array();
    
		if(!in_array($id_secteur,$limiter_secteur))	{	
			$barre=charger_fonction('barre_langues','inc');
			$barre_langue=$barre($id_article);
			
	        $flux['data']['texte'] = str_replace('</h1>', '</h1>' . $barre_langue, $flux['data']['texte']);
		}
    }
    
    //Liste compacte des articles
    if ($flux['args']['fond'] == 'prive/objets/liste/articles' AND _request('exec')!='article' AND !lire_config('taa/liste_compacte_desactive')){

    $flux['texte'] = recuperer_fond('prive/objets/liste/articles_compacte',$flux['args']['contexte']);

    }

 return $flux;   
}
function action_factures_export_csv_mensuel_dist()
{
    $securiser_action = charger_fonction("securiser_action", "inc");
    $date = $securiser_action();
    $t = strtotime($date);
    $date_debut = date('Y-m-01 00:00:00', $t);
    $t = strtotime('+1 month', strtotime($date_debut));
    $t = strtotime('+5 day', $t);
    $date_fin = date('Y-m-01 00:00:00', $t);
    $entetes = array('ID', 'Date', 'No', 'Client', 'HT', 'TTC', 'Paye', 'Date paiement', 'Commande');
    $factures = sql_allfetsel("id_facture,date,no_comptable,id_auteur,montant_ht,montant,montant_regle,date_paiement", "spip_factures", "date>=" . sql_quote($date_debut) . " AND date<" . sql_quote($date_fin), '', 'id_facture');
    foreach ($factures as $k => $facture) {
        $factures[$k]['date'] = date('d/m/Y', strtotime($facture['date']));
        $factures[$k]['date_paiement'] = date('d/m/Y', strtotime($facture['date_paiement']));
        $nom = sql_getfetsel('nom', 'spip_auteurs', 'id_auteur=' . intval($facture['id_auteur']));
        $factures[$k]['id_auteur'] = trim($nom . " #" . $facture['id_auteur']);
        $factures[$k]['commande'] = '';
        if ($trans = sql_fetsel("*", "spip_transactions", "id_facture=" . intval($facture['id_facture'])) and $id_commande = intval($trans['id_commande'])) {
            $reference = sql_getfetsel('reference', 'spip_commandes', 'id_commande=' . intval($id_commande));
            $factures[$k]['commande'] = trim($reference . " #" . $trans['id_commande']);
        }
    }
    $factures = array_map('array_values', $factures);
    $nom = $GLOBALS['meta']['nom_site'] . ' Factures ' . date('Y-m');
    $exporter_csv = charger_fonction('exporter_csv', 'inc');
    $exporter_csv($nom, $factures, ',', $entetes, true);
}
/**
 * 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;
}
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'");
	}
}
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));
		}
	}
}
Example #21
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;
}
Example #22
0
function admin_verifie_session($script, $anonymous = false)
{
    include_spip('base/abstract_sql');
    $pref = sprintf("_%d_", $GLOBALS['visiteur_session']['id_auteur']);
    $signal = fichier_admin($script, "{$script}{$pref}");
    $valeur = sql_getfetsel('valeur', 'spip_meta', "nom='admin'");
    if ($valeur === NULL) {
        ecrire_meta('admin', $signal, 'non');
    } else {
        if (!$anonymous and $valeur != $signal) {
            if (!preg_match('/^(.*)_(\\d+)_/', $GLOBALS['meta']["admin"], $l) or intval($l[2]) != $GLOBALS['visiteur_session']['id_auteur']) {
                include_spip('inc/minipres');
                spip_log("refus de lancer {$script}, priorite a {$valeur}");
                return minipres(_T('info_travaux_texte'));
            }
        }
    }
    $journal = "spip";
    if (autoriser('configurer')) {
        // c'est une action webmestre, soit par ftp soit par statut webmestre
        $journal = 'webmestre';
    }
    // on pourrait statuer automatiquement les webmestres a l'init d'une action auth par ftp ... ?
    spip_log("admin {$pref}" . ($valeur ? " (reprise)" : ' (init)'), $journal);
    return '';
}
Example #23
0
/**
 * Renseigner les informations de taille et dimension d'un document
 * 
 * Récupère les informations de taille (largeur / hauteur / type_image / taille) d'un document
 * Utilise pour cela les fonctions du répertoire metadatas/*
 * 
 * Ces fonctions de récupérations peuvent retourner d'autres champs si ces champs sont définis
 * comme editable dans la déclaration de la table spip_documents
 * 
 * TODO Renommer cette fonction sans "_image"
 *
 * @param string $fichier 
 * 		Le fichier à examiner 
 * @param string $ext
 * 		L'extension du fichier à examiner
 * @return array|string $infos
 * 		Si c'est une chaine, c'est une erreur
 * 		Si c'est un tableau, l'ensemble des informations récupérées du fichier
 */
function renseigner_taille_dimension_image($fichier, $ext)
{
    $infos = array('largeur' => 0, 'hauteur' => 0, 'type_image' => '', 'taille' => 0);
    // Quelques infos sur le fichier
    if (!$fichier or !@file_exists($fichier) or !($infos['taille'] = @intval(filesize($fichier)))) {
        spip_log("Echec copie du fichier {$fichier}");
        return _T('medias:erreur_copie_fichier', array('nom' => $fichier));
    }
    // chercher une fonction de description
    $meta = array();
    if ($metadata = charger_fonction($ext, "metadata", true)) {
        $meta = $metadata($fichier);
    } else {
        $media = sql_getfetsel('media_defaut', 'spip_types_documents', 'extension=' . sql_quote($ext));
        if ($metadata = charger_fonction($media, "metadata", true)) {
            $meta = $metadata($fichier);
        }
    }
    $meta = pipeline('renseigner_document', array('args' => array('extension' => $ext, 'fichier' => $fichier), 'data' => $meta));
    include_spip('inc/filtres');
    # pour objet_info()
    $editables = objet_info('document', 'champs_editables');
    foreach ($meta as $m => $v) {
        if (isset($infos[$m]) or in_array($m, $editables)) {
            $infos[$m] = $v;
        }
    }
    return $infos;
}
Example #24
0
function executer_une_syndication() {

	## valeurs modifiables dans mes_options
	## attention il est tres mal vu de prendre une periode < 20 minutes
	define('_PERIODE_SYNDICATION', 2*60);
	define('_PERIODE_SYNDICATION_SUSPENDUE', 24*60);

	// On va tenter un site 'sus' ou 'off' de plus de 24h, et le passer en 'off'
	// s'il echoue
	$where = sql_in("syndication", array('sus','off')) . "
	AND date_syndic < DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).", INTERVAL
	"._PERIODE_SYNDICATION_SUSPENDUE." MINUTE)";
	$id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1");
	if ($id_syndic) {
		$res1 = syndic_a_jour($id_syndic, 'off');
	} else $res1 = true;

	// Et un site 'oui' de plus de 2 heures, qui passe en 'sus' s'il echoue
	$where = "syndication='oui'
	AND date_syndic < DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).", INTERVAL "._PERIODE_SYNDICATION." MINUTE)";
	$id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1");

	if ($id_syndic) {
		$res2 = syndic_a_jour($id_syndic, 'sus');
	} else $res2 = true;

	return ($res1 OR $res2) ? 0 : $id_syndic;
}
Example #25
0
function puce_statut_site_dist($id, $statut, $id_rubrique, $type, $ajax = '', $menu_rapide = _ACTIVER_PUCE_RAPIDE)
{
    $t = sql_getfetsel("syndication", "spip_syndic", "id_syndic=" . intval($id));
    // cas particulier des sites en panne de syndic :
    // on envoi une puce speciale, et pas de menu de changement rapide
    if ($t == 'off' or $t == 'sus') {
        switch ($statut) {
            case 'publie':
                $puce = 'puce-verte-anim.gif';
                $title = _T('sites:info_site_reference');
                break;
            case 'prop':
                $puce = 'puce-orange-anim.gif';
                $title = _T('sites:info_site_attente');
                break;
            case 'refuse':
            default:
                $puce = 'puce-poubelle-anim.gif';
                $title = _T('sites:info_site_refuse');
                break;
        }
        return http_img_pack($puce, $title);
    } else {
        return puce_statut_changement_rapide($id, $statut, $id_rubrique, $type, $ajax, $menu_rapide);
    }
}
Example #26
0
function liens_implicite_site_dist($texte, $id, $type, $args, $ancre, $connect = '')
{
    if (!($id = intval($id))) {
        return false;
    }
    $url = sql_getfetsel('url_site', 'spip_syndic', "id_syndic=" . intval($id), '', '', '', '', $connect);
    return $url;
}
Example #27
0
/**
 * cette fonction doit etre appelee avec un $id_transaction securise
 * jamais avec un $id_transaction qui provient directement de l'url sans verification
 *
 * @param <type> $mode
 * @param <type> $acte_ou_abo
 * @param <type> $succes
 * @param <type> $id_transaction
 */
function redirige_apres_retour_transaction($mode, $acte_ou_abo, $succes, $id_transaction = 0)
{
    $redirect = "";
    // cas de paiement par un admin (cheque...)
    // renvoyer dans le prive
    $id_auteur = sql_getfetsel("id_auteur", "spip_transactions", "id_transaction=" . intval($id_transaction));
    if (isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur'] != $id_auteur and include_spip("inc/autoriser") and autoriser("regler", "transaction", $id_transaction)) {
        $redirect = generer_url_ecrire("transactions", "id_transaction=" . $id_transaction, true);
    }
    if (!$redirect) {
        // par defaut on revient sur une des pages reglees en define()
        // _BANK_ACTE_NORMAL_RETURN_URL
        // _BANK_ACTE_CANCEL_RETURN_URL
        // _BANK_ABO_NORMAL_RETURN_URL
        // _BANK_ABO_CANCEL_RETURN_URL
        $acte_ou_abo = $acte_ou_abo == 'acte' ? 'ACTE' : 'ABO';
        $c = "_BANK_" . $acte_ou_abo . "_NORMAL_RETURN_URL";
        if ($succes) {
            if (defined($c)) {
                $redirect = constant($c);
            } else {
                $redirect = generer_url_public('bank_retour_ok');
            }
        } else {
            if (defined($c)) {
                $redirect = constant($c);
            } else {
                $redirect = generer_url_public('bank_retour_echec');
            }
        }
        if (strlen($redirect)) {
            $redirect = parametre_url($redirect, 'type', $acte_ou_abo, '&');
            if ($id_transaction = intval($id_transaction)) {
                // attraper les infos sur la transaction
                $row = sql_fetsel('*', 'spip_transactions', 'id_transaction=' . intval($id_transaction));
            }
            if ($row and $row['transaction_hash']) {
                $redirect = parametre_url($redirect, 'id_transaction', $id_transaction, '&');
                $redirect = parametre_url($redirect, 'transaction_hash', $row['transaction_hash'], '&');
            }
        }
    }
    // permettre de definir autrement l'url de redirection
    $redirect = pipeline('bank_redirige_apres_retour_transaction', array('args' => array('mode' => $mode, 'type' => $acte_ou_abo, 'succes' => $succes, 'id_transaction' => $id_transaction, 'row' => $row), 'data' => $redirect));
    #var_dump($redirect);die();
    if (strlen($redirect)) {
        include_spip('inc/headers');
        redirige_par_entete($redirect);
        exit;
    }
    //on ne devrait jamais arriver la !
    if ($succes) {
        echo "Transaction {$mode} {$acte_ou_abo} {$id_transaction} terminee OK";
    } else {
        echo "Transaction {$mode} {$acte_ou_abo} {$id_transaction} annulee";
    }
    die;
}
/**
 * Définition des messages de compagnon par défaut en fonction
 *
 * Retourne une liste de messages d'aides en fonction du pipeline
 * demandé
 *
 * @pipeline compagnon_messages
 *
 * @param array $flux
 *     Données du pipeline
 * @return array $flux
 *     Données du pipeline
 **/
function compagnon_compagnon_messages($flux)
{
    $exec = $flux['args']['exec'];
    $pipeline = $flux['args']['pipeline'];
    $vus = $flux['args']['deja_vus'];
    $aides =& $flux['data'];
    switch ($pipeline) {
        case 'affiche_milieu':
            switch ($exec) {
                case 'accueil':
                    $aides[] = array('id' => 'accueil', 'inclure' => 'compagnon/accueil', 'statuts' => array('1comite', '0minirezo', 'webmestre'));
                    $aides[] = array('id' => 'accueil_configurer', 'titre' => _T('compagnon:c_accueil_configurer_site'), 'texte' => _T('compagnon:c_accueil_configurer_site_texte', array('nom' => $GLOBALS['meta']['nom_site'])), 'statuts' => array('webmestre'), 'target' => '#bando_identite .nom_site_spip .nom');
                    $aides[] = array('id' => 'accueil_publication', 'titre' => _T('compagnon:c_accueil_publication'), 'texte' => _T('compagnon:c_accueil_publication_texte'), 'statuts' => array('webmestre'), 'target' => '#bando1_menu_edition');
                    break;
                case 'rubriques':
                    // eviter si possible une requete sql.
                    if (!isset($vus['rubriques']) and !sql_countsel('spip_rubriques')) {
                        $aides[] = array('id' => 'rubriques', 'titre' => _T('compagnon:c_rubriques_creer'), 'texte' => _T('compagnon:c_rubriques_creer_texte'), 'statuts' => array('webmestre'), 'target' => '#contenu .icone:first-of-type');
                    }
                    break;
                case 'rubrique':
                    // eviter si possible une requete sql.
                    if (!isset($vus['rubrique'])) {
                        $statut = sql_getfetsel('statut', 'spip_rubriques', 'id_rubrique=' . $flux['args']['id_rubrique']);
                        if ($statut != 'publie') {
                            $aides[] = array('id' => 'rubrique', 'titre' => _T('compagnon:c_rubrique_publier'), 'texte' => _T('compagnon:c_rubrique_publier_texte'), 'statuts' => array('webmestre'), 'target' => '#contenu .icone.article-new-24');
                        }
                    }
                    break;
                case 'articles':
                    // eviter si possible une requete sql.
                    if (!isset($vus['articles']) and !sql_countsel('spip_rubriques')) {
                        $aides[] = array('id' => 'articles', 'titre' => _T('compagnon:c_articles_creer'), 'texte' => _T('compagnon:c_articles_creer_texte'), 'statuts' => array('webmestre'));
                    }
                    break;
                case 'sites':
                    // eviter si possible une requete sql.
                    if (!isset($vus['sites']) and !sql_countsel('spip_rubriques')) {
                        $aides[] = array('id' => 'sites', 'titre' => _T('compagnon:c_sites_creer'), 'texte' => _T('compagnon:c_sites_creer_texte'), 'statuts' => array('webmestre'));
                    }
                    break;
                case 'article':
                    $aides[] = array('id' => 'article_redaction', 'inclure' => 'compagnon/article_redaction', 'statuts' => array('0minirezo', 'webmestre'));
                    $aides[] = array('id' => 'article_redaction_redacteur', 'inclure' => 'compagnon/article_redaction_redacteur', 'statuts' => array('1comite'));
                    break;
            }
            break;
        case 'affiche_gauche':
            switch ($exec) {
                case 'job_queue':
                    $aides[] = array('id' => 'job_queue', 'titre' => _T('compagnon:c_job'), 'texte' => _T('compagnon:c_job_texte'), 'statuts' => array('webmestre'));
                    break;
            }
            break;
    }
    return $flux;
}
function action_instituer_syndic_article_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    list($id_syndic_article, $statut) = preg_split('/\\W/', $arg);
    if ($id_syndic_article = intval($id_syndic_article) and $id_syndic = sql_getfetsel('id_syndic', 'spip_syndic_articles', "id_syndic_article=" . intval($id_syndic_article)) and autoriser('moderer', 'site', $id_syndic)) {
        sql_updateq("spip_syndic_articles", array("statut" => $statut), "id_syndic_article=" . intval($id_syndic_article));
    }
}
function formulaires_clevermail_post_edit_traiter_dist($pst_id = -1)
{
    $champs = array('pst_subject' => _request('pst_subject'), 'pst_html' => _request('pst_html'), 'pst_text' => _request('pst_text'));
    $lst_id = sql_getfetsel("lst_id", "spip_cm_posts", "pst_id=" . intval(_request('pst_id')));
    $lst_name = sql_getfetsel("lst_name", "spip_cm_lists", "lst_id=" . intval($lst_id));
    sql_updateq('spip_cm_posts', $champs, "pst_id = " . intval(_request('pst_id')));
    spip_log('Modification du message « ' . _request('pst_subject') . ' » (id = ' . _request('pst_id') . ') de la liste « ' . $lst_name . ' » (id = ' . $lst_id . ')', 'clevermail');
    return array('message_ok' => 'ok', 'redirect' => generer_url_ecrire('clevermail_posts', 'lst_id=' . $lst_id));
}