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; }
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; }
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'); } } }
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 ''; }
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}'"); } }
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)); } } }
/** * 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; }
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 ''; }
/** * 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; }
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; }
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); } }
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; }
/** * 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)); }