
@ -0,0 +1,105 @@
|
||||
* text=auto !eol |
||||
action/editer_menu.php -text |
||||
action/editer_menus_entree.php -text |
||||
action/exporter_menu.php -text |
||||
action/supprimer_menu.php -text |
||||
balise/menus_afficher_entree.php -text |
||||
base/menus_tables.php -text |
||||
css/menuspip.css -text |
||||
formulaires/editer_menu.html -text |
||||
formulaires/editer_menu.php -text |
||||
formulaires/editer_menus_entree.html -text |
||||
formulaires/editer_menus_entree.php -text |
||||
formulaires/inc-menus_entrees.html -text |
||||
formulaires/inc-menus_entrees_inexistantes.html -text |
||||
formulaires/inc-nouvelle_entree-1.html -text |
||||
formulaires/inc-nouvelle_entree-2.html -text |
||||
images/export.png -text |
||||
images/menus-16.png -text |
||||
images/menus-24.png -text |
||||
images/menus-48.png -text |
||||
images/menus-nouveau-24.png -text |
||||
images/menus-nouveau-48.png -text |
||||
images/menus_accueil.png -text |
||||
images/menus_action_ajouter.png -text |
||||
images/menus_action_bas.png -text |
||||
images/menus_action_haut.png -text |
||||
images/menus_action_modifier.png -text |
||||
images/menus_action_supprimer.png -text |
||||
images/menus_articles_rubrique.png -text |
||||
images/menus_groupes_mots.png -text |
||||
images/menus_lien.png -text |
||||
images/menus_logout.png -text |
||||
images/menus_mapage.png -text |
||||
images/menus_mots.png -text |
||||
images/menus_objet.png -text |
||||
images/menus_page_speciale.png -text |
||||
images/menus_rubriques.png -text |
||||
images/menus_secteurlangue.png -text |
||||
images/menus_texte_libre.png -text |
||||
inc/menus.php -text |
||||
inc/menus_autoriser.php -text |
||||
inclure/barre-nav.html -text |
||||
inclure/menu.html -text |
||||
inclure/nav.html -text |
||||
lang/menus.xml -text |
||||
lang/menus_ca.php -text |
||||
lang/menus_de.php -text |
||||
lang/menus_en.php -text |
||||
lang/menus_es.php -text |
||||
lang/menus_fr.php -text |
||||
lang/menus_it.php -text |
||||
lang/menus_ru.php -text |
||||
lang/menus_sk.php -text |
||||
lang/paquet-menus_de.php -text |
||||
lang/paquet-menus_en.php -text |
||||
lang/paquet-menus_fr.php -text |
||||
lang/paquet-menus_it.php -text |
||||
/menu.html -text |
||||
menus/accueil.html -text |
||||
menus/accueil.xml -text |
||||
menus/articles_rubrique.html -text |
||||
menus/articles_rubrique.xml -text |
||||
menus/deconnecter.html -text |
||||
menus/deconnecter.xml -text |
||||
menus/espace_prive.html -text |
||||
menus/espace_prive.xml -text |
||||
menus/groupe_mots.html -text |
||||
menus/groupe_mots.xml -text |
||||
menus/lien.html -text |
||||
menus/lien.xml -text |
||||
menus/mapage.html -text |
||||
menus/mapage.xml -text |
||||
menus/mots.html -text |
||||
menus/mots.xml -text |
||||
menus/objet.html -text |
||||
menus/objet.xml -text |
||||
menus/page_speciale_zajax.html -text |
||||
menus/page_speciale_zajax.xml -text |
||||
menus/rubriques.html -text |
||||
menus/rubriques.xml -text |
||||
menus/secteurlangue.html -text |
||||
menus/secteurlangue.xml -text |
||||
menus/texte_libre.html -text |
||||
menus/texte_libre.xml -text |
||||
/menus_administrations.php -text |
||||
/menus_fonctions.php -text |
||||
/menus_ieconfig.php -text |
||||
/menus_options.php -text |
||||
/menus_pipelines.php -text |
||||
noisettes/menu.html -text |
||||
noisettes/menu.yaml -text |
||||
/paquet.xml -text |
||||
/plugin.xml -text |
||||
prive/exec/menus_editer.html -text |
||||
prive/exec/menus_tous.html -text |
||||
prive/squelettes/contenu/menus_editer.html -text |
||||
prive/squelettes/contenu/menus_tous.html -text |
||||
prive/squelettes/navigation/menus_editer.html -text |
||||
prive/themes/spip/images/menu-exporter-24.png -text |
||||
prive/themes/spip/images/menus-16.png -text |
||||
prive/themes/spip/images/menus-24.png -text |
||||
saisies-vues/menu.html -text |
||||
saisies-vues/menus_multiple.html -text |
||||
saisies/menu.html -text |
||||
saisies/menus_multiple.html -text |
@ -0,0 +1,144 @@
|
||||
<?php |
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) return; |
||||
|
||||
/** |
||||
* Action de création / Modification d'un menu |
||||
* @param unknown_type $arg |
||||
* @return unknown_type |
||||
*/ |
||||
function action_editer_menu_dist($arg=null) { |
||||
|
||||
if (is_null($arg)){ |
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$arg = $securiser_action(); |
||||
} |
||||
|
||||
// si id_menu n'est pas un nombre, c'est une creation |
||||
if (!$id_menu = intval($arg)) { |
||||
$id_menu = insert_menu(); |
||||
} |
||||
|
||||
// Enregistre l'envoi dans la BD |
||||
if ($id_menu > 0) $err = menu_set($id_menu); |
||||
|
||||
// S'il y a un fichier on tente d'importer son contenu |
||||
if ($_FILES['import']){ |
||||
$fichier = $_FILES['import']['tmp_name']; |
||||
$yaml = ''; |
||||
lire_fichier($fichier, $yaml); |
||||
// Si on a bien recupere une chaine on tente de la decoder |
||||
if ($yaml){ |
||||
include_spip('inc/yaml'); |
||||
$entrees = yaml_decode($yaml); |
||||
// Si le decodage marche on importe alors le contenu |
||||
if (is_array($entrees)){ |
||||
menus_importer($entrees, $id_menu); |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (_request('redirect')) { |
||||
$redirect = parametre_url(urldecode(_request('redirect')), |
||||
'id_menu', $id_menu, '&') . $err; |
||||
|
||||
include_spip('inc/headers'); |
||||
redirige_par_entete($redirect); |
||||
} |
||||
else |
||||
return array($id_menu,$err); |
||||
} |
||||
|
||||
/** |
||||
* Appelle la fonction de modification d'un menu |
||||
* |
||||
* @param int $id_menu |
||||
* @param unknown_type $set |
||||
* @return $err |
||||
*/ |
||||
function menu_set($id_menu, $set=null) { |
||||
$err = ''; |
||||
|
||||
$c = array(); |
||||
foreach (array( |
||||
'titre', |
||||
'identifiant', |
||||
'css' |
||||
) as $champ) |
||||
$c[$champ] = _request($champ,$set); |
||||
|
||||
include_spip('inc/modifier'); |
||||
revision_menu($id_menu, $c); |
||||
|
||||
return $err; |
||||
} |
||||
|
||||
/** |
||||
* Crée un nouveau menu et retourne son ID |
||||
* |
||||
* @return int id_menu |
||||
*/ |
||||
function insert_menu() { |
||||
$champs = array('titre'=>''); // eviter le bug de req/sqlite < 2.1.3 |
||||
// Envoyer aux plugins |
||||
$champs = pipeline('pre_insertion', |
||||
array( |
||||
'args' => array( |
||||
'table' => 'spip_menus', |
||||
), |
||||
'data' => $champs |
||||
) |
||||
); |
||||
$id_menu = sql_insertq("spip_menus"); |
||||
|
||||
return $id_menu; |
||||
} |
||||
|
||||
/** |
||||
* Enregistre une révision de menu |
||||
* |
||||
* @param int $id_menu |
||||
* @param array $c |
||||
* @return |
||||
*/ |
||||
function revision_menu ($id_menu, $c=false) { |
||||
$invalideur = "id='id_menu/$id_menu'"; |
||||
|
||||
modifier_contenu('menu', $id_menu, |
||||
array( |
||||
'nonvide' => array('titre' => _T('info_sans_titre')), |
||||
'invalideur' => $invalideur |
||||
), |
||||
$c); |
||||
|
||||
return ''; // pas d'erreur |
||||
} |
||||
|
||||
function menus_importer($entrees, $id_menu){ |
||||
// On lit chaque entree de premier niveau |
||||
foreach ($entrees as $cle => $entree){ |
||||
// On ajoute cette entree |
||||
$id_menus_entree = sql_insertq( |
||||
'spip_menus_entrees', |
||||
array( |
||||
'id_menu' => $id_menu, |
||||
'rang' => ($cle+1), // les entrees sont dans l'ordre des rangs |
||||
'type_entree' => $entree['type_entree'], |
||||
'parametres' => serialize($entree['parametres']) |
||||
) |
||||
); |
||||
|
||||
// S'il existe un sous-menu pour cette entree on le cree |
||||
if (is_array($entree['sous_menu'])){ |
||||
$id_sous_menu = sql_insertq( |
||||
'spip_menus', |
||||
array( |
||||
'id_menus_entree' => $id_menus_entree |
||||
) |
||||
); |
||||
// Puis dedans on importe les entrees correspondantes |
||||
menus_importer($entree['sous_menu'], $id_sous_menu); |
||||
} |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,110 @@
|
||||
<?php |
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) return; |
||||
|
||||
/** |
||||
* Action de création / Modification d'une entrée de menu |
||||
* @param unknown_type $arg |
||||
* @return unknown_type |
||||
*/ |
||||
function action_editer_menus_entree_dist($arg=null) { |
||||
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$arg = $securiser_action(); |
||||
|
||||
// si id_menus_entree n'est pas un nombre, c'est une creation |
||||
if (!$id_menus_entree = intval($arg)) { |
||||
$id_menu = _request('id_menu_nouvelle_entree') ? _request('id_menu_nouvelle_entree') : _request('id_menu'); |
||||
if(intval($id_menu)){ |
||||
$id_menus_entree = insert_menus_entree($id_menu); |
||||
} |
||||
} |
||||
|
||||
// Enregistre l'envoi dans la BD |
||||
if ($id_menus_entree > 0) |
||||
$err = menus_entree_set($id_menus_entree); |
||||
|
||||
if (_request('redirect')) { |
||||
$redirect = parametre_url(urldecode(_request('redirect')), |
||||
'id_menus_entree', $id_menus_entree, '&') . $err; |
||||
|
||||
include_spip('inc/headers'); |
||||
redirige_par_entete($redirect); |
||||
} |
||||
else |
||||
return array($id_menus_entree,$err); |
||||
} |
||||
|
||||
/** |
||||
* Crée une nouvelle entree de menu et retourne son ID |
||||
* |
||||
* @return int id_menus_entree |
||||
*/ |
||||
function insert_menus_entree($id_menu) { |
||||
// Envoyer aux plugins |
||||
$champs = pipeline('pre_insertion', |
||||
array( |
||||
'args' => array( |
||||
'table' => 'spip_menus_entrees', |
||||
), |
||||
'data' => $champs |
||||
) |
||||
); |
||||
|
||||
$id_menus_entree = sql_insertq("spip_menus_entrees",array('id_menu'=>$id_menu)); |
||||
|
||||
return $id_menus_entree; |
||||
} |
||||
|
||||
/** |
||||
* Appelle la fonction de modification d'une entrée de menu |
||||
* |
||||
* @param int $id_menu_entree |
||||
* @param unknown_type $set |
||||
* @return $err |
||||
*/ |
||||
function menus_entree_set($id_menus_entree, $set=null) { |
||||
$err = ''; |
||||
|
||||
$c = array(); |
||||
$c['id_menu'] = _request('id_menu_nouvelle_entree'); |
||||
|
||||
foreach (array( |
||||
'rang', |
||||
'type_entree', |
||||
'parametres' |
||||
) as $champ) |
||||
$c[$champ] = _request($champ, $set); |
||||
|
||||
$c['parametres'] = is_array($c['parametres']) ? $c['parametres'] : array(); |
||||
$c['parametres'] = serialize($c['parametres']); |
||||
|
||||
include_spip('inc/menus'); |
||||
$entrees = menus_lister_disponibles(); |
||||
$infos = $entrees[$c['type_entree']]; |
||||
|
||||
include_spip('inc/modifier'); |
||||
revision_menus_entree($id_menus_entree, $c); |
||||
|
||||
return $err; |
||||
} |
||||
|
||||
/** |
||||
* Enregistre une révision d'entree de menu |
||||
* |
||||
* @param int $id_menus_entree |
||||
* @param array $c |
||||
* @return |
||||
*/ |
||||
function revision_menus_entree ($id_menus_entree, $c=false) { |
||||
$invalideur = "id='id_menus_entree/$id_menus_entree'"; |
||||
|
||||
modifier_contenu('menus_entree', $id_menus_entree, |
||||
array( |
||||
'invalideur' => $invalideur |
||||
), |
||||
$c); |
||||
|
||||
return ''; // pas d'erreur |
||||
} |
||||
?> |
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
// Sécurité |
||||
if (!defined("_ECRIRE_INC_VERSION")) return; |
||||
|
||||
function action_exporter_menu_dist(){ |
||||
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$arg = $securiser_action(); |
||||
$id_menu = intval($arg); |
||||
$export = ''; |
||||
|
||||
if ($id_menu > 0){ |
||||
include_spip('base/abstract_sql'); |
||||
include_spip('inc/yaml'); |
||||
|
||||
// On récupère l'identifiant du menu pour le nom de fichier |
||||
$identifiant = sql_getfetsel( |
||||
'identifiant', |
||||
'spip_menus', |
||||
'id_menu = '.$id_menu |
||||
); |
||||
|
||||
// On calcule le tableau des entrees |
||||
$entrees = exporter_menu_recursif($id_menu); |
||||
|
||||
// On envode en yaml |
||||
$export = yaml_encode($entrees); |
||||
} |
||||
|
||||
Header("Content-Type: text/x-yaml;"); |
||||
Header("Content-Disposition: attachment; filename=menu-$identifiant.yaml"); |
||||
Header("Content-Length: ".strlen($export)); |
||||
echo $export; |
||||
exit(); |
||||
|
||||
} |
||||
|
||||
function exporter_menu_recursif($id_menu){ |
||||
$entrees = sql_allfetsel( |
||||
'id_menus_entree, type_entree, parametres', |
||||
'spip_menus_entrees', |
||||
'id_menu = '.$id_menu, |
||||
'', |
||||
'rang' |
||||
); |
||||
|
||||
// Pour chaque entree on nettoie et on ajoute le sous-menu eventuel |
||||
foreach ($entrees as $cle => $entree){ |
||||
// On remet au propre les parametres |
||||
$entrees[$cle]['parametres'] = unserialize($entree['parametres']); |
||||
|
||||
// On regarde s'il existe un sous-menu |
||||
$id_sous_menu = intval(sql_getfetsel( |
||||
'id_menu', |
||||
'spip_menus', |
||||
'id_menus_entree = '.$entree['id_menus_entree'] |
||||
)); |
||||
|
||||
// Si le menu existe, il faut l'ajouter au tableau |
||||
if ($id_sous_menu > 0){ |
||||
$entrees[$cle]['sous_menu'] = exporter_menu_recursif($id_sous_menu); |
||||
} |
||||
|
||||
// On enleve id_menus_entree car on en a pas besoin |
||||
unset($entrees[$cle]['id_menus_entree']); |
||||
} |
||||
|
||||
return $entrees; |
||||
} |
||||
|
||||
?> |
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
// Sécurité |
||||
if (!defined("_ECRIRE_INC_VERSION")) return; |
||||
|
||||
function action_supprimer_menu_dist(){ |
||||
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$arg = $securiser_action(); |
||||
$id_menu = intval($arg); |
||||
|
||||
if ($id_menu > 0){ |
||||
include_spip('inc/menus'); |
||||
menus_supprimer_menu($id_menu); |
||||
} |
||||
|
||||
} |
||||
|
||||
?> |
@ -0,0 +1,26 @@
|
||||
<?php |
||||
|
||||
// Sécurité |
||||
if (!defined("_ECRIRE_INC_VERSION")) return; |
||||
|
||||
function balise_MENUS_AFFICHER_ENTREE_dist($p) { |
||||
|
||||
$contexte = interprete_argument_balise(1,$p); |
||||
$id_menus_entree = champ_sql('id_menus_entree', $p); |
||||
$type_entree = champ_sql('type_entree', $p); |
||||
$parametres = champ_sql('parametres', $p); |
||||
|
||||
// Par défaut ça affiche le mode du menu public |
||||
if ($contexte != "'appel_formulaire'") |
||||
$contexte = "'appel_menu'"; |
||||
|
||||
$p->code = "(!$id_menus_entree) ? _T('zbug_champ_hors_motif', array('champ'=>'AFFICHER_ENTREE', 'motif'=>'MENUS_ENTREES')) : recuperer_fond( |
||||
'menus/'.$type_entree, |
||||
array_merge(unserialize($parametres), array($contexte=>true, env=>\$Pile[0])) |
||||
)"; |
||||
|
||||
return $p; |
||||
|
||||
} |
||||
|
||||
?> |
@ -0,0 +1,59 @@
|
||||
<?php |
||||
|
||||
// Sécurité |
||||
if (!defined("_ECRIRE_INC_VERSION")) return; |
||||
|
||||
function menus_declarer_tables_interfaces($interface){ |
||||
// 'spip_' dans l'index de $tables_principales |
||||
$interface['table_des_tables']['menus']='menus'; |
||||
$interface['table_des_tables']['menus_entrees']='menus_entrees'; |
||||
|
||||
// Titres |
||||
$interface['table_titre']['menus'] = 'titre, "" as lang'; |
||||
|
||||
return $interface; |
||||
} |
||||
|
||||
function menus_declarer_tables_principales($tables_principales){ |
||||
//-- Table menus ----------------------------------------------------------- |
||||
$menus = array( |
||||
"id_menu" => "bigint(21) NOT NULL", |
||||
"id_menus_entree" => "bigint(21) DEFAULT '0' NOT NULL", |
||||
"titre" => "text DEFAULT '' NOT NULL", |
||||
"identifiant" => "varchar(255) default '' not null", |
||||
"css" => "tinytext DEFAULT '' NOT NULL" |
||||
); |
||||
|
||||
$menus_cles = array( |
||||
"PRIMARY KEY" => "id_menu", |
||||
"KEY id_menus_entree" => "id_menus_entree" |
||||
); |
||||
|
||||
$tables_principales['spip_menus'] = array( |
||||
'field' => &$menus, |
||||
'key' => &$menus_cles |
||||
); |
||||
|
||||
// Table menus_elements ---------------------------------------------------- |
||||
$menus_entrees = array( |
||||
"id_menus_entree" => "bigint(21) NOT NULL", |
||||
"id_menu" => "bigint(21) DEFAULT '0' NOT NULL", |
||||
"rang" => "smallint DEFAULT '1' NOT NULL", |
||||
"type_entree" => "tinytext DEFAULT '' NOT NULL", |
||||
"parametres" => "text DEFAULT '' NOT NULL" |
||||
); |
||||
|
||||
$menus_entrees_cles = array( |
||||
"PRIMARY KEY" => "id_menus_entree", |
||||
"KEY id_menu" => "id_menu" |
||||
); |
||||
|
||||
$tables_principales['spip_menus_entrees'] = array( |
||||
'field' => &$menus_entrees, |
||||
'key' => &$menus_entrees_cles |
||||
); |
||||
|
||||
return $tables_principales; |
||||
} |
||||
|
||||
?> |
@ -0,0 +1,58 @@
|
||||
|
||||
.formulaire_editer_menu_entrees{ |
||||
position:relative; |
||||
} |
||||
.formulaire_editer_menu_entrees .image_loading{ |
||||
position:absolute; |
||||
top:50%; |
||||
left:50%; |
||||
} |
||||
|
||||
.formulaire_spip ul.menus_entrees{ |
||||
clear:both; |
||||
} |
||||
.formulaire_spip ul.menus_entrees ul.menus_entrees{ |
||||
border-left:1px solid #ccc; |
||||
border-top:1px solid #ccc; |
||||
} |
||||
|
||||
.formulaire_spip ul.menus_entrees li.entree{ |
||||
clear:both; |
||||
padding-left : 34px; |
||||
padding-right:0; |
||||
padding-bottom:0; |
||||
background-position:5px 10px; |
||||
background-repeat:no-repeat; |
||||
border-bottom:1px solid #ccc; |
||||
} |
||||
|
||||
.formulaire_spip ul.menus_entrees .ligne{ |
||||
position:relative; |
||||
} |
||||
|
||||
.formulaire_spip ul.menus_entrees .actions{ |
||||
position:absolute; |
||||
right:5px; |
||||
top:5px; |
||||
text-align:right; |
||||
} |
||||
|
||||
.formulaire_spip ul.menus_entrees .titre{ |
||||
font-weight:bold; |
||||
line-height:29px; |
||||
} |
||||
.formulaire_spip ul.menus_entrees .infos{ |
||||
font-size:0.9em; |
||||
margin-bottom:5px; |
||||
} |
||||
|
||||
.formulaire_spip ul.menus_entrees .actions button{ |
||||
border:none; |
||||
padding:0; |
||||
margin:0; |
||||
cursor:pointer; |
||||
|
||||
} |
||||
.formulaire_spip ul.menus_entrees img{ |
||||
vertical-align:middle; |
||||
} |
@ -0,0 +1,75 @@
|
||||
<div class="formulaire_spip formulaire_editer [formulaire_(#ENV{form})][ formulaire_(#ENV{form})-#ENV{id_menu,nouveau}]"> |
||||
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] |
||||
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] |
||||
|
||||
[(#ENV{editable}) |
||||
<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div> |
||||
[(#REM) declarer les hidden qui declencheront le service du formulaire |
||||
parametre : url d'action ] |
||||
#ACTION_FORMULAIRE{#ENV{action}} |
||||
|
||||
<ul> |
||||
<li class="fieldset"> |
||||
<fieldset> |
||||
<h3 class="legend"><:menus:formulaire_partie_identification:></h3> |
||||
<ul> |
||||
#SET{obli,'obligatoire'} |
||||
|
||||
#SET{name,titre} |
||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} |
||||
<li class="editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> |
||||
<label for="#GET{name}"><:menus:formulaire_titre:></label> |
||||
[<span class='erreur_message'>(#GET{erreurs})</span>] |
||||
<input type="text" class="text multilang" name="#GET{name}" id="#GET{name}" size="40" value="#ENV{#GET{name}}" /> |
||||
</li> |
||||
|
||||
#SET{name,identifiant} |
||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} |
||||
<li class="editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> |
||||
<label for="#GET{name}"><:menus:formulaire_identifiant:></label> |
||||
<div class="explication"><:menus:formulaire_identifiant_explication:></div> |
||||
[<span class='erreur_message'>(#GET{erreurs})</span>] |
||||
<input type="text" class="text" name="#GET{name}" id="#GET{name}" size="40" value="#ENV{#GET{name}}" /> |
||||
</li> |
||||
|
||||
#SET{name,css} |
||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} |
||||
<li class="editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]"> |
||||
<label for="#GET{name}"><:menus:formulaire_css:></label> |
||||
<div class="explication"><:menus:formulaire_css_explication:></div> |
||||
[<span class='erreur_message'>(#GET{erreurs})</span>] |
||||
<input type="text" class="text" name="#GET{name}" id="#GET{name}" size="40" value="#ENV{#GET{name}}" /> |
||||
</li> |
||||
|
||||
[(#REM) Seulement si c'est un nouveau et qu'il y a le plugin YAML)] |
||||
[(#ENV{nouveau}|oui) |
||||
[(#PLUGIN{yaml}|oui) |
||||
#SET{name,import} |
||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} |
||||
<li class="editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]"> |
||||
<label for="#GET{name}"><:menus:formulaire_importer:></label> |
||||
<div class="explication"><:menus:formulaire_importer_explication:></div> |
||||
[<span class='erreur_message'>(#GET{erreurs})</span>] |
||||
<input type="file" class="file" name="#GET{name}" id="#GET{name}" size="20" value="#ENV{#GET{name}}" /> |
||||
</li> |
||||
] |
||||
] |
||||
</ul> |
||||
|
||||
<p class='boutons'> |
||||
<input type='submit' class='submit' value='<:bouton_enregistrer:>' /> |
||||
</p> |
||||
</fieldset> |
||||
</li> |
||||
</ul> |
||||
</div></form> |
||||
] |
||||
</div> |
||||
<script type="text/javascript"> |
||||
$(function(){ |
||||
$('.formulaire_#ENV{form}'+' .boutons').hide(); |
||||
$('.formulaire_#ENV{form}'+' input') |
||||
.change(function(){$('.formulaire_#ENV{form}'+' .boutons').slideDown();}) |
||||
.keydown(function(){$('.formulaire_#ENV{form}'+' .boutons').slideDown();}); |
||||
}); |
||||
</script> |
@ -0,0 +1,122 @@
|
||||
<?php |
||||
|
||||
// Sécurité |
||||
if (!defined("_ECRIRE_INC_VERSION")) return; |
||||
|
||||
include_spip('inc/editer'); |
||||
|
||||
function formulaires_editer_menu_charger($id_menu, $nouveau){ |
||||
include_spip('base/abstract_sql'); |
||||
include_spip('inc/autoriser'); |
||||
$contexte = array(); |
||||
$contexte['editable'] = true; |
||||
|
||||
// Seulement si on a le droit de modifier les menus |
||||
if (autoriser('modifier', 'menu')){ |
||||
$nouveau = ($nouveau == 'oui') ? true : false; |
||||
$id_menu = intval($id_menu) ? intval($id_menu) : false; |
||||
|
||||
// Si on demande un id_menu |
||||
if ($id_menu){ |
||||
// On désactive de toute façon le nouveau |
||||
$nouveau = false; |
||||
|
||||
// On teste si le menu existe bien dans les menus principaux |
||||
$id_menu_ok = intval(sql_getfetsel( |
||||
'id_menu', |
||||
'spip_menus', |
||||
array( |
||||
array('=', 'id_menu', $id_menu), |
||||
array('=', 'id_menus_entree', 0) |
||||
) |
||||
)); |
||||
|
||||
// S'il n'existe pas |
||||
if (!$id_menu_ok){ |
||||
$contexte['editable'] = false; |
||||
$contexte['message_erreur'] = _T('menus:erreur_menu_inexistant', array('id'=>$id_menu)); |
||||
} |
||||
} |
||||
elseif (!$nouveau){ |
||||
$contexte['editable'] = false; |
||||
$contexte['message_erreur'] = _T('menus:erreur_parametres'); |
||||
} |
||||
|
||||
// Si on peut bien éditer le menu, on déclare ce qu'il faut |
||||
if ($contexte['editable']){ |
||||
$contexte['id_menu'] = $id_menu; |
||||
$contexte['nouveau'] = $nouveau; |
||||
|
||||
// Les champs du menu principal |
||||
$contexte['titre'] = ''; |
||||
$contexte['identifiant'] = ''; |
||||
$contexte['css'] = ''; |
||||
$contexte['import'] = ''; |
||||
|
||||
$valeurs = formulaires_editer_objet_charger('menu',$id_menu,0,0,'', '', '', ''); |
||||
|
||||
$contexte = array_merge($contexte, $valeurs); |
||||
|
||||
// Déclarer l'action pour SPIP 2.0 |
||||
$contexte['_action'] = array('editer_menu', $id_menu); |
||||
// On sait toujours si on est sur un menu déjà créé ou pas |
||||
$contexte['_hidden'] .= '<input type="hidden" name="id_menu" value="'.$id_menu.'" />'; |
||||
} |
||||
} |
||||
else{ |
||||
$contexte['editable'] = false; |
||||
$contexte['message_erreur'] = _T('menus:erreur_autorisation'); |
||||
} |
||||
|
||||
return $contexte; |
||||
} |
||||
|
||||
function formulaires_editer_menu_verifier($id_menu, $nouveau){ |
||||
include_spip('base/abstract_sql'); |
||||
$erreurs = array(); |
||||
|
||||
$oblis = array('titre','identifiant'); |
||||
$erreurs = formulaires_editer_objet_verifier('menu',$id_menu,$oblis); |
||||
|
||||
$identifiant = _request('identifiant'); |
||||
|
||||
// On vérifie que l'identifiant est bon |
||||
if (!$erreurs['identifiant'] and !preg_match('/^[\w]+$/', $identifiant)) |
||||
$erreurs['identifiant'] = _T('menus:erreur_identifiant_forme'); |
||||
// On vérifie que l'identifiant n'est pas déjà utilisé |
||||
if (!$erreurs['identifiant']){ |
||||
$deja = sql_getfetsel( |
||||
'id_menu', |
||||
'spip_menus', |
||||
array( |
||||
'identifiant = '.sql_quote($identifiant), |
||||
'id_menu > 0', |
||||
'id_menu !='.intval(_request('id_menu')) |
||||
) |
||||
); |
||||
if ($deja) |
||||
$erreurs['identifiant'] = _T('menus:erreur_identifiant_deja'); |
||||
} |
||||
|
||||
return $erreurs; |
||||
} |
||||
|
||||
function formulaires_editer_menu_traiter($id_menu, $nouveau){ |
||||
$res = formulaires_editer_objet_traiter('menu', $id_menu, 0, 0, '', '', '', ''); |
||||
|
||||
// Si ça va pas on errorise |
||||
if (!$res['id_menu']){ |
||||
$res['message_erreur'] = _T('menus:erreur_mise_a_jour'); |
||||
} |
||||
else{ |
||||
// Si on est dans l'espace privé on force la redirection |
||||
if (_request('exec') == 'menus_editer') |
||||
$res['redirect'] = generer_url_ecrire('menus_editer', "id_menu=".$res['id_menu']); |
||||
} |
||||
// Dans tous les cas le formulaire est toujours éditable |
||||
$res['editable'] = true; |
||||
|
||||
return $res; |
||||
} |
||||
|
||||
?> |
@ -0,0 +1,40 @@
|
||||
<div class="formulaire_spip formulaire_editer [formulaire_(#ENV{form})][ formulaire_(#ENV{form})-#ENV{id_menu,nouveau}]"> |
||||
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] |
||||
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] |
||||
|
||||
[(#ENV{editable}) |
||||
|
||||
<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div> |
||||
[(#REM) declarer les hidden qui declencheront le service du formulaire |
||||
parametre : url d'action ] |
||||
#ACTION_FORMULAIRE{#ENV{action}} |
||||
|
||||
<ul> |
||||
<li class="fieldset"> |
||||
<fieldset> |
||||
<h3 class="legend"><:menus:formulaire_partie_construction:></h3> |
||||
<input style="display:none;" type="submit" class="submit" name="enregistrer" value="<:bouton_enregistrer:>" /> |
||||
|
||||
#INCLURE{fond=formulaires/inc-menus_entrees, env} |
||||
</fieldset> |
||||
</li> |
||||
</ul> |
||||
</div></form> |
||||
|
||||
] |
||||
</div> |
||||
|
||||
<script type="text/javascript"> |
||||
$(function(){ |
||||
$('.entree .actions').hide(); |
||||
$('.entree .ligne') |
||||
.hover( |
||||
function(){ |
||||
$(this).find('.actions').show(); |
||||
}, |
||||
function(){ |
||||
$(this).find('.actions').hide(); |
||||
} |
||||
); |
||||
}); |
||||
</script> |
@ -0,0 +1,250 @@
|
||||
<?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'] = array(); |
||||
|
||||
// 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.'" />'; |
||||
|
||||
return $valeurs; |
||||
} |
||||
|
||||
function formulaires_editer_menus_entree_verifier($id_menu,$id_menus_entree='new'){ |
||||
$erreurs = formulaires_editer_objet_verifier('menus_entree',$id_menus_entree,array()); |
||||
|
||||
// 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'))){ |
||||
$erreurs['id_menu_nouvelle_entree'] = $id_menu; |
||||
// On charge les différents types d'entrées disponibles |
||||
$erreurs['entrees'] = menus_lister_disponibles(); |
||||
if (_request('suivant')) |
||||
$erreurs['type'] = _T('menus:erreur_type_menu'); |
||||
} |
||||
// Si on a choisi un type d'entree |
||||
else{ |
||||
$erreurs['id_menu_nouvelle_entree'] = $id_menu; |
||||
$erreurs['type_entree'] = $type_entree; |
||||
// On charge les infos du type choisi |
||||
$entrees = menus_lister_disponibles(); |
||||
$erreurs['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']); |
||||
|
||||
$erreurs = array_merge($erreurs, $parametres); |
||||
$erreurs['id_menus_entree'] = $id_menus_entree; |
||||
$erreurs['type_entree'] = $type_entree; |
||||
// On charge les infos du type choisi |
||||
$entrees = menus_lister_disponibles(); |
||||
$erreurs['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) |
||||
$erreurs['id_menu_nouvelle_entree'] = $id_menu; |
||||
if ($id_menus_entree) |
||||
$erreurs['id_menus_entree'] = $id_menus_entree; |
||||
$erreurs['type_entree'] = $type_entree; |
||||
$erreurs['infos_'.$type_entree] = $infos; |
||||
$erreurs['parametres'][$nom] = _T('info_obligatoire'); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
return $erreurs; |
||||
} |
||||
|
||||
function formulaires_editer_menus_entree_traiter($id_menu,$id_menus_entree='new'){ |
||||
$retours = array(); |
||||
|
||||
// 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, '', '', '', ''); |
||||
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', |
||||
array( |
||||
'rang' => $rang_actuel |
||||
), |
||||
'id_menu = '.$id_menu.' and rang = '.$rang_echange |
||||
); |
||||
if ($ok) |
||||
$ok = sql_updateq( |
||||
'spip_menus_entrees', |
||||
array( |
||||
'rang' => $rang_echange |
||||
), |
||||
'id_menus_entree = '.$id_menus_entree |
||||
); |
||||
} |
||||
// Sinon on fait un tour complet en déplaçant tout |
||||
else{ |
||||
if ($sens == 'bas'){ |
||||
// Tout le monde descend d'un rang |
||||
$ok = sql_update( |
||||
'spip_menus_entrees', |
||||
array( |
||||
'rang' => 'rang + 1' |
||||
), |
||||
'id_menu = '.$id_menu |
||||
); |
||||
// L'entrée passe tout en haut |
||||
if ($ok) |
||||
$ok = sql_updateq( |
||||
'spip_menus_entrees', |
||||
array( |
||||
'rang' => 1 |
||||
), |
||||
'id_menus_entree = '.$id_menus_entree |
||||
); |
||||
} |
||||
else{ |
||||
// Tout le monde monte d'un rang |
||||
$ok = sql_update( |
||||
'spip_menus_entrees', |
||||
array( |
||||
'rang' => 'rang - 1' |
||||
), |
||||
'id_menu = '.$id_menu |
||||
); |
||||
// L'entrée passe tout en bas |
||||
if ($ok) |
||||
$ok = sql_updateq( |
||||
'spip_menus_entrees', |
||||
array( |
||||
'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', |
||||
array( |
||||
'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_tous'); |
||||
} |
||||
|
||||
$retours['editable'] = true; |
||||
|
||||
return $retours; |
||||
} |
||||
|
||||
?> |
@ -0,0 +1,83 @@
|
||||
#SET{rang_suivant,1} |
||||
<ul id="menu-#ENV{id_menu}" class="menus_entrees"> |
||||
<BOUCLE_entrees(MENUS_ENTREES){id_menu}{par rang}> |
||||
<li class="entree"[ style="background-repeat:no-repeat;background-position:5px 10px;background-image:url((#ENV{types_entrees}|table_valeur{#TYPE_ENTREE}|table_valeur{icone}|image_reduire{24}|extraire_attribut{src}))"]> |
||||
<BOUCLE_test_modifier(CONDITION){si #ENV{erreurs}|table_valeur{id_menus_entree}|=={#ID_MENUS_ENTREE}|non}> |
||||
<div class="ligne"> |
||||
<div class="description arial2"> |
||||
#SET{supprimer_seulement,non} |
||||
[(#CHEMIN{menus/#TYPE_ENTREE.html}|oui) |
||||
#MENUS_AFFICHER_ENTREE{appel_formulaire}] |
||||
[(#CHEMIN{menus/#TYPE_ENTREE.html}|non) |
||||
#SET{supprimer_seulement,oui} |
||||
#INCLURE{fond=formulaires/inc-menus_entrees_inexistantes,appel_formulaire=oui,titre=#TYPE_ENTREE} |
||||
] |
||||
</div> |
||||
<div class="actions"> |
||||
[(#REM) S'il y a déjà un sous-menu on ne l'affiche pas ?)] |
||||
<BOUCLE_sous_menu_test(MENUS){id_menus_entree}> |
||||
[(#REM) Rien] |
||||
</BOUCLE_sous_menu_test> |
||||
[(#GET{supprimer_seulement}|=={non}|oui) |
||||
[(#ENV{types_entrees}|table_valeur{#TYPE_ENTREE}|table_valeur{refuser_sous_menu}|non) |
||||
<button name="demander_sous_menu" value="#ID_MENUS_ENTREE" title="<:menus:formulaire_ajouter_sous_menu:>"> |
||||
[<img height="24" width="24" src="(#CHEMIN{images/menus-24.png})" alt="" />] |
||||
</button> |
||||
]] |
||||
<//B_sous_menu_test> |
||||
[(#GET{supprimer_seulement}|=={non}|oui) |
||||
<button name="modifier_entree" value="#ID_MENUS_ENTREE" title="<:menus:formulaire_modifier_entree:>"> |
||||
[<img height="24" width="24" src="(#CHEMIN{images/menus_action_modifier.png})" alt="" />] |
||||
</button>] |
||||
<button name="supprimer_entree" value="#ID_MENUS_ENTREE" title="<:menus:formulaire_supprimer_entree:>" |
||||
onclick="return confirm('<:menus:confirmer_supprimer_entree:>')"> |
||||
[<img height="24" width="24" src="(#CHEMIN{images/menus_action_supprimer.png})" alt="" />] |
||||
</button> |
||||
[(#GET{supprimer_seulement}|=={non}|oui) |
||||
<button name="deplacer_entree" value="#ID_MENUS_ENTREE-bas" title="<:menus:formulaire_deplacer_bas:>"> |
||||
[<img height="24" width="24" src="(#CHEMIN{images/menus_action_bas.png})" alt="" />] |
||||
</button>] |
||||
[(#GET{supprimer_seulement}|=={non}|oui) |
||||
<button name="deplacer_entree" value="#ID_MENUS_ENTREE-haut" title="<:menus:formulaire_deplacer_haut:>"> |
||||
[<img height="24" width="24" src="(#CHEMIN{images/menus_action_haut.png})" alt="" />] |
||||
</button>] |
||||
</div> |
||||
<div class="nettoyeur"></div> |
||||
</div> |
||||
</BOUCLE_test_modifier> |
||||
#INCLURE{fond=formulaires/inc-nouvelle_entree-2, env, id_menus_entree=#ID_MENUS_ENTREE} |
||||
<//B_test_modifier> |
||||
|
||||
[(#REM) Est-ce qu'il y a un sous-menu ?)] |
||||
<BOUCLE_sous_menu(MENUS){id_menus_entree}> |
||||
#INCLURE{fond=formulaires/inc-menus_entrees, env, id_menu, sous_menu=oui} |
||||
</BOUCLE_sous_menu> |
||||
</li> |
||||
#SET{rang_suivant,(#RANG|plus{1})} |
||||
</BOUCLE_entrees> |
||||
<li class="editer_entree fieldset"> |
||||
#SET{id_menu_nouvelle_entree, (#ENV{erreurs}|table_valeur{id_menu_nouvelle_entree})} |
||||
#SET{type_entree, (#ENV{erreurs}|table_valeur{type_entree})} |
||||
|
||||
<BOUCLE_pas_demande_entree(CONDITION){si #GET{id_menu_nouvelle_entree}|=={#ENV{id_menu}}|non}> |
||||
<div class="boutons"> |
||||
[(#ENV{sous_menu}|non)<span class="image_loading"></span>] |
||||
[<button type="submit" class="submit link" name="supprimer_menu" value="#ENV{id_menu}"> |
||||
[<img src="(#CHEMIN{images/menus_action_supprimer.png})" alt="" />] |
||||
(#ENV{sous_menu}|?{<:menus:formulaire_supprimer_sous_menu:>,''}) |
||||
</button>] |
||||
<button type="submit" class="submit" name="demander_nouvelle_entree" value="#ENV{id_menu}"> |
||||
[<img src="(#CHEMIN{images/menus_action_ajouter.png})" alt="" />] |
||||
<:menus:formulaire_ajouter_entree:> |
||||
</button> |
||||
</div> |
||||
</BOUCLE_pas_demande_entree> |
||||
[(#GET{type_entree}|non) |
||||
#INCLURE{fond=formulaires/inc-nouvelle_entree-1, env, id_menu_nouvelle_entree=#GET{id_menu_nouvelle_entree}} |
||||
] |
||||
[(#GET{type_entree}|oui) |
||||
#INCLURE{fond=formulaires/inc-nouvelle_entree-2, env, id_menu_nouvelle_entree=#GET{id_menu_nouvelle_entree}, rang_suivant=#GET{rang_suivant}} |
||||
] |
||||
<//B_pas_demande_entree> |
||||
</li> |
||||
</ul> |
@ -0,0 +1,11 @@
|
||||
[(#SET{titre, <:menus:formulaire_supprimer_entree:>})] |
||||
[(#ENV{titre}|oui) |
||||
#SET{titre, #ENV*{titre}|typo} |
||||
] |
||||
|
||||
[(#ENV{appel_formulaire}|oui) |
||||
<div class="erreur_message"> |
||||
<div class="titre">#GET{titre}</div> |
||||
<div class="infos"><:menus:erreur_type_menu_inexistant:></div> |
||||
</div> |
||||
] |
@ -0,0 +1,23 @@
|
||||
|
||||
<ul> |
||||
<li class="editer_type[(#ENV**{erreurs}|table_valeur{type}|oui)erreur]"> |
||||
<label><:menus:entree_choisir:></label> |
||||
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{type})</span>] |
||||
<BOUCLE_types_entrees(POUR){tableau #ENV{erreurs}|table_valeur{entrees}}{par rang}> |
||||
<div class="choix menu_#CLE" id="choix_menu_#CLE" style="padding:3px;border-bottom:1px solid #eee;"> |
||||
[(#VALEUR|table_valeur{icone}|image_reduire{24})] |
||||
<input type="radio" class="radio" name="type_entree" id="#CLE" value="#CLE" style="vertical-align:top;" /> |
||||
<label for="#CLE">[(#VALEUR|table_valeur{nom})]</label> |
||||
</div> |
||||
</BOUCLE_types_entrees> |
||||
<span class='erreur_message'><:menus:erreur_aucun_type:></span> |
||||
<//B_types_entrees> |
||||
</li> |
||||
</ul> |
||||
|
||||
<p class='boutons'> |
||||
<span class='image_loading'></span> |
||||
<input type="hidden" name="demander_nouvelle_entree" value="#ENV{id_menu_nouvelle_entree}" /> |
||||
<input type="submit" class="submit link" name="demander_nouvelle_entree" value="<:icone_retour:>" /> |
||||
<input type="submit" class="submit" name="suivant" value="<:bouton_suivant:>" /> |
||||
</p> |
@ -0,0 +1,38 @@
|
||||
|
||||
#SET{type_entree, (#ENV{erreurs}|table_valeur{type_entree})} |
||||
#SET{infos, (#ENV{erreurs}|table_valeur{infos_#GET{type_entree}})} |
||||
<fieldset> |
||||
<legend> |
||||
[(#ENV{id_menus_entree}|non) |
||||
[(#GET{infos}|table_valeur{icone}|image_reduire{24})] |
||||
] |
||||
[<span style="vertical-align:middle;">(#GET{infos}|table_valeur{nom})</span>] |
||||
</legend> |
||||
<div class="explication">[(#GET{infos}|table_valeur{description})]</div> |
||||
<B_parametres> |
||||
<ul> |
||||
<BOUCLE_parametres(POUR){tableau #GET{infos}|table_valeur{parametres}}> |
||||
#SET{erreurs,(#ENV**{erreurs}|table_valeur{parametres}|table_valeur{#CLE})} |
||||
<li class="editer_texte[ (#GET{erreurs}|oui)erreur]"> |
||||
<label for="#CLE">[(#VALEUR|table_valeur{label})] [(#VALEUR|table_valeur{obligatoire}|non)[<:menus:formulaire_facultatif:>]]</label> |
||||
[<span class='erreur_message'>(#GET{erreurs})</span>] |
||||
<input type="text" class="text[ (#VALEUR|table_valeur{class})]" name="parametres[#CLE]" value="[(#ENV{parametres}|table_valeur{#CLE}|sinon{#ENV{erreurs}|table_valeur{#CLE}}|entites_html)]" /> |
||||
</li> |
||||
</BOUCLE_parametres> |
||||
</ul> |
||||
</B_parametres> |
||||
|
||||
<p class='boutons'> |
||||
<span class='image_loading'></span> |
||||
[(#ENV{id_menu_nouvelle_entree}|oui) |
||||
<input type="hidden" name="id_menu_nouvelle_entree" value="#ENV{id_menu_nouvelle_entree}" /> |
||||
<input type="hidden" name="rang" value="#ENV{rang_suivant}" /> |
||||
] |
||||
[(#ENV{id_menus_entree}|oui) |
||||
<input type="hidden" name="id_menus_entree" value="#ENV{id_menus_entree}" /> |
||||
] |
||||
<input type="hidden" name="type_entree" value="#GET{type_entree}" /> |
||||
<input type="submit" class="submit link" value="<:bouton_annuler:>" /> |
||||
<input type="submit" class="submit" name="enregistrer" value="<:bouton_enregistrer:>" /> |
||||
</p> |
||||
</fieldset> |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 756 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 629 B |
After Width: | Height: | Size: 942 B |
After Width: | Height: | Size: 883 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 360 B |
After Width: | Height: | Size: 922 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 825 B |
After Width: | Height: | Size: 1.5 KiB |
@ -0,0 +1,184 @@
|
||||
<?php |
||||
|
||||
// Sécurité |
||||
if (!defined("_ECRIRE_INC_VERSION")) return; |
||||
|
||||
/** |
||||
* Lister les types d'entrée de menus disponibles dans les dossiers menus/ |
||||
* |
||||
* @staticvar array $resultats |
||||
* @param bool $informer |
||||
* @return array |
||||
*/ |
||||
function menus_lister_disponibles($informer=true){ |
||||
static $resultats = null; |
||||
|
||||
$plugins_actifs = unserialize($GLOBALS['meta']['plugin']); |
||||
|
||||
if (is_null($resultats[$informer])){ |
||||
$resultats[$informer] = array(); |
||||
// rechercher les skel du type truc.html |
||||
$match = ".+[.]html$"; |
||||
|
||||
// lister les entrées disponibles |
||||
$liste = find_all_in_path('menus/', $match); |
||||
if (count($liste)){ |
||||
foreach($liste as $squelette=>$chemin) { |
||||
$type = preg_replace(',[.]html$,i', '', $squelette); |
||||
$dossier = str_replace($squelette, '', $chemin); |
||||
// On ne garde que les squelettes ayant un XML de config |
||||
if (file_exists("$dossier$type.xml") |
||||
AND ( |
||||
$entree = !$informer OR ($entree = menus_charger_infos($dossier.$type)) |
||||
)){ |
||||
//on ne garde que les menus repondants aux necessites |
||||
$necessite = true; |
||||
if (! empty($entree['necessites']['plugin'])) { |
||||
/* la globale $plugins liste tout en majuscule */ |
||||
$entree['necessites']['plugin'] = array_map("strtoupper", $entree['necessites']['plugin']); |
||||
foreach($entree['necessites']['plugin'] as $plugin) { |
||||
if ( ! array_key_exists($plugin,$plugins_actifs) ) |
||||
$necessite = false; |
||||
} |
||||
} |
||||
if ($necessite) |
||||
$resultats[$informer][$type] = $entree; |
||||
} |
||||
} |
||||
} |
||||
$resultats[$informer] = pipeline('menus_lister_disponibles',array( |
||||
'args' => array(), |
||||
'data' => $resultats[$informer] |
||||
) |
||||
); |
||||
} |
||||
return $resultats[$informer]; |
||||
} |
||||
|
||||
/** |
||||
* Decrire un type de menu |
||||
* |
||||
* @staticvar array $infos |
||||
* @param string $type |
||||
* @return array |
||||
*/ |
||||
function menus_informer($type){ |
||||
static $infos = array(); |
||||
if (!isset($infos[$type])){ |
||||
$fichier = find_in_path("menus/$type.html"); |
||||
$infos[$type] = menus_charger_infos($fichier); |
||||
} |
||||
return $infos[$type]; |
||||
} |
||||
|
||||
/** |
||||
* Charger les informations contenues dans le xml d'une entrée de menu |
||||
* |
||||
* @param string $type |
||||
* @param string $info |
||||
* @return array |
||||
*/ |
||||
function menus_charger_infos($type, $info=""){ |
||||
// on peut appeler avec le nom du squelette |
||||
$fichier = preg_replace(',[.]html$,i','',$type).".xml"; |
||||
include_spip('inc/xml'); |
||||
include_spip('inc/texte'); |
||||
$entree = array(); |
||||
if ($xml = spip_xml_load($fichier, false)){ |
||||
if (count($xml['entree'])){ |
||||
$xml = reset($xml['entree']); |
||||
$entree['nom'] = _T_ou_typo(spip_xml_aplatit($xml['nom'])); |
||||
$entree['rang'] = intval(trim(spip_xml_aplatit($xml['rang']))); |
||||
$entree['rang'] = ($entree['rang'] ? $entree['rang'] : 1000); |
||||
$entree['description'] = isset($xml['description']) ? _T_ou_typo(spip_xml_aplatit($xml['description'])) : ''; |
||||
$entree['icone'] = isset($xml['icone']) ? find_in_path(reset($xml['icone'])) : ''; |
||||
$entree['refuser_sous_menu'] = isset($xml['refuser_sous_menu']); |
||||
// Décomposition des paramètres |
||||
$entree['parametres'] = array(); |
||||
if (spip_xml_match_nodes(',^parametre,', $xml, $parametres)){ |
||||
foreach (array_keys($parametres) as $parametre){ |
||||
list($balise, $attributs) = spip_xml_decompose_tag($parametre); |
||||
$entree['parametres'][$attributs['nom']] = array( |
||||
'label' => $attributs['label'] ? _T($attributs['label']) : $attributs['nom'], |
||||
'obligatoire' => $attributs['obligatoire'] == 'oui' ? true : false, |
||||
'class' => $attributs['class'] ? $attributs['class'] : '' |
||||
); |
||||
} |
||||
} |
||||
//Décomposition des necessites |
||||
if (spip_xml_match_nodes(',^necessite,', $xml, $necessites)){ |
||||
$entree['necessites']['plugin'] = array(); |
||||
foreach (array_keys($necessites) as $necessite){ |
||||
list($balise, $attributs) = spip_xml_decompose_tag($necessite); |
||||
array_push($entree['necessites'][$attributs['type']] , $attributs['nom']); |
||||
} |
||||
} |
||||
|
||||
} |
||||
} |
||||
if (!$info) |
||||
return $entree; |
||||
else |
||||
return isset($entree[$info]) ? $entree[$info] : ""; |
||||
} |
||||
|
||||