Example #1
0
/**
 * On arrive ici depuis inc/admin
 * - au lancement
 * - puis apres chaque timeout avec dans ce cas $reprise=true
 *
 * import_all_debut() est appele la premiere fois et initialise le dump
 * import_all_milieu() est appele a chaque retour ici
 * quand on en sort,
 *	- soit on relance pour la seconde etape de fusion
 *  - soit on finit
 *
 * @param string $titre
 * @param bool $reprise
 */
function base_import_all_dist($titre='', $reprise=false)
{
	if (!$titre) return; // anti-testeur automatique
	if (!$reprise) import_all_debut();

	$request = unserialize($GLOBALS['meta']['import_all']);

	$archive = $request['dir'] . 
	($request['archive'] ? $request['archive'] : $request['archive_perso']);
	// au rappel, on commence (voire on continue)
	@ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure

	include_spip('inc/import');
	@ignore_user_abort(1);

	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo $commencer_page($titre, "accueil", "accueil");

	echo debut_gauche('', true);

	echo debut_droite('', true);
	
	$res = import_all_milieu($request, $archive);

	// Cas particulier de la fusion/insertion :
	// a la fin de la premiere passe on relance pour l'etape suivante
	if (!$res AND $request['insertion'] == 'on') {
		$request['insertion'] = 'passe2';
		if ($request['url_site']
		AND substr($request['url_site'],-1) != '/')
			$request['url_site'] .= '/';
		ecrire_meta("import_all", serialize($request),'non');
		import_all_debut();
		$res = import_all_milieu($request, $archive);
	}

	echo $res, "</body></html>\n";

	if ($charset = $GLOBALS['meta']['charset_restauration']) {
			ecrire_meta('charset', $charset);
	}

	detruit_restaurateur();
	import_all_fin($request);
	include_spip('inc/rubriques');
	calculer_rubriques();
	if (!$res) ecrire_acces();	// Mise a jour du fichier htpasswd
	affiche_progression_javascript('100 %', 0, '', $request['retour']);
}
Example #2
0
function base_upgrade_dist($titre='', $reprise='')
{
	if (!$titre) return; // anti-testeur automatique
	if ($GLOBALS['spip_version']!=$GLOBALS['meta']['version_installee']) {
		if (!is_numeric(_request('reinstall'))) {
			include_spip('base/create');
			spip_log("recree les tables eventuellement disparues");
			creer_base();
		}
		$meta = _request('meta');
		if (!$meta)
			$res = maj_base();
		// reprise sur demande de mise a jour interrompue pour plugin 
		else $res= maj_while($GLOBALS['meta'][$meta],
				  $GLOBALS[$meta]['cible'],
				  $GLOBALS[$meta]['maj'],
				  $meta,
				  _request('table'));
		if ($res) {
			if (!is_array($res))
				spip_log("Pb d'acces SQL a la mise a jour");
			else {
				include_spip('inc/minipres');
				echo minipres(_T('avis_operation_echec') . ' ' . join(' ', $res));
				exit;
			}
		}
	}
	spip_log("Fin de mise a jour SQL. Debut m-a-j acces et config");
	
	// supprimer quelques fichiers temporaires qui peuvent se retrouver invalides
	spip_unlink(_DIR_TMP.'plugin_xml.cache');
	spip_unlink(_DIR_SESSIONS.'ajax_fonctions.txt');
	spip_unlink(_CACHE_PIPELINES);
	spip_unlink(_CACHE_RUBRIQUES);
	spip_unlink(_CACHE_PLUGINS_OPT);
	spip_unlink(_CACHE_PLUGINS_FCT);
	spip_unlink(_CACHE_PLUGINS_VERIF);

	include_spip('inc/acces');
	ecrire_acces();
	$config = charger_fonction('config', 'inc');
	$config();
}
Example #3
0
function install_etape_fin_dist()
{
	ecrire_acces();

	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP);
	if (file_exists(_FILE_CHMOD_TMP)) {
		if (!@rename(_FILE_CHMOD_TMP, $f)) {
			if (@copy(_FILE_CHMOD_TMP, $f))
				spip_unlink(_FILE_CHMOD_TMP);
		}
	}

	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP);
	if (file_exists(_FILE_CONNECT_TMP)) {
		spip_log("renomme $f");
		if (!@rename(_FILE_CONNECT_TMP, $f)) {
			if (@copy(_FILE_CONNECT_TMP, $f))
				@spip_unlink(_FILE_CONNECT_TMP);
		}
	}

	// creer le repertoire cache, qui sert partout !
	// deja fait en etape 4 en principe, on garde au cas ou
	if(!@file_exists(_DIR_CACHE)) {
		$rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE);
		$rep = sous_repertoire(_DIR_TMP, $rep, true,true);
	}

	// Verifier la securite des htaccess
	// Si elle ne fonctionne pas, prevenir
	$msg = install_verifier_htaccess();
	if ($msg) {
		$cible = _T('public:accueil_site');
		$cible = generer_form_ecrire('accueil', '','', $cible);
		echo minipres('AUTO', $msg . $cible);
	// ok, deboucher dans l'espace prive
	} else redirige_url_ecrire('accueil');
}
Example #4
0
/**
 * Modifier le statut d'un auteur, ou son login/pass
 * 
 * @link http://doc.spip.org/@instituer_auteur
 * @param  $id_auteur
 * @param  $c
 * @param bool $force_webmestre
 * @return bool|string
 */
