/** * Intervient après le changement de statut d'un objet * * @pipeline post_edition * * @param array $flux * Données du pipeline * @return array Données du pipeline */ function reservations_credits_post_edition($flux) { $table = $flux['args']['table']; if ($table == 'spip_evenements') { $statut_ancien = $flux['args']['statut_ancien']; $statut = $flux['data']['statut']; // Si un événement publié est annulé if ($statut_ancien == 'publie' and $statut == 'annule') { set_request('instituer_credit_mouvement', 'credit'); } elseif ($statut_ancien == 'annule' and $statut == 'publie') { set_request('instituer_credit_mouvement', 'debit'); } // On crée les crédits pour chaque détail de réservation payé if ($type = _request('instituer_credit_mouvement')) { set_request('type', $type); $action = charger_fonction('editer_objet', 'action'); if (test_plugin_actif('prix_objets')) { $sql = sql_select('id_reservations_detail, id_auteur, email, spip_reservations_details.prix_ht, spip_reservations_details.prix, spip_reservations_details.taxe, descriptif,code_devise', 'spip_reservations_details LEFT JOIN spip_reservations USING (id_reservation) LEFT JOIN spip_prix_objets USING (id_prix_objet)', 'id_evenement=' . $flux['args']['id_objet'] . ' AND spip_reservations_details.statut="accepte"'); } else { $sql = sql_select('id_reservations_detail, id_auteur, email, prix_ht, prix, taxe,descriptif', 'spip_reservations_details LEFT JOIN spip_reservations USING (id_reservation)', 'id_evenement=' . $flux['args']['id_objet'] . ' AND spip_reservations_details.statut="accepte"'); } $date = date('Y-m-d H:i:s'); while ($data = sql_fetch($sql)) { if (!isset($data['id_auteur']) or !($email = sql_getfetsel('email', 'spip_auteurs', 'id_auteur =' . $data['id_auteur']))) { $email = $data['email']; } if (isset($data['code_devise'])) { set_request('devise', $data['code_devise']); } set_request('email', $email); set_request('id_reservations_detail', $data['id_reservations_detail']); set_request('descriptif', _T('reservation_credit_mouvement:mouvement_evenement_' . $statut, array('titre' => $data['descriptif']))); // On établit le montant if ($data['prix'] > 0) { set_request('montant', $data['prix']); } else { $montant = $data['prix_ht'] + $data['taxe']; set_request('montant', $montant); } set_request('date_creation', $date); // Création du crédit $action('new', 'reservation_credit_mouvement'); } } } return $flux; }
function action_generer_recu_souscription_dist($id_souscription = null, $annee = null) { if (is_null($id_souscription)) { $id_souscription = _request('id_souscription'); $annee = _request('annee'); $hash = _request('hash'); $lowsec = souscription_hash_lowsec($id_souscription, $annee); if ($hash !== $lowsec) { die('Erreur : URL pas autorisee'); } } else { $lowsec = souscription_hash_lowsec($id_souscription, $annee); } $format = _request('format'); if (!in_array($format, array('html', 'pdf'))) { // PDF ou HTML ? si le plugin SPIPDF est la on genere un recu en PDF $format = "html"; if (test_plugin_actif("spipdf")) { $format = "pdf"; } } $numero = souscription_numero_recu($id_souscription, $annee); $dir = sous_repertoire(_DIR_IMG, "attestations"); // securite : dossier inaccessible en http if (!file_exists($f = $dir . ".htaccess")) { ecrire_fichier($f, "deny from all\n"); } $filename = $numero . ".{$format}"; $file = $dir . $filename; if (!file_exists($file)) { $fond = $format == "pdf" ? "attestation_pdf" : "attestation"; $content = recuperer_fond($fond, array("id_souscription" => $id_souscription, "annee" => $annee, "hash" => $lowsec)); ecrire_fichier($file, $content); } $mime = "text/html"; if ($format == "pdf") { $mime = "application/pdf"; } header("Content-type: {$mime}"); if ($format == "pdf") { $filename = preg_replace(",\\W+,", "", $GLOBALS['meta']['nom_site']) . "-Recu-" . $filename; header("Content-Disposition: attachment; filename={$filename}"); //header("Content-Transfer-Encoding: binary"); } // fix for IE catching or PHP bug issue header("Pragma: public"); header("Expires: 0"); // set expiration time header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); if ($cl = filesize($file)) { header("Content-Length: " . $cl); } readfile($file); }
function taa_pre_insertion($flux){ if ($flux['args']['table']=='spip_articles'){ if($lang=_request('lang_dest')){ $flux['data']['lang'] = $lang; $flux['data']['langue_choisie'] = 'oui'; } elseif(test_plugin_actif('tradrub')){ $id_rubrique=_request('id_parent')?_request('id_parent'):_request('id_rubrique'); $lang=sql_getfetsel('lang','spip_rubriques','id_rubrique='.$id_rubrique); $flux['data']['lang'] = $lang; $flux['data']['langue_choisie'] = 'non'; } } return $flux; }
/** * Action sécurisée pour valider manuellement les membres du site * * On change le statut de l'auteur et on lui envoie un mail avec de quoi se loguer * * @return rien */ function action_valider_auteur_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $id_auteur = $securiser_action(); if (!$id_auteur or !autoriser('valider', 'auteur', $id_auteur)) { include_spip('inc/minipres'); $msg = _T('valider_inscription:permissions_insuffisantes'); die(minipres($msg)); } include_spip('base/abstract_sql'); // le statut à donné a été enregistré dans le champs « prefs » $statut = sql_getfetsel('prefs', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); include_spip('action/editer_objet'); if ($err = objet_modifier('auteur', $id_auteur, array('statut' => $statut))) { include_spip('inc/minipres'); die(minipres(_T('valider_inscription:erreur_validation'), $err)); } $desc = sql_fetsel('statut, id_auteur, login, email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); include_spip('action/inscrire_auteur'); // generer le mot de passe (ou le refaire si compte inutilise) $desc['pass'] = creer_pass_pour_auteur($id_auteur); // attribuer un jeton pour confirmation par clic sur un lien $desc['jeton'] = auteur_attribuer_jeton($id_auteur); // Si on doit lier l'auteur à une zone, il faut le faire ici, // parce que les visiteurs n'ont pas les autorisations nécessaires // lors de l'inscription if (test_plugin_actif('auteur2zone')) { include_spip('inc/config'); $config = lire_config('auteur2zone'); // Lier à la zone include_spip('action/editer_zone'); zone_lier($config['auteur_zone_auto'], 'auteur', $id_auteur); } $envoyer_inscription = charger_fonction('envoyer_inscription', ''); list($sujet, $msg, $from, $head) = $envoyer_inscription($desc, $nom, $statut); include_spip('inc/notifications'); notifications_envoyer_mails($desc['email'], $msg, $sujet, $from, $head); }
/** * Massicoter un logo * * Traitement automatique sur les balises #LOGO_* * * @param string $fichier : Le logo * * @return string : Un logo massicoté */ function massicoter_logo($logo, $objet_type = null, $id_objet = null, $role = null, $env = null) { include_spip('inc/filtres'); if (!$logo) { return $logo; } $src = extraire_attribut($logo, 'src'); $alt = extraire_attribut($logo, 'alt'); $classes = extraire_attribut($logo, 'class'); $onmouseover = extraire_attribut($logo, 'onmouseover'); $onmouseout = extraire_attribut($logo, 'onmouseout'); /* S'il n'y a pas d'id_objet, on essaie de le deviner avec le nom du fichier, c'est toujours mieux que rien. Sinon on abandonne… */ if (is_null($id_objet)) { $objet = massicot_trouver_objet_logo($src); /* Si le plugin roles_documents est activé, l'objet n'est pas forcément * devinable via le nom de fichier (notamment avec la balise * LOGO_ARTICLE_RUBRIQUE). Dans ce cas on essaie de bidouiller un truc * avec l'environnement. */ if (test_plugin_actif('roles_documents') and $env) { if (isset($env['id_article'])) { $objet = array('objet' => 'article', 'id_objet' => $env['id_article']); } elseif (isset($env['id_rubrique'])) { $objet = array('objet' => 'rubrique', 'id_objet' => $env['id_rubrique']); } } if (is_null($objet)) { return $logo; } $objet_type = $objet['objet']; $id_objet = $objet['id_objet']; } $parametres = massicot_get_parametres($objet_type, $id_objet, $role); $fichier = massicoter_fichier($src, $parametres); if ($onmouseout) { $onmouseout = str_replace($src, $fichier, $onmouseout); } if ($onmouseover) { $src_off = preg_replace('/^.*[\']([^\']+)[\']/', '$1', $onmouseover); $parametres_off = massicot_get_parametres($objet_type, $id_objet, 'logo_survol'); $fichier_off = massicoter_fichier($src_off, $parametres_off); $onmouseover = str_replace($src_off, $fichier_off, $onmouseover); } $balise_img = charger_filtre('balise_img'); $balise = $balise_img($fichier, $alt, $classes); $balise = inserer_attribut($balise, 'onmouseover', $onmouseover); $balise = inserer_attribut($balise, 'onmouseout', $onmouseout); return $balise; }
function formulaires_csv2auteurs_exportation_traiter_dist() { $nom_champs = _request('nom_champs'); $choix_statut = _request('choix_statut'); $retour = $login_restreint = array(); // creation du nom du fichier $date_du_jour = date(Y_m_d); $nom_fichier_csv = $date_du_jour . '_export_table_auteurs.csv'; $statut = array("0minirezo" => "administrateur", "1comite" => "redacteur", "6forum" => "visiteur"); // récupération des données dans la tables spip_auteurs que l'on place dans le champ "ss_groupe" // Ecriture de la premiere ligne d'entete foreach ($nom_champs as $entete) { $tableau_csv[0][$entete] = $entete; } // ajout de l'admin restreint $tableau_csv[0]["ss_groupe"] = "ss_groupe"; // ajout de l'acces restreint s'il existe if (test_plugin_actif("accesrestreint")) { $tableau_csv[0]["zone"] = "zone"; } $i = 1; // création d'un array contenant tous les logins des admins restreints if (in_array("0minirezo", $choix_statut)) { $r = sql_select("DISTINCT auteur.login AS login", array("spip_auteurs AS auteur", "spip_auteurs_liens AS liens"), array("auteur.statut='0minirezo'", "liens.id_auteur=auteur.id_auteur", "liens.objet='rubrique'")); while ($row = sql_fetch($r)) { $login_restreint[] = $row['login']; } } if ($res = sql_select('*', 'spip_auteurs AS auteur')) { while ($row = sql_fetch($res)) { // test les statuts demandés if (in_array($row[statut], $choix_statut)) { // si c'est un admin, on ne selectionne que les admins restreints !!! if ($row['statut'] == "0minirezo" and in_array($row['login'], $login_restreint) or $row['statut'] == "1comite" or $row['statut'] == "6forum") { // Prise en compte de tous les champs selectionnés foreach ($nom_champs as $nom_champ) { // Prise en compte du champ statut if ($nom_champ == "statut") { $tableau_csv[$i]["statut"] = $statut[$row[statut]]; } else { $tableau_csv[$i][$nom_champ] = $row[$nom_champ]; } } // on selectionne les noms des rubriques pour les admins restreints if ($res2 = sql_select(array("rub.titre AS titre"), array("spip_rubriques AS rub", "spip_auteurs_liens AS lien"), array("rub.id_rubrique = lien.id_objet", "lien.id_auteur = {$row['id_auteur']}", "lien.objet = 'rubrique'"))) { $j = 0; while ($row2 = sql_fetch($res2)) { $input[$row[nom]][$j] = $row2[titre]; $j++; } if ($input[$row[nom]]) { $tableau_csv[$i]["ss_groupe"] = implode('|', $input[$row[nom]]); } else { $tableau_csv[$i]["ss_groupe"] = ""; } } // Prise en compte des zones restreintes : plugin acces restreint si le plugin est installe if (test_plugin_actif("accesrestreint")) { $k = 0; if ($res3 = sql_select(array("rub.titre AS titre"), array("spip_zones_liens AS zone_auteur", "spip_zones_liens AS zone_rubrique", "spip_rubriques AS rub"), array("zone_auteur.id_zone = zone_rubrique.id_zone", "zone_auteur.objet='auteur' AND zone_auteur.id_objet ={$row['id_auteur']}", "zone_rubrique.objet='rubrique'AND zone_rubrique.id_objet = rub.id_rubrique"))) { while ($row3 = sql_fetch($res3)) { $zones[$row[nom]][$k] = $row3[titre]; $tableau_csv[$i]["zone"] = implode('|', $zones[$row[nom]]); $k++; } } } } } $i++; } } // création de la variable contenant l'intégralité des donnees $a_ecrire = ''; include_spip('inc/config'); $separateur = lire_config("csv2auteurs_separateur"); foreach ($tableau_csv as $ligne) { $a_ecrire .= implode("{$separateur}", $ligne); $a_ecrire .= "\r\n"; } // telechargement du fichier csv header("Content-Type: application/download"); header("Content-Disposition: attachment; filename={$nom_fichier_csv}"); header("Content-Length: " . strlen($a_ecrire)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); echo $a_ecrire; exit; return $retour; }
/** * Creation du profil a la volee lors de l'inscription a la newsletter * @param $flux * @return mixed */ function profils_post_edition($flux) { $notifier = true; //ne pas envoyer de notif par exemple lors d'une inscription en masse a une newsletter if (isset($GLOBALS['notification_instituermailsubscriber_status']) and !$GLOBALS['notification_instituermailsubscriber_status']) { $notifier = false; } // quand un auteur change d'email, noter le changement // pour actualiser ses abonnements mailsubscribers si besoin dans post_edition if ($flux['args']['table'] == 'spip_auteurs' and $id_auteur = $flux['args']['id_objet'] and isset($flux['data']['email']) and isset($GLOBALS['email_changed'][$flux['data']['email']]) and $old_email = $GLOBALS['email_changed'][$flux['data']['email']]) { if (test_plugin_actif("mailsubscribers")) { sql_updateq("spip_mailsubscribers", array('email' => $flux['data']['email']), "email=" . sql_quote($old_email)); } } if ($flux['args']['table'] == 'spip_mailsubscribers' and $id_mailsubscriber = $flux['args']['id_objet'] and $flux['args']['action'] == 'instituer' and isset($flux['data']['statut']) and $flux['data']['statut'] == 'valide' and $flux['args']['statut_ancien'] !== 'valide') { include_spip("inc/config"); if (lire_config("profils/creer_depuis_mailsubscriber", "non") == 'oui') { if ($row = sql_fetsel("*", "spip_mailsubscribers", "id_mailsubscriber=" . intval($id_mailsubscriber))) { if (!sql_fetsel("*", "spip_auteurs", "email=" . sql_quote($row['email']) . " AND statut<>" . sql_quote("5poubelle"))) { include_spip("inc/profils"); $id_auteur = profils_creer_depuis_mailsubscriber($row, $notifier); } } } } return $flux; }
function formulaires_editer_profil_traiter_dist($id_auteur) { refuser_traiter_formulaire_ajax(); $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); $new_email = ""; // si l'email change if (_request('email') and _request('email') !== $auteur['email']) { $new_email = _request('email'); // si c'etait le login, changer aussi le login if ($auteur['email'] == $auteur['login']) { set_request('login', _request('email')); } } include_spip('inc/editer'); // renseigner le nom de la table auteurs (s'il n'a pas été renseigné) if (!_request('nom')) { set_request('nom', _request('prenom') . ' ' . _request('name')); } $res = formulaires_editer_objet_traiter('auteur', $id_auteur); // si l'email change if ($new_email) { // securite si jamais la modif en base n'a pas eu lieu $new_email = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); // updater les abonnements dans mailsubscribers // si jamais il y a deja in subscriber sur le nouveau mail, ca ne fera rien, et l'ancien email continuera a recevoir // a charge pour l'utilisateur de se desabonner manuellement sur l'ancien if (test_plugin_actif("mailsubscribers")) { sql_updateq("spip_mailsubscribers", array('email' => $new_email), "email=" . sql_quote($auteur['email'])); } } /* if ($email = _request('email')){ if (_request('newsletter')){ $subscribe = charger_fonction("subscribe","newsletter"); $subscribe($email,array('nom'=>_request('nom'),'listes'=>array('profils'),'force'=>true)); } else { $unsubscribe = charger_fonction("unsubscribe","newsletter"); $unsubscribe($email,array('listes'=>array('profils'))); } set_request('newsletter'); } */ if (isset($res['message_ok'])) { $res['message_ok'] = _T('editer_profil:message_ok_profil_modifie'); $res['editable'] = true; } return $res; }
function csv2auteurs_supprimer_auteurs($Tid, $statut, $traitement = "supprimer_articles", $id_rubrique_archive = 1) { // passage à la poubelle $objet = 'auteur'; $set = array('statut' => '5poubelle'); foreach ($Tid as $id) { $Tarticles = sql_allfetsel('id_objet', 'spip_auteurs_liens', array('id_auteur=' . $id, 'objet="article"')); // auteur sans article et demande de suppression: suppression complète if (count($Tarticles) == 0 and _request('abs_poubelle') == 'supprimer') { sql_delete('spip_auteurs', "id_auteur={$id}"); } else { objet_modifier($objet, $id, $set); } // traitement des articles de l'auteur if (count($Tarticles) != 0) { // supprimer les articles $table_idarticle = array(); if ($traitement == 'supprimer_articles') { objet_dissocier(array('id_auteur' => $id), array('article' => $Tarticles)); foreach ($Tarticles as $idarticle) { $table_idarticle[] = $idarticle['id_objet']; } $inarticle = join(',', $table_idarticle); sql_delete('spip_articles', "id_article IN ({$inarticle})"); } // deplacer les articles dans la rubrique d'archivage if ($traitement == 'transferer_articles') { foreach ($Tarticles as $idarticle) { objet_modifier('article', $idarticle['id_objet'], array('id_parent' => $id_rubrique_archive)); } } } if (test_plugin_actif("accesrestreint")) { // suppression des zones de l'auteur $Tzones = sql_allfetsel('id_zone', 'spip_zones_liens', array('id_objet=' . $id, 'objet="auteur"')); foreach ($Tzones as $id_zone) { zone_lier($id_zone, 'auteur', $id, 'del'); } } // suppression des rubriques des admins restreints if ($statut == '0minirezo') { $Trubriques = sql_allfetsel('id_objet', 'spip_auteurs_liens', array('id_auteur=' . $id, 'objet="rubrique"')); objet_dissocier(array('id_auteur' => $id), array('rubrique' => $Trubriques)); } } }
function inc_barre_langues_dist($id_article){ include_spip('inc/config'); include_spip('inc/actions'); if(!function_exists('icone_verticale')) { include_spip('inc/presentation'); } $row = sql_fetsel("*", "spip_articles", "id_article=$id_article"); $id_rubrique = $row['id_rubrique']; $id_trad = $row["id_trad"]; $virtuel = (strncmp($row["chapo"],'=',1)!==0) ? '' : chapo_redirige(substr($row["chapo"], 1)); $objet='article'; //création des onglets traduction // Les langues du site ou si restreint celle définis par config $langues_dispos=lire_config('taa/utiliser_langues')?lire_config('taa/utiliser_langues'):explode(',',lire_config('langues_multilingue')); // On établit les traductions de l'article $traductions = array(); if($langues_dispos){ // L'article est traduit if($id_trad>0){ // les traductions de l'article $sql=sql_select('lang,id_article','spip_articles','id_trad='.$id_trad); while($row=sql_fetch($sql)){ $traductions[$row['lang']]=$row['id_article']; } $clic = _T('trad_delier'); $options = '<div class="options delier ajax">'.icone_verticale($clic, redirige_action_auteur('traduction',$id_article.'-article-0',"article&id_article=$id_article"), "traductions-24.gif", "supprimer.gif",'right', false).'</div>'; } // L'article n'est pas traduit else{ $id_trad=$id_article; $row=sql_fetsel('lang,id_article','spip_articles','id_article='.$id_article); // Seul l'aticle présent est pris dans l'array traductions $traductions[$row['lang']]=$row['id_article']; $options = '<div class="options form_lier"><h2>'._T('taa:lier_traduction').'</h2>'.redirige_action_auteur("traduction", $id_article.'-article', "article", "id_article=$id_article", ("<label for='lier_trad'>" . _T('trad_lier') . "</label>" . "\n<input type='text' class='fondl' name='lier_trad' id='lier_trad' size='5' />\n"), _T('bouton_valider'), " class='fondl'").'</div>'; } // Pour chaque langue présente on crée un bouton // indique l'article par défaut $span_content='<div class="ref_article">*<span>'._T('spip:trad_reference').'</span></div>'; foreach($langues_dispos as $key => $value){ $class=''; $span=''; $trad=''; // les boutons hors article présent if($traductions[$value]!=$id_article){ //Si il existe une traduction dans une langue du site on crée le bouton avec le lien de l'article if(array_key_exists($value,$traductions)){ // Article de référence? if($traductions[$value]==$id_trad){ $span=$span_content; } $onglets_traduction.='<li class="traduit box_onglet ajax">'.$span.'<a href="'.generer_url_ecrire($objet,'id_article='.$traductions[$value]).'">'.traduire_nom_langue($value).'</a></li>'; } // Sinon on crée un nouvel article dans la langue souhaitée else{ // Si le plugin traduction rubriques est activé on regarde si on trouve la rubrique traduite if ($trad_rub=test_plugin_actif('tradrub')) { $id_rubrique_traduite=rubrique_traduction($value,$id_rubrique); if($id_rubrique_traduite){ $onglets_traduction.= '<li class="non_traduit box_onglet"><a href="'.generer_url_ecrire($objet.'_edit','new=oui&lier_trad='.$id_trad.'&id_rubrique='.$id_rubrique_traduite.'&lang_dest='.$value).'" title="'._T('ecrire:info_tout_site2').'">'.traduire_nom_langue($value).'</a></li>'; } elseif(test_plugin_actif('trad_rub')){ $donnes_trad=destination_traduction($value,$id_rubrique,$creer_racine=''); $parent_trad=$donnes_trad[0]; $trad=$donnes_trad[1]; $onglets_traduction.='<li class="non_traduit box_onglet"><a href="'.generer_url_ecrire('rubrique_edit','new=oui&id_parent='.$parent_trad.'&lang_dest='.$value.'&lier_trad='.$trad.'&trad_new='.$trad_new.'&retour=nav').'" class="avis_source" title="'._T('tra:avis_rubrique_source').'">'.traduire_nom_langue($value).'</a>'; } $section='oui'; } else{ $onglets_traduction.= '<li class="non_traduit box_onglet"><a href="'.generer_url_ecrire($objet.'_edit','new=oui&lier_trad='.$id_trad.'&lang_dest='.$value).'" title="'._T('ecrire:info_tout_site2').'">'.traduire_nom_langue($value).'</a></li>'; } $action=redirige_action_auteur ('changer_langue',$id_article.'-'.$value,$objet,"id_article=$id_article"); // Si le plugin traduction rubriques est activé on affiche pas les onglets changement de langue car la langue se change en modifiant la rubrique if(!$section){ $changer_traduction.='<li class="item lang box_onglet"><a href="'.parametre_url($action,'changer_lang',$value).'">'.traduire_nom_langue($value).'</a></li>'; } } } // le bouton de l'article présent else{ if($traductions[$value]==$id_trad){ $span=$span_content; } $onglets_traduction.='<li class="box_onglet"><strong class="on">'.$span.traduire_nom_langue($value).'</strong></li>'; } } } $contexte=array( 'onglets_traduction'=>$onglets_traduction, 'options'=>$options, 'langue_article'=>$langue_article, 'changer_traduction'=>$changer_traduction, 'edition_seule'=>$edition_seule, 'id_article'=>$id_article, 'voir'=>_request('voir'), ); $retour=recuperer_fond('prive/editer/barre_traductions_article',$contexte,array('ajax'=>true)); return $retour; }