Your IP : 216.73.216.59


Current Path : /home/quelfutuu/www/plugins/auto/menus/v3.1.2/formulaires/
Upload File :
Current File : /home/quelfutuu/www/plugins/auto/menus/v3.1.2/formulaires/editer_menus_entree.php

<?php

// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

include_spip('inc/menus');
include_spip('inc/editer');
include_spip('inc/actions');

function formulaires_editer_menus_entree_charger($id_menu, $id_menus_entree = 'new') {
	/**
	 * On vérifie si nous ne sommes pas dans une modification
	 * Sinon c'est une création
	 */
	$id_menus_entree = intval(_request('modifier_entree')) ? _request('modifier_entree') : $id_menus_entree;

	$valeurs = formulaires_editer_objet_charger('menus_entree', $id_menus_entree, 0, 0, '', '', [], '');

	$valeurs['id_menu'] = $id_menu;

	// Les champs pour les entrées

	$valeurs['parametres'] = [];

	// Des champs pour controler le formulaire
	$valeurs['demander_nouvelle_entree'] = '';
	$valeurs['id_menu_nouvelle_entree'] = '';
	$valeurs['enregistrer'] = '';

	// On a en permanence accès aux infos des types
	$valeurs['types_entrees'] = menus_lister_disponibles();

	// On sait toujours si on est sur un menu déjà créé ou pas
	$valeurs['_hidden'] .= '<input type="hidden" name="id_menu" value="' . $id_menu . '" />';

	// les valeurs retournées par _verifier
	$valeurs['entrees'] = '';
	$valeurs['donnees'] = '';
	$valeurs['id_menus_entree'] = '';
	$valeurs['type'] = '';
	$valeurs['type_entree'] = '';
	if ($type_entree = _request('type_entree')) {
		$valeurs['infos_' . $type_entree] = '';
	}

	return $valeurs;
}

function formulaires_editer_menus_entree_verifier($id_menu, $id_menus_entree = 'new') {
	$erreurs = formulaires_editer_objet_verifier('menus_entree', $id_menus_entree, []);

	// Si on demande une nouvelle entree pour un menu --------------------------

	if ($id_menu = intval(_request('demander_nouvelle_entree'))) {
		// S'il n'y a pas encore de type d'entree de choisi
		if (!($type_entree = _request('type_entree'))) {
			include_spip('inc/config');
			set_request('id_menu_nouvelle_entree', $id_menu);
			// On charge les différents types d'entrées disponibles
			$masque = array_flip(lire_config('menus/entrees_masquees', []));
			set_request('entrees', array_diff_key(menus_lister_disponibles(), $masque));
			if (_request('suivant')) {
				$erreur['type'] = _T('menus:erreur_type_menu');
			}
		} else {
			// Si on a choisi un type d'entree
			set_request('id_menu_nouvelle_entree', $id_menu);
			set_request('type_entree', $type_entree);
			// On charge les infos du type choisi
			$entrees = menus_lister_disponibles();
			set_request('infos_' . $type_entree, $entrees[$type_entree]);
		}
	}

	// Si on veut modifier une entrée ------------------------------------------

	if ($id_menus_entree = intval(_request('modifier_entree'))) {
		// On va chercher l'existant de cette entrée
		$entree = sql_fetsel(
			'type_entree, parametres',
			'spip_menus_entrees',
			'id_menus_entree = ' . $id_menus_entree
		);
		$type_entree = $entree['type_entree'];
		$parametres = unserialize($entree['parametres']);

		set_request('donnees', $parametres);
		set_request('id_menus_entree', $id_menus_entree);
		set_request('type_entree', $type_entree);
		// On charge les infos du type choisi
		$entrees = menus_lister_disponibles();
		set_request('infos_' . $type_entree, $entrees[$type_entree]);
	}

	// Si on valide une entree pour un menu ------------------------------------

	if (
		($id_menu = intval(_request('id_menu_nouvelle_entree'))
		or $id_menus_entree = intval(_request('id_menus_entree'))) and _request('enregistrer')
	) {
		$type_entree = _request('type_entree');
		$parametres_envoyes = _request('parametres');
		$entrees = menus_lister_disponibles();
		$infos = $entrees[$type_entree];
		// On teste que chaque paramètre obligatoire est bien renseigné
		foreach ($infos['parametres'] as $nom => $parametre) {
			if ($parametre['obligatoire']) {
				if (!$parametres_envoyes[$nom]) {
					if ($id_menu) {
						set_request('id_menu_nouvelle_entree', $id_menu);
					}
					if ($id_menus_entree) {
						set_request('id_menus_entree', $id_menus_entree);
					}
					set_request('type_entree', $type_entree);
					set_request('infos_' . $type_entree, $infos);
					$erreurs['parametres'][$nom] = _T('info_obligatoire');
				}
			}
		}
	}

	// Vérifier certains types de saisies ------------------------------------

	$parametres_envoyes = _request('parametres');
	if (isset($parametres_envoyes['type_objet'])) {
		$objets_types = array_map('objet_type', array_keys(lister_tables_objets_sql()));
		$objet_envoye = objet_type(strtolower($parametres_envoyes['type_objet']));
		if (!in_array($objet_envoye, $objets_types)) {
			set_request('type_entree', $type_entree);
			set_request('infos_' . $type_entree, $infos);
			$erreurs['parametres']['type_objet'] = _T('menus:erreur_type_objet');
		}
	}
	if (isset($parametres_envoyes['id_objet']) && !intval($parametres_envoyes['id_objet'])) {
		set_request('type_entree', $type_entree);
		set_request('infos_' . $type_entree, $infos);
		$erreurs['parametres']['id_objet'] = _T('menus:erreur_id_objet');
	}

	return $erreurs;
}