function auteur_instituer($id_auteur, $c, $force_webmestre = false)
{
    if (!($id_auteur = intval($id_auteur))) {
        return false;
    }
    $erreurs = array();
    // contiendra les differentes erreurs a traduire par _T()
    $champs = array();
    // les memoriser pour les faire passer dans le pipeline pre_edition
    if (isset($c['login']) and strlen($c['login'])) {
        $champs['login'] = $c['login'];
    }
    if (isset($c['pass']) and strlen($c['pass'])) {
        $champs['pass'] = $c['pass'];
    }
    $statut = $statut_ancien = sql_getfetsel('statut', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
    if (isset($c['statut']) and autoriser('modifier', 'auteur', $id_auteur, null, array('statut' => $c['statut']))) {
        $statut = $champs['statut'] = $c['statut'];
    }
    // Restreindre avant de declarer l'auteur
    // (section critique sur les droits)
    if ($c['id_parent']) {
        if (is_array($c['restreintes'])) {
            $c['restreintes'][] = $c['id_parent'];
        } else {
            $c['restreintes'] = array($c['id_parent']);
        }
    }
    if (isset($c['webmestre']) and ($force_webmestre or autoriser('modifier', 'auteur', $id_auteur, null, array('webmestre' => '?')))) {
        $champs['webmestre'] = $c['webmestre'] == 'oui' ? 'oui' : 'non';
    }
    // Envoyer aux plugins
    $champs = pipeline('pre_edition', array('args' => array('table' => 'spip_auteurs', 'id_objet' => $id_auteur, 'action' => 'instituer', 'statut_ancien' => $statut_ancien), 'data' => $champs));
    if (is_array($c['restreintes']) and autoriser('modifier', 'auteur', $id_auteur, NULL, array('restreint' => $c['restreintes']))) {
        $rubriques = array_map('intval', $c['restreintes']);
        $rubriques = array_unique($rubriques);
        $rubriques = array_diff($rubriques, array(0));
        auteur_dissocier($id_auteur, array('rubrique' => '*'));
        auteur_associer($id_auteur, array('rubrique' => $rubriques));
    }
    $flag_ecrire_acces = false;
    // commencer par traiter les cas particuliers des logins et pass
    // avant les autres ecritures en base
    if (isset($champs['login']) or isset($champs['pass'])) {
        $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
        include_spip('inc/auth');
        if (isset($champs['login']) and strlen($champs['login'])) {
            if (!auth_modifier_login($auth_methode, $champs['login'], $id_auteur)) {
                $erreurs[] = 'ecrire:impossible_modifier_login_auteur';
            }
        }
        if (isset($champs['pass']) and strlen($champs['pass'])) {
            $champs['login'] = sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
            if (!auth_modifier_pass($auth_methode, $champs['login'], $champs['pass'], $id_auteur)) {
                $erreurs[] = 'ecrire:impossible_modifier_pass_auteur';
            }
        }
        unset($champs['login']);
        unset($champs['pass']);
        $flag_ecrire_acces = true;
    }
    if (!count($champs)) {
        return implode(' ', array_map('_T', $erreurs));
    }
    sql_updateq('spip_auteurs', $champs, 'id_auteur=' . $id_auteur);
    // .. mettre a jour les fichiers .htpasswd et .htpasswd-admin
    if ($flag_ecrire_acces or isset($champs['statut'])) {
        include_spip('inc/acces');
        ecrire_acces();
    }
    // Invalider les caches
    include_spip('inc/invalideur');
    suivre_invalideur("id='auteur/{$id_auteur}'");
    // Pipeline
    pipeline('post_edition', array('args' => array('table' => 'spip_auteurs', 'id_objet' => $id_auteur, 'action' => 'instituer', 'statut_ancien' => $statut_ancien), 'data' => $champs));
    // Notifications
    if ($notifications = charger_fonction('notifications', 'inc')) {
        $notifications('instituerauteur', $id_auteur, array('statut' => $statut, 'statut_ancien' => $statut_ancien));
    }
    return implode(' ', array_map('_T', $erreurs));
}
Example #5
0
function spiplistes_formulaire_abonnement (
											$type
											, $acces_membres
											, $formulaire
											, $nom_site_spip
											, $inscription_redacteur
											, $inscription_visiteur
											) {
	
	$mail_inscription_ = trim(strtolower(_request('mail_inscription_')));
	$nom_inscription_ = trim(_request('nom_inscription_'));
	$type_abo = _request('suppl_abo') ;
	$listes_demande = _request('list');
	$desabo = ($type_abo == 'non') ? 'oui' : 'non';
	
	$adresse_site = $GLOBALS['meta']['adresse_site'];

	$reponse_formulaire = '';
	$email_a_envoyer = $mode_modifier = $sql_where = false;
	$abonne = array();
	
	// traiter d'abord si retour de mail lien cookie
	$d = _request('d');
	if(!empty($d)) {
		$sql_where = array(
				'cookie_oubli='.sql_quote($d)
				, 'statut<>'.sql_quote('5poubelle')
				, 'pass<>'.sql_quote('')
			);
	}
	// ou si identifie'
	else if($connect_id_auteur = intval($GLOBALS['auteur_session']['id_auteur']))
	{
		$sql_where = array("id_auteur=$connect_id_auteur");
	}
	if($sql_where) {
		// cherche les coordonnees de l'abonne'
		$sql_select = 'id_auteur,statut,nom,email,cookie_oubli';
		$sql_result = sql_select(
			$sql_select
			, 'spip_auteurs'
			, $sql_where
			, '', '', 1
		);
		if($row = sql_fetch($sql_result)) {
			foreach(explode(',', $sql_select) as $key) {
				$abonne[$key] = $row[$key];
			}
		}
		$abonne['format'] = spiplistes_format_abo_demande($abonne['id_auteur']);
		
	}
	
	// si identifie' par cookie ou login... effectuer les modifications demandees
	if(count($abonne)) {
		
		
		// toujours rester en mode modif pour permettre la correction
		$mode_modifier = 'oui';
		
		if($desabo == 'oui')
		{
			spiplistes_format_abo_modifier($abonne['id_auteur']);
			$reponse_formulaire = _T('spiplistes:vous_etes_desabonne');
			$email_a_envoyer = true;
		}
		
		else if($listes_demande)
		{
			//spiplistes_debug_log("demande modification abonnements listes " . implode(",", $listes_demande));
			
			if(is_array($listes_demande) && count($listes_demande))
			{
				$listes_ajoutees = spiplistes_abonnements_ajouter($abonne['id_auteur']
															, array_map('intval', $listes_demande)
															);
				$curr_abos_auteur = spiplistes_abonnements_listes_auteur($abonne['id_auteur']);
				
				foreach($curr_abos_auteur as $id_liste) {
					if(!in_array($id_liste, $listes_demande)) {
						spiplistes_abonnements_auteur_desabonner($abonne['id_auteur']
																 , $id_liste
																 );
					}
				}
			}
			
			// modifier le format de reception ?
			if(spiplistes_format_valide($type_abo) && ($type_abo != $abonne['format']))
			{
				spiplistes_format_abo_modifier($abonne['id_auteur'], $abonne['format'] = $type_abo);
				//$abonne['ids_abos'] = spiplistes_abonnements_listes_auteur($abonne['id_auteur']);
				
			}
			
			$reponse_formulaire = _T('spiplistes:demande_enregistree_retour_mail');
			$email_a_envoyer = true;
		}
		else
		{
			//spiplistes_debug_log('pas de demande, afficher formulaire de modif au complet');
			$reponse_formulaire = ''
				. '<span class="nom">' . $abonne['nom'] . "</span>\n"
				. '<span class="souhait">' . _T('spiplistes:effectuez_modif_validez', array('s'=>$abonne['nom'])). "</span>\n"
				;
		}
		
		$id_abonne = $abonne['id_auteur'];
		$objet_email = _T('spiplistes:votre_abo_listes');
		$contexte = array('titre' => $objet_email);
		
	}
	else // non identifie' ? gestion par cookie_oubli.
	{
		$texte_intro = _T('form_forum_message_auto') . '<br /><br />'._T('spiplistes:bonjour') . "<br />\n";
		
		$abonne = array('email' => email_valide($mail_inscription_));
		
		if($abonne['email'])
		{
			// si l'abonne existe deja mais pas d'action demandee,
			// affiche formulaire complet
			//if($row = sql_fetch(
			if ($row = 
				spiplistes_auteurs_auteur_select ('id_auteur,login,nom,statut,lang', 'email='.sql_quote($abonne['email']))
				
			) {
				
				$abonne['id_auteur'] = intval($row['id_auteur']);
				$abonne['statut'] = $row['statut'];
				$abonne['login'] = $row['login'];
				$abonne['nom'] = $row['nom'];
				$abonne['lang'] = $row['lang'];
				$abonne['format'] =
					($f = spiplistes_format_abo_demande($abonne['id_auteur']))
					? $f
					: 'texte'
					;
	
				if($abonne['statut'] == '5poubelle')
				{
					$reponse_formulaire = _T('form_forum_access_refuse');
				}
				// si encore nouveau, c'est qu'il ne s'est jamais identifie'
				else if($abonne['statut'] == 'nouveau')
				{
					// le supprimer. Il sera re-cree plus loin
					spiplistes_auteurs_auteur_delete('id_auteur='.sql_quote($abonne['id_auteur']));
					$abonne['id_auteur'] = false;
				}
				else {
					// demande de modifier l'abonnement ? envoie le cookie de relance par mail
					spiplistes_auteurs_cookie_oubli_updateq($abonne['cookie_oubli'] = creer_uniqid(), $abonne['email']);
					
					$objet_email = _T('spiplistes:abonnement_titre_mail');
					$texte_email = spiplistes_texte_inventaire_abos($abonne['id_auteur'], $type_abo, $nom_site_spip);
					
					
					$contexte = array('titre' => $objet_email);
					$id_abonne = $abonne['id_auteur'];
				}
				
			}
			// l'adresse mail n'existe pas dans la base.
			else 
			{
				
				$abonne['login'] = spiplistes_login_from_email($abonne['email']);
				$abonne['nom'] =
					(($acces_membres == 'non') || empty($nom_inscription_))
					? ucfirst($abonne['login'])
					: $nom_inscription_
					;
				
				// ajouter l'abonne
				$pass = creer_pass_aleatoire(8, $abonne['email']);
				$abonne['zepass'] = $pass;
				$abonne['mdpass'] = md5($pass);
				$abonne['htpass'] = generer_htpass($pass);
				
				$abonne['cookie_oubli'] = creer_uniqid();
				
				$abonne['statut'] = ($inscription_redacteur == 'oui') ? 'nouveau' : '6forum';
	
				// format d'envoi par defaut pour le premier envoi de confirmation
				$abonne['format'] = 'texte'; 
				
				// creation du compte ...
				if($id_abonne = spiplistes_auteurs_auteur_insertq(
						array(
							'nom' => $abonne['nom']
							, 'email' => $abonne['email']
							, 'login' => $abonne['login']
							, 'pass' => $abonne['mdpass']
							, 'statut' => $abonne['statut']
							, 'htpass' => $abonne['htpass']
							, 'cookie_oubli' => $abonne['cookie_oubli']
							)
					)) {
					// creation .htpasswd & LDAP si besoin systeme
					ecrire_acces();
					
					// premier format de reception par defaut
					spiplistes_format_abo_modifier($id_abonne, $abonne['format']);
				}

				$objet_email = _T('spiplistes:confirmation_inscription');
				
				$contexte = array(
								'titre' => $objet_email
								, 'nouvel_inscription' => 'oui'
								, 'inscription_redacteur' => $inscription_redacteur
								, 'inscription_visiteur' => $inscription_visiteur
							);
			}
			
			$email_a_envoyer = true;
			
		}
		else if(!empty($mail_inscription_)) {
			//Non email o non valida
			return(array(true, _T('spiplistes:erreur_adresse'), $mode_modifier, false));
		}
	}
	if($id_abonne && $email_a_envoyer) {
		
		$abonne['ids_abos'] = spiplistes_abonnements_listes_auteur($abonne['id_auteur']);

		$abonne['format'] = spiplistes_format_valide($abonne['format']);
		
		$email_a_envoyer = spiplistes_preparer_message(
					($objet_email = "[$nom_site_spip] " . $objet_email)
					, spiplistes_patron_message()
					, array_merge($contexte, $abonne)
					);
		if(
			spiplistes_envoyer_mail(
				$abonne['email']
				, $objet_email
				, $email_a_envoyer
				, false
				, ''
				, $abonne['format']
			)
		) {
			$reponse_formulaire =
				($acces_membres == 'oui')
				? _T('form_forum_identifiant_mail')
				: _T('spiplistes:demande_enregistree_retour_mail')
				;
		}
		else {
			$reponse_formulaire = _T('form_forum_probleme_mail');
		}
	} 

	return(array(true, $reponse_formulaire, $mode_modifier, $abonne));
} // end spiplistes_formulaire_abonnement()
Example #6
0
function accesrestreint_htpasswd_config() {
	global $spip_lang_right;

	include_spip('inc/acces');
	ecrire_acces();

	echo debut_cadre_trait_couleur("cadenas-24.gif", true, "",
		_T('info_fichiers_authent'));

	$creer_htpasswd = $GLOBALS['meta']["creer_htpasswd"];

	echo "<div class='verdana2'>", _T('texte_fichier_authent', array('dossier' => '<tt>'.joli_repertoire(_DIR_TMP).'</tt>')), "</div>";

	echo "<div class='verdana2'>";
	echo afficher_choix('creer_htpasswd', $creer_htpasswd,
		array('oui' => _T('item_creer_fichiers_authent'),
			'non' =>  _T('item_non_creer_fichiers_authent')),
		' &nbsp; ');
	echo "</div>";
	echo "<div style='text-align:$spip_lang_right'><input type='submit' value='"._T('bouton_valider')."' class='fondo' /></div>";
	
	echo fin_cadre_trait_couleur(true);
}
Example #7
0
function revision_auteur($id_auteur, $c=false) {

	$r = modifier_contenu('auteur', $id_auteur,
		array(
			'nonvide' => array('nom' => _T('ecrire:item_nouvel_auteur'))
		),
		$c);

	// .. mettre a jour les fichiers .htpasswd et .htpasswd-admin
	if (isset($c['login'])
	OR isset($c['pass'])
	OR isset($c['statut'])
	) {
		include_spip('inc/acces');
		ecrire_acces();
	}

	// .. mettre a jour les sessions de cet auteur
	include_spip('inc/session');
	$c['id_auteur'] = $id_auteur;
	actualiser_sessions($c);
}
Example #8
0
<?php
echo "0.";
define('_DIR_RESTREINT_ABS', 'ecrire/');
include_once _DIR_RESTREINT_ABS.'inc_version.php';
echo "1.";
include_spip('base/create');
spip_connect();
echo "2.";
creer_base();
include_spip('base/upgrade');
maj_base();
echo "3.";
include_spip('inc/acces');
include_spip('inc/config');
ecrire_acces();
?>