Example #1
0
/**
 * Plugin SkelEditor
 * Editeur de squelette en ligne
 * (c) 2007-2010 erational
 * Licence GPL-v3
 *
 */

function action_skeleditor_ul_dist(){
	$securiser_action = charger_fonction('securiser_action','inc');
	$file_name = $securiser_action();

	if (autoriser('upload','squelette',$file_name)){
		// FILES request ?
		if (isset($_FILES['upf'])) {    // upload file ?
				$tmp_name = $_FILES['upf']['tmp_name'];
				if (isset($_POST['target'])) {
					 $target = ($_POST['target'])."/".$_FILES['upf']['name'];    // security
					 if (check_file_allowed($target,$files_editable,true)) {     // security
								 $_GET['f'] = $target;
								 $_GET['operation'] = 'preview';
								 if (file_exists($target)) {
										$log = "<span style='color:red'>"._T('skeleditor:erreur_overwrite')."</span>";
								 } else {
										$ok = @copy($tmp_name, $target);
										if (!$ok) $ok = @move_uploaded_file($tmp_name, $target);
										if (!$ok) $log = "<span style='color:red'>"._T('skeleditor:erreur_droits')."</span>";
												 else $log = "<span style='color:green'>"._T('skeleditor:fichier_upload_ok')."</span>";
								 }
					 } else {
								 $log = "<span style='color:red'>"._T('skeleditor:erreur_sansgene')."</span>";
					 }


				}
		}
	}
}
Example #2
0
function action_iextras_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    // droits
    include_spip('inc/autoriser');
    if (!autoriser('configurer', 'iextra')) {
        include_spip('inc/minipres');
        echo minipres();
        exit;
    }
    @(list($arg, $id_extra_ou_table, $champ) = explode('/', $arg));
    // actions possibles
    if (!in_array($arg, array('associer_champ', 'supprimer_champ'))) {
        include_spip('inc/minipres');
        echo minipres(_T('iextras:erreur_action', array("action" => $arg)));
        exit;
    }
    // cas de l'association d'un champ existant
    if ($arg == 'associer_champ' and $table = $id_extra_ou_table and $champ) {
        $extra_id = action_associer_champ_sql_comme_champ_extra($table, $champ);
    }
    // cas de la suppression d'un champ existant
    if ($arg == 'supprimer_champ' and $table = $id_extra_ou_table and $champ) {
        action_supprimer_champ_sql($table, $champ);
    }
}
Example #3
0
function formulaires_importer_sites_charger_dist()
{
    if (!autoriser('importer', '_sites')) {
        return false;
    }
    return array('fichier_import' => 0, 'id_parent' => 0, 'importer_statut_publie' => 0, 'importer_les_tags' => 1);
}
/**
 * Preselectionner la rubrique lors de la creation
 * desactive par defaut suite a remontee utilisateur mais activable par define
 * ou surchargeable
 *
 * @param string $objet
 * @param array $row
 * @return string
 */