function formulaires_editer_menus_entree_traiter($id_menu, $id_menus_entree = 'new') {
	$retours = [];

	// Si on valide une entree pour un menu ------------------------------------

	if (
		($id_menu = intval(_request('id_menu_nouvelle_entree'))
			or $id_menus_entree = intval(_request('id_menus_entree')))
		and _request('enregistrer')
	) {
		$res = formulaires_editer_objet_traiter('menus_entree', $id_menus_entree, 0, 0, '', '', [], '');
		set_request('id_menu_nouvelle_entree', '');
		set_request('id_menus_entree', '');
		if (!$res['id_menus_entree']) {
			$retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
		}
	}

	// Si on demande la supression d'une entrée --------------------------------

	if ($id_menus_entree = intval(_request('supprimer_entree'))) {
		$ok = menus_supprimer_entree($id_menus_entree);
		if (!$ok) {
			$retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
		}
	}

	// Si on demande à déplacer une entrée -------------------------------------

	if ($params = _request('deplacer_entree')) {
		preg_match('/^([\d]+)-(bas|haut)$/', $params, $params);
		array_shift($params);
		list($id_menus_entree, $sens) = $params;
		$id_menus_entree = intval($id_menus_entree);

		// On récupère des infos sur le placement actuel
		$entree = sql_fetsel(
			'id_menu, rang',
			'spip_menus_entrees',
			'id_menus_entree = ' . $id_menus_entree
		);
		$id_menu = intval($entree['id_menu']);
		$rang_actuel = intval($entree['rang']);

		// On teste si ya une entrée suivante
		$dernier_rang = intval(sql_getfetsel(
			'rang',
			'spip_menus_entrees',
			'id_menu = ' . $id_menu,
			'',
			'rang desc',
			'0,1'
		));

		// Tant qu'on ne veut pas faire de tour complet
		if (
			!($sens == 'bas' and $rang_actuel == $dernier_rang)
			and !($sens == 'haut' and $rang_actuel == 1)
		) {
			// Alors on ne fait qu'échanger deux entrées
			$rang_echange = ($sens == 'bas') ? ($rang_actuel + 1) : ($rang_actuel - 1);
			$ok = sql_updateq(
				'spip_menus_entrees',
				[
					'rang' => $rang_actuel
				],
				'id_menu = ' . $id_menu . ' and rang = ' . $rang_echange
			);
			if ($ok) {
				$ok = sql_updateq(
					'spip_menus_entrees',
					[
						'rang' => $rang_echange
					],
					'id_menus_entree = ' . $id_menus_entree
				);
			}
		} else {
			// Sinon on fait un tour complet en déplaçant tout
			if ($sens == 'bas') {
				// Tout le monde descend d'un rang
				$ok = sql_update(
					'spip_menus_entrees',
					[
						'rang' => 'rang + 1'
					],
					'id_menu = ' . $id_menu
				);
				// L'entrée passe tout en haut
				if ($ok) {
					$ok = sql_updateq(
						'spip_menus_entrees',
						[
							'rang' => 1
						],
						'id_menus_entree = ' . $id_menus_entree
					);
				}
			} else {
				// Tout le monde monte d'un rang
				$ok = sql_update(
					'spip_menus_entrees',
					[
						'rang' => 'rang - 1'
					],
					'id_menu = ' . $id_menu
				);
				// L'entrée passe tout en bas
				if ($ok) {
					$ok = sql_updateq(
						'spip_menus_entrees',
						[
							'rang' => $dernier_rang
						],
						'id_menus_entree = ' . $id_menus_entree
					);
				}
			}
		}
		if (!$ok) {
			$retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
		}
	}

	// Si on veut faire un sous-menu -------------------------------------------

	if ($id_menus_entree = intval(_request('demander_sous_menu'))) {
		$id_menu = sql_insertq(
			'spip_menus',
			[
				'id_menus_entree' => $id_menus_entree
			]
		);
		if (!$id_menu) {
			$retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
		}
	}

	// Si on veut supprimer un menu --------------------------------------------

	if ($id_menu = intval(_request('supprimer_menu'))) {
		// Est-ce un menu ou un sous-menu ?
		$sous_menu = intval(sql_getfetsel(
			'id_menus_entree',
			'spip_menus',
			'id_menu = ' . $id_menu
		));
		$ok = menus_supprimer_menu($id_menu);
		if (!$ok) {
			$retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
		}
		if ($ok and !$sous_menu) {
			$retours['redirect'] = generer_url_ecrire('menus');
		}
	}

	// Bouton annuler ---------------------------------------------------------

	if (_request('annuler')) {
		set_request('id_menus_entree', '');
	}

	$retours['editable'] = true;

	return $retours;
}