/** * Utiliser le bon encodage de caractères selon le charset * * Caractères pris en compte : apostrophe, double guillemet, * le tiret cadratin, le tiret demi-cadratin * * @uses filtrer_entites() * * @param string $t * @return string */ function nettoyer_caracteres_mail($t) { $t = filtrer_entites($t); if ($GLOBALS['meta']['charset'] != 'utf-8') { $t = str_replace(array('’', '“', '”'), array("'", '"', '"'), $t); } $t = str_replace(array('—', '&endash;'), array('--', '-'), $t); return $t; }
function exec_mots_type_dist() { $id_groupe= intval(_request('id_groupe')); if (!$id_groupe) { $type = $titre = filtrer_entites(_T('titre_nouveau_groupe')); $row = array(); } else { $row = sql_fetsel("id_groupe,titre", "spip_groupes_mots", "id_groupe=$id_groupe"); if ($row) { $id_groupe = $row['id_groupe']; $type = $row['titre']; $titre = typo($type); } } if (($id_groupe AND !$row) OR !autoriser($id_groupe?'modifier' : 'creer', 'groupemots', $id_groupe)) { include_spip('inc/minipres'); echo minipres(); } else { pipeline('exec_init',array('args'=>array('exec'=>'mots_type','id_groupe'=>$id_groupe),'data'=>'')); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page("« $titre »", "naviguer", "mots"); echo debut_gauche('', true); echo pipeline('affiche_gauche',array('args'=>array('exec'=>'mots_type','id_groupe'=>$id_groupe),'data'=>'')); echo creer_colonne_droite('', true); echo pipeline('affiche_droite',array('args'=>array('exec'=>'mots_type','id_groupe'=>$id_groupe),'data'=>'')); echo debut_droite('', true); $contexte = array( 'icone_retour'=>icone_inline(_T('icone_retour'), generer_url_ecrire("mots_tous") . "#mots_tous-$id_groupe", "groupe-mot-24.gif", "rien.gif",$GLOBALS['spip_lang_left']), 'titre'=>$type, 'redirect'=>generer_url_ecrire("mots_tous",""), 'new'=>_request('new') == "oui"?"oui":$id_groupe, 'config_fonc'=>'groupes_mots_edit_config', ); echo recuperer_fond("prive/editer/groupe_mot", $contexte); echo pipeline('affiche_milieu', array('args' => array( 'exec' => 'mots_type', 'id_groupe' => $id_groupe ), 'data'=>'') ), fin_gauche(), fin_page(); } }
/** * Ajout d'un dépot et de son contenu (paquets, plugins) dans la base de données * * Si une erreur survient (syntaxe XML incorrecte, pas de plugin dans le dépot), * son texte est placé dans le paramètre $erreur * * @param string $url * URL du fichier XML de description du dépot * @param string $erreur * Texte d'un éventuel message d'erreur * @return bool * true si le dépot est ajouté correctement, false sinon */ function svp_ajouter_depot($url, &$erreur = '') { include_spip('inc/distant'); // On considere que l'url a deja ete validee (correcte et nouveau depot) $url = trim($url); // Ajout du depot dans la table spip_depots. Les compteurs de paquets et de plugins // sont mis a jour apres le traitement des paquets // on recupère le XML $fichier_xml = copie_locale($url, 'modif'); if (!$fichier_xml) { $erreur = _T('svp:message_nok_xml_non_recupere', array('fichier' => $url)); return false; } $fichier_xml = _DIR_RACINE . $fichier_xml; // Lire les donnees d'un depot de paquets $infos = svp_phraser_depot($fichier_xml); if (!$infos) { $erreur = _T('svp:message_nok_xml_non_conforme', array('fichier' => $url)); return false; } $titre = filtrer_entites($infos['depot']['titre']); $champs = array('titre' => $titre, 'descriptif' => filtrer_entites($infos['depot']['descriptif']), 'type' => $infos['depot']['type'], 'url_serveur' => $infos['depot']['url_serveur'], 'url_brouteur' => $infos['depot']['url_brouteur'], 'url_archives' => $infos['depot']['url_archives'], 'url_commits' => $infos['depot']['url_commits'], 'xml_paquets' => $url, 'sha_paquets' => sha1_file($fichier_xml), 'nbr_paquets' => 0, 'nbr_plugins' => 0, 'nbr_autres' => 0); // verifier avant l'insertion que le depot n'existe pas deja // car la recuperation pouvant etre longue on risque le probleme en cas de concurrence if (sql_countsel('spip_depots', 'xml_paquets=' . sql_quote($url))) { $erreur = _T('svp:message_nok_depot_deja_ajoute', array('url' => $url)); return false; } elseif (!($id_depot = sql_insertq('spip_depots', $champs))) { $erreur = _T('svp:message_nok_sql_insert_depot', array('objet' => "{$titre} ({$url})")); return false; } // Ajout des paquets dans spip_paquets et actualisation des plugins dans spip_plugins $ok = svp_actualiser_paquets($id_depot, $infos['paquets'], $nb_paquets, $nb_plugins, $nb_autres); if (!$ok or $nb_paquets == 0) { // Si une erreur s'est produite, on supprime le depot deja insere sql_delete('spip_depots', 'id_depot=' . sql_quote($id_depot)); if (!$ok) { $erreur = _T('svp:message_nok_xml_non_conforme', array('fichier' => $url)); } else { $erreur = _T('svp:message_nok_aucun_paquet_ajoute', array('url' => $url)); } return false; } // On met à jour le nombre de paquets et de plugins du depot maintenant ! sql_updateq('spip_depots', array('nbr_paquets' => $nb_paquets, 'nbr_plugins' => $nb_plugins, 'nbr_autres' => $nb_autres), 'id_depot=' . sql_quote($id_depot)); // On vide les paquets locaux pour mettre a jour leurs donnees relatives au depot // comme les mises a jour disponibles include_spip('inc/svp_depoter_local'); svp_actualiser_paquets_locaux(true); return true; }
function send_email($email, $subject, $texte, $from = "", $headers = "") { global $hebergeur, $queue_mails, $flag_wordwrap, $os_serveur; include_lcm('inc_filters'); if (!$from) { $email_envoi = read_meta("email_sender"); $from = is_valid_email($email_envoi) ? $email_envoi : $email; } if (!is_valid_email($email)) { return false; } lcm_debug("mail ({$email}): {$subject}"); $charset = read_meta('charset'); $headers = "From: {$from}\n" . "MIME-Version: 1.0\n" . "Content-Type: text/plain; charset={$charset}\n" . "Content-Transfer-Encoding: 8bit\n{$headers}"; $texte = filtrer_entites($texte); $subject = filtrer_entites($subject); // fignoler ce qui peut l'etre... if ($charset != 'utf-8') { $texte = str_replace("’", "'", $texte); $subject = str_replace("’", "'", $subject); } // encoder le sujet si possible selon la RFC if ($GLOBALS['flag_multibyte'] and @mb_internal_encoding($charset)) { $subject = mb_encode_mimeheader($subject, $charset, 'Q'); } if ($flag_wordwrap) { $texte = wordwrap($texte); } if ($os_serveur == 'windows') { $texte = preg_replace("/\r*\n/", "\r\n", $texte); $headers = preg_replace("/\r*\n/", "\r\n", $headers); } switch ($hebergeur) { case 'lycos': $queue_mails[] = array('email' => $email, 'sujet' => $subject, 'texte' => $texte, 'headers' => $headers); return true; case 'free': return false; case 'online': if (!($ret = @email('webmaster', $email, $subject, $texte))) { lcm_log("ERROR mail: (online) returned false"); } return $ret; default: if (!($ret = @mail($email, $subject, $texte, $headers))) { lcm_log("ERROR mail: (default) returned false"); } return $ret; } }
function breves_edit_ok($row, $id_breve, $id_rubrique, $new) { global $connect_statut, $spip_lang_right; if ($new != 'oui') { $id_breve=$row['id_breve']; $titre=$row['titre']; $statut=$row['statut']; $id_rubrique=$row['id_rubrique']; } else { $titre = filtrer_entites(_T('titre_nouvelle_breve')); $statut = "prop"; } $commencer_page = charger_fonction('commencer_page', 'inc'); pipeline('exec_init',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>'')); echo $commencer_page(_T('titre_page_breves_edit', array('titre' => $titre)), "naviguer", "breves", $id_rubrique); echo debut_grand_cadre(true); echo afficher_hierarchie($id_rubrique); echo fin_grand_cadre(true); echo debut_gauche('', true); if ($new != 'oui' AND ($connect_statut=="0minirezo" OR $statut=="prop")) { # affichage sur le cote des images, en reperant les inserees # note : traiter_modeles($texte, true) repere les doublons # aussi efficacement que propre(), mais beaucoup plus rapidement traiter_modeles("$titre$texte", true); echo afficher_documents_colonne($id_breve, "breve"); } echo pipeline('affiche_gauche',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>'')); echo creer_colonne_droite('', true); echo pipeline('affiche_droite',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>'')); echo debut_droite('', true); $contexte = array( 'icone_retour'=>$new=='oui'?'':icone_inline(_T('icone_retour'), generer_url_ecrire("breves_voir","id_breve=$id_breve"), "breve-24.gif", "rien.gif",$GLOBALS['spip_lang_left']), 'redirect'=>generer_url_ecrire("breves_voir"), 'titre'=>$titre, 'new'=>$new == "oui"?$new:$id_breve, 'id_rubrique'=>$id_rubrique, 'config_fonc'=>'breves_edit_config' ); echo recuperer_fond("prive/editer/breve", $contexte); echo fin_gauche(), fin_page(); }
function onelettrebis($chaine) { $chaine=sansle($chaine); $chaine=filtrer_entites($chaine); // si il y a des fois des accents en dur qui trainent $chaine = unicode2charset(utf_8_to_unicode($chaine), 'iso-8859-1'); // on code en html ISO $a = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"; $b = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"; $chaine=strtr($chaine, $a, $b); // on retire les accents $chaine=strtoupper($chaine); // on passe en majuscules /// si débute par le fameux Œ ou œ $pattern = "^(Œ|œ)"; if (eregi($pattern,$chaine,$regs)) $chaine='O';//$chaine= $regs[0]; //on va renvoyer la lettre O else $chaine = $chaine{0}; return $chaine ; }
function nettoyer_caracteres_mail($t) { $t = filtrer_entites($t); if ($GLOBALS['meta']['charset'] <> 'utf-8') { $t = str_replace( array("’","“","”"), array("'", '"', '"'), $t); } $t = str_replace( array("—", "&endash;"), array("--","-" ), $t); return $t; }
function spam_liste_mots($texte) { include_spip('inc/filtres'); $texte = filtrer_entites(trim($texte)); $split = explode('"', $texte); $c = count($split); $split2 = array(); for($i=0; $i<$c; $i++) if (($s = trim($split[$i])) != ""){ if (($i & 1) && ($i != $c-1)) { // on touche pas au texte entre deux "" $split2[] = $s; } else { // on rassemble tous les separateurs : \s\t\n $temp = preg_replace("/[\s\t\n\r]+/", "\t", $s); $temp = str_replace("+"," ", $temp); $split2 = array_merge($split2, explode("\t", $temp)); } } return array_unique($split2); }
function exec_spiplistes_liste_gerer () { include_spip('inc/autoriser'); include_spip('inc/mots'); include_spip('inc/lang'); include_spip('inc/editer_auteurs'); include_spip('base/spiplistes_tables'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_presentation'); include_spip('inc/spiplistes_dater_envoi'); include_spip('inc/spiplistes_naviguer_paniers'); include_spip('inc/spiplistes_listes_selectionner_auteur'); global $meta , $connect_statut , $connect_toutes_rubriques , $connect_id_auteur , $spip_lang_left , $spip_lang_right , $couleur_claire ; // initialise les variables postees par le formulaire foreach(array( 'new' // nouvelle liste si 'oui' , 'id_liste'// si modif dans l'editeur , 'btn_liste_edit', 'titre', 'texte', 'pied_page' // renvoyes par l'editeur , 'btn_modifier_diffusion', 'changer_lang', 'statut' // local , 'btn_modifier_replyto', 'email_envoi' // local , 'btn_modifier_courrier_auto', 'message_auto' // local , 'auto_chrono', 'auto_weekly', 'auto_mois' , 'titre_message', 'patron', 'periode', 'envoyer_maintenant' , 'jour', 'mois', 'annee', 'heure', 'minute' , 'btn_patron_pied', 'btn_grand_patron' // boites gauches , 'btn_valider_forcer_abos', 'forcer_abo', 'forcer_format_abo', 'forcer_format_reception' , 'btn_supprimer_liste' //local ) as $key) { $$key = _request($key); } foreach(array('id_liste', 'periode') as $key) { $$key = intval($$key); } foreach(array('titre', 'texte', 'pied_page') as $key) { $$key = trim(corriger_caracteres($$key)); } $lang = $changer_lang; $cherche_auteur = _request('cherche_auteur'); $debut = _request('debut'); $envoyer_maintenant = ($envoyer_maintenant == 'oui'); $boite_pour_confirmer_envoi_maintenant = $grosse_boite_moderateurs = $message_erreur = $page_result = ""; if(!$id_liste) { ////////////////////////////////////////////////////// // Creer une liste //// // admin lambda peut creer une liste $flag_editable = ($connect_statut == "0minirezo"); if ($btn_liste_edit && ($new=='oui')) { if ($titre == '') { $titre = _T('spiplistes:liste_sans_titre'); } $pied_page = _SPIPLISTES_PATRON_PIED_DEFAUT; if($id_liste = spiplistes_listes_liste_creer(_SPIPLISTES_LIST_PRIVATE, $GLOBALS['spip_lang'] , $titre, $texte, $pied_page)) { spiplistes_log("id_liste #$id_liste added by id_auteur #$connect_id_auteur"); } } } else if($id_liste > 0) { ////////////////////////////////////////////////////// // Modifier une liste //// // les admins toutes rubriques et le moderateur seuls peuvent modifier la liste $flag_editable = autoriser('moderer', 'liste', $id_liste); if($flag_editable) { // Recupere les donnees de la liste courante pour optimiser l'update $sql_select = "statut,titre,date,lang"; $sql_result = sql_select($sql_select, "spip_listes", "id_liste=".sql_quote($id_liste), "", "", "1"); if($row = sql_fetch($sql_result)) { foreach(explode(",", $sql_select) as $key) { $current_liste[$key] = $row[$key]; } } /////////////////////////////////// // Les modifications (sql_upadteq) // A noter, ne pas preparer les valeurs par sql_quote() // sql_upadteq() s'en occupe $sql_champs = array(); // Retour de l'editeur ? if($btn_liste_edit) { $titre = corriger_caracteres($titre); $texte = corriger_caracteres($texte); if(empty($titre)) { $titre = filtrer_entites(_T('spiplistes:Nouvelle_liste_de_diffusion')); } $sql_champs['titre'] = $titre; $sql_champs['texte'] = $texte; } // Modifier le grand patron ? // a partir de 2.0049, le patron de pied est construit par la meleuse // afin de permettre _texte et multilingue if($btn_grand_patron && $patron) { $sql_champs['patron'] = $patron; } // Modifier patron de pied ? if($btn_patron_pied && $patron) { $sql_champs['pied_page'] = $patron; } // Modifier diffusion ? if($btn_modifier_diffusion) { $current_statut = ($statut) ? $statut : $current_liste['statut'] ; spiplistes_debug_log ('Modification diffusion statut: '.$current_statut); // Modifier le statut ? if(in_array($statut, explode(";", _SPIPLISTES_LISTES_STATUTS_TOUS)) && ($statut != $current_liste['statut']) ) { spiplistes_debug_log ('Modification statut: '.$statut); $sql_champs['statut'] = $statut; // si la liste passe en privee, retire les invites if($statut == _SPIPLISTES_LIST_PRIVATE) { $auteur_statut = '6forum'; spiplistes_abonnements_auteurs_supprimer($auteur_statut); spiplistes_log("AUTEURS ($auteur_statut) REMOVED FROM LISTE #$id_liste ($statut) BY ID_AUTEUR #$connect_id_auteur"); } } // Modifier la langue ? if(!empty($lang) && ($lang!=$current_liste['lang'])) { $sql_champs['lang'] = $lang; } } // Modifier l'adresse email de reponse ? if($btn_modifier_replyto && email_valide($email_envoi) && ($email_envoi!=$current_liste['email_envoi'])) { $sql_champs['email_envoi'] = $email_envoi; } //////////////////////////////////// // Modifier message_auto ? // bloc "courriers automatiques" if($btn_modifier_courrier_auto) { $current_statut = ($statut) ? $statut : $current_liste['statut'] ; spiplistes_debug_log ('Modification periodicite statut: '.$current_statut); $envoyer_quand = spiplistes_formate_date_form($annee, $mois, $jour, $heure, $minute); if(time() > strtotime($envoyer_quand)) { // envoi dans le passe est considere comme envoyer maintenant $envoyer_maintenant = true; $date_depuis = $envoyer_quand; $envoyer_quand = false; } // spiplistes_debug_log("nb vrais abos : ".spiplistes_listes_vrais_abos_compter($id_liste)); if($envoyer_maintenant && ($message_auto != 'non')) { if(!spiplistes_listes_vrais_abos_compter($id_liste)) { $boite_pour_confirmer_envoi_maintenant .= spiplistes_boite_alerte(_T('spiplistes:boite_alerte_manque_vrais_abos'), true); } else { $boite_pour_confirmer_envoi_maintenant = "" . debut_cadre_couleur('', true) // formulaire de confirmation envoi . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTES_LISTE), true) . "<p style='text-align:center;font-weight:bold;' class='verdana2'>" . _T('spiplistes:boite_confirmez_envoi_liste') . "</p>" . "<input type='hidden' name='id_liste' value='$id_liste' />\n" . spiplistes_form_bouton_valider('btn_confirmer_envoi_maintenant') . spiplistes_form_fin(true) . fin_cadre_couleur(true) ; } $date_prevue = normaliser_date(time()); } if($message_auto == 'oui') { $sql_champs['message_auto'] = 'oui'; $sql_champs['titre_message'] = $titre_message; $sql_champs['date'] = (!$envoyer_maintenant) ? $envoyer_quand : ''; switch($auto_chrono) { case 'auto_jour': $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_DAILY : _SPIPLISTES_LIST_PUB_DAILY ; // force au minimum 1 jour $sql_champs['periode'] = (($periode > 0) ? $periode : 1); break; case 'auto_hebdo': if($auto_weekly == 'oui') { // debut de semaine ? $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_WEEKLY : _SPIPLISTES_LIST_PUB_WEEKLY ; // corrige la date pour le lundi de la semaine $time = strtotime($envoyer_quand); $time = mktime(0,0,0,date("m", $time),date("d", $time)-date("w", $time)+1,date("Y", $time)); $envoyer_quand = date("Y-m-d H:i:s", $time); $sql_champs['date'] = $envoyer_quand; } else { $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_HEBDO : _SPIPLISTES_LIST_PUB_HEBDO ; } $sql_champs['periode'] = 0; break; case 'auto_mensuel': if($auto_mois == 'oui') { // debut du mois ? $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_MONTHLY : _SPIPLISTES_LIST_PUB_MONTHLY ; // corrige la date, 1' du mois $envoyer_quand = substr($envoyer_quand, 0, 8)."01 00:00:00"; $sql_champs['date'] = $envoyer_quand; } else { $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_MENSUEL : _SPIPLISTES_LIST_PUB_MENSUEL ; } $sql_champs['periode'] = 0; break; case 'auto_an': $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_YEARLY : _SPIPLISTES_LIST_PUB_YEARLY ; $sql_champs['periode'] = 0; break; } } else if($message_auto == 'non') { $sql_champs['message_auto'] = 'non'; $sql_champs['date'] = ''; $sql_champs['periode'] = 0; } } // end if($btn_modifier_courrier_auto) // Enregistre les modifs pour cette liste if(count($sql_champs)) { sql_updateq('spip_listes', $sql_champs, 'id_liste='.sql_quote($id_liste).' LIMIT 1'); } // Forcer les abonnements if($btn_valider_forcer_abos && $forcer_abo && in_array($forcer_abo, array('tous', 'auteurs', '6forum', 'aucun'))) { $forcer_format_reception = (($forcer_format_abo == 'oui') && in_array($forcer_format_reception, spiplistes_formats_autorises())) ? $forcer_format_reception : false ; include_spip('inc/spiplistes_listes_forcer_abonnement'); if(spiplistes_listes_forcer_abonnement ($id_liste, $forcer_abo, $forcer_format_reception) === false) { $message_erreur .= spiplistes_boite_alerte(_T('spiplistes:Forcer_abonnement_erreur'), true); } } } // end if($flag_editable) } ////////////////////////////////////////////////////// // Recharge les donnees la liste $sql_select_array = array('id_liste', 'titre', 'texte' , 'titre_message', 'pied_page', 'date', 'statut', 'maj' , 'email_envoi', 'message_auto', 'periode', 'patron', 'lang'); if($row = spiplistes_listes_liste_fetsel($id_liste, $sql_select_array)) { foreach($sql_select_array as $key) { // initialise les variables du resultat SQL $$key = $row[$key]; } } // les supers-admins et le moderateur seuls peuvent modifier la liste $flag_editable = autoriser('moderer', 'liste', $id_liste); if (empty($titre_message)) { $titre_message = $titre; if (spiplistes_pref_lire_defaut('opt_completer_titre_nom_site', 'oui') == 'oui') { $titre_message .= _T('spiplistes:_de_') . spiplistes_nom_site_texte($lang); } } $nb_abonnes = spiplistes_listes_nb_abonnes_compter($id_liste); // preparation des boutons if($flag_editable) { // Propose de modifier la liste $gros_bouton_modifier = icone ( _T('spiplistes:Modifier_cette_liste') // legende bouton , generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_EDIT,'id_liste='.$id_liste) // lien , _DIR_PLUGIN_SPIPLISTES_IMG_PACK."reply-to-all-24.gif" // image du fond , "edit.gif" // image de la fonction. Ici, le crayon , '' // alignement , false // pas echo, demande retour ) ; // Propose de supprimer la liste $gros_bouton_supprimer = icone ( _T('spiplistes:Supprimer_cette_liste') , generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER, "btn_supprimer_liste=$id_liste&id_liste=$id_liste") , _DIR_PLUGIN_SPIPLISTES_IMG_PACK.'poubelle_msg.gif' , "" , "right" , false ) ; // la grosse boite des abonnes $tri = _request('tri') ? _request('tri') : 'nom'; // // CP-20101017: Si trop d'elligibles, ca gele. // @todo: revoir la boite/liste des abonnes/elligibles // En attendant ... //if(spiplistes_auteurs_elligibles_compter() < 1000) //{ $boite_liste_abonnes = spiplistes_listes_boite_abonnements( $id_liste, $statut, $tri, $debut, _SPIPLISTES_EXEC_LISTE_GERER ); //} //else //{ // $boite_liste_abonnes = _T('spiplistes:code_en_travaux'); //} // @see http://www.spip-contrib.net/SPIP-Listes#comment444314 $titre_boite = _T('spiplistes:abos_cette_liste'); $legend = '<small id="legend-abos1">' . spiplistes_nb_abonnes_liste_str_get($id_liste) . '</small>'.PHP_EOL ; $grosse_boite_abonnements = '' . '<!-- boite abonnes/elligibles -->'.PHP_EOL . debut_cadre_enfonce('auteur-24.gif', true, '', $titre_boite) . spiplistes_bouton_block_depliable($legend , false, md5('abonnes_liste')) . (spiplistes_spip_est_inferieur_193() ? $legend : '') . spiplistes_debut_block_invisible(md5('abonnes_liste')) . debut_cadre_relief('', true) . $boite_liste_abonnes . fin_cadre_relief(true) . fin_block() . fin_cadre_enfonce(true) . '<!-- fin boite abonnes/elligibles -->'.PHP_EOL ; // la grosse boite des moderateurs $boite_liste_moderateurs = spiplistes_listes_boite_moderateurs( $id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'mods-conteneur' ); $titre_boite = _T('spiplistes:mods_cette_liste'); $nb = spiplistes_mod_listes_compter($id_liste); $legend = '<small>' . spiplistes_nb_moderateurs_liste_str_get($nb) . '</small>'.PHP_EOL ; $grosse_boite_moderateurs = '' . '<!-- boite moderateurs -->'.PHP_EOL . debut_cadre_enfonce('redacteurs-24.gif', true, '', $titre_boite) . spiplistes_bouton_block_depliable($legend , false, md5('mods_liste')) . (spiplistes_spip_est_inferieur_193() ? $legend : '') . spiplistes_debut_block_invisible(md5('mods_liste')) . debut_cadre_relief('', true) . '<div id="mods-conteneur">'.PHP_EOL . $boite_liste_moderateurs . '</div>'.PHP_EOL . fin_cadre_relief(true) . fin_block() . fin_cadre_enfonce(true) . '<!-- fin boite moderateurs -->'.PHP_EOL ; } else { $gros_bouton_modifier = $gros_bouton_supprimer = $grosse_boite_abonnements = ''; } //////////////////////////////////// // PAGE CONTENU //////////////////////////////////// $titre_page = _T('spiplistes:gestion_dune_liste'); // Permet entre autres d'ajouter les classes a la page : <body class='$rubrique $sous_rubrique'> $rubrique = _SPIPLISTES_PREFIX; $sous_rubrique = 'liste_gerer'; $commencer_page = charger_fonction('commencer_page', 'inc'); echo($commencer_page(_T('spiplistes:spiplistes') . ' - ' . $titre_page, $rubrique, $sous_rubrique)); // la gestion des listes de courriers est reservee aux admins if($connect_statut != '0minirezo') { die (spiplistes_terminer_page_non_autorisee() . fin_page()); } $page_result .= '' . '<br /><br /><br />' . PHP_EOL . spiplistes_gros_titre($titre_page, '', true) . barre_onglets($rubrique, $sous_rubrique) . debut_gauche($rubrique, true) . spiplistes_boite_info_id(_T('spiplistes:liste_numero'), $id_liste, true) . spiplistes_naviguer_paniers_listes(_T('spiplistes:aller_aux_listes_'), true) . spiplistes_boite_patron($flag_editable, $id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'btn_grand_patron' , _SPIPLISTES_PATRONS_DIR, _T('spiplistes:Patron_grand_') , ($patron ? $patron : '') , $patron) . spiplistes_boite_patron($flag_editable, $id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'btn_patron_pied' , _SPIPLISTES_PATRONS_PIED_DIR, _T('spiplistes:Patron_de_pied_') , ((($ii = strlen($pied_page)) > _SPIPLISTES_PATRON_FILENAMEMAX) ? _T('taille_octets',array('taille'=>$ii)) . _T('spiplistes:conseil_regenerer_pied') : $pied_page) , $pied_page) . pipeline('affiche_gauche', array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) //. creer_colonne_droite($rubrique, true) // spiplistes_boite_raccourcis() s'en occupe . spiplistes_boite_raccourcis(true) . spiplistes_boite_autocron() . pipeline('affiche_droite', array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) . debut_droite($rubrique, true) . $message_erreur ; changer_typo('','liste'.$id_liste); // message alerte et demande de confirmation si supprimer liste if(($btn_supprimer_liste > 0) && ($btn_supprimer_liste == $id_liste)) { $page_result .= '' . spiplistes_boite_alerte (_T('spiplistes:Attention_suppression_liste').'<br />'._T('spiplistes:Confirmez_requete'), true) . '<form name="form_suppr_liste" id="form_suppr_liste" method="post" action="'.generer_url_ecrire(_SPIPLISTES_EXEC_LISTES_LISTE, '').'">' . PHP_EOL . "<div class='verdana2' style='text-align:right;'>\n" . "<input type='hidden' name='id_liste' value='$id_liste' />\n" . "<label>"._T('spiplistes:Confirmer_la_suppression_de_la_liste')."# $id_liste : \n" . "<input class='fondo' type='submit' name='btn_supprimer_liste_confirme' value='"._T('bouton_valider')."' /></label>\n" . "</div>\n" . "</form>\n" . "<br />\n" ; } $page_result .= "" . debut_cadre_relief("", true) . "\n<table cellpadding='0' cellspacing='0' border='0' width='100%'>\n" . "<tr><td valign='top'>\n" . spiplistes_gros_titre(spiplistes_bullet_titre_liste('puce', $statut, '', true)." " . spiplistes_calculer_balise_titre(extraire_multi($titre)) , '', true) . "</td>" . "<td rowspan='2'>" // le gros bouton modifier si besoin . $gros_bouton_modifier . "</td></tr>\n" . "<tr><td width='100%'>\n" . "<div align='$spip_lang_left' style='padding: 5px; border: 1px dashed #aaa; ' class='verdana1 spip_small'>\n" . propre($texte."~") . "</div>\n" . "</td>\n" . "</tr></table>\n" ; ////////////////////////////////////////////////////// // Modifier le statut de la liste //$email_defaut = entites_html($meta['email_webmaster']); $email_defaut = ($m = email_valide($GLOBALS['meta']['email_defaut'])) ? $m : $GLOBALS['meta']['email_webmaster'] ; $email_envoi = ($m = email_valide($email_envoi)) ? $email_envoi : $email_defaut ; $page_result .= "" //. debut_cadre_relief("racine-site-24.gif", true) . debut_cadre_relief("racine-site-24.gif", true, '', _T('spiplistes:Diffusion').spiplistes_plugin_aide(_SPIPLISTES_EXEC_AIDE, "diffusion")) // //////////////////////////// // Formulaire diffusion . ( ($flag_editable) ? '' . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,'id_liste='.$id_liste), true) . '<input type="hidden" name="exec" value="listes" />' . PHP_EOL . '<input type="hidden" name="id_liste" value="'.$id_liste.'" />' . PHP_EOL : '' ) . '<span class="verdana2">' . _T('spiplistes:cette_liste_est_' , array('s' => spiplistes_bullet_titre_liste ('puce', $statut, 'img_statut', true))) . '</span>' . PHP_EOL ; $sel_private = ' value="' . _SPIPLISTES_LIST_PRIVATE . '" ' . ( in_array ($statut, array( _SPIPLISTES_LIST_PRIVATE , _SPIPLISTES_LIST_PRIV_DAILY , _SPIPLISTES_LIST_PRIV_HEBDO , _SPIPLISTES_LIST_PRIV_WEEKLY , _SPIPLISTES_LIST_PRIV_MENSUEL , _SPIPLISTES_LIST_PRIV_MONTHLY , _SPIPLISTES_LIST_PRIV_YEARLY ) ) ? ' selected="selected"' : '' ) ; $sel_publique = ' value="' . _SPIPLISTES_LIST_PUBLIC . '" ' . ( in_array ($statut, array( _SPIPLISTES_LIST_PUBLIC , _SPIPLISTES_LIST_PUB_DAILY , _SPIPLISTES_LIST_PUB_HEBDO , _SPIPLISTES_LIST_PUB_WEEKLY , _SPIPLISTES_LIST_PUB_MENSUEL , _SPIPLISTES_LIST_PUB_MONTHLY , _SPIPLISTES_LIST_PUB_YEARLY ) ) ? ' selected="selected"' : '' ) ; $page_result .= PHP_EOL . ( ($flag_editable) ? '' . '<select class="verdana2 fondl" name="statut" size="1" id="change_statut">' . PHP_EOL . '<option' . $sel_private . ' style="background-color:#fff">' . _T('spiplistes:statut_interne') . '</option>' . PHP_EOL . '<option' . $sel_publique . ' style="background-color:#B4E8C5">' . _T('spiplistes:statut_publique') . '</option>' . PHP_EOL . '<option' . mySel(_SPIPLISTES_TRASH_LIST, $statut) . ' style="background:url(' . _DIR_IMG_PACK.'rayures-sup.gif)">' . _T('texte_statut_poubelle').'</option>' . PHP_EOL . '</select>' . PHP_EOL : '<span class="verdana2" style="font-weight:bold;">' . spiplistes_items_get_item('alt', $statut) . '</span>'. PHP_EOL ) . '<div style="margin:10px 0px;">' . PHP_EOL . ( ($flag_editable && strpos($GLOBALS['meta']['langues_multilingue'], ',')) ? '' . '<label class="verdana2" for="changer_lang">' . _T('info_multi_herit').' : </label>' . PHP_EOL . '<select name="changer_lang" class="fondl" id="changer_lang">' . PHP_EOL . liste_options_langues('changer_lang', $lang , _T('spiplistes:langue_'), '', '') . '</select>' . PHP_EOL : '' //. "<span class='verdana2'>". _T('info_multi_herit')." : " //. "<span class='verdana2' style='font-weight:bold;'>".traduire_nom_langue($lang)."</span>\n" ) . '</div>' . PHP_EOL . ( ($flag_editable) ? spiplistes_form_bouton_valider('btn_modifier_diffusion') . spiplistes_form_fin(true) : '' ) . fin_cadre_relief(true) ; //////////////////////////// // Formulaire adresse email pour le reply-to $page_result .= '' . debut_cadre_relief(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."reply_to-24.png" , true , '' , _T('spiplistes:adresse_de_reponse').spiplistes_plugin_aide(_SPIPLISTES_EXEC_AIDE , "replyto") ) . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=$id_liste"), true) . "<p class='verdana2'>\n" . _T('spiplistes:adresse_mail_retour').":<br />\n" . ( ($flag_editable) ? _T('spiplistes:adresse')."</p>\n" . "<div style='text-align:center'>\n" . "<input type='text' name='email_envoi' value=\"".$email_envoi."\" size='40' class='fondl' /></div>\n" . spiplistes_form_bouton_valider('btn_modifier_replyto') : "</p><p style='font-weight:bold;text-align:center;'>$email_envoi</p>\n" ) . spiplistes_form_fin(true) . fin_cadre_relief(true) ; //////////////////////////// // Formulaire planifier un courrier automatique $page_result .= "" . "<a name='form-programmer' id='form-programmer'></a>\n" . debut_cadre_relief(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."stock_timer.png", true, '', _T('spiplistes:messages_auto') . spiplistes_plugin_aide(_SPIPLISTES_EXEC_AIDE, "temporiser")) ; $page_result .= "" . $boite_pour_confirmer_envoi_maintenant . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=$id_liste")."#form-programmer", true) . "<table border='0' cellspacing='1' cellpadding='3' width='100%'>\n" . "<tr><td align='$spip_lang_left' class='verdana2'>\n" ; if(empty($patron)) { $page_result .= "" . ( $flag_editable ? spiplistes_boite_alerte(_T('spiplistes:patron_manquant_message'), true) : "<p class='verdana2'>" . _T('spiplistes:liste_sans_patron') . "</p>\n" ) . "</td>\n" . "</tr>\n" . "<tr><td align='$spip_lang_left' class='verdana2'>\n" ; } if ($message_auto != "oui") { $page_result .= "<div class='verdana2'>"._T('spiplistes:pas_denvoi_auto_programme')."</div>\n"; } else { $page_result .= "" // petite ligne d'info si envoi programme . "<p class='verdana2'>"._T('spiplistes:sujet_courrier_auto')."<br />\n" . "<span class='spip_large'> " . spiplistes_calculer_balise_titre(extraire_multi($titre_message)) . "</span></p>\n" . "<p class='verdana2'>" . spiplistes_items_get_item('alt', $statut)."<br />\n" . ( ($statut == _SPIPLISTES_LIST_PUB_MONTHLY) ? "<strong>" . spiplistes_items_get_item("tab_t", $statut) . "</strong><br />" : "" ) . ( ($periode > 0) ? _T('spiplistes:periodicite_tous_les_n_s' , array('n' => " <strong>".$periode."</strong> " , 's' => spiplistes_singulier_pluriel_str_get($periode, _T('spiplistes:jour'), _T('spiplistes:jours'), false) ) ) : "" ) . ( (!in_array($statut, explode(";", _SPIPLISTES_LISTES_STATUTS_PERIODIQUES))) ? " <strong>"._T('spiplistes:Pas_de_periodicite')."</strong><br />" ._T('spiplistes:Ce_courrier_ne_sera_envoye_qu_une_fois') : "" ) . "<br />" . ( (intval($maj)) ? _T('spiplistes:Dernier_envoi_le_') . " <strong>" . affdate_heure($maj) . "</strong>" . ( ($last = round((time() - strtotime($maj)) / _SPIPLISTES_TIME_1_DAY)) ? " (".spiplistes_singulier_pluriel_str_get($last, _T('spiplistes:jour'), _T('spiplistes:jours')).")" : "" ). "<br />" : "" ) . ( ($date_prevue || (intval($date) && (time() < strtotime($date)))) ? _T('spiplistes:prochain_envoi_prevu')." : <strong>" . affdate_heure($date_prevue ? $date_prevue : $date) . "</strong>" . ( (!$date_prevue && ($next = round((strtotime($date) - time()) / _SPIPLISTES_TIME_1_DAY))) ? " (".spiplistes_singulier_pluriel_str_get($next, _T('spiplistes:jour'), _T('spiplistes:jours')).")" : "" ) : "" ) . "</p>\n" ; if($btn_modifier_courrier_auto) { $page_result .= "" . "<p class='verdana2'>"._T('spiplistes:date_act')."<br />" . _T('spiplistes:env_esquel')." <em>".$patron."</em>" . "</p>\n" ; } } $date_debut_envoi = (!empty($date_prevue) ? $date_prevue : (($date && intval($date)) ? $date : normaliser_date(time()))); $page_result .= "" . "</td>\n" . "</tr>\n" ; if($flag_editable) { $page_result .= "" . "<tr><td align='$spip_lang_left' class='verdana2'>" . "<input type='radio' name='message_auto' value='oui' id='auto_oui' " . (empty($patron) ? " disabled='disabled' " : "") . ($auto_checked = ($message_auto=='oui' ? "checked='checked'" : "")) . " />" . "<label for='auto_oui' ".($auto_checked ? "style='font-weight:bold;'" : "").">" . _T('spiplistes:prog_env')."</label>\n" . "<div id='auto_oui_detail' " .((empty($patron) || !$auto_checked) ? "style='display:none;'" : "") .">" . "<ul style='list-style-type:none;'>\n" . "<li>"._T('spiplistes:message_sujet') . ': <input type="text" name="titre_message" value="'.$titre_message.'" size="50" class="fondl" /> </li>'."\n" ; // // chrono jour $ii = ($periode > 0) ? $periode : 1; $page_result .= "" . "<li style='margin-top:0.5em'>" . spiplistes_form_input_radio ('auto_chrono', 'auto_jour' , '' , ($statut == _SPIPLISTES_LIST_PUB_DAILY) , true, false ) . _T('spiplistes:Tous_les') . " <input type='text' name='periode' value='".$ii."' size='4' maxlength='4' class='fondl' /> " . _T('info_jours') . "</li>\n" // chrono hebdo . "<li>" . spiplistes_form_input_radio ('auto_chrono', 'auto_hebdo' , _T('spiplistes:Toutes_les_semaines') , (($statut == _SPIPLISTES_LIST_PUB_HEBDO) || ($statut == _SPIPLISTES_LIST_PUB_WEEKLY)) , true, false) . spiplistes_form_input_checkbox('auto_weekly', 'oui' , _T('spiplistes:en_debut_de_semaine'), ($statut == _SPIPLISTES_LIST_PUB_WEEKLY), true, false) . "</li>\n" // chrono mois . "<li>" . spiplistes_form_input_radio ('auto_chrono', 'auto_mensuel' , _T('spiplistes:Tous_les_mois') , (($statut == _SPIPLISTES_LIST_PUB_MENSUEL) || ($statut == _SPIPLISTES_LIST_PUB_MONTHLY)) , true, false) . spiplistes_form_input_checkbox('auto_mois', 'oui' , _T('spiplistes:en_debut_de_mois'), ($statut == _SPIPLISTES_LIST_PUB_MONTHLY), true, false) . "</li>\n" // chrono annee . "<li>" . spiplistes_form_input_radio ('auto_chrono', 'auto_an' , _T('spiplistes:Tous_les_ans') , ($statut == _SPIPLISTES_LIST_PUB_YEARLY) , true, false) . "</li>\n" . "<li style='margin-top:0.5em'>"._T('spiplistes:A_partir_de')." : <br />\n" // . spiplistes_dater_envoi( 'liste', $id_liste, $statut , $flag_editable , _T('spiplistes:date_expedition_') , $date_debut_envoi, 'btn_changer_date' , false ) . "</li>\n" . ( (!$envoyer_maintenant) ? " <li>" . spiplistes_form_input_checkbox('envoyer_maintenant', 'oui' , _T('spiplistes:env_maint'), false, true) . "</li>\n" : "" ) . "</ul></div>\n" ; $checked = ($message_auto=='non') ? "checked='checked'" : ""; $class = $checked ? "class='bold'" : ""; $disabled = (empty($patron) ? " disabled='disabled' " : ""); $page_result .= "" . "<br /><input type='radio' name='message_auto' value='non' id='auto_non' $disabled $checked />" . "<span $class >" . " <label for='auto_non'>"._T('spiplistes:prog_env_non')."</label> " . "</span>\n" . "</td></tr>\n" ; $page_result .= "" . "<tr><td style='text-align:$spip_lang_right;'>" . ( ($id_liste) ? "<input type='hidden' name='id_liste' value='$id_liste' />" : "" ) . ( ($new) ? "<input type='hidden' name='new' value='$new' />" : "" ) // bouton de validation . (!empty($patron) ? spiplistes_form_bouton_valider('btn_modifier_courrier_auto', _T('bouton_valider'), true) : "") . "</td></tr>" ; } $page_result .= "" . "</table>\n" . spiplistes_form_fin(true) . fin_cadre_relief(true) ; // fin formulaire planifier $page_result .= "" . fin_cadre_relief(true) . $grosse_boite_abonnements . $grosse_boite_moderateurs ; // le super-admin peut abonner en masse if($connect_toutes_rubriques) { $page_result .= "" . "\n<!-- forcer abo -->\n" . debut_cadre_enfonce(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."abonner-24.png", true, '', _T('spiplistes:forcer_les_abonnement_liste').spiplistes_plugin_aide("forcerliste"))."\n" . "<p class='verdana2'>\n" . _T('spiplistes:forcer_abonnement_desc') . "</p>\n" . "<p class='verdana2' style='margin-bottom:1em'><em>" . _T('spiplistes:forcer_abonnement_aide', array('lien_retour' => generer_url_ecrire(_SPIPLISTES_EXEC_ABONNES_LISTE))) . "</em></p>\n" . "<form action='".generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=$id_liste#auteurs")."' id='form_forcer_abo' name='form_forcer_abo' method='post'>\n" . debut_cadre_relief("", true)."\n" // ////////////////////////// // propose de forcer les membres sauf invites si la liste est privee . ( ($statut==_SPIPLISTES_LIST_PRIVATE) ? "<div class='verdana2'><input type='radio' name='forcer_abo' value='auteurs' id='forcer_abo_tous' />\n" . "<label for='forcer_abo_tous'>"._T('spiplistes:Abonner_tous_les_inscrits_prives')."</label>" . "</div>\n" . spiplistes_boutons_forcer_format('forcer_format', _T('spiplistes:forcer_abonnements_nouveaux')) : "" ) // // propose de forcer les invites si la liste est publique ou periodique . ( (($statut!=_SPIPLISTES_LIST_PRIVATE) && ($statut!=_SPIPLISTES_TRASH_LIST)) ? "<div class='verdana2'><input type='radio' name='forcer_abo' value='6forum' id='forcer_abo_6forum' />\n" . "<label for='forcer_abo_6forum'>"._T('spiplistes:Abonner_tous_les_invites_public')."</label></div>\n" . spiplistes_boutons_forcer_format('forcer_format', _T('spiplistes:forcer_abonnements_nouveaux')) : "" ) . ( ($nb_abonnes) ? "<hr />\n" . "<div class='verdana2'><input type='radio' name='forcer_abo' value='aucun' id='forcer_desabo' />\n" . "<label for='forcer_desabo'>"._T('spiplistes:Forcer_desabonner_tous_les_inscrits')."</label></div>\n" : "" ) . fin_cadre_relief(true)."\n" . "<div style='text-align:right;'><input type='submit' name='btn_valider_forcer_abos' value='"._T('bouton_valider')."' class='fondo' /></div>\n" . "</form>\n" . fin_cadre_enfonce (true)."\n" ; } // $page_result .= "" . $gros_bouton_supprimer ; echo($page_result); echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) , spiplistes_html_signature(_SPIPLISTES_PREFIX) , fin_gauche(), fin_page(); } // end exec_spiplistes_liste_gerer()
/** * Récupère les valeurs d'une traduction de référence pour la création * d'un objet (préremplissage du formulaire). * * @param string $type * Type d'objet (article, breve...) * @param string|int $id_objet * Identifiant de l'objet, ou "new" pour une création * @param int $id_rubrique * Identifiant éventuel de la rubrique parente * @param int $lier_trad * Identifiant éventuel de la traduction de référence * @param string $champ_titre * Nom de la colonne SQL de l'objet donnant le titre * @return array * Couples clés / valeurs des champs du formulaire à charger **/ function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_trad = 0, $champ_titre = 'titre') { $table = table_objet_sql($type); $_id_objet = id_table_objet($table); // Recuperer les donnees de l'objet original $row = sql_fetsel("*", $table, "{$_id_objet}={$lier_trad}"); if ($row) { $row[$champ_titre] = filtrer_entites(_T('info_nouvelle_traduction')) . ' ' . $row[$champ_titre]; } else { $row = array(); } // on met l'objet dans une rubrique si l'objet le peut $desc = lister_tables_objets_sql($table); $is_rubrique = isset($desc['field']['id_rubrique']); if ($is_rubrique) { if ($id_rubrique) { $row['id_rubrique'] = $id_rubrique; return $row; } $id_rubrique = $row['id_rubrique']; // Regler la langue, si possible, sur celle du redacteur // Cela implique souvent de choisir une rubrique ou un secteur if (in_array($GLOBALS['spip_lang'], explode(',', $GLOBALS['meta']['langues_multilingue']))) { // Si le menu de langues est autorise sur l'objet, // on peut changer la langue quelle que soit la rubrique // donc on reste dans la meme rubrique if (in_array($table, explode(',', $GLOBALS['meta']['multi_objets']))) { $row['id_rubrique'] = $row['id_rubrique']; # explicite :-) // Sinon, chercher la rubrique la plus adaptee pour // accueillir l'objet dans la langue du traducteur } elseif ($is_rubrique and $GLOBALS['meta']['multi_rubriques'] == 'oui') { if ($GLOBALS['meta']['multi_secteurs'] == 'oui') { $id_parent = 0; } else { // on cherche une rubrique soeur dans la bonne langue $row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique={$id_rubrique}"); $id_parent = $row_rub['id_parent']; } $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "lang='" . $GLOBALS['spip_lang'] . "' AND id_parent={$id_parent}"); if ($row_rub) { $row['id_rubrique'] = $row_rub['id_rubrique']; } } } } return $row; }
function signatures_edit_mail($id_article, $ad_email, $row) { $email = attribut_html($ad_email); if (email_valide($ad_email)) { if ($row['statut'] != 'publie' AND autoriser('modererpetition', 'article', $id_article)) { include_spip('formulaires/signature'); $url = generer_url_entite_absolue($id_article, 'article','','',true); list($titre, $url) = signature_langue($id_article, $url); list($sujet, $corps) = signature_demande_confirmation($id_article, $url, $row['nom_email'], $row['nom_site'], $row['url_site'], $row['message'], $titre, $row['statut']); include_spip('inc/filtres'); $sujet = rawurlencode(filtrer_entites($sujet)); $corps = rawurlencode(filtrer_entites($corps)); $corps = "?subject=$sujet&body=$corps"; } else $corps = ''; $email = "<a href=\"mailto:$ad_email$corps\">$email</a>"; } return "<div class='ad_email'><span class='spip_x-small'>" ._T('info_adresse_email') ."</span> " . $email . "</div>\n"; }
function couper($texte, $taille = 50) { $texte = substr($texte, 0, 400 + 2 * $taille); /* eviter de travailler sur 10ko pour extraire 150 caracteres */ // on utilise les \r pour passer entre les gouttes $texte = str_replace("\r\n", "\n", $texte); $texte = str_replace("\r", "\n", $texte); // sauts de ligne et paragraphes $texte = preg_replace("/\n\n+/", "\r", $texte); $texte = preg_replace("/<(p|br)( [^>]*)?/" . ">", "\r", $texte); // supprimer les traits, lignes etc $texte = preg_replace("/(^|\r|\n)(-[-#\\*]*|_ )/", "\r", $texte); // supprimer les tags $texte = supprimer_tags($texte); $texte = trim(str_replace("\n", " ", $texte)); $texte .= "\n"; // marquer la fin // travailler en accents charset $texte = filtrer_entites($texte); // supprimer les liens $texte = preg_replace("/\\[->([^]]*)\\]/", "\\1", $texte); // liens sans texte $texte = preg_replace("/\\[([^\\[]*)->([^]]*)\\]/", "\\1", $texte); // supprimer les notes $texte = preg_replace("/[\\[([^]]|\\][^]])*\\]\\]/", "", $texte); // supprimer les codes typos $texte = preg_replace("/[{}]/", "", $texte); // supprimer les tableaux $texte = preg_replace("/(^|\r)\\|.*\\|\r/", "\r", $texte); // couper au mot precedent $long = substr($texte, 0, max($taille - 4, 1)); $court = preg_replace("/([^[:space:]][[:space:]]+)[^[:space:]]*\n?\$/", "\\1", $long); $points = ' (...)'; // trop court ? ne pas faire de (...) if (strlen($court) < max(0.75 * $taille, 2)) { $points = ''; $long = preg_replace("/&#?[a-z0-9]*;?\$/", "", substr($texte, 0, $taille)); $texte = preg_replace("/([^[:space:]][[:space:]]+)[^[:space:]]*\$/", "\\1", $long); // encore trop court ? couper au caractere if (strlen($texte) < 0.75 * $taille) { $texte = $long; } } else { $texte = $court; } if (strpos($texte, "\n")) { // la fin est encore la : c'est qu'on n'a pas de texte de suite $points = ''; } // remettre les paragraphes $texte = preg_replace("/\r+/", "\n\n", $texte); return trim($texte) . $points; }
/** * @param $in string, contenu html du courrier a envoyer * @return string, version texte seul (ascii) du courrier **/ function spiplistes_courrier_version_texte($in) { $eol = PHP_EOL; // Nettoyage des liens des notes de bas de page $out = preg_replace("@<a href=\"#n(b|h)[0-9]+-[0-9]+\" name=\"n(b|h)[0-9]+-[0-9]+\" class=\"spip_note\">([0-9]+)</a>@" , "\\3", $in); // Supprimer tous les liens internes $patterns = array("/\<a href=['\"]#(.*?)['\"][^>]*>(.*?)<\/a>/ims"); $replacements = array("\\2"); $out = preg_replace($patterns,$replacements, $out); // Supprime feuille style $out = preg_replace("/<style[^>]*>[^<]*<\/style>/", '', $out); // les puces // @see http://www.spip.net/fr_article1825.html if (isset($GLOBALS['puce'])) { $out = str_replace($GLOBALS['puce'], $eol.'-', $out); } // Remplace tous les liens $patterns = array("/\<a href=['\"](.*?)['\"][^>]*>(.*?)<\/a>/ims"); $replacements = array("\\2 (\\1)"); $out = preg_replace($patterns,$replacements, $out); $_traits = str_repeat('-', 40); $_points = str_repeat('.', 20); $out = preg_replace('/<h1[^>]*>/', '_SAUT__SAUT_'.$_traits.'_SAUT_', $out); $out = str_replace('</h1>', '_SAUT__SAUT_'.$_traits.'_SAUT__SAUT_', $out); $out = preg_replace('/<h2[^>]*>/', '_SAUT__SAUT_'.$_points.' ', $out); $out = str_replace('</h2>', ' '.$_points.'_SAUT__SAUT_', $out); $out = preg_replace('/<h3[^>]*>/', '_SAUT__SAUT_*', $out); $out = str_replace('</h3>', '*_SAUT__SAUT_', $out); // Les notes de bas de page $out = str_replace('<p class="spip_note">', $eol, $out); $out = preg_replace('/<sup>([0-9]+)<\/sup>/', '[\\1]', $out); // etrange parfum de regex dans un str_replace ? // @todo: a verifier //$out = str_replace('<p[^>]*>', $eol.$eol, $out); //$out = str_replace('<br /><img class=\'spip_puce\' src=\'puce.gif\' alt=\'-\' border=\'0\'>', "\n".'-', $out); $out = preg_replace('/<li[^>]>/', $eol.'-', $out); //$out = str_replace('<li>', "\n".'-', $out); // accentuation du gras - // <b>texte</b> -> *texte* $out = preg_replace('/<b[^>|r]*>/','*' ,$out); $out = str_replace ('</b>','*' ,$out); // accentuation du gras - // <strong>texte</strong> -> *texte* $out = preg_replace('/<strong[^>]*>/','*' ,$out); $out = str_replace ('</strong>','*' ,$out); // accentuation de l'italique // <i>texte</i> -> *texte* $out = preg_replace('/<i[^>|mg]*>/','*' ,$out); $out = str_replace ('</i>', '*', $out); $out = str_replace('œ', 'oe', $out); $out = str_replace(' ', ' ', $out); $out = filtrer_entites($out); //attention, trop brutal pour les logs irc <@RealET> $out = supprimer_tags($out); $out = str_replace('\x0B', '', $out); $out = str_replace("\t", '', $out) ; $out = preg_replace('/[ ]{3,}/', '', $out); // espace en debut de ligne $out = preg_replace("/(\r\n|\n|\r)[ ]+/m", $eol, $out); // Bring down number of empty lines to 2 max // sauts de ligne >= 3 reduits a 2 $out = preg_replace("/(\r\n|\n|\r){3,}/m", $eol.$eol, $out); //retablir les saut de ligne //Réduire les > 3 à 3 $out = preg_replace('/(_SAUT_){4,}/m', '_SAUT__SAUT__SAUT_', $out); $out = str_replace('_SAUT_', $eol, $out); //saut de lignes en debut et fin de texte $out = $eol.$eol.trim($out).$eol.$eol; // Faire des lignes de 75 caracteres maximum $out = wordwrap($out); return $out; } // end spiplistes_courrier_version_texte()
function article_select_trad($lier_trad, $id_rubrique=0) { // Recuperer les donnees de l'article original $row = sql_fetsel("*", "spip_articles", "id_article=$lier_trad"); if ($row) { $row['titre'] = filtrer_entites(_T('info_nouvelle_traduction')).' '.$row["titre"]; } else $row = array(); if ($id_rubrique) { $row['id_rubrique'] = $id_rubrique; return $row; } $id_rubrique = $row['id_rubrique']; // Regler la langue, si possible, sur celle du redacteur // Cela implique souvent de choisir une rubrique ou un secteur if (in_array($GLOBALS['spip_lang'], explode(',', $GLOBALS['meta']['langues_multilingue']))) { // Si le menu de langues est autorise sur les articles, // on peut changer la langue quelle que soit la rubrique // donc on reste dans la meme rubrique if ($GLOBALS['meta']['multi_articles'] == 'oui') { $row['id_rubrique'] = $row['id_rubrique']; # explicite :-) } else if ($GLOBALS['meta']['multi_rubriques'] == 'oui') { // Sinon, chercher la rubrique la plus adaptee pour // accueillir l'article dans la langue du traducteur if ($GLOBALS['meta']['multi_secteurs'] == 'oui') { $id_parent = 0; } else { // on cherche une rubrique soeur dans la bonne langue $row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_rubrique"); $id_parent = $row_rub['id_parent']; } $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "lang='".$GLOBALS['spip_lang']."' AND id_parent=$id_parent"); if ($row_rub) $row['id_rubrique'] = $row_rub['id_rubrique']; } } return $row; }
function exec_rubriques_edit_args($id_rubrique, $id_parent, $new, $lier_trad) { global $connect_toutes_rubriques, $connect_statut, $spip_lang_right; $titre = false; if ($new == "oui") { $id_rubrique = 0; $titre = filtrer_entites(_T('titre_nouvelle_rubrique')); if (!autoriser('creerrubriquedans','rubrique',$id_parent)) { $id_parent = intval(reset($GLOBALS['connect_id_rubrique'])); } } else { $row = sql_fetsel("*", "spip_rubriques", "id_rubrique=$id_rubrique"); if ($row) { $id_parent = $row['id_parent']; $titre = $row['titre']; $id_secteur = $row['id_secteur']; } } $commencer_page = charger_fonction('commencer_page', 'inc'); if ($titre === false OR ($new=='oui' AND !autoriser('creerrubriquedans','rubrique',$id_parent)) OR ($new!='oui' AND !autoriser('modifier','rubrique',$id_rubrique))) { include_spip('inc/minipres'); echo minipres(); } else { pipeline('exec_init',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>'')); echo $commencer_page(_T('info_modifier_titre', array('titre' => $titre)), "naviguer", "rubriques", $id_rubrique); if ($id_parent == 0) $ze_logo = "secteur-24.gif"; else $ze_logo = "rubrique-24.gif"; echo debut_grand_cadre(true); echo afficher_hierarchie($id_parent,'',$id_rubrique,'rubrique'); echo fin_grand_cadre(true); echo debut_gauche('', true); // Pave "documents associes a la rubrique" if (!$new){ # affichage sur le cote des pieces jointes, en reperant les inserees # note : traiter_modeles($texte, true) repere les doublons # aussi efficacement que propre(), mais beaucoup plus rapidement traiter_modeles(join('',$row), true); echo afficher_documents_colonne($id_rubrique, 'rubrique'); } echo pipeline('affiche_gauche',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>'')); echo creer_colonne_droite('', true); echo pipeline('affiche_droite',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>'')); echo debut_droite('', true); $contexte = array( 'icone_retour'=>icone_inline(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_rubrique"), $ze_logo, "rien.gif",$GLOBALS['spip_lang_left']), 'redirect'=>generer_url_ecrire("naviguer"), 'titre'=>$titre, 'new'=>$new == "oui"?$new:$id_rubrique, 'id_rubrique'=>$id_parent, // pour permettre la specialisation par la rubrique appelante 'config_fonc'=>'rubriques_edit_config', 'lier_trad'=>$lier_trad ); echo recuperer_fond("prive/editer/rubrique", $contexte); echo pipeline('affiche_milieu',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>'')); echo fin_gauche(), fin_page(); } }
function get_id_doc($fichier) { if (trim($fichier)=="") return false; spip_log("get_id_doc cherche : ".$fichier,"snippets"); $sql = "SELECT id_document FROM spip_documents WHERE fichier='".addslashes(filtrer_entites($fichier))."'"; $result = spip_query($sql); while ($row = spip_fetch_array($result)) { spip_log("get_id_doc trouve : ".$row['id_document'],"snippets"); return $row['id_document']; } // inconnu ... spip_log("get_id_doc trouve pas :( ","snippets"); return false ; }
/** * Analyser une URL de site distant, qui peut être une syndication. * * @param string $url * URL du site à analyser * @return array|bool * - array : informations du site * - false : site impossible à récupérer **/ function analyser_site($url) { include_spip('inc/filtres'); include_spip('inc/distant'); // Accepter les URLs au format feed:// ou qui ont oublie le http:// $url = preg_replace(',^feed://,i', 'http://', $url); if (!preg_match(',^[a-z]+://,i', $url)) { $url = 'http://' . $url; } $texte = recuperer_page($url, true); if (!$texte) { return false; } include_spip('inc/syndic'); cdata_echappe($texte, $echappe_cdata); if (preg_match(',<(channel|feed)([\\:[:space:]][^>]*)?' . '>(.*)</\\1>,ims', $texte, $regs)) { $result['syndication'] = 'oui'; $result['url_syndic'] = $url; $channel = $regs[3]; // Pour recuperer l'entete, on supprime tous les items $b = array_merge(extraire_balises($channel, 'item'), extraire_balises($channel, 'entry')); $header = str_replace($b, array(), $channel); if ($t = extraire_balise($header, 'title')) { cdata_echappe_retour($t, $echappe_cdata); $result['nom_site'] = filtrer_entites(supprimer_tags($t)); } if ($t = extraire_balises($header, 'link')) { cdata_echappe_retour($t, $echappe_cdata); foreach ($t as $link) { $u = supprimer_tags(filtrer_entites($link)); if (!strlen($u)) { $u = extraire_attribut($link, 'href'); } if (strlen($u)) { // on installe l'url comme url du site // si c'est non vide, en donnant la priorite a rel=alternate if (preg_match(',\\balternate\\b,', extraire_attribut($link, 'rel')) or !isset($result['url_site'])) { $result['url_site'] = filtrer_entites($u); } } } } $result['url_site'] = url_absolue($result['url_site'], $url); if ($a = extraire_balise($header, 'description') or $a = extraire_balise($header, 'tagline')) { cdata_echappe_retour($a, $echappe_cdata); $result['descriptif'] = filtrer_entites(supprimer_tags($a)); } if (preg_match(',<image.*<url.*>(.*)</url>.*</image>,Uims', $header, $r) and preg_match(',(https?://.*/.*(gif|png|jpg)),ims', $r[1], $r) and $image = recuperer_infos_distantes($r[1])) { if (in_array($image['extension'], array('gif', 'jpg', 'png'))) { $result['format_logo'] = $image['extension']; $result['logo'] = $r[1]; } else { if ($image['fichier']) { spip_unlink($image['fichier']); } } } } else { $result['syndication'] = 'non'; $result['url_site'] = $url; if (preg_match(',<head>(.*(description|title).*)</head>,Uims', $texte, $regs)) { $head = filtrer_entites($regs[1]); } else { $head = $texte; } if (preg_match(',<title[^>]*>(.*),ims', $head, $regs)) { $titre = trim($regs[1]); if (!strlen($titre)) { $titre = substr($head, strpos($head, $regs[0])); } $result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*$,ims', '', $titre))); } if ($a = array_merge(extraire_balises($head, 'meta'), extraire_balises($head, 'http-equiv'))) { foreach ($a as $meta) { if (extraire_attribut($meta, 'name') == 'description') { $desc = trim(extraire_attribut($meta, 'content')); if (!strlen($desc)) { $desc = trim(extraire_attribut($meta, 'value')); } $result['descriptif'] = $desc; } } } // Cherchons quand meme un backend include_spip('inc/distant'); include_spip('inc/feedfinder'); $feeds = get_feed_from_url($url, $texte); // si on a a trouve un (ou plusieurs) on le note avec select: // ce qui constitue un signal pour exec=sites qui proposera de choisir // si on syndique, et quelle url. if (count($feeds) >= 1) { spip_log("feedfinder.php :\n" . join("\n", $feeds)); $result['url_syndic'] = "select: " . join(' ', $feeds); } } cdata_echappe_retour($result, $echappe_cdata); return $result; }
/** * Envoie le courrier pret au depart * * Prend dans le panier des courriers a envoyer (spip_courriers) les encours * - formate le titre, texte pour l'envoi * * * les etiquettes sont dans la queue d'envois (spip_auteurs_courriers) * - id_auteur (pour reprendre l'adresse mail de id_auteur) * - id_courrier (le courrier a dupliquer/envoyer) * * la queue (spip_auteurs_courriers) a ete remplie par cron_spiplistes_cron() * se sert de la queue pour ventiler les envois par lots * le courrier (spip_courriers) doit avoir date <= time() et statut 'encour' * si email_test, la meleuse envoie le courrier a email_test, * supprime email_test du courrier * et repositionne le statut du courrier en 'redac' * si pas email_test mais id_liste, * regarde la queue d'envois (spip_auteurs_courriers) * et passe le statut du courrier (spip_courriers) a : * 'publie' si type == 'nl' (newsletter) * 'auto' si type == 'auto' (liste programmee) * et envoie les courriers precises aux abonnes de cette liste * et supprime l'identifiant du courrier dans la queue d'envois (spip_auteurs_courriers) * renvoie: * - nul, si la tache n'a pas a etre effectuee * - positif, si la tache a ete effectuee * - negatif, si la tache doit etre poursuivie ou recommencee * * @package spiplistes * @param int $last_time * @return int */ function spiplistes_meleuse ($last_time) { //spiplistes_debug_log('spiplistes_meleuse()'); include_spip('inc/meta'); include_spip('inc/texte'); include_spip('inc/filtres'); include_spip('inc/acces'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_courrier'); include_once(_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_mail.inc.php'); // initialise les options (preferences) foreach(array( 'opt_simuler_envoi' , 'opt_suspendre_meleuse' , 'opt_lien_en_tete_courrier', 'lien_patron' , 'opt_ajout_pied_courrier', 'pied_patron' , 'opt_ajout_tampon_editeur' , 'opt_personnaliser_courrier' , 'opt_log_voir_destinataire' , 'opt_ajout_lien_desabo' ) as $key) { $$key = spiplistes_pref_lire($key); } $sql_vide = sql_quote(''); $nb_etiquettes = spiplistes_courriers_en_queue_compter('etat='.$sql_vide); $prefix_log = _SPIPLISTES_PREFIX_LOG; // si meleuse suspendue, signale en log if($opt_suspendre_meleuse == 'oui') { spiplistes_log($prefix_log.'SUSPEND MODE !!!'); return(0 - $last_time); } if($nb_etiquettes) { $eol = "\n"; $eol2 =$eol.$eol; $body_html_debut = '<html>'.$eol2.'<body style="margin:0;padding:0;">'.$eol2; $body_html_fin = $eol2.'</body></html>'; $charset_spip = $GLOBALS['meta']['charset']; $charset_dest = $GLOBALS['meta']['spiplistes_charset_envoi']; spiplistes_log($prefix_log.$nb_etiquettes.' job(s), distribution...'); $log_voir_destinataire = ($opt_log_voir_destinataire == 'oui'); $simuler_envoi = ($opt_simuler_envoi == 'oui'); // signale en log si mode simulation if($simuler_envoi) { spiplistes_log($prefix_log.'SIMULATION MODE !!!'); } // prepare le tampon editeur if($opt_ajout_tampon_editeur == 'oui') { list($tampon_html, $tampon_texte) = spiplistes_tampon_assembler_patron(); } else { $tampon_html = $tampon_texte = ''; } // prendre la premiere etiquette sur le tas et traiter son courrier $sql_courrier_select = array( 'titre', 'texte', 'message_texte', 'type' , 'id_courrier', 'id_liste', 'email_test', 'total_abonnes', 'date_debut_envoi' ); if($id_courrier = intval(spiplistes_courriers_en_queue_premier('id_courrier', 'etat='.$sql_vide)) ) { $sql_courrier_a_traiter = spiplistes_courriers_casier_premier( $sql_courrier_select , 'id_courrier='.sql_quote($id_courrier) ); spiplistes_debug_log ($prefix_log.'etiquette en cours pour id_courrier #'.$id_courrier); } else { // un vieux bug dans une ancienne version, eradique depuis (j'espere ;-) //spiplistes_log($prefix_log."premiere etiquette en erreur. id_courier = 0. Supprimer cette etiquette manuellement !"); spiplistes_log(_T('spiplistes:erreur_queue_supprimer_courrier' , array('s' => $prefix_log)) ); } // boucle (sur LIMIT 1) pour pouvoir sortir par break si erreur while($row = sql_fetch($sql_courrier_a_traiter)) { foreach($sql_courrier_select as $key) { $$key = $row[$key]; } foreach(array('id_courrier','id_liste','total_abonnes') as $key) { $$key = intval($$key); } // objet (subject) ne peut pas être en html ?! // sauf pour le webmail (et encore) $objet_html = filtrer_entites(typo(spiplistes_calculer_balise_titre(extraire_multi($titre)))); $page_html = stripslashes($texte); $message_texte = stripslashes($message_texte); $nb_emails = array(); // compteur pour la session uniquement // le total de chaque sera ajoute en fin de session $nb_emails_envoyes = $nb_emails_echec = $nb_emails_non_envoyes = $nb_emails['texte'] = $nb_emails['html'] = 0 ; $str_log = 'id_courrier #'.$id_courrier; ////////////////////////// // Determiner email de l emetteur if($is_a_test = email_valide($email_test)) { // courrier a destination adresse email de test $str_log .= ' TO: '.$email_test.' (TEST)'; } else if($id_liste > 0) { // courrier a destination des abonnes d'une liste $total_abonnes = spiplistes_listes_nb_abonnes_compter($id_liste); $str_log .= ' TO id_liste #'.$id_liste.' ('.$total_abonnes.' users)'; $lang = spiplistes_listes_langue($id_liste); if($lang != '') { $GLOBALS['spip_lang'] = $lang; } $contexte = array('lang' => $lang); list($pied_html, $pied_texte) = spiplistes_pied_page_assembler_patron($id_liste, $lang); } else { // erreur dans un script d'appel ? Ou url ? Ou base erreur ? $str_log .= ' [ERROR] MISSING PARAMS (id_liste AND email_test)'; spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_ERREUR); // quitte while() principal break; } ////////////////////////////// // email emetteur $email_envoi = spiplistes_listes_email_emetteur($id_liste); if(!$is_a_test && !($email_envoi)) { $str_log .= ' [ERROR] ID_LISTE #'.$id_liste.' or from email MISSING'; spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_ERREUR); // quitte while() principal break; } $from = $email_envoi; if($from_valide = email_valide($from)) { if(strpos($from, '<') === false) { $fromname = spiplistes_nom_site_texte ($lang); $fromname = extraire_multi($GLOBALS['meta']['nom_site']); if ($charset_dest!=$charset_spip) { include_spip('inc/charsets'); $fromname = unicode2charset(charset2unicode($fromname),$charset_dest); } } } else { spiplistes_log('[ERROR] from address incorrect: '.$from); if($is_a_test) { spiplistes_courriers_statut_redac ($id_courrier); } // break; // garder pour incrementer les erreurs des listes } $email_reply_to = spiplistes_pref_lire_defaut('email_reply_to', $from); $return_path = spiplistes_pref_lire_defaut('email_return_path_defaut', $from); //////////////////////////////////// // Prepare la version texte $objet_texte = $titre; $page_texte = ($message_texte !='') ? $message_texte : spiplistes_courrier_version_texte($page_html) ; //////////////////////////////////// // Ajoute lien tete de courrier if( ($opt_lien_en_tete_courrier == 'oui') && !empty($lien_patron) ) { list($lien_html, $lien_texte) = spiplistes_courriers_assembler_patron ( _SPIPLISTES_PATRONS_TETE_DIR . $lien_patron , array('id_courrier' => $id_courrier , 'lang' => $lang) ); $page_html = $lien_html . $page_html; $page_texte = $lien_texte . $page_texte; } //////////////////////////////////// // La petite ligne du renvoi du cookie pour modifier son abonnement //$pied_rappel_html = _T('spiplistes:modif_abonnement_html'); //$pied_rappel_texte = _T('spiplistes:modif_abonnement_text'); // transcrire le contenu if($charset_dest != $charset_spip){ include_spip('inc/charsets'); foreach(array( 'objet_html', 'objet_texte' , 'page_html', 'page_texte' , 'pied_html', 'pied_texte' //, 'pied_rappel_html', 'pied_rappel_texte' , 'tampon_html', 'tampon_texte') as $key) { if(!empty($$key)) { $$key = spiplistes_translate_2_charset( $$key , $charset_dest , (strpos($key, 'texte') === false) ); } } } // corrige les liens relatifs (celui de texte a deja ete corrige par la trieuse (cron) foreach(array('pied_html', 'pied_texte' //, 'pied_rappel_html', 'pied_rappel_texte' , 'tampon_html', 'tampon_texte') as $key) { if(!empty($$key)) { $$key = spiplistes_liens_absolus ($$key); } } $email_a_envoyer = array(); $email_a_envoyer['texte'] = new phpMail('', $objet_texte, '' , $page_texte, $charset_dest); $email_a_envoyer['texte']->From = $from ; if($fromname) $email_a_envoyer['texte']->FromName = $fromname ; // Errors-To:, Non-standard @see: http://www.ietf.org/rfc/rfc2076.txt //$email_a_envoyer['texte']->AddCustomHeader('Errors-To: '.$return_path); $email_a_envoyer['texte']->AddCustomHeader('Reply-To: '.$email_reply_to); $email_a_envoyer['texte']->AddCustomHeader('Return-Path: '.$return_path); $email_a_envoyer['texte']->SMTPKeepAlive = true; //$email_a_envoyer['html'] = new phpMail('', $objet_html, $page_html, $page_texte, $charset_dest); $email_a_envoyer['html'] = new phpMail('' , $objet_html , $page_html , $page_texte , $charset_dest ); $email_a_envoyer['html']->From = $from ; if($fromname) { $email_a_envoyer['html']->FromName = $fromname ; } //$email_a_envoyer['html']->AddCustomHeader('Errors-To: '.$return_path); $email_a_envoyer['html']->AddCustomHeader('Reply-To: '.$email_reply_to); $email_a_envoyer['html']->AddCustomHeader('Return-Path: '.$return_path); $email_a_envoyer['html']->SMTPKeepAlive = true; $str_log .= ' REPLY-TO: '.$email_reply_to.' RETURN-PATH: '.$return_path; if($total_abonnes) { $limit = intval($GLOBALS['meta']['spiplistes_lots']); // nombre de messages envoyes par boucles. if($is_a_test) { $sql_adresses_dest = sql_select('id_auteur,nom,email', 'spip_auteurs' , 'email='.sql_quote($email_test).' LIMIT 1'); } else { // Pour memo: les etiquettes sont creees par la trieuse // ou directement en backoffice // - pour les envois de test // - pour les envoyer maintenant des courriers // Traitement d'une liasse d'etiquettes // un id pour ce processus (le tampon est unique par liasse) $id_process = intval(substr(creer_uniqid(),0,5)); $prefix_log .= '['.$id_process.'] '; // un coup de tampon sur les etiquettes // des courriers qui vont partir spiplistes_courriers_en_queue_modifier( array( 'etat' => sql_quote($id_process)) , 'etat='.$sql_vide.' AND id_courrier='.sql_quote($id_courrier).' LIMIT '.$limit ); // prendre la liasse des etiquettes tamponnees $sql_adresses_dest = sql_select( array('a.nom', 'a.id_auteur', 'a.email') , array('spip_auteurs AS a', 'spip_auteurs_courriers AS b') , array( 'etat='.sql_quote($id_process) , 'a.id_auteur=b.id_auteur' , 'b.id_courrier='.sql_quote($id_courrier) ) , 'a.email' ); } $nb_destinataires = sql_count($sql_adresses_dest); spiplistes_log($prefix_log.'nb etiquettes a traiter: '.$nb_destinataires); if($nb_destinataires > 0) { spiplistes_debug_log($prefix_log.'total_abos: '.$total_abonnes.', en cours: '.$nb_destinataires.', limit: '.$limit); /* // CP:20100215: inutile de compter AVANT // si process en //, le chiffre est faux // replacer les compteurs if($row = sql_fetch(sql_select( "nb_emails_envoyes,nb_emails_echec,nb_emails_non_envoyes,nb_emails_texte,nb_emails_html" , 'spip_courriers' , 'id_courrier='.sql_quote($id_courrier) , '', '', 1 )) ) { $nb_emails_envoyes = intval($row['nb_emails_envoyes']); $nb_emails_echec = intval($row['nb_emails_echec']); $nb_emails_non_envoyes = intval($row['nb_emails_non_envoyes']); $nb_emails['texte'] = intval($row['nb_emails_texte']); $nb_emails['html'] = intval($row['nb_emails_html']); } */ //envoyer le lot d'emails selectionne' (la liasse) while($adresse = sql_fetch($sql_adresses_dest)) { if($log_voir_destinataire) { $str_temp = ''; } $id_auteur = intval($adresse['id_auteur']); $nom_auteur = $adresse['nom']; $email = $adresse['email']; // Marquer le debut de l'envoi if(!intval($date_debut_envoi)) { spiplistes_courrier_modifier ($id_courrier, array('date_debut_envoi' => 'NOW()'), false); } $format_abo = spiplistes_format_abo_demande($id_auteur); $total++; if($log_voir_destinataire) { $str_temp .= $nom_auteur.'('.$format_abo.') - '.$email; } unset ($cookie); if(($format_abo=='html') || ($format_abo=='texte')) { $cookie = creer_uniqid(); spiplistes_auteurs_cookie_oubli_updateq($cookie, $email); if($from_valide) { //$_url = generer_url_public('abonnement','d='.$cookie); if($opt_personnaliser_courrier == 'oui') { list($ventre_html, $ventre_texte) = spiplistes_personnaliser_courrier( $page_html , $page_texte , $id_auteur , $format_abo ); } else { $ventre_html = $page_html; $ventre_texte = $page_texte; } // le & semble poser probleme sur certains MUA. A suivre... //$_url = preg_replace(',(&),','&', $_url); // Pour le moment (27/03/2011), un seul patron connu $lien_rappel = 'lien_standard'; list($pied_rappel_html, $pied_rappel_texte) = spiplistes_courriers_assembler_patron ( _SPIPLISTES_PATRONS_LIEN_DIR . $lien_rappel , array('id_courrier' => $id_courrier , 'id_liste' => $id_liste , '_url' => generer_url_public() , 'lang' => $lang , 'd' => $cookie , 'lien_desabo' => ($opt_ajout_lien_desabo == 'oui') ) ); $pied_rappel_texte = spiplistes_translate_2_charset ($pied_rappel_texte , $charset_dest , true); switch($format_abo) { case 'html': // Si on ne trouve pas les tags HTML alors on les ajoutes if (FALSE === strpos($ventre_html, '</html>')) { $email_a_envoyer[$format_abo]->Body = $body_html_debut . $eol . $ventre_html . $eol . $pied_html . $eol . $pied_rappel_html . $eol . $tampon_html . $eol . $body_html_fin ; } else { // Si on trouve les tags HTML cela veut dire que l'auteur // veut pouvoir gerer lui meme la partie <head> ainsi que le lien de desabonnement // donc on ne prend en compte que la partie ventre_html. $tags_perso = array('http://%URL_ABONNEMENT%' => generer_url_public('abonnement','d='.$cookie),); $email_a_envoyer[$format_abo]->Body = str_replace(array_keys($tags_perso), array_values($tags_perso), $ventre_html); } // la version alternative texte $email_a_envoyer[$format_abo]->AltBody = $ventre_texte .$eol2 . $pied_texte . $eol2 . $pied_rappel_texte . $eol2 . $tampon_texte ; break; case 'texte': $email_a_envoyer[$format_abo]->Body = $ventre_texte .$eol2 . $pied_texte . $eol2 . $pied_rappel_texte . $eol2 . $tampon_texte ; break; } $email_a_envoyer[$format_abo]->SetAddress($email, $nom_auteur); // envoie le mail if($simuler_envoi || $email_a_envoyer[$format_abo]->send()) { $nb_emails_envoyes++; $nb_emails[$format_abo]++; if($log_voir_destinataire) { $str_temp .= ' [OK]'; } } else { $nb_emails_echec++; if($log_voir_destinataire) { $str_temp .= _T('spiplistes:erreur_mail'); } } } else { $nb_emails_echec++; if($log_voir_destinataire) { $str_temp .= _T('spiplistes:sans_adresse'); } } } // end if(($format_abo=='html') || ($format_abo=='texte')) else { $nb_emails_non_envoyes++; if($log_voir_destinataire) { $str_temp .= ' '._T('spiplistes:msg_abonne_sans_format'); } // prevenir qu'il manque le format spiplistes_log($prefix_log.' destination format MISSING FOR ID_AUTEUR #'.$id_auteur); } /* fin abo*/ if($log_voir_destinataire) { spiplistes_log($prefix_log.$str_temp); } } // fin while // supprime la liasse de la queue d'envois spiplistes_debug_log($prefix_log."envoi OK. Supprimer queue $id_process"); spiplistes_courriers_en_queue_supprimer('etat='.sql_quote($id_process)); // si c'est un test on repasse le courrier en redac if($is_a_test) { spiplistes_courriers_statut_redac ($id_courrier); } $email_a_envoyer['texte']->SmtpClose(); $email_a_envoyer['html']->SmtpClose(); } // end if } else { //aucun destinataire connu pour ce message spiplistes_debug_log($prefix_log._T('spiplistes:erreur_sans_destinataire') . '---' . _T('spiplistes:envoi_annule') ); spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_IGNORE); spiplistes_courrier_supprimer_queue_envois('id_courrier', $id_courrier); $str_log .= ' END #'.$id_courrier; // break; } if(!$is_a_test) { // faire le bilan apres l'envoi d'un lot $sql_set_array = array( 'nb_emails_envoyes' => sql_quote('nb_emails_envoyes').'+'.$nb_emails_envoyes , 'nb_emails_texte' => sql_quote('nb_emails_texte').'+'.$nb_emails['texte'] , 'nb_emails_html' => sql_quote('nb_emails_html').'+'.$nb_emails['html'] ); if($nb_emails_echec) { $sql_set_array['nb_emails_echec'] = sql_quote('nb_emails_echec').'+'.$nb_emails_echec; } if($nb_emails_non_envoyes) { $sql_set_array['nb_emails_non_envoyes'] = sql_quote('nb_emails_non_envoyes').'+'.$nb_emails_non_envoyes; } spiplistes_log($prefix_log.$str_log); $str_log = spiplistes_trace_compteur ($id_courrier , $nb_emails_envoyes , $nb_emails['html'] , $nb_emails['texte'] , $nb_emails_non_envoyes , $nb_emails_echec , 'SESSION'); // si courrier pas termine, redemande la main au CRON, sinon nettoyage. if($t = spiplistes_courriers_en_queue_compter('id_courrier='.sql_quote($id_courrier))) { $str_log .= ' LEFT '.$t.' jobs'; } else { $statut = ($type == _SPIPLISTES_COURRIER_TYPE_NEWSLETTER) ? _SPIPLISTES_COURRIER_STATUT_PUBLIE : _SPIPLISTES_COURRIER_STATUT_AUTO; spiplistes_debug_log($prefix_log."nouveau statut $statut"); $sql_set_array['statut'] = sql_quote($statut); $sql_set_array['date_fin_envoi'] = 'NOW()'; $str_log .= ' END #'.$id_courrier; } spiplistes_courrier_modifier($id_courrier, $sql_set_array, false); // placer en log le suivi des compteurs si mode debug if (spiplistes_debug_log()) { if ($row = sql_fetch(sql_select( 'nb_emails_envoyes,nb_emails_echec,nb_emails_non_envoyes,nb_emails_texte,nb_emails_html' , 'spip_courriers' , 'id_courrier='.sql_quote($id_courrier) , '', '', 1 )) ) { spiplistes_log($prefix_log.$str_log); $str_log = spiplistes_trace_compteur ($id_courrier , $row['nb_emails_envoyes'] , $row['nb_emails_html'] , $row['nb_emails_texte'] , $row['nb_emails_non_envoyes'] , $row['nb_emails_echec'] , 'FROM_DB') . ' END #'.$id_courrier; ; } } } } // end while() } // end if($nb_etiquettes) else { $str_log = 'no job'; } spiplistes_log($prefix_log.$str_log); if(($ii = spiplistes_courriers_total_abonnes()) > 0) { // il en reste apres la meleuse ? Signale au CRON tache non terminee $nb_etiquettes = spiplistes_courriers_en_queue_compter('etat='.$sql_vide); spiplistes_log($prefix_log.'courriers prets au depart ('.$nb_etiquettes.'/'.$ii.')'); $last_time = -$last_time; } return($last_time); } // end spiplistes_meleuse()
function cdata_echappe_retour(&$x, &$echappe_cdata) { if (is_string($x)) { if (strpos($x, '<') !== false) { $x = filtrer_entites($x); } if (strpos($x, '@@@SPIP_CDATA') !== false) { $x = str_replace(array_keys($echappe_cdata), array_values($echappe_cdata), $x); } } else { if (is_array($x)) { foreach ($x as $k => &$v) { cdata_echappe_retour($v, $echappe_cdata); } } } }
function exec_spiplistes_liste_edit(){ include_spip('inc/barre'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_presentation'); include_spip('inc/spiplistes_naviguer_paniers'); global $connect_statut , $connect_toutes_rubriques , $connect_id_auteur , $spip_ecran ; // initialise les variables postees par le formulaire foreach(array( 'new' // nouvelle liste si 'oui' , 'id_liste'// si modif dans l'editeur , 'titre', 'texte' ) as $key) { $$key = _request($key); } foreach(array('id_liste') as $key) { $$key = intval($$key); } $flag_editable = false; $clearonfocus = ''; // MODE LISTE EDIT: modification ou creation if($id_liste > 0) { /////////////////////////////// // Modification de la liste transmise // // les admins toutes rubriques et le moderateur seuls peuvent modifier la liste $flag_editable = autoriser('moderer', 'liste', $id_liste); $sql_select_array = array('titre', 'lang', 'pied_page', 'texte', 'date', 'statut'); if($row = spiplistes_listes_liste_fetsel($id_liste, $sql_select_array)) { foreach($sql_select_array as $key) { $$key = $row[$key]; } // supers-admins et moderateur seuls ont droit de modifier la liste // $ids_mods_array = spiplistes_mod_listes_get_id_auteur($id_liste); // $ids_mods_array = ($ids_mods_array && isset($ids_mods_array[$id_liste]) ? $ids_mods_array[$id_liste] : array(); // $flag_editable = ($connect_toutes_rubriques || in_array($connect_id_auteur, $ids_mods_array)); } else { // liste perdue ? $id_liste = 0; } } if(!$id_liste) { /////////////////////////////// // Creation de la liste // $titre = filtrer_entites(_T('spiplistes:Nouvelle_liste_de_diffusion')); $texte = ""; $clearonfocus = " onfocus=\"if(!antifocus){this.value='';antifocus=true;}\""; // les admins ont droit de creer une liste $flag_editable = ($connect_statut == "0minirezo"); } $gros_bouton_retour = icone( _T('spiplistes:retour_link') , generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=" . ($lier_trad ? $lier_trad : $id_liste) ) , "article-24.gif" , "rien.gif" , "" , false ) ; //////////////////////////////////// // PAGE CONTENU //////////////////////////////////// $titre_page = _T('spiplistes:edition_dune_liste'); // Permet entre autres d'ajouter les classes a la page : <body class='$rubrique $sous_rubrique'> $rubrique = _SPIPLISTES_PREFIX; $sous_rubrique = "liste_edit"; $commencer_page = charger_fonction('commencer_page', 'inc'); echo($commencer_page(_T('spiplistes:spiplistes') . " - " . $titre_page, $rubrique, $sous_rubrique)); // la gestion des listes de courriers est reservee aux admins if(!$flag_editable) { die (spiplistes_terminer_page_non_autorisee() . fin_page()); } $page_result = "" . "<br /><br /><br />\n" . spiplistes_gros_titre($titre_page, '', true) . barre_onglets($rubrique, $sous_rubrique) . debut_gauche($rubrique, true) . spiplistes_boite_info_id(_T('spiplistes:liste_numero'), $id_liste, true) . spiplistes_naviguer_paniers_listes(_T('spiplistes:aller_aux_listes_'), true) . pipeline('affiche_gauche', array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) //. creer_colonne_droite($rubrique, true) // spiplistes_boite_raccourcis() s'en occupe . spiplistes_boite_raccourcis(true) //. spiplistes_boite_autocron() // ne pas gener l'edition . pipeline('affiche_droite', array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) . debut_droite($rubrique, true) ; $titre = entites_html($titre); $texte = entites_html($texte); $formulaire_action = ($id_liste > 0) ? generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER, "id_liste=$id_liste") : generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER) ; $page_result .= "" . debut_cadre_formulaire("", true) . "\n<table cellpadding='0' cellspacing='0' border='0' width='100%'>" . "<tr>" . "<td>" . $gros_bouton_retour . "</td>" . "<td><img src='"._DIR_IMG_PACK."rien.gif' alt='' width='10' /></td>\n" . "<td width='100%'>" . ( (!$id_liste) ? _T('spiplistes:Creer_une_liste_') : _T('spiplistes:modifier_liste') ) . ":" . spiplistes_gros_titre($titre, '', true) . "</td>" . "</tr></table>" . "<hr />" . "<form action='$formulaire_action' method='post' name='formulaire'>\n" . ( ($id_liste) ? "<input type='hidden' name='id_liste' value='$id_liste' />" : "<input type='hidden' name='new' value='oui' />" // une nouvelle liste est toujours privee . "<input type='hidden' name='statut_nouv' value='"._SPIPLISTES_LIST_PRIVATE."' />" ) . ( // ne sert pas pour le moment (CP-20070922) ($lier_trad) ? "<input type='hidden' name='lier_trad' value='$lier_trad' />" : "" ) . _T('texte_titre_obligatoire').":" . "<br />" // champ titre . "<input type='text' name='titre' class='formo' value=\"$titre\" size='40' $clearonfocus />" . "<br />" . "<strong>"._T('spiplistes:texte_dinsctription_')."</strong>" . "<br />"._T('spiplistes:txt_abonnement') // boite edition texte . afficher_barre('document.formulaire.texte') . "<textarea id='text_area' name='texte' ".$GLOBALS['browser_caret'] ." class='formo' rows='".(($spip_ecran == "large") ? 28 : 20)."' cols='40'>\n" . $texte . "</textarea>\n" // pied de page // inutile de l'afficher, on a pas encore le contexte (lang) //. _T('spiplistes:texte_pied') //. _T('spiplistes:texte_contenu_pied') //. "<div style='background-color:#fff'>" //. $pied_page //. "</div>" . "<p align='right' class='verdana2'>" . "<input class='fondo' type='submit' name='btn_liste_edit' value='"._T('bouton_valider')."' />" . "</p>" . "</form>" . fin_cadre_formulaire(true) ; echo($page_result); // MODE LISTE EDIT: FIN -------------------------------------------------------- echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) , spiplistes_html_signature(_SPIPLISTES_PREFIX) , fin_gauche(), fin_page(); }
function cs_urls_propres($type, $id) { global $type_urls; if(!$id) return ''; $res = ""; // SPIP >= 2.0 if(defined('_SPIP19300')) { $url = generer_url_entite_absolue($id, $type, '', '', true); $lien_public = "\n[<span>[". _T('couteau:urls_propres_lien'). "|{$url}->{$url}]</span>]\n\n"; $s = sql_select("url", "spip_urls", "id_objet=$id AND type='$type'", '', 'date DESC'); while ($t = sql_fetch($s)) $res .= ($res?'<br />':'')."• $t[url]\n"; // SPIP < 2.0 } else { // impossible de calculer l'url publique d'ici. $table = $type.($type=='syndic'?'':'s'); $r = spip_query("SELECT url_propre FROM spip_$table WHERE id_$type=$id"); if ($r && $r = spip_fetch_array($r) ) { if(!strlen($r=$r['url_propre'])) $r=_T('couteauprive:variable_vide'); $res .= "• $r\n"; } $lien_public = './?exec=action_rapide&arg=type_urls|URL_objet_191&format=iframe&type_objet='.$type.'&id_objet='.$id.'&script=foo'; $lien_public = '<iframe src="'.$lien_public.'" width="100%" style="border:none; height:4em;"></iframe>'; } $format = in_array($type_urls, array('page', 'standard', 'html')) ?_T('couteau:urls_propres_erreur') :_T('couteau:urls_propres_objet'); $mem = $GLOBALS['class_spip_plus']; $GLOBALS['class_spip_plus']=' class="spip"'; $res = propre( _T('couteau:urls_propres_format', array( 'format'=>$type_urls, 'url'=>generer_url_ecrire('admin_couteau_suisse', 'cmd=descrip&outil=type_urls#cs_infos') )). "\n\n" . $format . "\n\n" . '|{{'. _T('couteau:2pts', array( 'objet'=>strtoupper(filtrer_entites(_T('couteau:objet_'.$type))).' '.$id ))."}}|\n" . "|$res|") // bug SPIP ? . propre($lien_public); $GLOBALS['class_spip_plus'] = $mem; return cs_cadre_depliable(_T('couteau:urls_propres_titre'), 'bp_urls_propres', $res); }
function preparer_texte($texte) { //$texte = "Philippe Lucas et Jean-Claude Vatin, Maspero, Paris, 1975."; << merde car pas d'espace au debut //http://archives.mondediplo.com/?page=noms&id_article=2488 //$texte = "Dans l’article d’Eric Rouleau « Ce pouvoir si pesant des militaires turcs »" ; << ' // M. François d’Orcival http://archives.mondediplo.com/?page=noms&id_article=38507&var_mode=recalcul //$texte = "M. François d'Orcival" ; // $texte = "Fondé en 1954, sur l’initiative de M. François Honti, par M. Beuve-Méry, le Monde diplomatique atteint"; // insecables utf-8 $texte = str_replace(" ", " ", $texte); $texte = str_replace("’", "'", $texte); $texte = str_replace("~", " ", $texte); // Nettoyer les inters et itals spip. $texte = str_replace("}}}", ". ", $texte); // gras spip $texte = str_replace("{{", "", $texte); $texte = str_replace("}}", "", $texte); include_spip("inc/filtres"); $texte = " " . filtrer_entites($texte); // ne pas louper un nom en début de texte. return $texte; }
function filtre_filtrer_entites_dist($t) { include_spip('inc/texte'); return interdire_scripts(filtrer_entites($t)); }
function cs_sauve_configuration() { global $outils, $metas_vars; $metas = $metas_actifs = $variables = $lesoutils = $actifs = array(); foreach($outils as $t) { $lesoutils[] = "\t// ".$t['nom']."\n\t'".$t['id']."' => '".join('|', $t['variables']) . "'"; if($t['actif']) { $actifs[] = $t['id']; $variables = array_merge($variables, $t['variables']); } } foreach($metas_vars as $i => $v) if($i!='_chaines' && $i!='_nombres') { $metas[] = $temp = "\t'$i' => " . cs_php_format($v, in_array($i, $metas_vars['_chaines'])); if(in_array($i, $variables)) $metas_actifs[] = $temp; } $sauve = "// Tous les outils et leurs variables\n\$liste_outils = array(\n" . join(",\n", $lesoutils) . "\n);\n" . "\n// Outils actifs\n\$outils_actifs =\n\t'" . join('|', $actifs) . "';\n" . "\n// Variables actives\n\$variables_actives =\n\t'" . join('|', $variables) . "';\n" . "\n// Valeurs validees en metas\n\$valeurs_validees = array(\n" . join(",\n", $metas) . "\n);\n"; include_spip('inc/charset'); $nom_pack = _T('couteauprive:pack_actuel', array('date'=>cs_date())); $fct_pack = md5($nom_pack.time()); $sauve .= $temp = "\n######## "._T('couteauprive:pack_actuel_titre')." #########\n\n// " . filtrer_entites(_T('couteauprive:pack_actuel_avert')."\n\n" . "\$GLOBALS['cs_installer']['$nom_pack'] =\t'cs_$fct_pack';\nfunction cs_$fct_pack() { return array(\n\t// " . _T('couteauprive:pack_outils_defaut')."\n" . "\t'outils' =>\n\t\t'".join(",\n\t\t", $actifs)."',\n" . "\n\t// "._T('couteauprive:pack_variables_defaut')."\n") . "\t'variables' => array(\n\t" . join(",\n\t", $metas_actifs) . "\n\t)\n);} # $nom_pack #\n"; ecrire_fichier(_DIR_CS_TMP.'config.php', '<'."?php\n// Configuration de controle pour le plugin 'Couteau Suisse'\n\n$sauve?".'>'); if(@$_GET['cmd']=='pack') $GLOBALS['cs_pack_actuel'] = $temp; }
function action_editer_message_post_nouveau($type, $dest='', $rv='') { $id_auteur = $GLOBALS['visiteur_session']['id_auteur']; $mydate = date("YmdHis", time() - 2 * 24 * 3600); sql_delete("spip_messages", "(statut = 'redac') AND (date_heure < $mydate)"); if ($type == 'pb') $statut = 'publie'; else $statut = 'redac'; $titre = filtrer_entites(_T('texte_nouveau_message')); $vals = array('titre' => $titre, 'statut' => $statut, 'type' => $type, 'id_auteur' => $id_auteur); if (!$rv) $vals['date_heure'] = date('Y-m-d H:i:s'); else { $vals['date_heure'] = "$rv 12:00:00"; $vals['date_fin'] = "$rv 13:00:00"; $vals['rv'] = 'oui'; } $id_message = sql_insertq("spip_messages", $vals); if ($type != "affich"){ sql_insertq('spip_auteurs_messages', array('id_auteur' => $id_auteur, 'id_message' => $id_message, 'vu' =>'oui')); if ($dest) { sql_insertq('spip_auteurs_messages', array('id_auteur' => $dest, 'id_message' => $id_message, 'vu' =>'non')); } } redirige_url_ecrire('message_edit', "id_message=$id_message&new=oui&dest=$dest"); }
function cdata_echappe_retour(&$table, &$echappe_cdata) { foreach ($table as $var => $val) { $table[$var] = filtrer_entites($table[$var]); foreach ($echappe_cdata as $n => $e) $table[$var] = str_replace("@@@SPIP_CDATA$n@@@", $e, $table[$var]); } }
function microformat2enclosure($tags) { $enclosures = array(); foreach (extraire_balises($tags, 'a') as $e) { if (extraire_attribut($e, 'rel') == 'enclosure') { $url = filtrer_entites(extraire_attribut($e, 'href')); $type = extraire_attribut($e, 'type'); if (!($length = intval(extraire_attribut($e, 'title')))) { $length = intval(extraire_attribut($e, 'length')); } # vieux data $fichier = basename($url); $enclosures[] = '<enclosure' . ($url ? ' url="' . spip_htmlspecialchars($url) . '"' : '') . ($type ? ' type="' . spip_htmlspecialchars($type) . '"' : '') . ($length ? ' length="' . $length . '"' : '') . ' />'; } } return join("\n", $enclosures); }
function cdata_echappe_retour(&$x, &$echappe_cdata) { if (is_string($x)) { if (strpos($x, '@@@SPIP_CDATA') !== false or strpos($x, '<') !== false) { $x = filtrer_entites($x); foreach ($echappe_cdata as $n => $e) { $x = str_replace("@@@SPIP_CDATA{$n}@@@", $e, $x); } } } else { if (is_array($x)) { foreach ($x as $k => &$v) { cdata_echappe_retour($v, $echappe_cdata); } } } }