function inc_preselectionner_parent_nouvel_objet_dist($objet, $row)
{
    if (!_AUTO_SELECTION_RUBRIQUE) {
        return '';
    }
    if (!isset($row['id_rubrique'])) {
        return '';
    }
    $id_rubrique = '';
    if ($GLOBALS['connect_id_rubrique']) {
        // si admin restreint : sa rubrique
        $id_rubrique = $GLOBALS['connect_id_rubrique'][0];
    } else {
        // sinon la derniere rubrique cree
        $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "", "", "id_rubrique DESC", "0,1");
        $id_rubrique = $row_rub['id_rubrique'];
    }
    // si le choix ne convient pas, on cherche dans un secteur
    if (!autoriser('creer' . $objet . 'dans', 'rubrique', $id_rubrique)) {
        $id_rubrique = '';
        // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
        $res = sql_select("id_rubrique", "spip_rubriques", "id_parent=0");
        while (!$id_rubrique and $row_rub = sql_fetch($res)) {
            if (autoriser('creer' . $objet . 'dans', 'rubrique', $row_rub['id_rubrique'])) {
                $id_rubrique = $row_rub['id_rubrique'];
            }
        }
    }
    return $id_rubrique;
}
Example #5
0
/**
 * Exec de la page de destruction des tables de SPIP
**/
function exec_base_delete_all_dist()
{
    include_spip('inc/autoriser');
    if (!autoriser('detruire')) {
        include_spip('inc/minipres');
        echo minipres();
    } else {
        include_spip('base/dump');
        $res = base_lister_toutes_tables('', array(), array(), true);
        if (!$res) {
            include_spip('inc/minipres');
            spip_log("Erreur base de donnees");
            echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique') . "<p><tt>" . sql_errno() . " " . sql_error() . "</tt></p>");
        } else {
            $res = base_saisie_tables('delete', $res);
            include_spip('inc/headers');
            $res = "\n<ol style='text-align:left'><li>\n" . join("</li>\n<li>", $res) . '</li></ol>';
            $admin = charger_fonction('admin', 'inc');
            $res = $admin('delete_all', _T('titre_page_delete_all'), $res);
            if (!$res) {
                redirige_url_ecrire('install', '');
            } else {
                echo $res;
            }
        }
    }
}
/**
 * Filtrer par autorisation les saisies transmises 
 *
 * Chacune des saisies est parcourue et si le visiteur n'a pas l'autorisation
 * de la voir, elle est enlevée de la liste.
 * La fonction ne retourne donc que la liste des saisies que peut voir
 * la personne.
 * 
 * @param string $faire
 *     Type d'autorisation testée : 'voir', 'modifier'
 * @param string $quoi
 *     Type d'objet tel que 'article'
 * @param array $saisies
 *     Liste des saisies à filtrer
 * @param array $args
 *     Arguments pouvant être utiles à l'autorisation
 * @return array
 *     Liste des saisies filtrées
**/
function champs_extras_autorisation($faire, $quoi='', $saisies=array(), $args=array()) {
	if (!$saisies) return array();
	include_spip('inc/autoriser');

	foreach ($saisies as $cle=>$saisie) {
		$id = isset($args['id']) ? $args['id'] : $args['id_objet'];
		if (!autoriser($faire . 'extra', $quoi, $id, '', array(
			'type' => $quoi,
			'id_objet' => $id,
			'contexte' => isset($args['contexte']) ? $args['contexte'] : array(),
			'table' => table_objet_sql($quoi),
			'saisie' => $saisie,
			'champ' => $saisie['options']['nom'],
		))) {
			// on n'est pas autorise
			unset($saisies[$cle]);
		}
		else
		{
			// on est autorise
			// on teste les sous-elements
			if (isset($saisie['saisies']) and $saisie['saisies']) {
				$saisies['saisies'] = champs_extras_autorisation($faire, $quoi, $saisie['saisies'], $args);
			}
		}
	}
	return $saisies;
}
Example #7
0
function action_spiplistes_journal () {
	
	global $connect_toutes_rubriques, $connect_login, $connect_statut, $spip_lang_rtl;
	
	// spiplistes_log("controle appel action");
	
	if (!$connect_statut) {
		$auth = charger_fonction('auth', 'inc');
		$auth = $auth();
	}

	$securiser_action = charger_fonction('securiser_action', 'inc');
	$args = $securiser_action();

	$autoriser_lire = (autoriser('webmestre','','',$connect_id_auteur));
	
	if($autoriser_lire) {

		$result = spiplistes_journal_lire(_SPIPLISTES_PREFIX);
	
		echo($result);
		
		exit(0);
	}
}
Example #8
0
function exec_import_all_args($archive)
{
	if ($archive) {
		// On arrive ici en debut d'operation
		// Est-ce une fusion ou un ecrasement ?
		$insert = _request('insertion'); 
		if (!$insert AND !autoriser('detruire'))
			export_all_abort();
		$dir = import_queldir();
		$_POST['dir'] = $dir;
		// voir si un message d'avertissement est necessaire
		$commentaire = verifier_sauvegarde($dir . $archive);
	} else {
		// sinon, si on a bien la meta qui donne l'etat d'avancement
		// on est en cours d'operation
		// Tester si l'archive est toujous la:
		// ca sert pour forcer a sortir d'une restauration inachevee

		if (!isset($GLOBALS['meta']['import_all'])
		OR (!$request = @unserialize($GLOBALS['meta']['import_all']))
		OR (!is_readable($request['dir'] . $request['archive']))) {
			// on ne sait pas quoi importer, il faut sortir de la
			export_all_abort();
		}
			$archive = $request['archive'];
			$insert = $request['insertion'];
			$commentaire = '';
	}
	$action = _T($insert
			     ? 'info_restauration_sauvegarde_insert' 
			     : 'info_restauration_sauvegarde',
			     array('archive' => $archive));
	$admin = charger_fonction('admin', 'inc');
	echo $admin('import_all', $action, $commentaire, !$insert);
}
/**
 * Action de mise à jour des descriptions d'un dépot
 *
 * @return array
 *     Liste identifiant du dépot, texte d'erreur éventuel
 **/
