préparation pour l'import (pas encopre fonctionnel) : ajout des champs extras + objet chapitre
utilisation des compositions pour les différentes pages : émissions, chroniques
This commit is contained in:
parent
1c05ef519c
commit
db8a2ffede
118
action/supprimer_chapitre.php
Normal file
118
action/supprimer_chapitre.php
Normal file
@ -0,0 +1,118 @@
|
||||
<?php
|
||||
/**
|
||||
* Utilisation de l'action supprimer pour l'objet chapitre
|
||||
*
|
||||
* @plugin chapitre
|
||||
* @copyright 2021
|
||||
* @author chankalan,vcalame
|
||||
* @licence GNU/GPL
|
||||
* @package SPIP\Chapitre\Action
|
||||
*/
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Action pour supprimer un·e chapitre
|
||||
*
|
||||
* Vérifier l'autorisation avant d'appeler l'action.
|
||||
*
|
||||
* @example
|
||||
* ```
|
||||
* [(#AUTORISER{supprimer, chapitre, #ID_CHAPITRE}|oui)
|
||||
* [(#BOUTON_ACTION{<:chapitre:supprimer_chapitre:/>,
|
||||
* #URL_ACTION_AUTEUR{supprimer_chapitre, #ID_CHAPITRE, #URL_ECRIRE{chapitres}},
|
||||
* danger, <:chapitre:confirmer_supprimer_chapitre:/>})]
|
||||
* ]
|
||||
* ```
|
||||
*
|
||||
* @example
|
||||
* ```
|
||||
* [(#AUTORISER{supprimer, chapitre, #ID_CHAPITRE}|oui)
|
||||
* [(#BOUTON_ACTION{
|
||||
* [(#CHEMIN_IMAGE{chapitre-del-24.png}|balise_img{<:chapitre:supprimer_chapitre:/>}|concat{' ',#VAL{<:chapitre:supprimer_chapitre:/>}|wrap{<b>}}|trim)],
|
||||
* #URL_ACTION_AUTEUR{supprimer_chapitre, #ID_CHAPITRE, #URL_ECRIRE{chapitres}},
|
||||
* icone s24 horizontale danger chapitre-del-24, <:chapitre:confirmer_supprimer_chapitre:/>})]
|
||||
* ]
|
||||
* ```
|
||||
*
|
||||
* @example
|
||||
* ```
|
||||
* if (autoriser('supprimer', 'chapitre', $id_chapitre)) {
|
||||
* $supprimer_chapitre = charger_fonction('supprimer_chapitre', 'action');
|
||||
* $supprimer_chapitre($id_chapitre);
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @param null|int $arg
|
||||
* Identifiant à supprimer.
|
||||
* En absence de id utilise l'argument de l'action sécurisée.
|
||||
**/
|
||||
function action_supprimer_chapitre_dist($arg=null) {
|
||||
$need_confirm = false;
|
||||
if (is_null($arg)){
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc');
|
||||
$arg = $securiser_action();
|
||||
$need_confirm = true;
|
||||
}
|
||||
$arg = intval($arg);
|
||||
|
||||
if ($need_confirm){
|
||||
$ok = confirmer_supprimer_chapitre_avant_action(_T('chapitre:confirmer_supprimer_chapitre'), _T('item_oui') . '! ' . _T('chapitre:supprimer_chapitre'));
|
||||
}
|
||||
|
||||
// cas suppression
|
||||
if (autoriser('supprimer', 'chapitre', $arg)) {
|
||||
if ($arg) {
|
||||
$objet = sql_fetsel('*', 'spip_chapitres', 'id_chapitre=' . sql_quote($arg));
|
||||
$qui = (!empty($GLOBALS['visiteur_session']['id_auteur']) ? 'auteur #' . $GLOBALS['visiteur_session']['id_auteur'] : 'IP ' . $GLOBALS['ip']);
|
||||
spip_log("SUPPRESSION chapitre#$arg par $qui : " . json_encode($objet), "suppressions" . _LOG_INFO_IMPORTANTE);
|
||||
|
||||
sql_delete('spip_chapitres', 'id_chapitre=' . sql_quote($arg));
|
||||
|
||||
// invalider le cache
|
||||
include_spip('inc/invalideur');
|
||||
suivre_invalideur("id='chapitre/$arg'");
|
||||
|
||||
}
|
||||
else {
|
||||
spip_log("action_supprimer_chapitre_dist $arg pas compris");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirmer avant suppression si on arrive par un bouton action
|
||||
* @param string $titre
|
||||
* @param string $titre_bouton
|
||||
* @param string|null $url_action
|
||||
* @return bool
|
||||
*/
|
||||
function confirmer_supprimer_chapitre_avant_action($titre, $titre_bouton, $url_action=null) {
|
||||
|
||||
if (!$url_action) {
|
||||
$url_action = self();
|
||||
$action = _request('action');
|
||||
$url_action = parametre_url($url_action, 'action', $action, '&');
|
||||
}
|
||||
else {
|
||||
$action = parametre_url($url_action, 'action');
|
||||
}
|
||||
$arg = parametre_url($url_action, 'arg');
|
||||
$confirm = md5("$action:$arg:".realpath(__FILE__));
|
||||
if (_request('confirm_action') === $confirm) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$url_confirm = parametre_url($url_action, "confirm_action", $confirm, '&');
|
||||
include_spip("inc/filtres");
|
||||
$bouton_action = bouton_action($titre_bouton, $url_confirm);
|
||||
$corps = "<div style='text-align:center;'>$bouton_action</div>";
|
||||
|
||||
include_spip("inc/minipres");
|
||||
echo minipres($titre,$corps);
|
||||
exit;
|
||||
}
|
216
base/libreavous.php
Normal file
216
base/libreavous.php
Normal file
@ -0,0 +1,216 @@
|
||||
<?php
|
||||
if (!defined("_ECRIRE_INC_VERSION")) return;
|
||||
|
||||
// des champs extras sur les articles
|
||||
function libreavous_declarer_champs_extras($champs = array()) {
|
||||
|
||||
// Table : spip_articles
|
||||
if (isset($champs['spip_articles']) and !is_array($champs['spip_articles'])) {
|
||||
$champs['spip_articles'] = array();
|
||||
}
|
||||
|
||||
$champs['spip_articles']['podcast_code'] = array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'podcast_code',
|
||||
'label' => 'Code',
|
||||
'type' => 'text',
|
||||
'size' => '40',
|
||||
'autocomplete' => 'defaut',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
$champs['spip_articles']['podcast_duree'] = array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'podcast_duree',
|
||||
'label' => 'Durée',
|
||||
'type' => 'text',
|
||||
'size' => '40',
|
||||
'autocomplete' => 'defaut',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
$champs['spip_articles']['podcast_mp3'] = array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'podcast_mp3',
|
||||
'label' => 'Taille mp3',
|
||||
'type' => 'text',
|
||||
'size' => '40',
|
||||
'autocomplete' => 'defaut',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
$champs['spip_articles']['podcast_ogg'] = array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'podcast_ogg',
|
||||
'label' => 'Taille Ogg',
|
||||
'type' => 'text',
|
||||
'size' => '40',
|
||||
'autocomplete' => 'defaut',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
$champs['spip_articles']['podcast_transcription'] = array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'podcast_transcription',
|
||||
'label' => 'Lien transcription',
|
||||
'type' => 'text',
|
||||
'size' => '40',
|
||||
'autocomplete' => 'defaut',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
$champs['spip_articles']['podcast_personnes'] = array(
|
||||
'saisie' => 'textarea',
|
||||
'options' => array(
|
||||
'nom' => 'podcast_personnes',
|
||||
'label' => 'Personnes participantes',
|
||||
'rows' => '5',
|
||||
'cols' => '40',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
$champs['spip_articles']['podcast_galeriephotos'] = array(
|
||||
'saisie' => 'textarea',
|
||||
'options' => array(
|
||||
'nom' => 'podcast_galeriephotos',
|
||||
'label' => 'Galerie Photos',
|
||||
'rows' => '5',
|
||||
'cols' => '40',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
$champs['spip_articles']['podcast_musique'] = array(
|
||||
'saisie' => 'textarea',
|
||||
'options' => array(
|
||||
'nom' => 'podcast_musique',
|
||||
'label' => 'Pauses musicales',
|
||||
'rows' => '5',
|
||||
'cols' => '40',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
$champs['spip_articles']['drupal_guid'] = array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'drupal_guid',
|
||||
'label' => 'GUID Drupral',
|
||||
'type' => 'text',
|
||||
'size' => '40',
|
||||
'autocomplete' => 'defaut',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
$champs['spip_articles']['drupal_pubdate'] = array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'drupal_pubdate',
|
||||
'label' => 'PubDate Drupal',
|
||||
'type' => 'text',
|
||||
'size' => '40',
|
||||
'autocomplete' => 'defaut',
|
||||
'sql' => 'text DEFAULT \'\' NOT NULL',
|
||||
),
|
||||
'verifier' => array(
|
||||
),
|
||||
);
|
||||
|
||||
return $champs;
|
||||
}
|
||||
|
||||
// un nouvel objet chapitre
|
||||
/**
|
||||
* Déclaration des alias de tables et filtres automatiques de champs
|
||||
*
|
||||
* @pipeline declarer_tables_interfaces
|
||||
* @param array $interfaces
|
||||
* Déclarations d'interface pour le compilateur
|
||||
* @return array
|
||||
* Déclarations d'interface pour le compilateur
|
||||
*/
|
||||
function libreavous_declarer_tables_interfaces($interfaces) {
|
||||
|
||||
$interfaces['table_des_tables']['chapitres'] = 'chapitres';
|
||||
|
||||
return $interfaces;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Déclaration des objets éditoriaux
|
||||
*
|
||||
* @pipeline declarer_tables_objets_sql
|
||||
* @param array $tables
|
||||
* Description des tables
|
||||
* @return array
|
||||
* Description complétée des tables
|
||||
*/
|
||||
function libreavous_declarer_tables_objets_sql($tables) {
|
||||
|
||||
$tables['spip_chapitres'] = array(
|
||||
'type' => 'chapitre',
|
||||
'principale' => 'oui',
|
||||
'field'=> array(
|
||||
'id_chapitre' => 'bigint(21) NOT NULL',
|
||||
'id_article' => 'bigint(21) NOT NULL DEFAULT 0',
|
||||
'titre' => 'tinytext NOT NULL DEFAULT ""',
|
||||
'code' => 'tinytext NOT NULL DEFAULT ""',
|
||||
'code_fichier' => 'tinytext NOT NULL DEFAULT ""',
|
||||
'code_podcast' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||
'debut' => 'varchar(25) NOT NULL DEFAULT ""',
|
||||
'fin' => 'varchar(25) NOT NULL DEFAULT ""',
|
||||
'type_sujet' => 'varchar(25) NOT NULL DEFAULT ""',
|
||||
'chronique' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||
'mp3' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||
'ogg' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||
'drupal_guid' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||
'drupal_pubdate' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||
'maj' => 'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'
|
||||
),
|
||||
'key' => array(
|
||||
'PRIMARY KEY' => 'id_chapitre',
|
||||
'KEY id_article' => 'id_article',
|
||||
),
|
||||
'titre' => 'titre AS titre, "" AS lang',
|
||||
#'date' => '',
|
||||
'champs_editables' => array('titre', 'code', 'code_fichier', 'code_podcast', 'debut', 'fin', 'type_sujet', 'chronique', 'mp3', 'ogg', 'drupal_guid', 'drupal_pubdate', 'id_article'),
|
||||
'champs_versionnes' => array('titre', 'code', 'code_fichier', 'code_podcast', 'debut', 'fin', 'type_sujet', 'chronique', 'mp3', 'ogg', 'drupal_guid', 'drupal_pubdate', 'id_article'),
|
||||
'rechercher_champs' => array("titre" => 5),
|
||||
'tables_jointures' => array(),
|
||||
|
||||
|
||||
);
|
||||
|
||||
return $tables;
|
||||
}
|
66
formulaires/editer_chapitre.html
Normal file
66
formulaires/editer_chapitre.html
Normal file
@ -0,0 +1,66 @@
|
||||
<div class='formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_chapitre,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}"><div>
|
||||
#ACTION_FORMULAIRE
|
||||
<input type="hidden" name="id_chapitre" value="#ENV{id_chapitre}" />
|
||||
<input type="hidden" name="id_article" value="#ENV{id_article}" />
|
||||
<div class="editer-groupe">
|
||||
|
||||
|
||||
[(#SAISIE{input, titre, obligatoire=oui,
|
||||
label=<:chapitre:champ_titre_label:/>,
|
||||
explication=<:chapitre:champ_titre_explication:/> })]
|
||||
|
||||
[(#SAISIE{input, code,
|
||||
label=<:chapitre:champ_code_label:/>,
|
||||
explication=<:chapitre:champ_code_explication:/> })]
|
||||
|
||||
[(#SAISIE{input, code_fichier,
|
||||
label=<:chapitre:champ_code_fichier_label:/>})]
|
||||
|
||||
[(#SAISIE{input, code_podcast,
|
||||
label=<:chapitre:champ_code_podcast_label:/>,
|
||||
explication=<:chapitre:champ_code_podcast_explication:/> })]
|
||||
|
||||
[(#SAISIE{input, debut,
|
||||
label=<:chapitre:champ_debut_label:/>,
|
||||
explication=<:chapitre:champ_debut_explication:/> })]
|
||||
|
||||
[(#SAISIE{input, fin,
|
||||
label=<:chapitre:champ_fin_label:/>,
|
||||
explication=<:chapitre:champ_fin_explication:/> })]
|
||||
|
||||
[(#SAISIE{input, type_sujet,
|
||||
label=<:chapitre:champ_type_sujet_label:/>,
|
||||
explication=<:chapitre:champ_type_sujet_explication:/> })]
|
||||
|
||||
[(#SAISIE{input, chronique,
|
||||
label=<:chapitre:champ_chronique_label:/>})]
|
||||
|
||||
[(#SAISIE{input, mp3,
|
||||
label=<:chapitre:champ_mp3_label:/>,
|
||||
explication=<:chapitre:champ_mp3_explication:/> })]
|
||||
|
||||
[(#SAISIE{input, ogg,
|
||||
label=<:chapitre:champ_ogg_label:/>,
|
||||
explication=<:chapitre:champ_ogg_explication:/> })]
|
||||
|
||||
[(#SAISIE{input, drupal_guid,
|
||||
label=<:chapitre:champ_drupal_guid_label:/>,
|
||||
explication=<:chapitre:champ_drupal_guid_explication:/> })]
|
||||
|
||||
[(#SAISIE{input, drupal_pubdate,
|
||||
label=<:chapitre:champ_drupal_pubdate_label:/>,
|
||||
explication=<:chapitre:champ_drupal_pubdate_explication:/> })]
|
||||
|
||||
|
||||
</div>
|
||||
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
|
||||
<!--extra-->
|
||||
<p class="boutons"><input type="submit" class="submit" value="<:bouton_enregistrer|attribut_html:/>" /></p>
|
||||
</div></form>
|
||||
]
|
||||
</div>
|
137
formulaires/editer_chapitre.php
Normal file
137
formulaires/editer_chapitre.php
Normal file
@ -0,0 +1,137 @@
|
||||
<?php
|
||||
/**
|
||||
* Gestion du formulaire de d'édition de chapitre
|
||||
*
|
||||
* @plugin chapitre
|
||||
* @copyright 2021
|
||||
* @author chankalan,vcalame
|
||||
* @licence GNU/GPL
|
||||
* @package SPIP\Chapitre\Formulaires
|
||||
*/
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) {
|
||||
return;
|
||||
}
|
||||
|
||||
include_spip('inc/actions');
|
||||
include_spip('inc/editer');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité
|
||||
*
|
||||
* @param int|string $id_chapitre
|
||||
* Identifiant du chapitre. 'new' pour un nouveau chapitre.
|
||||
* @param int $id_article
|
||||
* Identifiant de l'objet parent (si connu)
|
||||
* @param string $retour
|
||||
* URL de redirection après le traitement
|
||||
* @param int $lier_trad
|
||||
* Identifiant éventuel d'un chapitre source d'une traduction
|
||||
* @param string $config_fonc
|
||||
* Nom de la fonction ajoutant des configurations particulières au formulaire
|
||||
* @param array $row
|
||||
* Valeurs de la ligne SQL du chapitre, si connu
|
||||
* @param string $hidden
|
||||
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
|
||||
* @return string
|
||||
* Hash du formulaire
|
||||
*/
|
||||
function formulaires_editer_chapitre_identifier_dist($id_chapitre = 'new', $id_article = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
|
||||
return serialize(array(intval($id_chapitre)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Chargement du formulaire d'édition de chapitre
|
||||
*
|
||||
* Déclarer les champs postés et y intégrer les valeurs par défaut
|
||||
*
|
||||
* @uses formulaires_editer_objet_charger()
|
||||
*
|
||||
* @param int|string $id_chapitre
|
||||
* Identifiant du chapitre. 'new' pour un nouveau chapitre.
|
||||
* @param int $id_article
|
||||
* Identifiant de l'objet parent (si connu)
|
||||
* @param string $retour
|
||||
* URL de redirection après le traitement
|
||||
* @param int $lier_trad
|
||||
* Identifiant éventuel d'un chapitre source d'une traduction
|
||||
* @param string $config_fonc
|
||||
* Nom de la fonction ajoutant des configurations particulières au formulaire
|
||||
* @param array $row
|
||||
* Valeurs de la ligne SQL du chapitre, si connu
|
||||
* @param string $hidden
|
||||
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
|
||||
* @return array
|
||||
* Environnement du formulaire
|
||||
*/
|
||||
function formulaires_editer_chapitre_charger_dist($id_chapitre = 'new', $id_article = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
|
||||
$valeurs = formulaires_editer_objet_charger('chapitre', $id_chapitre, $id_article, $lier_trad, $retour, $config_fonc, $row, $hidden);
|
||||
if (!$valeurs['id_article']) {
|
||||
$valeurs['id_article'] = $id_article;
|
||||
}
|
||||
|
||||
return $valeurs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifications du formulaire d'édition de chapitre
|
||||
*
|
||||
* Vérifier les champs postés et signaler d'éventuelles erreurs
|
||||
*
|
||||
* @uses formulaires_editer_objet_verifier()
|
||||
*
|
||||
* @param int|string $id_chapitre
|
||||
* Identifiant du chapitre. 'new' pour un nouveau chapitre.
|
||||
* @param int $id_article
|
||||
* Identifiant de l'objet parent (si connu)
|
||||
* @param string $retour
|
||||
* URL de redirection après le traitement
|
||||
* @param int $lier_trad
|
||||
* Identifiant éventuel d'un chapitre source d'une traduction
|
||||
* @param string $config_fonc
|
||||
* Nom de la fonction ajoutant des configurations particulières au formulaire
|
||||
* @param array $row
|
||||
* Valeurs de la ligne SQL du chapitre, si connu
|
||||
* @param string $hidden
|
||||
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
|
||||
* @return array
|
||||
* Tableau des erreurs
|
||||
*/
|
||||
function formulaires_editer_chapitre_verifier_dist($id_chapitre = 'new', $id_article = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
|
||||
|
||||
$erreurs = formulaires_editer_objet_verifier('chapitre', $id_chapitre, array('titre', 'id_article'));
|
||||
|
||||
|
||||
return $erreurs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Traitement du formulaire d'édition de chapitre
|
||||
*
|
||||
* Traiter les champs postés
|
||||
*
|
||||
* @uses formulaires_editer_objet_traiter()
|
||||
*
|
||||
* @param int|string $id_chapitre
|
||||
* Identifiant du chapitre. 'new' pour un nouveau chapitre.
|
||||
* @param int $id_article
|
||||
* Identifiant de l'objet parent (si connu)
|
||||
* @param string $retour
|
||||
* URL de redirection après le traitement
|
||||
* @param int $lier_trad
|
||||
* Identifiant éventuel d'un chapitre source d'une traduction
|
||||
* @param string $config_fonc
|
||||
* Nom de la fonction ajoutant des configurations particulières au formulaire
|
||||
* @param array $row
|
||||
* Valeurs de la ligne SQL du chapitre, si connu
|
||||
* @param string $hidden
|
||||
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
|
||||
* @return array
|
||||
* Retours des traitements
|
||||
*/
|
||||
function formulaires_editer_chapitre_traiter_dist($id_chapitre = 'new', $id_article = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
|
||||
$retours = formulaires_editer_objet_traiter('chapitre', $id_chapitre, $id_article, $lier_trad, $retour, $config_fonc, $row, $hidden);
|
||||
return $retours;
|
||||
}
|
66
lang/chapitre_fr.php
Normal file
66
lang/chapitre_fr.php
Normal file
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$GLOBALS[$GLOBALS['idx_lang']] = array(
|
||||
|
||||
// A
|
||||
'ajouter_lien_chapitre' => 'Ajouter ce chapitre',
|
||||
|
||||
// C
|
||||
'champ_chronique_label' => 'Chronique',
|
||||
'champ_code_explication' => 'dans le json = short_chapter_name',
|
||||
'champ_code_fichier_label' => 'Code du fichier',
|
||||
'champ_code_label' => 'code',
|
||||
'champ_code_podcast_explication' => 'Même valeur que le champ \"podcast_code\" d\'un article/émission.',
|
||||
'champ_code_podcast_label' => 'Code du podcast',
|
||||
'champ_debut_explication' => 'Début du chapitre (sous la forme 00:00:00.000) (dans le json = start_timestamp)',
|
||||
'champ_debut_label' => 'debut',
|
||||
'champ_drupal_guid_explication' => 'GUID du flux RSS Drupal',
|
||||
'champ_drupal_guid_label' => 'Drupal GUID',
|
||||
'champ_drupal_pubdate_explication' => 'pubDate du flux RSS actuel',
|
||||
'champ_drupal_pubdate_label' => 'Drupal pubdate',
|
||||
'champ_fin_explication' => 'Fin du chapitre (sous la forme 00:00:00.000) (dans le json = end_timestamp)',
|
||||
'champ_fin_label' => 'fin',
|
||||
'champ_mp3_explication' => 'Taille du fichier mp3',
|
||||
'champ_mp3_label' => 'MP3',
|
||||
'champ_ogg_explication' => 'Taille du fichier ogg',
|
||||
'champ_ogg_label' => 'OGG',
|
||||
'champ_titre_explication' => 'dans le json = chapter_title',
|
||||
'champ_titre_label' => 'titre',
|
||||
'champ_type_sujet_explication' => 'Nomenclature de deux lettres : SL, SC, CH, AN',
|
||||
'champ_type_sujet_label' => 'Type de sujet',
|
||||
'confirmer_supprimer_chapitre' => 'Confirmez-vous la suppression de ce chapitre ?',
|
||||
|
||||
// I
|
||||
'icone_creer_chapitre' => 'Créer un chapitre',
|
||||
'icone_modifier_chapitre' => 'Modifier ce chapitre',
|
||||
'info_1_chapitre' => 'Un chapitre',
|
||||
'info_aucun_chapitre' => 'Aucun chapitre',
|
||||
'info_chapitres_auteur' => 'Les chapitres de cet auteur',
|
||||
'info_nb_chapitres' => '@nb@ chapitres',
|
||||
|
||||
// R
|
||||
'retirer_lien_chapitre' => 'Retirer ce chapitre',
|
||||
'retirer_tous_liens_chapitres' => 'Retirer tous les chapitres',
|
||||
|
||||
// S
|
||||
'supprimer_chapitre' => 'Supprimer ce chapitre',
|
||||
|
||||
// T
|
||||
'texte_ajouter_chapitre' => 'Ajouter un chapitre',
|
||||
'texte_changer_statut_chapitre' => 'Ce chapitre est :',
|
||||
'texte_creer_associer_chapitre' => 'Créer et associer un chapitre',
|
||||
'texte_definir_comme_traduction_chapitre' => 'Ce chapitre est une traduction du chapitre numéro :',
|
||||
'titre_chapitre' => 'Chapitre',
|
||||
'titre_chapitres' => 'Chapitres',
|
||||
'titre_chapitres_rubrique' => 'Chapitres de la rubrique',
|
||||
'titre_langue_chapitre' => 'Langue de ce chapitre',
|
||||
'titre_logo_chapitre' => 'Logo de ce chapitre',
|
||||
'titre_objets_lies_chapitre' => 'Liés à ce chapitre',
|
||||
'titre_page_chapitres' => 'Les chapitres',
|
||||
);
|
14
lang/paquet-libreavous_fr.php
Normal file
14
lang/paquet-libreavous_fr.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$GLOBALS[$GLOBALS['idx_lang']] = array(
|
||||
|
||||
// C
|
||||
'libreavous_description' => '',
|
||||
'libreavous_nom' => '+ Libre à vous !',
|
||||
'libreavous_slogan' => ' ',
|
||||
);
|
99
libreavous_administrations.php
Normal file
99
libreavous_administrations.php
Normal file
@ -0,0 +1,99 @@
|
||||
<?php
|
||||
/**
|
||||
* Fichier gérant l'installation et désinstallation du plugin chapitre
|
||||
*
|
||||
* @plugin chapitre
|
||||
* @copyright 2021
|
||||
* @author chankalan,vcalame
|
||||
* @licence GNU/GPL
|
||||
* @package SPIP\Chapitre\Installation
|
||||
*/
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
include_spip('inc/cextras');
|
||||
include_spip('base/libreavous');
|
||||
|
||||
|
||||
/**
|
||||
* Fonction d'installation et de mise à jour du plugin chapitre.
|
||||
*
|
||||
* Vous pouvez :
|
||||
*
|
||||
* - créer la structure SQL,
|
||||
* - insérer du pre-contenu,
|
||||
* - installer des valeurs de configuration,
|
||||
* - mettre à jour la structure SQL
|
||||
*
|
||||
* @param string $nom_meta_base_version
|
||||
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
|
||||
* @param string $version_cible
|
||||
* Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
|
||||
* @return void
|
||||
**/
|
||||
function libreavous_upgrade($nom_meta_base_version, $version_cible) {
|
||||
$maj = array();
|
||||
# quelques exemples
|
||||
# (que vous pouvez supprimer !)
|
||||
#
|
||||
# $maj['create'] = array(array('creer_base'));
|
||||
#
|
||||
# include_spip('inc/config')
|
||||
# $maj['create'] = array(
|
||||
# array('maj_tables', array('spip_xx', 'spip_xx_liens')),
|
||||
# array('ecrire_config', 'chapitre', array('exemple' => "Texte de l'exemple"))
|
||||
#);
|
||||
#
|
||||
# $maj['1.1.0'] = array(array('sql_alter','TABLE spip_xx RENAME TO spip_yy'));
|
||||
# $maj['1.2.0'] = array(array('sql_alter','TABLE spip_xx DROP COLUMN id_auteur'));
|
||||
# $maj['1.3.0'] = array(
|
||||
# array('sql_alter','TABLE spip_xx CHANGE numero numero int(11) default 0 NOT NULL'),
|
||||
# array('sql_alter','TABLE spip_xx CHANGE texte petit_texte mediumtext NOT NULL default \'\''),
|
||||
# );
|
||||
# ...
|
||||
|
||||
cextras_api_upgrade(libreavous_declarer_champs_extras(), $maj['0.0.1']);
|
||||
|
||||
$maj['0.1.0'] = array(array('maj_tables', array('spip_chapitres')));
|
||||
|
||||
include_spip('base/upgrade');
|
||||
maj_plugin($nom_meta_base_version, $version_cible, $maj);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction de désinstallation du plugin chapitre.
|
||||
*
|
||||
* Vous devez :
|
||||
*
|
||||
* - nettoyer toutes les données ajoutées par le plugin et son utilisation
|
||||
* - supprimer les tables et les champs créés par le plugin.
|
||||
*
|
||||
* @param string $nom_meta_base_version
|
||||
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
|
||||
* @return void
|
||||
**/
|
||||
function libreavous_vider_tables($nom_meta_base_version) {
|
||||
# quelques exemples
|
||||
# (que vous pouvez supprimer !)
|
||||
# sql_drop_table('spip_xx');
|
||||
# sql_drop_table('spip_xx_liens');
|
||||
|
||||
cextras_api_vider_tables(libreavous_declarer_champs_extras());
|
||||
|
||||
sql_drop_table('spip_chapitres');
|
||||
|
||||
# Nettoyer les liens courants (le génie optimiser_base_disparus se chargera de nettoyer toutes les tables de liens)
|
||||
sql_delete('spip_documents_liens', sql_in('objet', array('chapitre')));
|
||||
sql_delete('spip_mots_liens', sql_in('objet', array('chapitre')));
|
||||
sql_delete('spip_auteurs_liens', sql_in('objet', array('chapitre')));
|
||||
# Nettoyer les versionnages et forums
|
||||
sql_delete('spip_versions', sql_in('objet', array('chapitre')));
|
||||
sql_delete('spip_versions_fragments', sql_in('objet', array('chapitre')));
|
||||
sql_delete('spip_forum', sql_in('objet', array('chapitre')));
|
||||
|
||||
effacer_meta($nom_meta_base_version);
|
||||
}
|
@ -12,3 +12,124 @@ function libreavous_autoriser() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* Exemple
|
||||
function autoriser_chapitre_configurer_dist($faire, $type, $id, $qui, $opt) {
|
||||
// type est un objet (la plupart du temps) ou une chose.
|
||||
// autoriser('configurer', '_chapitre') => $type = 'chapitre'
|
||||
// au choix :
|
||||
return autoriser('webmestre', $type, $id, $qui, $opt); // seulement les webmestres
|
||||
return autoriser('configurer', '', $id, $qui, $opt); // seulement les administrateurs complets
|
||||
return $qui['statut'] == '0minirezo'; // seulement les administrateurs (même les restreints)
|
||||
// ...
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
// restreindre les champs 'array(...)' sur les articles qui portent la composition 'emission'
|
||||
restreindre_extras('article', array(
|
||||
'podcast_code',
|
||||
'podcast_duree',
|
||||
'podcast_mp3',
|
||||
'podcast_ogg',
|
||||
'podcast_transcription',
|
||||
'podcast_personnes',
|
||||
'podcast_galeriephotos',
|
||||
'podcast_musique',
|
||||
'drupal_guid',
|
||||
'drupal_pubdate'
|
||||
), 'emission', 'composition');
|
||||
|
||||
|
||||
// -----------------
|
||||
// Objet chapitres
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Autorisation de voir (chapitres)
|
||||
*
|
||||
* @param string $faire Action demandée
|
||||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||
* @param int $id Identifiant de l'objet
|
||||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||
* @param array $opt Options de cette autorisation
|
||||
* @return bool true s'il a le droit, false sinon
|
||||
**/
|
||||
function autoriser_chapitres_voir_dist($faire, $type, $id, $qui, $opt) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Autorisation de voir (chapitre)
|
||||
*
|
||||
* @param string $faire Action demandée
|
||||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||
* @param int $id Identifiant de l'objet
|
||||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||
* @param array $opt Options de cette autorisation
|
||||
* @return bool true s'il a le droit, false sinon
|
||||
**/
|
||||
function autoriser_chapitre_voir_dist($faire, $type, $id, $qui, $opt) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Autorisation de créer (chapitre)
|
||||
*
|
||||
* @param string $faire Action demandée
|
||||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||
* @param int $id Identifiant de l'objet
|
||||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||
* @param array $opt Options de cette autorisation
|
||||
* @return bool true s'il a le droit, false sinon
|
||||
**/
|
||||
function autoriser_chapitre_creer_dist($faire, $type, $id, $qui, $opt) {
|
||||
return in_array($qui['statut'], array('0minirezo', '1comite'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Autorisation de modifier (chapitre)
|
||||
*
|
||||
* @param string $faire Action demandée
|
||||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||
* @param int $id Identifiant de l'objet
|
||||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||
* @param array $opt Options de cette autorisation
|
||||
* @return bool true s'il a le droit, false sinon
|
||||
**/
|
||||
function autoriser_chapitre_modifier_dist($faire, $type, $id, $qui, $opt) {
|
||||
return in_array($qui['statut'], array('0minirezo', '1comite'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Autorisation de supprimer (chapitre)
|
||||
*
|
||||
* @param string $faire Action demandée
|
||||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||
* @param int $id Identifiant de l'objet
|
||||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||
* @param array $opt Options de cette autorisation
|
||||
* @return bool true s'il a le droit, false sinon
|
||||
**/
|
||||
function autoriser_chapitre_supprimer_dist($faire, $type, $id, $qui, $opt) {
|
||||
return in_array($qui['statut'], array('0minirezo', '1comite'));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Autorisation de créer l'élément (chapitre) dans un articles
|
||||
*
|
||||
* @param string $faire Action demandée
|
||||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||
* @param int $id Identifiant de l'objet
|
||||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||
* @param array $opt Options de cette autorisation
|
||||
* @return bool true s'il a le droit, false sinon
|
||||
**/
|
||||
function autoriser_article_creerchapitredans_dist($faire, $type, $id, $qui, $opt) {
|
||||
return ($id and autoriser('voir', 'articles', $id) and autoriser('creer', 'chapitre'));
|
||||
}
|
||||
|
@ -1,7 +1,190 @@
|
||||
<?php
|
||||
if (!defined('_ECRIRE_INC_VERSION')) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function filtre_escape_json($texte) {
|
||||
return str_replace("\"", "\\\"", str_replace("\n", "\\n", str_replace("\n\n", "\n<br><br>\n", $texte)));
|
||||
}
|
||||
|
||||
function filtre_decode_html($texte) {
|
||||
return html_entity_decode($texte);
|
||||
}
|
||||
|
||||
function filtre_mes_supp_numero($texte) {
|
||||
$idx = strpos($texte, "-");
|
||||
return trim(substr($texte, $idx +1));
|
||||
}
|
||||
|
||||
function balise_MES_IMPORT($p) {
|
||||
$id_rubrique = "''";
|
||||
$id_secteur = "''";
|
||||
if (($v = interprete_argument_balise(1,$p))!==NULL){
|
||||
$id_rubrique = $v;
|
||||
if (($v = interprete_argument_balise(2,$p))!==NULL) {
|
||||
$id_secteur = $v;
|
||||
}
|
||||
}
|
||||
$p->code = "mes_Import()";
|
||||
return $p;
|
||||
}
|
||||
|
||||
function mes_Import_Historique() {
|
||||
$historique = simplexml_load_file ("/var/www/exemole.fr/libreavous/historique.xml");
|
||||
foreach ($historique->item as $item) {
|
||||
$code = $item['code'];
|
||||
$array = array(
|
||||
'drupal_guid' => $item['guid'],
|
||||
'drupal_pubdate' => $item['pubdate']
|
||||
);
|
||||
$type = $item['type'];
|
||||
if ($type == 'emission') {
|
||||
$existant = sql_select("id_article","spip_articles","podcast_code=".sql_quote($code));
|
||||
if ($existant and sql_count($existant)>0) {
|
||||
$r = sql_fetch($existant);
|
||||
$id_article = $r["id_article"];
|
||||
sql_updateq("spip_articles", $array, "id_article=".$id_article);
|
||||
} else {
|
||||
echo "Émission inconnue = $code<br>" ;
|
||||
}
|
||||
} else {
|
||||
$chapitreExistant = sql_select("id_chapitre","spip_chapitres",array("code_podcast=".sql_quote($code), "code_fichier=".sql_quote($item['chapitre'])));
|
||||
if ($chapitreExistant and sql_count($chapitreExistant)>0) {
|
||||
$r = sql_fetch($chapitreExistant);
|
||||
$id_chapitre = $r["id_chapitre"];
|
||||
sql_updateq("spip_chapitres", $array, "id_chapitre=".$id_chapitre);
|
||||
} else {
|
||||
echo "Chapitre inconnu = $code / fichier = ".$item['chapitre']."<br>" ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function mes_Import($id_rubrique, $id_secteur) {
|
||||
$emissions = simplexml_load_file ("/var/www/exemole.fr/libreavous/verspip.xml");
|
||||
foreach ($emissions->emission as $emission) {
|
||||
$code = $emission["code"];
|
||||
$emissionArray = array(
|
||||
'lang' => 'fr',
|
||||
'surtitre' => $emission["numero"],
|
||||
'titre' => $emission["numero"].' - '.$emission["titre"],
|
||||
'soustitre' => "",
|
||||
'id_rubrique' => $id_rubrique,
|
||||
'id_secteur' => $id_secteur,
|
||||
'descriptif' => $emission["description"],
|
||||
'chapo' => $emission["programme"],
|
||||
'texte' => $emission["references"],
|
||||
'ps' => "",
|
||||
'statut' => 'publie',
|
||||
'accepter_forum' => 'non',
|
||||
'date' => mes_toDateIso($emission["code"]),
|
||||
'podcast_code' => $emission["code"],
|
||||
'podcast_duree' => $emission["duree"],
|
||||
'podcast_mp3' => $emission["mp3"],
|
||||
'podcast_ogg' => $emission["ogg"],
|
||||
'podcast_transcription' => $emission["transcription"],
|
||||
'podcast_personnes' => $emission["personnes"],
|
||||
'podcast_galeriephotos' => $emission["galeriephotos"],
|
||||
'podcast_musique' => $emission["musique"]
|
||||
);
|
||||
$existant = sql_select("id_article","spip_articles","podcast_code=".sql_quote($code));
|
||||
if ($existant and sql_count($existant)>0) {
|
||||
$r = sql_fetch($existant);
|
||||
$id_article = $r["id_article"];
|
||||
sql_updateq("spip_articles", $emissionArray, "id_article=".$id_article);
|
||||
} else {
|
||||
$id_article = sql_insertq("spip_articles", $emissionArray);
|
||||
}
|
||||
foreach ($emission->chapitre as $chapitre) {
|
||||
$code_chapitre = $chapitre["code"];
|
||||
$chapitreArray = array(
|
||||
'titre' => $chapitre["titre"],
|
||||
'code' => $chapitre["code"],
|
||||
'id_article' => $id_article,
|
||||
'code_fichier' => $chapitre["fichier"],
|
||||
'code_podcast' => $emission["code"],
|
||||
'debut' => $chapitre["debut"],
|
||||
'fin' => $chapitre["fin"],
|
||||
'type_sujet' => $chapitre["type"],
|
||||
'chronique' => $chapitre["chronique"],
|
||||
'mp3' => $chapitre["mp3"],
|
||||
'ogg' => $chapitre["ogg"],
|
||||
'references_sujet' => $chapitre["references"]
|
||||
);
|
||||
$chapitreExistant = sql_select("id_chapitre","spip_chapitres",array("id_article=".$id_article, "code=".sql_quote($code_chapitre)));
|
||||
if ($chapitreExistant and sql_count($chapitreExistant)>0) {
|
||||
$r = sql_fetch($chapitreExistant);
|
||||
$id_chapitre = $r["id_chapitre"];
|
||||
sql_updateq("spip_chapitres", $chapitreArray, "id_chapitre=".$id_chapitre);
|
||||
} else {
|
||||
$id_nouveau_chapitre = sql_insertq("spip_chapitres", $chapitreArray);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function mes_toDateIso($code) {
|
||||
$texte = substr($code, 0, 4)."-".substr($code,4,2)."-".substr($code,6,2)." 15:30:00";
|
||||
return $texte;
|
||||
}
|
||||
|
||||
function filtre_mes_mio($number) {
|
||||
$mio = round($number / (1024 * 1024), 1);
|
||||
if ($mio < 10) {
|
||||
$mio = round($mio, 2);
|
||||
return number_format($mio, 2, ',', ' ');
|
||||
} else if ($mio < 100) {
|
||||
$mio = round($mio, 1);
|
||||
return number_format($mio, 1, ',', ' ');
|
||||
} else {
|
||||
$mio = round($mio, 0);
|
||||
return number_format($mio, 0, ',', ' ');
|
||||
}
|
||||
return $mio;
|
||||
}
|
||||
|
||||
function filtre_mes_conversionDrupal($shortdate) {
|
||||
$annee = substr($shortdate, 0, 4);
|
||||
$mois = substr($shortdate, 4, 2);
|
||||
$jour = substr($shortdate, 6, 2);
|
||||
if (substr($jour, 0, 1) == "0") {
|
||||
$jour = substr($jour, 1, 1);
|
||||
}
|
||||
return $jour."-".mes_conversionMoisDrupal($mois)."-".$annee;
|
||||
}
|
||||
|
||||
function mes_conversionMoisDrupal($mois) {
|
||||
switch($mois) {
|
||||
case "01":
|
||||
return "janvier";
|
||||
case "02":
|
||||
return "fevrier";
|
||||
case "03":
|
||||
return "mars";
|
||||
case "04":
|
||||
return "avril";
|
||||
case "05":
|
||||
return "mai";
|
||||
case "06":
|
||||
return "juin";
|
||||
case "07":
|
||||
return "juillet";
|
||||
case "08":
|
||||
return "aout";
|
||||
case "09":
|
||||
return "septembre";
|
||||
case "10":
|
||||
return "octobre";
|
||||
case "11":
|
||||
return "novembre";
|
||||
case "12":
|
||||
return "decembre";
|
||||
default:
|
||||
return "XX";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
99
libreavous_pipelines.php
Normal file
99
libreavous_pipelines.php
Normal file
@ -0,0 +1,99 @@
|
||||
<?php
|
||||
/**
|
||||
* Utilisations de pipelines par chapitre
|
||||
*
|
||||
* @plugin chapitre
|
||||
* @copyright 2021
|
||||
* @author chankalan,vcalame
|
||||
* @licence GNU/GPL
|
||||
* @package SPIP\Chapitre\Pipelines
|
||||
*/
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Un fichier de pipelines permet de regrouper
|
||||
* les fonctions de branchement de votre plugin
|
||||
* sur des pipelines existants.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Ajouter les objets sur les vues des parents directs
|
||||
*
|
||||
* @pipeline affiche_enfants
|
||||
* @param array $flux Données du pipeline
|
||||
* @return array Données du pipeline
|
||||
**/
|
||||
function libreavous_affiche_enfants($flux) {
|
||||
if (
|
||||
$e = trouver_objet_exec($flux['args']['exec'])
|
||||
and $e['edition'] === false
|
||||
) {
|
||||
$id_objet = $flux['args']['id_objet'];
|
||||
|
||||
$id_rubrique = sql_getfetsel("id_rubrique", "spip_articles", "id_article=" . intval($id_objet));
|
||||
$composition_rubrique = sql_getfetsel("composition", "spip_rubriques", "id_rubrique=" . intval($id_rubrique));
|
||||
|
||||
if ($e['type'] === 'article' and $composition_rubrique === 'emissions') {
|
||||
$flux['data'] .= recuperer_fond(
|
||||
'prive/objets/liste/chapitres',
|
||||
array(
|
||||
'titre' => _T('chapitre:titre_chapitres'),
|
||||
'id_article' => $id_objet
|
||||
)
|
||||
);
|
||||
|
||||
if (autoriser('creerchapitredans', 'articles', $id_objet)) {
|
||||
include_spip('inc/presentation');
|
||||
$flux['data'] .= icone_verticale(
|
||||
_T('chapitre:icone_creer_chapitre'),
|
||||
generer_url_ecrire('chapitre_edit', "id_article=$id_objet"),
|
||||
'chapitre-24.png',
|
||||
'new',
|
||||
'right'
|
||||
) . "<br class='nettoyeur' />";
|
||||
}
|
||||
}
|
||||
}
|
||||
return $flux;
|
||||
}
|
||||
|
||||
/**
|
||||
* Afficher le nombre d'éléments dans les parents
|
||||
*
|
||||
* @pipeline boite_infos
|
||||
* @param array $flux Données du pipeline
|
||||
* @return array Données du pipeline
|
||||
**/
|
||||
function libreavous_boite_infos($flux) {
|
||||
if (isset($flux['args']['type']) and isset($flux['args']['id']) and $id = intval($flux['args']['id'])) {
|
||||
$texte = '';
|
||||
if ($flux['args']['type'] == 'article' and $nb = sql_countsel('spip_chapitres', array('id_article=' . $id))) {
|
||||
$texte .= '<div>' . singulier_ou_pluriel($nb, 'chapitre:info_1_chapitre', 'chapitre:info_nb_chapitres') . "</div>\n";
|
||||
}
|
||||
if ($texte and $p = strpos($flux['data'], '<!--nb_elements-->')) {
|
||||
$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
|
||||
}
|
||||
}
|
||||
return $flux;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Compter les enfants d'un objet
|
||||
*
|
||||
* @pipeline objets_compte_enfants
|
||||
* @param array $flux Données du pipeline
|
||||
* @return array Données du pipeline
|
||||
**/
|
||||
function libreavous_objet_compte_enfants($flux) {
|
||||
if ($flux['args']['objet'] == 'article' and $id_article = intval($flux['args']['id_objet'])) {
|
||||
$flux['data']['chapitres'] = sql_countsel('spip_chapitres', 'id_article= ' . intval($id_article));
|
||||
}
|
||||
|
||||
return $flux;
|
||||
}
|
16
paquet.xml
16
paquet.xml
@ -1,10 +1,10 @@
|
||||
<paquet
|
||||
prefix="libreavous"
|
||||
categorie="squelette"
|
||||
version="0.1.0"
|
||||
|
||||
version="0.2.0"
|
||||
schema="0.1.0"
|
||||
etat="dev"
|
||||
compatibilite="[3.2.8;3.3.*]"
|
||||
compatibilite="[3.2.8;4.0.*]"
|
||||
>
|
||||
<nom>+ APRIL - LIBRE À VOUS</nom>
|
||||
<!-- personnalisons le site LIBRE À VOUS -->
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
<necessite nom="baz_april" />
|
||||
|
||||
<!-- <necessite nom="cextras" /> -->
|
||||
<necessite nom="cextras" />
|
||||
<!-- <necessite nom="sommaire" /> -->
|
||||
|
||||
<chemin path="squelettes" />
|
||||
@ -21,8 +21,12 @@
|
||||
<chemin path="" />
|
||||
|
||||
<pipeline nom="autoriser" inclure="libreavous_autorisations.php"/>
|
||||
<!-- <pipeline nom="declarer_champs_extras" inclure="base/librealire.php"/> -->
|
||||
<!-- <pipeline nom="declarer_tables_objets_sql" inclure="base/librealire.php" /> -->
|
||||
<pipeline nom="declarer_champs_extras" inclure="base/libreavous.php"/>
|
||||
<pipeline nom="declarer_tables_objets_sql" inclure="base/libreavous.php" />
|
||||
<pipeline nom="declarer_tables_interfaces" inclure="base/libreavous.php" />
|
||||
<pipeline nom="affiche_enfants" inclure="libreavous_pipelines.php" />
|
||||
<pipeline nom="boite_infos" inclure="libreavous_pipelines.php" />
|
||||
<pipeline nom="objet_compte_enfants" inclure="libreavous_pipelines.php" />
|
||||
|
||||
<!-- <menu nom="configurer_librealire" titre="librealire:options_lal" parent="menu_squelette" icone="images/baz_april-16.png" /> -->
|
||||
|
||||
|
62
prive/objets/contenu/chapitre.html
Normal file
62
prive/objets/contenu/chapitre.html
Normal file
@ -0,0 +1,62 @@
|
||||
<BOUCLE_chapitre(CHAPITRES){id_chapitre}>
|
||||
[<div class="champ contenu_titre[ (#TITRE*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_titre_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{titre} titre">(#TITRE)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_code[ (#CODE*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_code_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{code} code">(#CODE)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_code_fichier[ (#CODE_FICHIER*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_code_fichier_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{code_fichier} code_fichier">(#CODE_FICHIER)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_code_podcast[ (#CODE_PODCAST*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_code_podcast_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{code_podcast} code_podcast">(#CODE_PODCAST)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_debut[ (#DEBUT*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_debut_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{debut} debut">(#DEBUT)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_fin[ (#FIN*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_fin_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{fin} fin">(#FIN)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_type_sujet[ (#TYPE_SUJET*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_type_sujet_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{type_sujet} type_sujet">(#TYPE_SUJET)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_chronique[ (#CHRONIQUE*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_chronique_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{chronique} chronique">(#CHRONIQUE)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_mp3[ (#MP3*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_mp3_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{mp3} mp3">(#MP3)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_ogg[ (#OGG*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_ogg_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{ogg} ogg">(#OGG)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_drupal_guid[ (#DRUPAL_GUID*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_drupal_guid_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{drupal_guid} drupal_guid">(#DRUPAL_GUID)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_drupal_pubdate[ (#DRUPAL_PUBDATE*|strlen|?{'',vide})]">
|
||||
<div class="label"><:chapitre:champ_drupal_pubdate_label:/> : </div>
|
||||
<span dir="#LANG_DIR" class="#EDIT{drupal_pubdate} drupal_pubdate">(#DRUPAL_PUBDATE)</span>
|
||||
</div>]
|
||||
|
||||
</BOUCLE_chapitre>
|
22
prive/objets/infos/chapitre.html
Normal file
22
prive/objets/infos/chapitre.html
Normal file
@ -0,0 +1,22 @@
|
||||
<BOUCLE_chapitre(CHAPITRES){id_chapitre=#ENV{id}}>
|
||||
<div class="infos">
|
||||
[(#SET{texte_objet,<:chapitre:titre_chapitre:/>})]
|
||||
<div class="numero"><:titre_cadre_numero_objet{objet=#GET{texte_objet}}:/><p>#ID_CHAPITRE</p></div>
|
||||
|
||||
<div class='nb_elements'><!--nb_elements--></div>
|
||||
|
||||
[(#VAL{redirect}
|
||||
|generer_url_action{type=chapitre&id=#ID_CHAPITRE}
|
||||
|parametre_url{var_mode,calcul}
|
||||
|icone_horizontale{<:icone_voir_en_ligne:>,racine})]
|
||||
|
||||
[(#AUTORISER{supprimer, chapitre, #ID_CHAPITRE}|oui)
|
||||
<hr />
|
||||
[(#BOUTON_ACTION{
|
||||
[(#CHEMIN_IMAGE{chapitre-del-24.png}|balise_img{<:chapitre:supprimer_chapitre:/>}|concat{' ',#VAL{<:chapitre:supprimer_chapitre:/>}|wrap{<b>}}|trim)],
|
||||
#URL_ACTION_AUTEUR{supprimer_chapitre, #ID_CHAPITRE, #URL_ECRIRE{chapitres}},
|
||||
icone s24 horizontale danger chapitre-del-24, <:chapitre:confirmer_supprimer_chapitre:/>})]
|
||||
]
|
||||
|
||||
</div>
|
||||
</BOUCLE_chapitre>
|
34
prive/objets/liste/chapitres.html
Normal file
34
prive/objets/liste/chapitres.html
Normal file
@ -0,0 +1,34 @@
|
||||
[(#SET{defaut_tri,#ARRAY{
|
||||
titre,1,
|
||||
id_chapitre,1,
|
||||
points,-1
|
||||
}})]<B_liste_chapitres>
|
||||
#ANCRE_PAGINATION
|
||||
<div class="liste-objets chapitres">
|
||||
<table class="spip liste">
|
||||
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{chapitre:info_1_chapitre,chapitre:info_nb_chapitres}})</strong></caption>]
|
||||
<thead>
|
||||
<tr class="first_row">
|
||||
<th class="picto" scope="col"></th>
|
||||
<th class="titre" scope="col">[(#TRI{titre,<:chapitre:champ_titre_label:/>,ajax})]</th>
|
||||
<th class="id" scope="col">[(#TRI{id_chapitre,<:info_numero_abbreviation:/>,ajax})]</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<BOUCLE_liste_chapitres(CHAPITRES){id_article?}{id_mot?}{id_auteur?}{where?}{recherche?}{tri #ENV{par,num titre},#GET{defaut_tri}}{par titre}{pagination #ENV{nb,10}}>
|
||||
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
|
||||
<td class="picto">[(#CHEMIN_IMAGE{chapitre-16.png}|balise_img)]</td>
|
||||
<td class="titre principale">[(#LOGO_CHAPITRE|image_reduire{20,26})]<a href="[(#ID_CHAPITRE|generer_url_entite{chapitre})]" title="<:info_numero_abbreviation|attribut_html:/> #ID_CHAPITRE">[(#RANG). ]#TITRE</a></td>
|
||||
<td class="id">[(#AUTORISER{modifier,chapitre,#ID_CHAPITRE}|?{
|
||||
<a href="[(#URL_ECRIRE{chapitre_edit,id_chapitre=#ID_CHAPITRE})]">#ID_CHAPITRE</a>,
|
||||
#ID_CHAPITRE
|
||||
})]</td>
|
||||
</tr>
|
||||
</BOUCLE_liste_chapitres>
|
||||
</tbody>
|
||||
</table>
|
||||
[<nav role="navigation" class="pagination">(#PAGINATION{prive})</nav>]
|
||||
</div>
|
||||
</B_liste_chapitres>[
|
||||
<div class="liste-objets chapitres caption-wrap"><strong class="caption">(#ENV*{sinon,''})</strong></div>
|
||||
]<//B_liste_chapitres>
|
56
prive/squelettes/contenu/chapitre.html
Normal file
56
prive/squelettes/contenu/chapitre.html
Normal file
@ -0,0 +1,56 @@
|
||||
[(#AUTORISER{voir,chapitre,#ID_CHAPITRE}|sinon_interdire_acces)]
|
||||
[(#SET{url_voir,#VAL{chapitre}|objet_info{url_voir}})]
|
||||
[(#SET{url_edit,#VAL{chapitre}|objet_info{url_edit}})]
|
||||
<BOUCLE_chapitre(CHAPITRES){id_chapitre}{si #ENV{exec}|=={#GET{url_voir}}}>
|
||||
[(#BOITE_OUVRIR{[
|
||||
[(#AUTORISER{modifier,chapitre,#ID_CHAPITRE})
|
||||
[(#ID_CHAPITRE|afficher_qui_edite{chapitre}|non)
|
||||
[(#URL_ECRIRE{#GET{url_edit},id_chapitre=#ID_CHAPITRE}|icone_verticale{<:chapitre:icone_modifier_chapitre:/>,chapitre,edit,right ajax preload})]
|
||||
]
|
||||
[(#ID_CHAPITRE|afficher_qui_edite{chapitre}|oui)
|
||||
[(#URL_ECRIRE{#GET{url_edit},id_chapitre=#ID_CHAPITRE}|icone_verticale{#ID_CHAPITRE|afficher_qui_edite{chapitre},warning-24,'',right edition_deja ajax preload})]
|
||||
]
|
||||
]
|
||||
|
||||
<h1>[(#RANG). ](#TITRE|sinon{<:info_sans_titre:/>})[(#CHEMIN_IMAGE{chapitre-24.png}|balise_img{chapitre,cadre-icone})]</h1>
|
||||
|
||||
],simple fiche_objet})]
|
||||
|
||||
<div class="ajax">
|
||||
#FORMULAIRE_DATER{chapitre,#ID_CHAPITRE}
|
||||
</div>
|
||||
|
||||
<!--affiche_milieu-->
|
||||
|
||||
<div id="wysiwyg">
|
||||
<INCLURE{fond=prive/objets/contenu/chapitre,id=#ID_CHAPITRE,id_chapitre=#ID_CHAPITRE,virtuel=oui,ajax=wysiwyg,wysiwyg=1}>
|
||||
</div>
|
||||
|
||||
<div class="nettoyeur"></div>
|
||||
|
||||
[(#AUTORISER{modifier,chapitre,#ID_CHAPITRE})
|
||||
[(#ID_CHAPITRE|afficher_qui_edite{chapitre}|non)
|
||||
[(#URL_ECRIRE{#GET{url_edit},id_chapitre=#ID_CHAPITRE}|icone_verticale{<:chapitre:icone_modifier_chapitre:/>,chapitre,edit,right ajax preload})]
|
||||
]
|
||||
[(#ID_CHAPITRE|afficher_qui_edite{chapitre}|oui)
|
||||
[(#URL_ECRIRE{#GET{url_edit},id_chapitre=#ID_CHAPITRE}|icone_verticale{#ID_CHAPITRE|afficher_qui_edite{chapitre},warning-24,'',right edition_deja ajax preload})]
|
||||
]
|
||||
]
|
||||
|
||||
#PIPELINE{afficher_complement_objet,#ARRAY{args,#ARRAY{type,chapitre,id,#ID_CHAPITRE},data,'<div class="nettoyeur"></div>'}}
|
||||
|
||||
#BOITE_FERMER
|
||||
|
||||
|
||||
#SET{enfants,''}
|
||||
[(#VAL{prive/objets/contenu/chapitre-enfants}|trouver_fond|oui)
|
||||
[(#SET{enfants,[(#INCLURE{fond=prive/objets/contenu/chapitre-enfants,id_chapitre,env})]})]
|
||||
]
|
||||
[(#PIPELINE{affiche_enfants,[(#ARRAY{args,#ARRAY{exec,chapitre,id_chapitre,#ID_CHAPITRE,objet,chapitre,id_objet,#ID_CHAPITRE},data,#GET{enfants}})]})]
|
||||
|
||||
[(#CONST{_AJAX}|oui)
|
||||
<script type="text/javascript">/*<!\\[CDATA\\[*/reloadExecPage('#ENV{exec}','#navigation,#chemin,#extra');/*\\]\\]>*/</script>
|
||||
]
|
||||
</BOUCLE_chapitre>
|
||||
[(#ENV**{exec}|=={#GET{url_edit}}|?{#INCLURE{fond=prive/squelettes/contenu/#GET{url_edit},redirect='',env,retourajax=oui},#REM|sinon_interdire_acces})]
|
||||
<//B_chapitre>
|
36
prive/squelettes/contenu/chapitre_edit.html
Normal file
36
prive/squelettes/contenu/chapitre_edit.html
Normal file
@ -0,0 +1,36 @@
|
||||
[(#ID_CHAPITRE|oui)
|
||||
[(#AUTORISER{modifier,chapitre,#ID_CHAPITRE}|sinon_interdire_acces)]
|
||||
[(#SET{id_parent,#INFO_ID_ARTICLE{chapitre,#ID_CHAPITRE}})]
|
||||
]
|
||||
|
||||
[(#ID_CHAPITRE|non)
|
||||
#SET{id_parent,#ENV{id_article,#ENV{id_parent}}}
|
||||
[(#GET{id_parent}|non|ou{[(#AUTORISER{creerchapitredans, article, #GET{id_parent}})]}|sinon_interdire_acces)]
|
||||
]
|
||||
|
||||
#SET{redirect,#ENV{redirect}|sinon{#ID_CHAPITRE|?{#ID_CHAPITRE|generer_url_entite{chapitre},#GET{id_parent}|?{#GET{id_parent}|generer_url_entite{article},#URL_ECRIRE{articles}}}}}
|
||||
|
||||
|
||||
|
||||
<div class="cadre-formulaire-editer">
|
||||
<div class="entete-formulaire">
|
||||
[(#ID_CHAPITRE|oui)
|
||||
[(#GET{redirect}|icone_verticale{<:icone_retour:/>,chapitre,'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})]
|
||||
]
|
||||
[
|
||||
[(#ID_CHAPITRE|?{<:chapitre:icone_modifier_chapitre:/>,<:chapitre:icone_creer_chapitre:/>})]
|
||||
<h1>(#ENV*{titre,#INFO_TITRE{chapitre,#ID_CHAPITRE}|sinon{<:info_sans_titre:/>}})</h1>
|
||||
]
|
||||
</div>
|
||||
|
||||
#SET{redirect,#ENV{redirect,#ID_CHAPITRE|generer_url_entite{chapitre}}}
|
||||
[(#ENV{retourajax,''}|oui)
|
||||
#SET{redirect,'javascript:if (window.jQuery) jQuery(".entete-formulaire .retour a").followLink();'}
|
||||
<div class="ajax">
|
||||
]
|
||||
[(#FORMULAIRE_EDITER_CHAPITRE{#ENV{id_chapitre,oui}, #GET{id_parent}, #GET{redirect}})]
|
||||
[(#ENV{retourajax,''}|oui)
|
||||
</div>
|
||||
<script type="text/javascript">/*<!\[CDATA\[*/reloadExecPage('#ENV{exec}');/*\]\]>*/</script>
|
||||
]
|
||||
</div>
|
10
prive/squelettes/hierarchie/chapitre.html
Normal file
10
prive/squelettes/hierarchie/chapitre.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!-- hierarchie -->
|
||||
<a href="#URL_ECRIRE{chapitres}"><:chapitre:titre_chapitres:/></a>
|
||||
<BOUCLE_hierarchie(CHAPITRES){id_chapitre}>
|
||||
> [(#URL_ECRIRE{article,id_article=#ID_ARTICLE}|lien_ou_expose{#INFO_TITRE{articles,#ID_ARTICLE},''})]
|
||||
> <strong class="on">#TITRE</strong>
|
||||
</BOUCLE_hierarchie>
|
||||
[(#ENV{id_article}|oui)
|
||||
> [(#URL_ECRIRE{article,id_article=#ID_ARTICLE}|lien_ou_expose{#INFO_TITRE{articles,#ID_ARTICLE},''})]
|
||||
]> <strong class="on"><:ecrire:info_sans_titre:/></strong>
|
||||
<//B_hierarchie>
|
1
prive/squelettes/hierarchie/chapitre_edit.html
Normal file
1
prive/squelettes/hierarchie/chapitre_edit.html
Normal file
@ -0,0 +1 @@
|
||||
<INCLURE{fond=prive/squelettes/hierarchie/chapitre,env} />
|
20
saisies-vues/chapitres.html
Normal file
20
saisies-vues/chapitres.html
Normal file
@ -0,0 +1,20 @@
|
||||
<BOUCLE_test_multiple(CONDITION){si #ENV{multiple}|=={on}|oui}>
|
||||
[(#SET{valeur,[(#ENV*{valeur}|is_array|?{[(#ENV*{valeur})],[(#ENV*{valeur}|explode{','})]})]})]
|
||||
<B_chapitres_selectionnes>
|
||||
<ul>
|
||||
<BOUCLE_chapitres_selectionnes(CHAPITRES){id_chapitre IN #GET*{valeur}}
|
||||
{par num titre, titre}{tout}>
|
||||
<li class="choix">#TITRE (#ID_CHAPITRE)</li>
|
||||
</BOUCLE_chapitres_selectionnes>
|
||||
</ul>
|
||||
</B_chapitres_selectionnes>
|
||||
[(#ENV*{sans_reponse}|propre)]
|
||||
<//B_chapitres_selectionnes>
|
||||
</BOUCLE_test_multiple>
|
||||
<BOUCLE_chapitre_selectionne(CHAPITRES){id_chapitre=#ENV{valeur}}
|
||||
{par num titre, titre}{tout}>
|
||||
<p>#TITRE (#ID_CHAPITRE)</p>
|
||||
</BOUCLE_chapitre_selectionne>
|
||||
[(#ENV*{sans_reponse}|propre)]
|
||||
<//B_chapitre_selectionne>
|
||||
<//B_test_multiple>
|
13
saisies/chapitres.html
Normal file
13
saisies/chapitres.html
Normal file
@ -0,0 +1,13 @@
|
||||
[(#ENV{multiple}|oui)
|
||||
[(#SET{valeur,[(#ENV*{valeur}|is_array|?{[(#ENV*{valeur})],[(#ENV*{valeur}|explode{','})]})]})]
|
||||
]
|
||||
<select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{nom}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple" size="#ENV{size,10}"][ disabled="(#ENV{disable})"]>
|
||||
[(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)
|
||||