function profils_creer_auteur($set) { include_spip("action/editer_auteur"); include_spip('inc/acces'); $id_auteur = auteur_inserer(); spip_log($id_auteur, 'profils'); spip_log($set, 'profils'); if ($id_auteur) { $set['pass'] = creer_pass_aleatoire(); $set['statut'] = '6forum'; autoriser_exception('modifier', 'auteur', $id_auteur); autoriser_exception('instituer', 'auteur', $id_auteur); auteur_modifier($id_auteur, $set); autoriser_exception('modifier', 'auteur', $id_auteur, false); autoriser_exception('instituer', 'auteur', $id_auteur, false); // verifier $row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); if (!$row['login'] or !$row['email']) { spip_log("Erreur creation profil {$id_auteur} " . var_export($set, true), "profils" . _LOG_ERREUR); return false; } $row['pass'] = $set['pass']; return $row; } return false; }
function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) { // Qui ? visiteur_session ? // si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge if ($qui === NULL OR $qui==='') $qui = $GLOBALS['visiteur_session'] ? $GLOBALS['visiteur_session'] : array('statut' => '', 'id_auteur' =>0, 'webmestre' => 'non'); elseif (is_numeric($qui)) { $qui = sql_fetsel("*", "spip_auteurs", "id_auteur=".$qui); } // Admins restreints, on construit ici (pas generique mais...) // le tableau de toutes leurs rubriques (y compris les sous-rubriques) if (_ADMINS_RESTREINTS AND is_array($qui)) $qui['restreint'] = liste_rubriques_auteur($qui['id_auteur']); if (_DEBUG_AUTORISER) spip_log("autoriser $faire $type $id ($qui[nom]) ?"); // Aliases pour les types pas generiques (a etendre et ameliorer) if ($type == 'groupes_mot') $type = 'groupemots'; #if ($type == 'syndic_article') $type = 'syndicarticle'; // Si une exception a ete decretee plus haut dans le code, l'appliquer if (isset($GLOBALS['autoriser_exception'][$faire][$type][$id]) AND autoriser_exception($faire,$type,$id,'verifier')) return true; // Chercher une fonction d'autorisation // Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist], // autoriser_faire[_dist], autoriser_defaut[_dist] $fonctions = $type ? array ( 'autoriser_'.$type.'_'.$faire, 'autoriser_'.$type.'_'.$faire.'_dist', 'autoriser_'.$type, 'autoriser_'.$type.'_dist', 'autoriser_'.$faire, 'autoriser_'.$faire.'_dist', 'autoriser_defaut', 'autoriser_defaut_dist' ) : array ( 'autoriser_'.$faire, 'autoriser_'.$faire.'_dist', 'autoriser_defaut', 'autoriser_defaut_dist' ); foreach ($fonctions as $f) { if (function_exists($f)) { $a = $f($faire,$type,$id,$qui,$opt); break; } } if (_DEBUG_AUTORISER) spip_log("$f($faire,$type,$id,$qui[nom]): ".($a?'OK':'niet')); return $a; }
/** * Autoriser une action * * Voir autoriser() pour une description complète * * @see autoriser() * * @param string $faire * une action ('modifier', 'publier'...) * @param string $type * type d'objet ou nom de table ('article') * @param int $id * id de l'objet sur lequel on veut agir * @param null|int|array $qui * si null on prend alors visiteur_session * un id_auteur (on regarde dans la base) * un tableau auteur complet, y compris [restreint] * @param null|array $opt * options sous forme de tableau associatif * @return bool * true si la personne peut effectuer l'action */ function autoriser_dist($faire, $type = '', $id = 0, $qui = NULL, $opt = NULL) { // Qui ? visiteur_session ? // si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge if ($qui === NULL or $qui === '') { $qui = $GLOBALS['visiteur_session'] ? $GLOBALS['visiteur_session'] : array('statut' => '', 'id_auteur' => 0, 'webmestre' => 'non'); } elseif (is_numeric($qui)) { $qui = sql_fetsel("*", "spip_auteurs", "id_auteur=" . $qui); } // Admins restreints, on construit ici (pas generique mais...) // le tableau de toutes leurs rubriques (y compris les sous-rubriques) if (_ADMINS_RESTREINTS and is_array($qui)) { $qui['restreint'] = isset($qui['id_auteur']) ? liste_rubriques_auteur($qui['id_auteur']) : array(); } spip_log("autoriser {$faire} {$type} {$id} (" . (isset($qui['nom']) ? $qui['nom'] : '') . ") ?", "autoriser" . _LOG_DEBUG); // passer par objet_type pour avoir les alias // et supprimer les _ $type = str_replace('_', '', strncmp($type, "_", 1) == 0 ? $type : objet_type($type, false)); // Si une exception a ete decretee plus haut dans le code, l'appliquer if (isset($GLOBALS['autoriser_exception'][$faire][$type][$id]) and autoriser_exception($faire, $type, $id, 'verifier')) { return true; } // Chercher une fonction d'autorisation // Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist], // autoriser_faire[_dist], autoriser_defaut[_dist] $fonctions = $type ? array('autoriser_' . $type . '_' . $faire, 'autoriser_' . $type . '_' . $faire . '_dist', 'autoriser_' . $type, 'autoriser_' . $type . '_dist', 'autoriser_' . $faire, 'autoriser_' . $faire . '_dist', 'autoriser_defaut', 'autoriser_defaut_dist') : array('autoriser_' . $faire, 'autoriser_' . $faire . '_dist', 'autoriser_defaut', 'autoriser_defaut_dist'); foreach ($fonctions as $f) { if (function_exists($f)) { $a = $f($faire, $type, $id, $qui, $opt); break; } } spip_log("{$f}({$faire},{$type},{$id}," . (isset($qui['nom']) ? $qui['nom'] : '') . "): " . ($a ? 'OK' : 'niet'), "autoriser" . _LOG_DEBUG); return $a; }
/** * Un nouvel inscrit prend son statut definitif a la 1ere connexion. * Le statut a ete memorise dans prefs (cf test_inscription_dist). * On le verifie, car la config a peut-etre change depuis, * et pour compatibilite avec les anciennes versions qui n'utilisaient pas "prefs". * * http://doc.spip.org/@acces_statut * * @param array $auteur * @return array */ function confirmer_statut_inscription($auteur) { // securite if ($auteur['statut'] != 'nouveau') { return $auteur; } include_spip('inc/autoriser'); if (!autoriser('inscrireauteur', $auteur['prefs'])) { return $auteur; } $s = $auteur['prefs']; include_spip('inc/autoriser'); // accorder l'autorisation de modif du statut auteur autoriser_exception('modifier', 'auteur', $auteur['id_auteur']); include_spip('action/editer_auteur'); // changer le statut auteur_modifier($auteur['id_auteur'], array('statut' => $s)); unset($_COOKIE['spip_session']); // forcer la maj de la session // lever l'autorisation de modif du statut auteur autoriser_exception('modifier', 'auteur', $auteur['id_auteur'], false); // mettre a jour le statut $auteur['statut'] = $s; return $auteur; }
/** * Optimiser la base de donnee en supprimant les forums orphelins * * @param int $n * @return int */ function forum_optimiser_base_disparus($flux) { $n =& $flux['data']; $mydate = $flux['args']['date']; # les forums lies a une id_objet inexistant $r = sql_select("DISTINCT objet", 'spip_forum'); while ($t = sql_fetch($r)) { if ($type = $t['objet']) { $spip_table_objet = table_objet_sql($type); $id_table_objet = id_table_objet($type); # les forums lies a un objet inexistant $res = sql_select("forum.id_forum AS id", "spip_forum AS forum\n\t\t\t\t\t\t\t\tLEFT JOIN {$spip_table_objet} AS O\n\t\t\t\t\t\t\t\t\tON O.{$id_table_objet}=forum.id_objet", "forum.objet=" . sql_quote($type) . " AND O.{$id_table_objet} IS NULL AND forum.id_objet>0"); $n += optimiser_sansref('spip_forum', 'id_forum', $res); } } // // Forums // sql_delete("spip_forum", "statut='redac' AND maj < {$mydate}"); // nettoyer les documents des forums en spam&poubelle pour eviter de sortir des quota disques // bizarrement on ne nettoie jamais les messages eux meme ? include_spip('action/editer_liens'); if (objet_associable('document')) { $res = sql_select('L.id_document,F.id_forum', "spip_documents_liens AS L JOIN spip_forum AS F ON (F.id_forum=L.id_objet AND L.objet='forum')", "F.statut IN ('off','spam')"); while ($row = sql_fetch($res)) { include_spip('inc/autoriser'); // si un seul lien (ce forum donc), on supprime le document // si un document est attache a plus d'un forum, c'est un cas bizarre ou gere a la main // on ne touche a rien ! if (count(objet_trouver_liens(array('document' => $row['id_document']), '*')) == 1) { autoriser_exception('supprimer', 'document', $row['id_document']); if ($supprimer_document = charger_fonction('supprimer_document', 'action', true)) { $supprimer_document($row['id_document']); } } } } // // CNIL -- Informatique et libertes // // masquer le numero IP des vieux forums // ## date de reference = 4 mois ## definir a 0 pour desactiver if (!defined('_CNIL_PERIODE')) { define('_CNIL_PERIODE', 3600 * 24 * 31 * 4); } if (_CNIL_PERIODE) { $critere_cnil = 'date_heure<"' . date('Y-m-d', time() - _CNIL_PERIODE) . '"' . ' AND statut != "spam"' . ' AND (ip LIKE "%.%" OR ip LIKE "%:%")'; # ipv4 ou ipv6 $c = sql_countsel('spip_forum', $critere_cnil); if ($c > 0) { spip_log("CNIL: masquer IP de {$c} forums anciens"); sql_update('spip_forum', array('ip' => 'MD5(ip)'), $critere_cnil); } } return $flux; }
<?php /** * Plugin Spip-Bonux * Le plugin qui lave plus SPIP que SPIP * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue * Licence GPL * */ // On inclu une bonne fois pour toutes array_column include_spip('lib/array_column/array_column'); if (_request('var_mode') == 'preview' and $cle = _request('var_relecture')) { include_spip("spip_bonux_fonctions"); if (previsu_verifier_cle_temporaire($cle)) { include_spip("inc/autoriser"); autoriser_exception('previsualiser', '', 0); define('_VAR_PREVIEW_EXCEPTION', true); } } function spip_bonux_affichage_final($flux) { if (defined('_VAR_PREVIEW') and _VAR_PREVIEW) { $p = stripos($flux, "</body>"); $url_relecture = parametre_url(self(), 'var_mode', 'preview', '&'); $js = ""; if (!defined('_VAR_PREVIEW_EXCEPTION')) { $url_relecture = parametre_url($url_relecture, 'var_relecture', previsu_cle_temporaire(), '&'); $label = "Relecture temporaire"; } else { $label = _T('previsualisation'); $js = "jQuery('.spip-previsu').html('Relecture temporaire');";
function formulaires_inscription_traiter_dist($mode = '', $id = 0) { include_spip('inc/filtres'); include_spip('inc/autoriser'); if (!autoriser('inscrireauteur', $mode, $id)) { $desc = "rien a faire ici"; } else { if ($id_auteur = _request('_upgrade_auteur')) { include_spip("action/editer_auteur"); autoriser_exception("modifier", "auteur", $id_auteur); autoriser_exception("instituer", "auteur", $id_auteur); auteur_modifier($id_auteur, array('statut' => $mode)); autoriser_exception("modifier", "auteur", $id_auteur, false); autoriser_exception("instituer", "auteur", $id_auteur, false); return array('message_ok' => _T('form_forum_email_deja_enregistre'), 'id_auteur' => $id_auteur); } $nom = _request('nom_inscription'); $mail_complet = _request('mail_inscription'); $inscrire_auteur = charger_fonction('inscrire_auteur', 'action'); $desc = $inscrire_auteur($mode, $mail_complet, $nom, array('id' => $id)); } // erreur ? if (is_string($desc)) { return array('message_erreur' => $desc); } else { return array('message_ok' => _T('form_forum_identifiant_mail'), 'id_auteur' => $desc['id_auteur']); } }