function action_editer_depot_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    // Verification des autorisations
    if (!autoriser('webmestre')) {
        include_spip('inc/minipres');
        echo minipres();
        exit;
    }
    // Le depot n'est jamais cree par une edition mais via le formulaire ajouter_depot
    // On est toujours en presence d'une mise a jour pour cette action, l'id_depot
    // doit donc etre renseigne sinon c'est une erreur
    if ($id_depot = intval($arg)) {
        // On teste si l'auteur est connecte. Si non on renvoie sur le formulaire login
        $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
        if (!$id_auteur) {
            include_spip('inc/headers');
            redirige_url_ecrire();
        }
        // On met a jour le depot avec les saisies
        if (sql_updateq('spip_depots', array('titre' => _request('titre'), 'descriptif' => _request('descriptif'), 'type' => _request('type')), 'id_depot=' . sql_quote($id_depot))) {
        }
        // Enregistre l'envoi dans la BD
        // Dans le cas du depot rien n'est fait actuellement, on garde cette fonction
        // par souci de coherence avec les autres editions d'objet et pour usage futur
        $err = depots_set($id_depot);
        if (!$err) {
            spip_log("ACTION MODIFIER DEPOT (manuel) : id_depot = " . $id_depot, 'svp_actions.' . _LOG_INFO);
        }
    }
    return array($id_depot, $err);
}
Example #10
0
/**
 * definir la liste des boutons du haut et de ses sous-menus
 * On defini les boutons a metrtre selon les droits de l'utilisateur
 * puis on balance le tout au pipeline "ajouter_menus" pour que des plugins
 * puissent y mettre leur grain de sel
 *
 * @param array $contexte
 * @param bool $icones // rechercher les icones
 * @param bool $autorise // ne renvoyer que les boutons autorises
 * @return array
 */
