示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
文件: autoriser.php 项目: JLuc/SPIP
/**
 * 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;
}
示例#4
0
/**
 * 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;
}
示例#5
0
/**
 * 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']);
    }
}