function definir_barre_boutons($contexte = array(), $icones = true, $autorise = true)
{
    include_spip('inc/autoriser');
    $boutons_admin = array();
    // les boutons du core, issus de prive/navigation.xml
    $liste_boutons = array();
    // ajouter les boutons issus des plugin via plugin.xml
    if (function_exists('boutons_plugins') and is_array($liste_boutons_plugins = boutons_plugins())) {
        $liste_boutons =& $liste_boutons_plugins;
    }
    foreach ($liste_boutons as $id => $infos) {
        $parent = "";
        // les boutons principaux ne sont pas soumis a autorisation
        if (!isset($infos['parent']) or !($parent = $infos['parent']) or !$autorise or autoriser('menu', "_{$id}", 0, NULL, array('contexte' => $contexte))) {
            if ($parent and $parent = preg_replace(',^bando_,', 'menu_', $parent) and isset($boutons_admin[$parent])) {
                if (!is_array($boutons_admin[$parent]->sousmenu)) {
                    $boutons_admin[$parent]->sousmenu = array();
                }
                $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
                if ($position < 0) {
                    $position = count($boutons_admin[$parent]->sousmenu) + 1 + $position;
                }
                $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position) + array($id => new Bouton(($icones and $infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin[$parent]->sousmenu, $position, 100);
            }
            if (!$parent and !in_array($id, array('forum', 'statistiques_visites'))) {
                $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin);
                $boutons_admin = array_slice($boutons_admin, 0, $position) + array($id => new Bouton(($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin, $position, 100);
            }
        }
    }
    return pipeline('ajouter_menus', $boutons_admin);
}
Example #11
0
function affiche_controleur($class, $c=null) {
	$return = array('$erreur'=>'');

	if (preg_match(_PREG_CRAYON, $class, $regs)) {
		list(,$nomcrayon,$type,$champ,$id) = $regs;
		$regs[] = $class;

		// A-t-on le droit de crayonner ?
		spip_log("autoriser('crayonner', $type, $id, NULL, array('modele'=>$champ)","crayons_distant");
		if (!autoriser('crayonner',$type, $id, NULL, array('modele'=>$champ))) {
			$return['$erreur'] = "$type $id: " . _U('crayons:non_autorise');
		} else {
			$f = charger_fonction($type.'_'.$champ, 'controleurs', true)
			OR $f = charger_fonction($champ, 'controleurs', true)
			OR $f = charger_fonction($type, 'controleurs', true)
			OR $f = 'controleur_dist';
			list($html,$status) = $f($regs, $c);
			if ($status) {
				$return['$erreur'] = $html;
			} else {
				$return['$html'] = $html;
			}
		}
	} else {
		$return['$erreur'] = _U('crayons:donnees_mal_formatees');
	}
	return $return;
}
function action_supprimer_url_dist($arg = null)
{
    if (is_null($arg)) {
        // Rien a faire ici pour le moment
        $securiser_action = charger_fonction('securiser_action', 'inc');
        $arg = $securiser_action();
    }
    if (strncmp($arg, "-1-", 3) == 0) {
        $id_parent = -1;
        $url = substr($arg, 3);
    } else {
        $arg = explode('-', $arg);
        $id_parent = array_shift($arg);
        $url = implode('-', $arg);
    }
    $where = 'id_parent=' . intval($id_parent) . " AND url=" . sql_quote($url);
    if ($row = sql_fetsel('*', 'spip_urls', $where)) {
        if (autoriser('modifierurl', $row['type'], $row['id_objet'])) {
            sql_delete('spip_urls', $where);
        } else {
            spip_log('supprimer sans autorisation l\'URL ' . $id_parent . "://" . $url, "urls." . _LOG_ERREUR);
        }
    } else {
        spip_log('Impossible de supprimer une URL inconnue ' . $id_parent . "://" . $url, "urls." . _LOG_INFO_IMPORTANTE);
    }
}
Example #13
0
/**
 * il faut avoir un id_transaction et un transaction_hash coherents
 * pour se premunir d'une tentative d'appel exterieur
 *
 * 
 * @return array
 */
function presta_cheque_call_response_dist()
{
    // recuperer la reponse en post et la decoder
    $id_transaction = _request('id_transaction');
    $transaction_hash = _request('hash');
    if (!($row = sql_fetsel('*', 'spip_transactions', 'id_transaction=' . intval($id_transaction)))) {
        spip_log("id_transaction {$id_transaction} non trouve", 'gratuit.' . _LOG_ERREUR);
        return array($id_transaction, false);
    }
    if ($transaction_hash != $row['transaction_hash']) {
        spip_log("id_transaction {$id_transaction}, hash {$transaction_hash} non conforme", 'gratuit.' . _LOG_ERREUR);
        return array($id_transaction, false);
    }
    // l'autorisation refere l'id_auteur et le nom de celui qui accepte le cheque
    $autorisation = $GLOBALS['visiteur_session']['id_auteur'] . "/" . $GLOBALS['visiteur_session']['nom'];
    include_spip("inc/autoriser");
    if (!autoriser('encaissercheque', 'transaction', $id_transaction)) {
        spip_log("id_transaction {$id_transaction}, tentative d'encaisser un cheque par auteur #{$autorisation} pas autorise", 'cheque.' . _LOG_CRITIQUE);
        return array($id_transaction, false);
    }
    // OK, on peut accepter le reglement
    sql_update("spip_transactions", array("mode" => sql_quote('cheque'), "autorisation_id" => sql_quote($autorisation), "montant_regle" => 'montant', "date_paiement" => sql_quote(date('Y-m-d H:i:s')), "statut" => sql_quote('ok'), "reglee" => sql_quote('oui')), "id_transaction=" . intval($id_transaction));
    spip_log("cheque_response : id_transaction {$id_transaction}, reglee", 'cheque');
    $regler_transaction = charger_fonction('regler_transaction', 'bank');
    $regler_transaction($id_transaction, "", $row);
    return array($id_transaction, true);
}
Example #14
0
/**
 * Telecharger un dump quand on est webmestre
 * 
 * @param string $arg
 */
function action_telecharger_dump_dist($arg = null)
{
    if (!$arg) {
        $securiser_action = charger_fonction('securiser_action', 'inc');
        $arg = $securiser_action();
    }
    $file = dump_repertoire() . basename($arg, '.sqlite') . '.sqlite';
    if (file_exists($file) and autoriser('webmestre')) {
        $f = basename($file);
        // ce content-type est necessaire pour eviter des corruptions de zip dans ie6
        header('Content-Type: application/octet-stream');
        header("Content-Disposition: attachment; filename=\"{$f}\";");
        header("Content-Transfer-Encoding: binary");
        // fix for IE catching or PHP bug issue
        header("Pragma: public");
        header("Expires: 0");
        // set expiration time
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        if ($cl = filesize($file)) {
            header("Content-Length: " . $cl);
        }
        readfile($file);
    } else {
        http_status(404);
        include_spip('inc/minipres');
        echo minipres(_T('erreur') . ' 404', _T('info_acces_interdit'));
    }
    // et on finit comme ca d'un coup
    exit;
}
Example #15
0
function formulaires_editer_message_charger_dist($id_message = 'new', $type = 'message', $retour = '', $accepter_email = 'oui', $destinataires = '', $titre = '', $texte = '')
{
    include_spip('inc/autoriser');
    if (!intval($id_message) and !autoriser('envoyermessage', $type) or intval($id_message) and !autoriser('modifier', 'message', $id_message)) {
        return false;
    }
    $valeurs = formulaires_editer_objet_charger('message', $id_message, 0, 0, $retour, '');
    // les destinataires sont stockes en chaine separe par une virgule dans la base
    if (strlen($valeurs['destinataires'])) {
        $valeurs['destinataires'] = explode(",", $valeurs['destinataires']);
    }
    if (!intval($id_message)) {
        $valeurs['type'] = $type;
        $valeurs['destinataires'] = $destinataires ? explode(",", $destinataires) : array();
        $valeurs['titre'] = $titre;
        $valeurs['texte'] = $texte;
        $t = time();
        $valeurs["date_heure"] = date('Y-m-d H:i:00', $t);
        $valeurs["date_fin"] = date('Y-m-d H:i:00', $t + 3600);
        $valeurs["rv"] = "";
    }
    // dispatcher date et heure
    list($valeurs["date_debut"], $valeurs["heure_debut"]) = explode(' ', date('d/m/Y H:i', strtotime($valeurs["date_heure"])));
    list($valeurs["date_fin"], $valeurs["heure_fin"]) = explode(' ', date('d/m/Y H:i', strtotime($valeurs["date_fin"])));
    if (in_array($valeurs['type'], array('pb', 'affich'))) {
        $valeurs['_destiner'] = '';
    } else {
        $valeurs['_destiner'] = ' ';
    }
    return $valeurs;
}
Example #16
0
function formulaires_exporter_sites_charger_dist()
{
    if (!autoriser('exporter', '_sites')) {
        return false;
    }
    return array('id_parent' => 0, 'exporter_publie_seulement' => 0, 'exporter_avec_mots_cles' => 1);
}
Example #17
0
/**
 * Generer l'url d'un document dans l'espace public,
 * fonction du statut du document
 *
 * @param int $id
 * @param string $args
 * @param string $ancre
 * @param string $public
 * @param string $connect
 * @return string
 *
 * http://doc.spip.org/@generer_url_ecrire_document
 */
function urls_generer_url_document_dist($id, $args = '', $ancre = '', $public = null, $connect = '')
{
    include_spip('inc/autoriser');
    include_spip('inc/documents');
    if (!autoriser('voir', 'document', $id)) {
        return '';
    }
    $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=" . intval($id));
    if (!$r) {
        return '';
    }
    $f = $r['fichier'];
    if ($r['distant'] == 'oui') {
        return $f;
    }
    // Si droit de voir tous les docs, pas seulement celui-ci
    // il est inutilement couteux de rajouter une protection
    $r = autoriser('voir', 'document');
    if ($r and $r !== 'htaccess') {
        return get_spip_doc($f);
    }
    include_spip('inc/securiser_action');
    // cette url doit etre publique !
    $cle = calculer_cle_action($id . ',' . $f);
    // renvoyer une url plus ou moins jolie
    if ($GLOBALS['meta']['creer_htaccess']) {
        return _DIR_RACINE . "docrestreint.api/{$id}/{$cle}/{$f}";
    } else {
        return get_spip_doc($f) . "?{$id}/{$cle}";
    }
}
Example #18
0
function exec_statistiques_lang_dist()
{
        if (!autoriser('voirstats')) {
          include_spip('inc/minipres');
          echo minipres();
	} else statistiques_lang_ok();
}
Example #19
0
/**
 * Action de mise à jour en base de données de la liste des plugins
 * d'un ou de tous les dépots
 */
function action_actualiser_depot_dist()
{
    // Securisation: aucun argument attendu
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    // Verification des autorisations
    if (!autoriser('webmestre')) {
        include_spip('inc/minipres');
        echo minipres();
        exit;
    }
    // Actualisation des plugins du depot ou de tous les plugins suivant l'argument de l'action
    // Le depot lui-meme n'est mis a jour que partiellement via le fichier XML une fois que
    // la premiere insertion a ete effectuee. En effet, seules les infos non editables dans le prive
    // peuvent etre actualisees lors de cette action
    include_spip('inc/svp_depoter_distant');
    if ($arg === 'tout') {
        if ($ids_depots = sql_allfetsel('id_depot', 'spip_depots')) {
            $ids_depots = array_map('reset', $ids_depots);
            foreach ($ids_depots as $_id_depot) {
                svp_actualiser_depot($_id_depot);
            }
            // On consigne l'action
            spip_log("ACTION ACTUALISER TOUS LES DEPOTS (manuel)", 'svp_actions.' . _LOG_INFO);
        }
    } else {
        if ($id_depot = intval($arg)) {
            svp_actualiser_depot($id_depot);
            // On consigne l'action
            spip_log("ACTION ACTUALISER DEPOT (manuel) : id_depot = " . $id_depot, 'svp_actions.' . _LOG_INFO);
        }
    }
}
Example #20
0
function exec_valider_xml_dist()
{
	if (!autoriser('sauvegarder')) {
		include_spip('inc/minipres');
		echo minipres();
	} else valider_xml_ok(_request('var_url'), _request('ext'), intval(_request('limit')), _request('recur'));
}
/**
 * Dissocier un document
 *
 * @param string $arg
 *     fournit les arguments de la fonction dissocier_document
 *     sous la forme `$id_objet-$objet-$document-suppr-safe`
 *
 *     - 4eme arg : suppr = true, false sinon
 *     - 5eme arg : safe = true, false sinon
 *
 * @return void
 */
function action_dissocier_document_dist($arg = null)
{
    if (is_null($arg)) {
        $securiser_action = charger_fonction('securiser_action', 'inc');
        $arg = $securiser_action();
    }
    // attention au cas ou id_objet est negatif !
    if (strncmp($arg, '-', 1) == 0) {
        $arg = explode('-', substr($arg, 1));
        list($id_objet, $objet, $document) = $arg;
        $id_objet = -$id_objet;
    } else {
        $arg = explode('-', $arg);
        list($id_objet, $objet, $document) = $arg;
    }
    $suppr = $check = false;
    if (count($arg) > 3 and $arg[3] == 'suppr') {
        $suppr = true;
    }
    if (count($arg) > 4 and $arg[4] == 'safe') {
        $check = true;
    }
    if ($id_objet = intval($id_objet) and ($id_objet < 0 and $id_objet == -$GLOBALS['visiteur_session']['id_auteur'] or autoriser('dissocierdocuments', $objet, $id_objet))) {
        dissocier_document($document, $objet, $id_objet, $suppr, $check);
    } else {
        spip_log("Interdit de modifier {$objet} {$id_objet}", "spip");
    }
}
Example #22
0
function exec_config_lang_dist()
{ 

	if (!autoriser('configurer', 'lang')) {
		include_spip('inc/minipres');
		echo minipres();
	} else {

	$config = charger_fonction('config', 'inc');
	$config();

	pipeline('exec_init',array('args'=>array('exec'=>'config_lang'),'data'=>''));
	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo $commencer_page(_T('titre_page_config_contenu'), "configuration", "langues");

	echo debut_gauche('', true);

	echo debut_droite('', true);

	echo "<br /><div style='text-align: center'>", 
	  gros_titre(_T('info_langues'), '', false),
	  '</div><br />',
	  barre_onglets("config_lang", "langues"),
	  '<br />';
 
	$langue = charger_fonction('langue', 'configuration');
	echo $langue();

	$transcodeur = charger_fonction('transcodeur', 'configuration');
	echo $transcodeur();

	echo fin_gauche(), fin_page();
	}
}
Example #23
0
function action_supprimer_adhcoti_dist()
{
    $debug1 = "DEBUG plugin JR : action/supprimer_adhcoti.php - action_supprimer_adhcoti_dist - Pt01 - <br />";
    echo "<br />", $debug1;
    adhclub_log("{$debug1}.", true);
    echo "id_coti= {$id_coti}.<br />";
    adhclub_log("id_coti= {$id_coti}", true);
    echo "FIN ", $debug1;
    adhclub_log("{$debug1} FIN.", true);
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    $debug1 = "DEBUG plugin JR : action/supprimer_adhcoti.php - action_supprimer_adhcoti_dist - Pt12 - <br />";
    echo "<br />", $debug1;
    adhclub_log("{$debug1}.", true);
    echo "id_coti= {$id_coti}.<br />";
    adhclub_log("id_coti= {$id_coti}", true);
    echo "args= {$args}.<br />";
    adhclub_log("args= {$args}", true);
    echo "FIN ", $debug1;
    adhclub_log("{$debug1} FIN.", true);
    if ($id_coti = intval($arg) and autoriser('supprimer', 'adhcoti', $id_coti)) {
        include_spip('action/editer_adhcoti');
        adhclub_supprime_adhcoti($id_coti);
    }
}
Example #24
0
function action_configurer_dist() {
	
	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	# ceinture & bretelles, a priori le test dans exec_configurer
	# suffit a empecher d'obtenir un hash qui passe le test ci-dessus
	if(!autoriser('configurer', _request('configuration'))) {
		include_spip('inc/minipres');
		echo minipres(_T('info_acces_interdit'));
		exit;
	}


	$r = rawurldecode(_request('redirect'));
	$r = parametre_url($r, 'configuration', $arg,"&");
	appliquer_modifs_config();

	// Cette globale est fixee par appliquer_modifs_config();
	// c'est un message a afficher dans l'exec de retour (relayeur si comme ici on est en ajax)
	if ($arg == 'relayeur')
		$r = parametre_url($r, 'retour_proxy', $GLOBALS['retour_proxy'],"&");
	else if ($arg == 'langue') {
	  	include_spip('inc/rubriques');
		calculer_langues_rubriques();
	}
	if (_request('envoi_now')) cron(0, array('mail' => -1));
	redirige_par_entete($r);
}
Example #25
0
function inc_petitionner_dist($id_article, $script, $args, $ajax=false)
{
	global $spip_lang_right;

	$petition = sql_fetsel("*", "spip_petitions", "id_article=$id_article");

	if (!autoriser('modererpetition', 'article', $id_article))
		return petitionner_decompte($id_article, $petition);

	$choix = petitionner_choisir($petition);

	if ($petition) {
			$res = $choix
			. petitionner_decompte($id_article, $petition)
			. petitionner_params($petition)
			. petitionner_message($petition);
			$class = '';
	} else {
			$res = $choix;
			$class = $ajax ? '' : ' visible_au_chargement';
	}

	$atts = " class='$class' style='float: $spip_lang_right;' id='valider_petition'";

	$res = ajax_action_post('petitionner', $id_article, $script, $args, $res,_T('bouton_changer'), $atts);

	return ajax_action_greffe("petitionner", $id_article, $res);
}
Example #26
0
function action_autoriser_dist()
{
    $arg = intval(_request('arg'));
    if (!autoriser('voir', 'document', $arg) or !($row = sql_fetsel("fichier", "spip_documents", "id_document=" . intval($arg))) or !($file = $row['fichier']) or !file_exists($file)) {
        spip_log("Acces refuse (restreint) au document " . $arg . ': ' . $file);
        redirige_par_entete('./?page=404');
    } else {
        if (!function_exists('mime_content_type')) {
            // http://doc.spip.org/@mime_content_type
            function mime_content_type($f)
            {
                preg_match("/\\.(\\w+)/", $f, $r);
                return $r[1];
            }
        }
        $ct = mime_content_type($file);
        $cl = filesize($file);
        $filename = basename($file);
        header("Content-Type: " . $ct);
        header("Content-Disposition: attachment; filename=\"" . $filename . "\";");
        if ($dcc) {
            header("Content-Description: " . $dcc);
        }
        if ($cl) {
            header("Content-Length: " . $cl);
        }
        header("Content-Transfer-Encoding: binary");
        readfile($file);
    }
}
Example #27
0
/**
 * Page d'affichage des résultats de validation XML selon une DTD
 *
 * - l'argument var_url peut indiquer un fichier ou un repertoire
 * - l'argument ext peut valoir "php" ou "html"
 * -- Si "php", le script est execute et la page valide
 * -- Si "html", on suppose que c'est un squelette dont on devine les args
 *    en cherchant les occurrences de Pile[0].
 *
 * @example
 *     ```
 *     ecrire?exec=valider_xml&var_url=exec&ext=php pour tester l'espace prive
 *     ecrire?exec=valider_xml&var_url=../squelettes-dist&ext=html pour le public
 *     ```
 *
 * @uses valider_xml_ok()
 **/
function exec_valider_xml_dist()
{
    if (!autoriser('sauvegarder')) {
        include_spip('inc/minipres');
        echo minipres();
    } else {
        $erreur = "";
        // verifier que les var de l'URL sont conformes avant d'appeler la fonction
        $url = trim(_request('var_url'));
        if (strncmp($url, '/', 1) == 0) {
            $erreur = 'Chemin absolu interdit pour var_url';
        }
        // on a pas le droit de remonter plus de 1 fois dans le path (pas 2 occurences de ../)
        if (($p = strpos($url, '../')) !== false and strpos($url, '../', $p + 3) !== false) {
            $erreur = 'Interdit de remonter en dehors de la racine';
        }
        $ext = trim(_request('ext'));
        $ext = ltrim($ext, '.');
        // precaution
        if (preg_match('/\\W/', $ext)) {
            $erreur = 'Extension invalide';
        }
        if ($erreur) {
            include_spip('inc/minipres');
            echo minipres($erreur);
        } else {
            valider_xml_ok($url, $ext, intval(_request('limit')), _request('recur'));
        }
    }
}
Example #28
0
function vertebres_styliser($flux) {

	// si pas de squelette trouve,
	// on verifie si on demande une vue de table
	if (!$squelette = $flux['data']) {
		
		$ext = $flux['args']['ext'];
		$fond = $flux['args']['fond'];
		$connect = $flux['args']['connect'];
		
		// Si pas de squelette regarder si c'est une table
		// et si l'on a la permission de l'afficher
		$trouver_table = charger_fonction('trouver_table', 'base');
		if (preg_match('/^table:(.*)$/', $fond, $r)
		AND $table = $trouver_table($r[1], $connect)
		AND include_spip('inc/autoriser')
		AND autoriser('webmestre')
		) {
			$fond = $r[1];
			$base = _DIR_TMP . 'table_' . $fond . ".$ext";
			if (!file_exists($base)
			OR  $GLOBALS['var_mode']) {
				$vertebrer = charger_fonction('vertebrer', 'public');
				ecrire_fichier($base, $vertebrer($table));
			}
			
			// sauver les changements
			$flux['data'] = _DIR_TMP . 'table_' . $fond;
		}
	}
	
	return $flux;
}
Example #29
0
function formulaires_editer_zone_traiter_dist($id_zone = 'new', $retour = '', $associer_objet = '', $config_fonc = 'zones_edit_config', $row = array(), $hidden = '')
{
    if (_request('publique') !== 'oui') {
        set_request('publique', 'non');
    }
    if (_request('privee') !== 'oui') {
        set_request('privee', 'non');
    }
    $res = formulaires_editer_objet_traiter('zone', $id_zone, 0, 0, $retour, $config_fonc, $row, $hidden);
    if ($retour and $res['id_zone']) {
        $res['redirect'] = parametre_url($retour, 'id_zone', $res['id_zone']);
    }
    // Un lien auteur a prendre en compte ?
    if ($associer_objet and $id_zone = $res['id_zone']) {
        $objet = '';
        if (preg_match(',^\\w+\\|[0-9]+$,', $associer_objet)) {
            list($objet, $id_objet) = explode('|', $associer_objet);
        }
        if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) {
            zone_lier($id_zone, $objet, $id_objet);
            if (isset($res['redirect'])) {
                $res['redirect'] = parametre_url($res['redirect'], "id_lien_ajoute", $id_zone, '&');
            }
        }
    }
    return $res;
}
Example #30
0
	function info_maj_spip(){
		if (!autoriser('webmestre')) return "";
		// derniere version de SPIP
		$maj = $GLOBALS['meta']['info_maj_spip'];
		if (!$maj) return "";
		$maj = explode('|',$maj);
		// c'est une ancienne notif, on a fait la maj depuis !
		if ($GLOBALS['spip_version_branche']!==array_shift($maj)) {
			// compat_maj_spip(true);
			return "";
		}
		// derniere version de SPIP 2.?.?
		$maj = implode('|',$maj);
		if (strncmp($maj,"<a",2)==0) $maj = extraire_attribut ($maj, 'title');
		$lien = "http://www.spip.net/".$GLOBALS['spip_lang']."_download";
		$maj = _T('couteau:maj_rev_ok',array('revision'=>$maj, 'url'=>$lien, 'zip'=>''));
		// derniere version de SPIP 2.0.?
		include_spip('lib/maj_auto/distant_mise_a_jour');
		if(function_exists('info_maj_cache')) {
			list(,,$rev) = preg_split('/\D+/', $GLOBALS['spip_version_branche']);
			$nom = _DIR_CACHE_XML . _VERSIONS_LISTE;
			$page = info_maj_cache($nom, 'spip', !file_exists($nom) ? '' : file_get_contents($nom));
			preg_match_all(',/SPIP\D+2\D+0(\D+(\d+))?.*?[.]zip",i', $page, $m,  PREG_SET_ORDER);
			$page=0;
			foreach ($m as $v) if ($v[2]>$rev && $v[2]>$page) $page = $v[2];
			if($page) {
				$lien = "http://files.spip.org/spip/archives/SPIP-v2-0-$page.zip"; // 'http://files.spip.org/spip/archives/#SPIP-v2-0-'.$page;
				$maj = _T('couteau:maj_rev_ok',array('revision'=>'2.0.'.$page, 'url'=>$lien, 'zip'=>'')) . '<br/>' . $maj;
			}
		}
		// liens morts
		return preg_replace(',\[([^[]+)->\],', '$1', $maj);
	}