Browse Source

Début d'un plugin pour aider à générer des infographies dynamiques

master
kent1@arscenic.info 9 years ago
commit
99ecc7fb57
  1. 40
      .gitattributes
  2. 96
      action/dissocier_donnee.php
  3. 27
      action/editer_infographies_data.php
  4. 36
      action/supprimer_infographies_data.php
  5. 195
      base/infographies.php
  6. 34
      formulaires/editer_infographie.html
  7. 45
      formulaires/editer_infographie.php
  8. 68
      formulaires/editer_infographies_data.html
  9. 61
      formulaires/editer_infographies_data.php
  10. 32
      formulaires/editer_infographies_donnee.html
  11. 46
      formulaires/editer_infographies_donnee.php
  12. 21
      formulaires/joindre_infographies_donnees.html
  13. 119
      formulaires/joindre_infographies_donnees.php
  14. 49
      infographies_administrations.php
  15. 24
      infographies_autoriser.php
  16. 77
      infographies_pipelines.php
  17. 27
      lang/infographie_fr.php
  18. 49
      lang/infographies_data_fr.php
  19. 22
      lang/infographies_donnee_fr.php
  20. 13
      lang/paquet-infographies_fr.php
  21. 32
      paquet.xml
  22. 87
      prive/objets/contenu/infographies_donnees.html
  23. 20
      prive/objets/infos/infographies_data.html
  24. 34
      prive/objets/liste/infographies.html
  25. 34
      prive/objets/liste/infographies_datas.html
  26. 55
      prive/objets/liste/infographies_datas_associer.html
  27. 39
      prive/objets/liste/infographies_datas_lies.html
  28. 29
      prive/squelettes/contenu/infographies_data_edit.html
  29. 31
      prive/squelettes/contenu/infographies_donnee_edit.html
  30. 12
      prive/squelettes/inclure/ajouter-infographies_donnees.html
  31. 12
      prive/style_prive_plugin_terraeco_d3.html
  32. BIN
      prive/themes/spip/images/infographie-16.png
  33. BIN
      prive/themes/spip/images/infographie-24.png
  34. BIN
      prive/themes/spip/images/infographie-32.png
  35. BIN
      prive/themes/spip/images/infographie-64.png
  36. BIN
      prive/themes/spip/images/infographies_data-16.png
  37. BIN
      prive/themes/spip/images/infographies_data-24.png
  38. BIN
      prive/themes/spip/images/infographies_data-32.png
  39. BIN
      prive/themes/spip/images/infographies_data-42.png
  40. BIN
      prive/themes/spip/images/infographies_data-64.png

40
.gitattributes vendored

@ -0,0 +1,40 @@
* text=auto !eol
action/dissocier_donnee.php -text
action/editer_infographies_data.php -text
action/supprimer_infographies_data.php -text
base/infographies.php -text
formulaires/editer_infographie.html -text
formulaires/editer_infographie.php -text
formulaires/editer_infographies_data.html -text
formulaires/editer_infographies_data.php -text
formulaires/editer_infographies_donnee.html -text
formulaires/editer_infographies_donnee.php -text
formulaires/joindre_infographies_donnees.html -text
formulaires/joindre_infographies_donnees.php -text
/infographies_administrations.php -text
/infographies_autoriser.php -text
/infographies_pipelines.php -text
lang/infographie_fr.php -text
lang/infographies_data_fr.php -text
lang/infographies_donnee_fr.php -text
lang/paquet-infographies_fr.php -text
/paquet.xml -text
prive/objets/contenu/infographies_donnees.html -text
prive/objets/infos/infographies_data.html -text
prive/objets/liste/infographies.html -text
prive/objets/liste/infographies_datas.html -text
prive/objets/liste/infographies_datas_associer.html -text
prive/objets/liste/infographies_datas_lies.html -text
prive/squelettes/contenu/infographies_data_edit.html -text
prive/squelettes/contenu/infographies_donnee_edit.html -text
prive/squelettes/inclure/ajouter-infographies_donnees.html -text
prive/style_prive_plugin_terraeco_d3.html -text
prive/themes/spip/images/infographie-16.png -text svneol=unset#image/png
prive/themes/spip/images/infographie-24.png -text svneol=unset#image/png
prive/themes/spip/images/infographie-32.png -text svneol=unset#image/png
prive/themes/spip/images/infographie-64.png -text svneol=unset#image/png
prive/themes/spip/images/infographies_data-16.png -text svneol=unset#image/png
prive/themes/spip/images/infographies_data-24.png -text svneol=unset#image/png
prive/themes/spip/images/infographies_data-32.png -text svneol=unset#image/png
prive/themes/spip/images/infographies_data-42.png -text svneol=unset#image/png
prive/themes/spip/images/infographies_data-64.png -text svneol=unset#image/png

96
action/dissocier_donnee.php

@ -0,0 +1,96 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Dissocier une donnée
* $arg fournit les arguments de la fonction dissocier_document
* sous la forme
* $id_objet-$document-suppr-safe
*
* 4eme arg : suppr = true, false sinon
* 5eme arg : safe = true, false sinon
*
* @return void
*/
function action_dissocier_donnee_dist($arg=null){
if(is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// attention au cas ou id_objet est negatif !
if (strncmp($arg,'-',1)==0){
$arg = explode('-',substr($arg,1));
list($id_objet, $donnee) = $arg;
$id_objet = -$id_objet;
}
else {
$arg = explode('-',$arg);
list($id_objet, $donnee) = $arg;
}
if ($id_objet=intval($id_objet)
AND (
($id_objet<0 AND $id_objet==-$GLOBALS['visiteur_session']['id_auteur'])
OR autoriser('modifier','infographies_data',$id_objet)
)){
dissocier_donnee($donnee, $id_objet);
spip_log("$donnes $id_objet","test."._LOG_ERREUR);
}
else
spip_log("Interdit de modifier $id_objet","spip");
}
/**
* Supprimer un lien entre un document et un objet
*
* @param int $id_document
* @param int $id_objet
* @param bool $supprime
* si true, le document est supprime si plus lie a aucun objet
* @param bool $check
* si true, on verifie les documents references dans le texte de l'objet
* et on les associe si pas deja fait
* @return bool
*/
function supprimer_lien_donnee($id_donnee, $id_objet) {
if (!$id_donnee = intval($id_donnee))
return false;
// D'abord on ne supprime pas, on dissocie
sql_delete('spip_infographies_donnees','id_infographies_donnee='.$id_donnee.' AND id_infographies_data ='.intval($id_objet));
}
/**
* Dissocier un ou des documents
*
* @param int|string $document
* id_document a dissocier
* I/image pour dissocier les images en mode Image
* I/document pour dissocier les images en mode document
* D/document pour dissocier les documents non image en mode document
* @param $id_objet
* id_objet duquel dissocier
* @param bool $supprime
* supprimer les documents orphelins apres dissociation
* @param bool $check
* verifier le texte des documents et relier les documents references dans l'objet
* @return void
*/
function dissocier_donnee($donnee, $id_objet, $check = false){
if ($id_donnee=intval($donnee)) {
supprimer_lien_donnee($donnee, $id_objet);
}
else {
spip_log("$donnee $id_objet",'test.'._LOG_ERREUR);
$s = sql_select('id_infographies_donnee',
"spip_infographies_donnees",
"id_infographies_data = ".intval($id_objet));
while ($t = sql_fetch($s)) {
supprimer_lien_donnee($t['id_infographies_donnee'], $id_objet);
}
}
}
?>

27
action/editer_infographies_data.php

@ -0,0 +1,27 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Associer un jeu de donnée a des objets listes sous forme
* array($objet=>$id_objets,...)
* $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
*
* on peut passer optionnellement une qualification du (des) lien(s) qui sera
* alors appliquee dans la foulee.
* En cas de lot de liens, c'est la meme qualification qui est appliquee a tous
*
* Exemples:
* infographies_data_associer(3, array('infographie'=>2));
*
* @param int $id_infographies_data
* @param array $objets
* @param array $qualif
* @return string
*/
function infographies_data_associer($id_infographies_data,$objets, $qualif = null){
include_spip('action/editer_liens');
return objet_associer(array('infographies_data'=>$id_infographies_data), $objets, $qualif);
}
?>

36
action/supprimer_infographies_data.php

@ -0,0 +1,36 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Effacer un jeu de données
*
* @param null $id_infographies_data
* @return void
*/
function action_supprimer_infographies_data_dist($id_infographies_data=null) {
if (is_null($id_infographies_data)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$id_infographies_data = $securiser_action();
}
if (intval($id_infographies_data)){
/**
* Suppression :
* -* du jeu de données
* -* des auteurs liés au jeu de données
* -* des liens du jeu de données
*/
sql_delete("spip_infographies_datas", "id_infographies_data=".intval($id_infographies_data));
sql_delete("spip_auteurs_liens", "objet='infographies_data' AND id_objet=".intval($id_infographies_data));
sql_delete("spip_infographies_datas_liens", "id_infographies_data=".intval($id_infographies_data));
// invalider les caches marques de ce jeu de données
include_spip('inc/invalideur');
suivre_invalideur("id='infographies_data/$id_infographies_data'");
}
}
?>

195
base/infographies.php

@ -0,0 +1,195 @@
<?php
/**
* Infographies
*
* Auteurs :
* kent1 (http://www.kent1.info - kent1@arscenic.info)
* Distribué sous licence GNU/GPL
*
* Déclarations relatives à la base de données
*
* @package SPIP\Infographies\Pipelines
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Déclarer les interfaces des tables spip_infographies et spip_infographies_datas
* pour le compilateur
*
* On traite également les raccours sur la balise CREDITS
* @pipeline declarer_tables_interfaces
* @param array $interfaces
* Déclarations d'interface pour le compilateur
* @return array
* Déclarations d'interface pour le compilateur
*/
function infographies_declarer_tables_interfaces($interface){
$interface['table_des_tables']['infographies'] = 'infographies';
$interface['table_des_tables']['infographies_datas'] = 'infographies_datas';
$interface['table_des_tables']['infographies_donnees'] = 'infographies_donnees';
$interface['table_des_traitements']['AXE_X'][] = _TRAITEMENT_TYPO;
$interface['table_des_traitements']['AXE_Y'][] = _TRAITEMENT_TYPO;
$interface['table_des_traitements']['CREDITS'][] = _TRAITEMENT_RACCOURCIS;
$interface['table_des_traitements']['COMMENTAIRE'][] = _TRAITEMENT_RACCOURCIS;
$interface['tables_jointures']['spip_infographies'][] = 'infographies_datas';
return $interface;
}
/**
* Insertion dans le pipeline declarer_tables_objets_sql (SPIP)
*
* Déclaration de l'objet supplémentaire grappes
*
* @param array $tables
* Le tableau de définition de tous les objets
* @return array $tables
* Le tableau complété avec notre objet supplémentaire
*/
function infographies_declarer_tables_objets_sql($tables){
$tables['spip_infographies'] = array(
'type' => 'infographie',
'principale' => 'oui',
'titre' => "titre, '' AS lang",
'date' => "date",
'page' => 'infographie',
'url_voir' => 'infographie',
'url_edit' => 'infographie_edit',
'editable' => 'oui',
'texte_changer_statut' => 'infographie:texte_infographie_statut',
'field' => array(
"id_infographie" => "bigint(21) NOT NULL",
"titre" => "varchar(255) NOT NULL DEFAULT ''",
"texte" => "longtext DEFAULT '' NOT NULL",
"credits" => "text DEFAULT '' NOT NULL",
"date" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"statut" => "varchar(10) DEFAULT '0' NOT NULL",
"maj" => "TIMESTAMP"
),
'key' => array(
"PRIMARY KEY" => "id_infographie",
"KEY statut" => "statut, date",
),
'join' => array(
"id_infographie"=>"id_infographie"
),
'champs_editables' => array('titre','texte','credits','date'),
'champs_versionnes' => array('titre','texte','credits','date','jointure_auteurs'),
'champs_contenu' => array('texte','credits'),
'rechercher_champs' => array(
'titre' => 8,
'texte' => 5,
'credits' => 1
),
'rechercher_jointures' => array(
'auteur' => array('nom' => 10),
),
'statut'=> array(
array(
'champ' => 'statut',
'publie' => 'publie',
'previsu' => 'publie,prop,prepa',
'post_date' => 'date',
'exception' => 'statut'
)
),
'statut_titres' => array(
'prepa'=>'info_article_redaction',
'prop'=>'infographie:info_infographie_proposee',
'publie'=>'infographie:info_infographie_publiee',
'refuse'=>'infographie:info_infographie_refusee',
'poubelle'=>'infographie:info_infographie_supprimee'
),
'statut_textes_instituer' => array(
'prepa' => 'texte_statut_en_cours_redaction',
'prop' => 'infographie:texte_statut_propose_evaluation',
'publie' => 'infographie:texte_statut_publie',
'refuse' => 'infographie:texte_statut_refuse',
'poubelle' => 'texte_statut_poubelle',
),
);
$tables['spip_infographies_datas'] = array(
'type' => 'infographies_data',
'principale' => 'non',
'field' => array(
"id_infographies_data" => "bigint(21) NOT NULL",
"titre" => "varchar(255) NOT NULL DEFAULT ''",
"texte" => "longtext DEFAULT '' NOT NULL",
"credits" => "text DEFAULT '' NOT NULL",
"css_class" => "varchar(255) NOT NULL DEFAULT ''",
"axe_x" => "varchar(255) NOT NULL DEFAULT ''",
"axe_y" => "varchar(255) NOT NULL DEFAULT ''",
"unite" => "varchar(255) NOT NULL DEFAULT ''",
"type" => "varchar(255) NOT NULL DEFAULT ''",
"url_externe" => "varchar(255) NOT NULL DEFAULT ''",
"date" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"maj" => "TIMESTAMP"
),
'key' => array(
"PRIMARY KEY" => "id_infographies_data"
),
'titre' => "titre, '' AS lang",
'date' => "date",
'champs_editables' => array('titre','texte','credits','css_class','axe_x','axe_y','unite','type','url_externe','date'),
'champs_versionnes' => array('titre','texte','credits','css_class','axe_x','axe_y','unite','type','url_externe','date'),
'champs_contenu' => array('texte','credits','css_class','axe_x','axe_y','unite','url_externe'),
'rechercher_champs' => array(
'titre' => 8,
'texte' => 3,
'credits' => 1
)
);
$tables['spip_infographies_donnees'] = array(
'type' => 'infographies_donnee',
'principale' => 'non',
'field' => array(
"id_infographies_donnee" => "bigint(21) NOT NULL",
"id_infographies_data" => "bigint(21) NOT NULL",
"rang" => "int NOT NULL DEFAULT 0",
"axe_x" => "varchar(255) NOT NULL DEFAULT ''",
"axe_y" => "varchar(255) NOT NULL DEFAULT ''",
"commentaire" => "text NOT NULL",
"date" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"maj" => "TIMESTAMP"
),
'key' => array(
"PRIMARY KEY" => "id_infographies_donnee",
),
'titre' => "commentaire, '' AS lang",
'date' => "date",
'editable' => 'oui',
'champs_editables' => array('rang','id_infographies_data','axe_x','axe_y','commentaire','date'),
'champs_versionnes' => array('rang','id_infographies_data','axe_x','axe_y','commentaire','date'),
'champs_contenu' => array('axe_x','axe_y','axe_x','commentaire'),
'rechercher_champs' => array(
'axe_x' => 8,
'axe_y' => 8,
'commentaire' => 8
)
);
return $tables;
}
function infographies_declarer_tables_auxiliaires($tables_auxiliaires){
$spip_infographies_datas_liens = array(
"id_infographies_data" => "bigint(21) NOT NULL",
"objet" => "VARCHAR (25) DEFAULT '' NOT NULL",
"id_objet" => "bigint(21) NOT NULL");
$spip_infographies_datas_liens_key = array(
"PRIMARY KEY" => "id_infographies_data,id_objet,objet",
"KEY id_objet" => "id_infographies_data");
$tables_auxiliaires['spip_infographies_datas_liens'] = array(
'field' => &$spip_infographies_datas_liens,
'key' => &$spip_infographies_datas_liens_key);
return $tables_auxiliaires;
}
?>

34
formulaires/editer_infographie.html

@ -0,0 +1,34 @@
<div class="formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_infographie,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>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<input type='hidden' name='id_infographie' value='#ENV{id_infographie}' />
<ul>
<li class="editer editer_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]">
<label for="titre"><:info_titre:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{titre})</span>
]<input type='text' class='text' name='titre' id='titre'[ lang='(#LANGUE)'] value="[(#ENV**{titre,''})]"
placeholder="<:infographie:info_nouvelle_infographie|attribut_html:>" />
</li>
<li class="editer editer_texte[ (#ENV**{erreurs}|table_valeur{texte}|oui)erreur]">
<label for="text_area"><:info_texte:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{texte})</span>
][(#ENV**{_texte_trop_long,''})]
<textarea name='texte' id='text_area'[ lang='(#LANGUE)'] rows='[(#ENV**{config}|table_valeur{lignes}|plus{2})]' cols='40'>[(#ENV**{texte})]</textarea>
</li>
<li class="editer editer_credits[ (#ENV**{erreurs}|table_valeur{credits}|oui)erreur]">
<label for="credits"><:medias:label_credits:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{credits})</span>
]<textarea name='credits' id='credits'[ lang='(#LANGUE)'] rows='4' cols='40'>[(#ENV**{credits})]</textarea>
</li>
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><input type='submit' name="save" class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>]
</div>

45
formulaires/editer_infographie.php

@ -0,0 +1,45 @@
<?php
/**
* Terraeco Infographies
*
* Auteurs :
* kent1 (http://www.kent1.info - kent1@arscenic.info)
* 2013 - Distribué sous licence GNU/GPL
*
* Formulaire d'édition d'infographies
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/actions');
include_spip('inc/editer');
function formulaires_editer_infographie_charger_dist($id_infographie='new', $retour='', $lier_trad=0, $config_fonc='infographies_edit_config', $row=array(), $hidden=''){
$valeurs = formulaires_editer_objet_charger('infographie',$id_infographie,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden);
return $valeurs;
}
/**
* Identifier le formulaire en faisant abstraction des parametres qui
* ne representent pas l'objet edite
*/
function formulaires_editer_infographie_identifier_dist($id_infographie='new', $retour='', $lier_trad=0, $config_fonc='infographies_edit_config', $row=array(), $hidden=''){
return serialize(array(intval($id_infographie),$lier_trad));
}
// Choix par defaut des options de presentation
function infographies_edit_config($row){
return array();
}
function formulaires_editer_infographie_verifier_dist($id_infographie='new', $retour='', $lier_trad=0, $config_fonc='infographies_edit_config', $row=array(), $hidden=''){
$erreurs = formulaires_editer_objet_verifier('infographie',$id_infographie,array('titre'));
return $erreurs;
}
// http://doc.spip.org/@inc_editer_infographie_dist
function formulaires_editer_infographie_traiter_dist($id_infographie='new', $retour='', $lier_trad=0, $config_fonc='infographies_edit_config', $row=array(), $hidden=''){
return formulaires_editer_objet_traiter('infographie',$id_infographie,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden);
}
?>

68
formulaires/editer_infographies_data.html

@ -0,0 +1,68 @@
<div class="formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_infographies_data,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>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<input type='hidden' name='id_infographies_data' value='#ENV{id_infographies_data}' />
<ul>
<li class="editer editer_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]">
<label for="titre"><:info_titre:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{titre})</span>
]<input type='text' class='text' name='titre' id='titre'[ lang='(#LANGUE)'] value="[(#ENV**{titre,''})]"
placeholder="<:infographies_data:info_nouveau_infographies_data|attribut_html:>" />
</li>
<li class="editer editer_texte[ (#ENV**{erreurs}|table_valeur{texte}|oui)erreur]">
<label for="text_area"><:info_texte:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{texte})</span>
][(#ENV**{_texte_trop_long,''})]
<textarea name='texte' id='text_area'[ lang='(#LANGUE)'] rows='[(#ENV**{config}|table_valeur{lignes}|plus{2})]' cols='40'>[(#ENV**{texte})]</textarea>
</li>
<li class="editer editer_css_class[ (#ENV**{erreurs}|table_valeur{css_class}|oui)erreur]">
<label for="css_class"><:infographies_data:info_css_class:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{css_class})</span>
]<input type='text' class='text' name='css_class' id='css_class'[ lang='(#LANGUE)'] value="[(#ENV**{css_class,''})]" />
</li>
<li class="editer editer_axe_x[ (#ENV**{erreurs}|table_valeur{axe_x}|oui)erreur]">
<label for="axe_x"><:infographies_data:info_axe_x:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{axe_x})</span>
]<input type='text' class='text' name='axe_x' id='axe_x'[ lang='(#LANGUE)'] value="[(#ENV**{axe_x,''})]" />
</li>
<li class="editer editer_axe_y[ (#ENV**{erreurs}|table_valeur{axe_y}|oui)erreur]">
<label for="axe_y"><:infographies_data:info_axe_y:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{axe_y})</span>
]<input type='text' class='text' name='axe_y' id='axe_y'[ lang='(#LANGUE)'] value="[(#ENV**{axe_y,''})]" />
</li>
<li class="editer editer_unite[ (#ENV**{erreurs}|table_valeur{unite}|oui)erreur]">
<label for="unite"><:infographies_data:info_unite:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{unite})</span>
]<input type='text' class='text' name='unite' id='unite'[ lang='(#LANGUE)'] value="[(#ENV**{unite,''})]" />
</li>
<li class="editer editer_credits[ (#ENV**{erreurs}|table_valeur{credits}|oui)erreur]">
<label for="credits"><:medias:label_credits:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{credits})</span>
]<textarea name='credits' id='credits'[ lang='(#LANGUE)'] rows='4' cols='40'>[(#ENV**{credits})]</textarea>
</li>
<li class="editer editer_type[ (#ENV**{erreurs}|table_valeur{type}|oui)erreur]">
<label for="type"><:infographies_data:info_type:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{type})</span>
]<select name='type' id='type'>
<option value="interne"><:infographies_data:info_type_internes:></option>
<option value="externe"[ (#ENV{type,interne}|=={externe}|oui)selected="selected"]><:infographies_data:info_type_externes:></option>
</select>
</li>
<li class="editer editer_url_externe[ (#ENV**{erreurs}|table_valeur{url_externe}|oui)erreur]">
<label for="url_externe"><:infographies_data:info_url:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{url_externe})</span>
]<p class="explication"><:infographies_data:explication_url:></p>
<input type='text' class='text' name='url_externe' id='url_externe'[ lang='(#LANGUE)'] value="[(#ENV**{url_externe,''})]" />
</li>
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><input type='submit' name="save" class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>]
</div>

61
formulaires/editer_infographies_data.php

@ -0,0 +1,61 @@
<?php
/**
* Terraeco Infographies
*
* Auteurs :
* kent1 (http://www.kent1.info - kent1@arscenic.info)
* 2013 - Distribué sous licence GNU/GPL
*
* Formulaire d'édition de jeux de données
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/actions');
include_spip('inc/editer');
function formulaires_editer_infographies_data_charger_dist($id_infographies_data='new', $retour='',$associer_objet='', $lier_trad=0, $config_fonc='infographies_datas_edit_config', $row=array(), $hidden=''){
$valeurs = formulaires_editer_objet_charger('infographies_data',$id_infographies_data,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden);
return $valeurs;
}
/**
* Identifier le formulaire en faisant abstraction des parametres qui
* ne representent pas l'objet edite
*/
function formulaires_editer_infographies_data_identifier_dist($id_infographies_data='new', $retour='',$associer_objet='', $lier_trad=0, $config_fonc='infographies_datas_edit_config', $row=array(), $hidden=''){
return serialize(array(intval($id_infographies_data),$associer_objet));
}
// Choix par defaut des options de presentation
function infographies_datas_edit_config($row){
return array();
}
function formulaires_editer_infographies_data_verifier_dist($id_infographies_data='new', $retour='',$associer_objet='', $lier_trad=0, $config_fonc='infographies_datas_edit_config', $row=array(), $hidden=''){
$erreurs = formulaires_editer_objet_verifier('infographies_data',$id_infographies_data,array('titre'));
return $erreurs;
}
// http://doc.spip.org/@inc_editer_infographies_data_dist
function formulaires_editer_infographies_data_traiter_dist($id_infographies_data='new', $retour='',$associer_objet='', $lier_trad=0, $config_fonc='infographies_datas_edit_config', $row=array(), $hidden=''){
$res = formulaires_editer_objet_traiter('infographies_data',$id_infographies_data,0,$lier_trad,$retour,$config_fonc,$row,$hidden);
// Un lien auteur a prendre en compte ?
if ($associer_objet AND $id_infographies_data=$res['id_infographies_data']){
$objet = '';
if(preg_match(',^\w+\|[0-9]+$,',$associer_objet)){
list($objet,$id_objet) = explode('|',$associer_objet);
}
if ($objet AND $id_objet AND autoriser('modifier',$objet,$id_objet)){
include_spip('action/editer_infographies_data');
infographies_data_associer($id_infographies_data, array($objet => $id_objet));
if (isset($res['redirect']))
$res['redirect'] = parametre_url ($res['redirect'], "id_lien_ajoute", $id_infographies_data, '&');
}
}
return $res;
}
?>

32
formulaires/editer_infographies_donnee.html

@ -0,0 +1,32 @@
<div class="formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_infographies_data,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>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<input type='hidden' name='id_infographies_data' value='#ENV{id_infographies_data}' />
<ul>
<li class="editer editer_axe_x[ (#ENV**{erreurs}|table_valeur{axe_x}|oui)erreur]">
<label for="axe_x">[(#INFO_AXE_X{infographies_data,#ID_INFOGRAPHIES_DATA}|sinon{<:infographies_data:info_axe_x:>})]</label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{axe_x})</span>
]<input type='text' class='text' name='axe_x' id='axe_x'[ lang='(#LANGUE)'] value="[(#ENV**{axe_x,''})]" />
</li>
<li class="editer editer_axe_y[ (#ENV**{erreurs}|table_valeur{axe_y}|oui)erreur]">
<label for="axe_y">[(#INFO_AXE_Y{infographies_data,#ID_INFOGRAPHIES_DATA}|sinon{<:infographies_data:info_axe_y:>})]</label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{axe_y})</span>
]<input type='text' class='text' name='axe_y' id='axe_y'[ lang='(#LANGUE)'] value="[(#ENV**{axe_y,''})]" />
</li>
<li class="editer editer_commentaire[ (#ENV**{erreurs}|table_valeur{commentaire}|oui)erreur]">
<label for="commentaire"><:infographies_donnee:info_commentaire:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{commentaire})</span>
]<textarea name='commentaire' id='commentaire'[ lang='(#LANGUE)'] rows='4' cols='40'>[(#ENV**{commentaire})]</textarea>
</li>
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><input type='submit' name="save" class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>]
</div>

46
formulaires/editer_infographies_donnee.php

@ -0,0 +1,46 @@
<?php
/**
* Terraeco Infographies
*
* Auteurs :
* kent1 (http://www.kent1.info - kent1@arscenic.info)
* 2013 - Distribué sous licence GNU/GPL
*
* Formulaire d'édition de jeux de données
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/actions');
include_spip('inc/editer');
function formulaires_editer_infographies_donnee_charger_dist($id_infographies_donnee='new', $retour='',$associer_objet='', $lier_trad=0, $config_fonc='infographies_donnees_edit_config', $row=array(), $hidden=''){
$valeurs = formulaires_editer_objet_charger('infographies_donnee',$id_infographies_donnee,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden);
return $valeurs;
}
/**
* Identifier le formulaire en faisant abstraction des parametres qui
* ne representent pas l'objet edite
*/
function formulaires_editer_infographies_donnee_identifier_dist($id_infographies_donnee='new', $retour='',$associer_objet='', $lier_trad=0, $config_fonc='infographies_donnees_edit_config', $row=array(), $hidden=''){
return serialize(array(intval($id_infographies_donnee),$associer_objet));
}
// Choix par defaut des options de presentation
function infographies_donnees_edit_config($row){
return array();
}
function formulaires_editer_infographies_donnee_verifier_dist($id_infographies_donnee='new', $retour='',$associer_objet='', $lier_trad=0, $config_fonc='infographies_donnees_edit_config', $row=array(), $hidden=''){
$erreurs = formulaires_editer_objet_verifier('infographies_donnee',$id_infographies_donnee,array());
return $erreurs;
}
function formulaires_editer_infographies_donnee_traiter_dist($id_infographies_donnee='new', $retour='',$associer_objet='', $lier_trad=0, $config_fonc='infographies_donnees_edit_config', $row=array(), $hidden=''){
$res = formulaires_editer_objet_traiter('infographies_donnee',$id_infographies_donnee,0,$lier_trad,$retour,$config_fonc,$row,$hidden);
return $res;
}
?>

21
formulaires/joindre_infographies_donnees.html

@ -0,0 +1,21 @@
<div class="formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_infographies_data,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>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<input type='hidden' name='id_infographie' value='#ENV{id_infographie}' />
<ul>
<li class="editer_fichier obligatoire[ (#ENV**{erreurs}|table_valeur{fichier}|oui)erreur]">
<label for="fichier"><:infographies_data:info_fichier:></label>
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{fichier})</span>]
<input type="file" id="fichier" name="fichier" value="[(#ENV{fichier})]" />
</li>
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><input type='submit' name="save" class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>]
</div>

119
formulaires/joindre_infographies_donnees.php

@ -0,0 +1,119 @@
<?php
/**
* Terraeco Infographies
*
* Auteurs :
* kent1 (http://www.kent1.info - kent1@arscenic.info)
* 2013 - Distribué sous licence GNU/GPL
*
* Formulaire d'édition d'infographies
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/actions');
include_spip('inc/editer');
function formulaires_joindre_infographies_donnees_charger_dist($id_infographies_data, $retour='', $config_fonc='infographies_edit_config'){
$valeurs = array('editable'=>true);
return $valeurs;
}
/**
* Identifier le formulaire en faisant abstraction des parametres qui
* ne representent pas l'objet edite
*/
function formulaires_joindre_infographies_donnees_identifier_dist($id_infographies_data, $retour='', $config_fonc='infographies_edit_config'){
return serialize(array(intval($id_infographies_data)));
}
// Choix par defaut des options de presentation
function infographies_edit_config($row){
return array();
}
function formulaires_joindre_infographies_donnees_verifier_dist($id_infographies_data, $retour='', $config_fonc='infographies_edit_config'){
$erreurs = array();
$post = isset($_FILES) ? $_FILES : $GLOBALS['HTTP_POST_FILES'];
if (is_array($post)){
$files = array();
foreach ($post as $file) {
if (!($file['error'] == 4)){
if($file['type'] == 'text/csv')
$files[]=$file;
else
$erreurs['fichier'] = 'Erreur upload uniquement CSV';
}
}
if (!count($files) && !isset($erreurs['fichier']))
$erreurs['fichier'] = 'Erreur upload';
}else
$erreurs['fichier'] = 'Erreur upload';
if(!isset($erreurs['fichier'])){
$tmp_name = $files[0]['tmp_name'];
$destination = _DIR_TMP.basename($tmp_name);
$resultat = move_uploaded_file($tmp_name,$destination);
if (!$resultat)
$erreurs['fichier'] = 'Erreur upload';
else {
$fichiercsv = fopen($destination, "r");
$i=1;
while (($data= fgetcsv($fichiercsv,"~")) !== FALSE){
$data = array_filter($data,'strlen');
$nombre_elements = count($data);
if($nombre_elements > 3){
fclose($fichiercsv);
unlink($destination);
$erreurs['fichier'] = "Trop de colonnes à la ligne $i";
return $erreurs;
}
if($nombre_elements < 2){
fclose($fichiercsv);
unlink($destination);
$erreurs['fichier'] = "Pas assez de colonnes à la ligne $i";
return $erreurs;
}
$i++;
}
fclose($fichiercsv);
}
}
if(!count($erreurs))
set_request('path',$destination);
return $erreurs;
}
// http://doc.spip.org/@inc_joindre_infographies_donnees_dist
function formulaires_joindre_infographies_donnees_traiter_dist($id_infographies_data, $retour='', $config_fonc='infographies_edit_config'){
$i = 0;
if($fichier = _request('path')){
$fichiercsv = fopen($fichier, "r");
if($fichiercsv){
include_spip('action/editer_objet');
$i=1;
$rang=1;
while (($data = fgetcsv($fichiercsv,"~")) !== FALSE){
if(($i == 1) && !is_numeric($data[0]) && !is_numeric($data[1])){
$i++;
objet_modifier('infographies_data',$id_infographies_data,array('axe_x'=>$data[0],'axe_y'=>$data[1]));
continue;
}
$set = array('id_infographies_data' => $id_infographies_data,'axe_x'=>$data[0],'axe_y'=>$data[1],'commentaire'=>$data[2],'rang'=>$rang);
$id_objet = objet_inserer('infographies_donnee');
$err = objet_modifier('infographies_donnee', $id_objet, $set);
$rang++;
$i++;
}
}
fclose($fichiercsv);
unlink($fichier);
}
if($i > 1){
$res['message_ok'] = "$i données insérées";
$res['redirect'] = self();
}
return $res;
}
?>

49
infographies_administrations.php

@ -0,0 +1,49 @@
<?php
/**
* Infographies
*
* Auteurs :
* kent1 (http://www.kent1.info - kent1@arscenic.info)
* Distribué sous licence GNU/GPL
*
* Installation et désinstallation du plugin
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
function infographies_upgrade($nom_meta_base_version,$version_cible){
$maj = array();
$maj['create'] = array(
array('maj_tables',array('spip_infographies','spip_infographies_datas','spip_infographies_donnees','spip_infographies_datas_liens'))
);
$maj['0.1.0'] = array(
array('maj_tables',array('spip_infographies_datas'))
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
/**
*
* Désinstallation du plugin
*
* On supprime :
* -* Les quatre tables créées
* -* Les metas de configuration
*
* @param float $nom_meta_base_version
*/
function infographies_vider_tables($nom_meta_base_version) {
sql_drop_table("spip_infographies");
sql_drop_table("spip_infographies_datas");
sql_drop_table("spip_infographies_donnees");
sql_drop_table("spip_infographies_datas_liens");
effacer_meta('infographies');
effacer_meta($nom_meta_base_version);
}
?>

24
infographies_autoriser.php

@ -0,0 +1,24 @@
<?php
/**
* Infographies
*
* Auteurs :
* kent1 (http://www.kent1.info - kent1@arscenic.info)
* Distribué sous licence GNU/GPL
*
* Autorisations du plugin
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Qui peut supprimer un jeu de données
*
* On ne peut le supprimer que si on est administrateur et qu'il n'y a pas de données liées
*/
function autoriser_infographiesdata_supprimer_dist($faire,$quoi,$id,$qui,$options){
$donnees = sql_countsel('spip_infographies_donnees','id_infographies_data='.intval($id));
return ($donnees == 0) && $qui['statut'] == '0minirezo';
}
?>

77
infographies_pipelines.php

@ -0,0 +1,77 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Insertion du lien infographies_data sur infographies
*
* @param array $flux
* @return array
*/
function infographies_affiche_milieu($flux){
// si on est sur une page ou il faut inserer les mots cles...
if ($en_cours = trouver_objet_exec($flux['args']['exec'])
AND $en_cours['edition']!==true // page visu
AND $type = $en_cours['type']
AND $id_table_objet = $en_cours['id_table_objet']
AND ($id = intval($flux['args'][$id_table_objet]))
AND $type == 'infographie'){
$texte = recuperer_fond(
'prive/objets/editer/liens',
array(
'table_source'=>'infographies_datas',
'objet'=>$type,
'id_objet'=>$id,
)
);
if ($p=strpos($flux['data'],"<!--affiche_milieu-->"))
$flux['data'] = substr_replace($flux['data'],$texte,$p,0);
else
$flux['data'] .= $texte;
}
return $flux;
}
/**
* Pipeline afficher_complement_objet
* afficher le portfolio et ajout de document sur les fiches objet
* sur lesquelles les medias ont ete activees
* Pour les articles, on ajoute toujours !
*
* @param $flux
* @return
*/
function infographies_afficher_complement_objet($flux){
if ($type = $flux['args']['type']
AND $id = intval($flux['args']['id'])
AND $type == 'infographies_data'){
$flux['data'] .= recuperer_fond('prive/objets/contenu/infographies_donnees',array_merge($_GET,array('id_infographies_data'=>$id)),array('ajax'=>true));
}
return $flux;
}
/**
* Pipeline header_prive
*
* On réduit les embed dans les tables
* @param $flux
* @return
*/
function infographies_header_prive($flux){
$flux .= "<script type='text/javascript'>"
."var oembed_resize = function(){\n"
."jQuery('table iframe').each(function(){\n"
."var width = jQuery(this).width();\n"
."$(this).width('100%');\n"
."var ratio = jQuery(this).parents('td').width()/width;\n"
."$(this).height(jQuery(this).height()*ratio);\n"
."});"
."}\n"
."onAjaxLoad(oembed_resize);\n"
."jQuery(document).ready(function(){\n"
."oembed_resize();\n"
."});</script>";
return $flux;
}
?>

27
lang/infographie_fr.php

@ -0,0 +1,27 @@
<?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(
// I
'icone_creer_infographie' => 'Créer une infographie',
'info_aucun_infographie' => 'Aucune infographie',
'info_1_infographie' => 'Une infographie',
'info_nb_infographie' => '@nb@ infographies',
'icone_modifier_infographie' => 'Modifier l\'infographie',
'info_nouvelle_infographie' => 'Nouvelle infographie',
'info_infographie_proposee' => 'proposée à l\'évaluation',
// T
'texte_infographie_statut' => 'Cette infographie est :',
'texte_statut_propose_evaluation' => 'proposée à l\'évaluation',
'texte_statut_publie' => 'publiée en ligne',
'texte_statut_refuse' => 'refusée',
'titre_infographie' => 'Infographie',
'titre_infographies' => 'Infographies',
'titre_logo_infographie' => 'Logo de l\'infographie',
);
?>

49
lang/infographies_data_fr.php

@ -0,0 +1,49 @@
<?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(
// B
'bouton_ajouter_donnees' => 'Importer des données',
'bouton_editer' => 'Éditer',
'bouton_supprimer' => 'Supprimer',
'bouton_supprimer_donnee_confirmation' => 'Êtes-vous sûr de vouloir supprimer la donnée ?',
// E
'erreur_aucune_donnee' => 'Aucune donnée n\'est associée à ce jeu de données.',
'explication_url' => 'Adresse URL du jeu de données si il est externe.',
// I
'icone_creer_infographies_data' => 'Créer un jeu de données',
'icone_modifier_infographies_data' => 'Modifier le jeu de données',
'icone_supprimer_supprimer_infographies_data' => 'Supprimer le jeu de données',
'info_1_infographies_data' => 'Un jeu de données',
'info_aucun_infographies_data' => 'Aucun jeu de données',
'info_axe_x' => 'Axe horizontal',
'info_axe_y' => 'Axe vertical',
'info_credits' => 'Crédits',
'info_css_class' => 'Class CSS',
'info_fichier' => 'Fichier de données',
'info_nb_infographies_datas' => '@nb@ jeux de données',
'info_nouveau_infographies_data' => 'Nouveau jeu de données',
'info_retirer_infographies_data' => 'Retirer le jeu de données',
'info_type' => 'Type des données',
'info_type_externes' => 'externes',
'info_type_internes' => 'internes',
'info_unite' => 'Unité de mesure',
'info_url' => 'URL des données',
// L
'lien_ajouter_infographies_data' => 'Ajouter ce jeu de données',
'lien_tout_supprimer' => 'Supprimer toutes les données',
// T
'texte_ajouter_infographies_data' => 'Ajouter un jeu de données',
'texte_creer_associer_infographies_data' => 'Créer et associer un nouveau jeu de données',
'titre_donnees_liees' => 'Données liées',
'titre_infographies_data' => 'Jeu de données',
'titre_infographies_datas' => 'Jeux de données',
'titre_logo_infographies_data' => 'Logo du jeu de données',
);
?>

22
lang/infographies_donnee_fr.php

@ -0,0 +1,22 @@
<?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(
// I
'icone_creer_infographies_donnee' => 'Créer une donnée',
'icone_modifier_infographies_donnee' => 'Modifier la donnée',
'info_1_infographies_donnee' => 'Une donnée',
'info_aucun_infographies_donnee' => 'Aucune donnée',
'info_commentaire' => 'Commentaire / anecdote',
'info_nb_infographies_donnees' => '@nb@ données',
'info_nouveau_infographies_donnee' => 'Nouvelle donnée',
// T
'texte_ajouter_infographies_donnee' => 'Ajouter une donnée',
'titre_infographies_donnee' => 'Donnée',
'titre_infographies_donnees' => 'Données',
'titre_logo_infographies_donnee' => 'Logo de la donnée',
);
?>

13
lang/paquet-infographies_fr.php

@ -0,0 +1,13 @@
<?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(
// E
'infographies_description' => 'Nouveaux objets pour réaliser des infographies',
'infographies_nom' => 'Infographie',
'infographies_slogan' => 'Nouveaux objets pour réaliser des infographies'
);
?>

32
paquet.xml

@ -0,0 +1,32 @@
<paquet
prefix="infographies"
categorie="multimedia"
version="0.1.0"
etat="dev"
logo="prive/themes/spip/images/infographie-64.png"
compatibilite="[3.0.0;3.0.*]"
schema="0.1.0"
>
<nom>Infographies</nom>
<!-- Un objet permettant de réaliser des infographies pour SPIP -->
<auteur lien="http://www.kent1.info" mail="kent1@arscenic.info">kent1</auteur>
<copyright>2013-2014</copyright>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
<pipeline nom="declarer_tables_interfaces" inclure="base/infographies.php" />
<pipeline nom="declarer_tables_objets_sql" inclure="base/infographies.php" />
<pipeline nom="declarer_tables_auxiliaires" inclure="base/infographies.php" />
<pipeline nom="affiche_milieu" inclure="infographies_pipelines.php" />
<pipeline nom="afficher_complement_objet" inclure="infographies_pipelines.php" />
<pipeline nom="header_prive" inclure="infographies_pipelines.php" />
<pipeline nom="autoriser" inclure="infographies_autoriser.php" />
<menu nom="infographies" titre="infographie:titre_infographies" parent="menu_edition" icone="images/infographie-16.png" />
<menu nom="infographie_edit" titre="infographie:icone_creer_infographie" parent="outils_rapides" icone="images/infographie-16.png" action="infographie_edit" parametres="new=oui" />
<menu nom="infographies_datas" titre="infographies_data:titre_infographies_datas" parent="menu_edition" icone="images/infographies_data-16.png" />
<menu nom="infographies_data_edit" titre="infographies_data:icone_creer_infographies_data" parent="outils_rapides" icone="images/infographies_data-16.png" action="infographies_data_edit" parametres="new=oui" />
</paquet>

87
prive/objets/contenu/infographies_donnees.html

@ -0,0 +1,87 @@
<div id="infographies_donnees">
<B_jeu_de_donnees>
[(#INCLURE{fond=prive/squelettes/inclure/ajouter-infographies_donnees, env, ajax})]
<div class="nettoyeur"></div>
<h2><:infographies_data:titre_donnees_liees:></h2>
<BOUCLE_jeu_de_donnees(INFOGRAPHIES_DATAS){id_infographies_data}{tout}>
<B_infographies_donnees>
<script type="text/javascript">
function donnee_editbox_init(){
jQuery('a.editbox:not(.nobox)')
.attr("onclick","").addClass('nobox').click(function(){
var donnee_case = jQuery(this).parents('div#infographies_donnees').eq(0);
jQuery(donnee_case).animateLoading();
jQuery.modalboxload(parametre_url(parametre_url(jQuery(this).attr('href'),'popin','oui'),'var_zajax','contenu'),{
onClose: function (dialog) {jQuery(donnee_case).ajaxReload();}
});
return false;
});
}
var donnee_editbox_initialized;
if (!donnee_editbox_initialized){
if (window.jQuery){
donnee_editbox_initialized = true;
(function($){if(typeof onAjaxLoad == "function") onAjaxLoad(donnee_editbox_init);
$(donnee_editbox_init);
})(jQuery);
}
}
</script>
<div class="liste-objets infographies_donnees">
<table class="spip liste">
<thead>
<th></th>
<th>
[(#_jeu_de_donnees:AXE_X|sinon{<:infographies_data:info_axe_x:>})]
</th>
<th>
[(#_jeu_de_donnees:AXE_Y|sinon{<:infographies_data:info_axe_y:>})]
</th>
<th>
<:infographies_donnee:info_commentaire:>
</th>
<th></th>
<th></th>
<th></th>
</thead>
<tbody>
<BOUCLE_infographies_donnees(INFOGRAPHIES_DONNEES){id_infographies_data}{par rang}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<td>
#RANG
</td>
<td class="#EDIT{axe_x}">
#AXE_X
</td>
<td class="#EDIT{axe_y}">
#AXE_Y
</td>
<td class="#EDIT{commentaire}">
[(#COMMENTAIRE)]
</td>
<td>
[<a href="[(#LOGO_INFOGRAPHIES_DONNEE|extraire_attribut{src})]">(#LOGO_INFOGRAPHIES_DONNEE|image_reduire{20,20})</a>]
</td>
<td>
[(#BOUTON_ACTION{<:infographies_data:bouton_supprimer:>,[(#URL_ACTION_AUTEUR{dissocier_donnee,#ID_INFOGRAPHIES_DATA-#ID_INFOGRAPHIES_DONNEE,#SELF|ancre_url{infographies_donnees}})],ajax,<:infographies_data:bouton_supprimer_donnee_confirmation:>,'',[(#ID_INFOGRAPHIES_DATA)(function(){jQuery("#infographies_donnees").animateRemove();return true;})()]})]
</td>
<td>
<a href="#URL_ECRIRE{infographies_donnee_edit,id_infographies_donnee=#ID_INFOGRAPHIES_DONNEE}" target="_blank" class="editbox">
<:infographies_data:bouton_editer:>
</a>
</td>
</tr>
</BOUCLE_infographies_donnees>
</tbody>
</table>
</div>
[(#BOUTON_ACTION{<:infographies_data:lien_tout_supprimer:>,#URL_ACTION_AUTEUR{dissocier_donnee,#ID_INFOGRAPHIES_DATA-D/document,#SELF|ancre_url{infographies_donnees}},'ajax tout_supprimer',<:ecrire:lien_tout_supprimer:> ?})]
</B_infographies_donnees>
[(#URL_EXTERNE|non)
#BOITE_OUVRIR{'',notice}
<p><:infographies_data:erreur_aucune_donnee:></p>
#BOITE_FERMER]
<//B_infographies_donnees>
</BOUCLE_jeu_de_donnees>
</div>

20
prive/objets/infos/infographies_data.html

@ -0,0 +1,20 @@
<BOUCLE_jeu(INFOGRAPHIES_DATAS){id_infographies_data=#ENV{id}}>
<div class='infos'>
#SET{objet,#VAL{infographies_donnee:titre_infographies_donnee}|_T}
<div class='numero'><:titre_cadre_numero_objet{objet=#GET{objet}}:><p>#ID_INFOGRAPHIES_DATA</p></div>
<B_donnees>
<div class='nb_elements'>
<BOUCLE_donnees(INFOGRAPHIES_DONNEES){id_infographies_data}> </BOUCLE_donnees>
<div>
[(#TOTAL_BOUCLE|singulier_ou_pluriel{infographies_donnee:info_1_infographies_donnee,infographies_donnee:info_nb_infographies_donnees})]
</div>
<!--nb_elements-->
</div>
</B_donnees>
[(#AUTORISER{supprimer,infographies_data,#ID_INFOGRAPHIES_DATA}|oui)
[(#URL_ACTION_AUTEUR{supprimer_infographies_data,#ID_INFOGRAPHIES_DATA,#URL_ECRIRE{infographies_datas}}|icone_horizontale{<:infographies_data:icone_supprimer_supprimer_infographies_data:>,infographies_data,del})]
]
<//B_donnees>
</div>
</div>
</BOUCLE_jeu>

34
prive/objets/liste/infographies.html

@ -0,0 +1,34 @@
#SET{picto,#VAL{infographies}|objet_icone{16}}
<B_jeux>
#ANCRE_PAGINATION
<div class="liste-objets infographies">
<table class='spip liste'>
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{infographie:info_1_infographie,infographie:info_nb_infographies}})</strong></caption>]
<thead>
<tr class='first_row'>
<th class='picto' scope='col'></th>
<th class='titre principale' scope='col'><:info_titre:></th>
<th class='id' scope='col'><:info_numero_abbreviation:></th>
</tr>
</thead>
<tbody>
<BOUCLE_jeux(INFOGRAPHIES){id_infographie?}{recherche?}{pagination #ENV{nb,10}}{statut?}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<td class='picto'>#GET{picto}</td>
<td class='titre principale'><a
href="[(#ID_INFOGRAPHIE|generer_url_entite{infographie})]"
title="<:info_numero_abbreviation|attribut_html:> #ID_INFOGRAPHIE">[(#RANG). ][(#TITRE|sinon{<:info_sans_titre:>})]</a>
</td>
<td class='id'>[(#AUTORISER{modifier,infographie,#ID_INFOGRAPHIE}|?{
[<a href="[(#ID_INFOGRAPHIE|generer_url_ecrire_entite_edit{infographie})]">(#ID_INFOGRAPHIE)</a>],
[(#ID_INFOGRAPHIE)]
})]</td>
</tr>
</BOUCLE_jeux>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_jeux>[
<div class="liste-objets infographies caption-wrap"><strong class="caption">(#ENV*{sinon,''})</strong></div>
]<//B_jeux>

34
prive/objets/liste/infographies_datas.html

@ -0,0 +1,34 @@
#SET{picto,#VAL{infographies_data}|objet_icone{16}}
<B_jeux>
#ANCRE_PAGINATION
<div class="liste-objets infographies_datas">
<table class='spip liste'>
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{infographies_data:info_1_infographies_data,infographies_data:info_nb_infographies_datas}})</strong></caption>]
<thead>
<tr class='first_row'>
<th class='picto' scope='col'></th>
<th class='titre principale' scope='col'><:info_titre:></th>
<th class='id' scope='col'><:info_numero_abbreviation:></th>
</tr>
</thead>
<tbody>
<BOUCLE_jeux(INFOGRAPHIES_DATAS){id_infographies_data?}{recherche?}{pagination #ENV{nb,10}}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<td class='picto'>#GET{picto}</td>
<td class='titre principale'><a
href="[(#ID_INFOGRAPHIES_DATA|generer_url_entite{infographies_data})]"
title="<:info_numero_abbreviation|attribut_html:> #ID_INFOGRAPHIES_DATA">[(#RANG). ][(#TITRE|sinon{<:info_sans_titre:>})]</a>
</td>
<td class='id'>[(#AUTORISER{modifier,infographies_data,#ID_INFOGRAPHIES_DATA}|?{
[<a href="[(#ID_INFOGRAPHIES_DATA|generer_url_ecrire_entite_edit{infographies_data})]">(#ID_INFOGRAPHIES_DATA)</a>],
[(#ID_INFOGRAPHIES_DATA)]
})]</td>
</tr>
</BOUCLE_jeux>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_jeux>[
<div class="liste-objets infographies_datas caption-wrap"><strong class="caption">(#ENV*{sinon,''})</strong></div>
]<//B_jeux>

55
prive/objets/liste/infographies_datas_associer.html

@ -0,0 +1,55 @@
[(#SET{defaut_tri,#ARRAY{
multi titre,1,
}})
]
#SET{exclus,#ENV{objet_source}|lister_objets_lies{#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}}
#SET{debut,#ENV{debutinfographies_dataa,#EVAL{_request("debutinfographies_dataa");}}}
<input type="hidden" name="debutinfographies_dataa" value="#GET{debut}" />
<B_liste_infographies_data>
[(#REM) En cas de pagination indirecte @32, il faut refaire le set car la boucle
a mis a jour la valeur avec la page reelle]
#SET{debut,#ENV{debutinfographies_dataa,#EVAL{_request("debutinfographies_dataa");}}}
#SET{afficher_lettres,#TRI|=={'multi titre'}|oui}
#ANCRE_PAGINATION
[<h3><:info_resultat_recherche:> &laquo;(#ENV{recherche})&raquo;</h3>]
<div class="liste-objets liste-objets-associer infographies_datas">
<table class='spip liste'>
[<caption><span class="caption"><strong>(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{infographies_data:info_1_infographies_data,infographies_data:info_nb_infographies_datas}})</strong>
<span class="recherche">
<label for="recherche-#ENV{id}"><:info_rechercher_02:></label>
<input type="text" class="recherche" name="recherche" id="recherche-#ENV{id}" value="#ENV{recherche}" />
<input type="submit" class="tout_voir" name="tout_voir" value="<:info_tout_afficher:>" />
</span>
</span>
</caption>]
<thead>
<tr class='first_row'>
<th class='statut' scope='col'></th>
<th class='titre' scope='col'>[(#TRI{multi titre,<:info_titre:>,ajax})]</th>
<th class='action' scope='col'>&nbsp;</th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_infographies_data(INFOGRAPHIES_DATAS){!id_infographies_data IN #GET{exclus}}{tout}{where?}{recherche?}{statut?}{tri #ENV{par,multi titre},#GET{defaut_tri}}{pagination #ENV{nb,10} infographies_dataa}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][ (#EXPOSE|unique)][ (#TITRE**|initiale|=={#ENV{i}}|?{on}|unique)]">
<td class='statut'></td>
<td class='titre[ (#TITRE|non)vide]'>[(#LOGO_INFOGRAPHIES_DATA|image_reduire{20,20})]<a href="[(#ID_INFOGRAPHIES_DATA|generer_url_entite{infographies_data})]"[ title="(#BIO*|couper{200}|attribut_html)"]>[(#RANG). ][(#TITRE|sinon{<:texte_vide:>})]</a></td>
<td class='action'><button class="button" name="ajouter_lien[infographies_data-#ID_INFOGRAPHIES_DATA-#OBJET-#ID_OBJET]" value="+"><:infographies_data:lien_ajouter_infographies_data:> [(#CHEMIN_IMAGE{ajouter-12.png}|balise_img{'+'})]</button></td>
</tr>
</BOUCLE_liste_infographies_data>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_liste_infographies_data>
[(#ENV{recherche}|oui)
<div class="liste-objets liste-objets-associer infographies_datas caption-wrap">
<span class="caption"><strong>[(#VAL{infographies_data:info_recherche_infographies_data_zero}|_T{#ARRAY{cherche_infographies_data,#ENV{recherche}}})]</strong>
<span class="recherche">
<label for="recherche-#ENV{id}"><:info_rechercher_02:></label>
<input type="text" class="recherche" name="recherche" id="recherche-#ENV{id}" value="#ENV{recherche}" />
<input type="submit" class="tout_voir" name="tout_voir" value="<:info_tout_afficher:>" />
</span>
</span>
</div>
]<//B_liste_infographies_data>

39
prive/objets/liste/infographies_datas_lies.html

@ -0,0 +1,39 @@
[(#SET{defaut_tri,#ARRAY{
num titre,1,
titre,1,
id_infographies_data,1,
points,-1
}})
]
#SET{selection,#ENV{objet_source}|lister_objets_lies{#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}}
<input type="hidden" name="debutinfographies_datal" value='#ENV{debutinfographies_datal,#EVAL{_request("debutinfographies_datal");}}' />
<B_liste_infographies_data>
#ANCRE_PAGINATION
<div class="liste-objets liste-objets-lies infographies_datas">
<table class='spip liste'>
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{infographies_data:info_1_infographies_data,infographies_data:info_nb_infographies_datas}})</strong></caption>]
<thead>
<tr class='first_row'>
<th class='picto' scope='col'></th>
<th class='titre' scope='col'>[(#TRI{titre,<:info_titre:>,ajax})]</th>
<th class='action' scope='col'>&nbsp;</th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_infographies_data(INFOGRAPHIES_DATAS){id_infographies_data IN #GET{selection}}{where?}{tri #ENV{par,type},#GET{defaut_tri}}{par multi titre}{pagination #ENV{nb,10} infographies_datal}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][(#ID_INFOGRAPHIES_DATAS|=={#ENV{id_lien_ajoute}}|oui)append]">
<td class='picto'></td>
<td class='titre principale'>[(#LOGO_INFOGRAPHIES_DATA|image_reduire{20,20})]<a href="[(#ID_INFOGRAPHIES_DATA|generer_url_entite{infographies_data})]" title="<:info_numero_abbreviation|attribut_html:> #ID_INFOGRAPHIES_DATA">[(#RANG). ]#TITRE</a></td>
<td class='action'><button class="button link delete" name="supprimer_lien[infographies_data-#ID_INFOGRAPHIES_DATA-#OBJET-#ID_OBJET]" value="X"><:infographies_data:info_retirer_infographies_data:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})]</button></td>
</tr>
</BOUCLE_liste_infographies_data>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
[(#GRAND_TOTAL|>{3}|oui)<div class="action"><button class="button link" name="supprimer_lien#EVAL{chr(91)}infographies_data-*-#OBJET-#ID_OBJET#EVAL{chr(93)}" value="X"><:infographies_data:info_retirer_infographies_data:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})]</button></div>]
</div>
</B_liste_infographies_data>
<div class="liste-objets liste-objets-lies infographies_datas caption-wrap">
<strong class="caption">[(#ENV*{titre,<:infographies_data:info_aucun_infographies_data:>}) ]</strong>
</div>
<//B_liste_infographies_data>

29
prive/squelettes/contenu/infographies_data_edit.html

@ -0,0 +1,29 @@
[(#ID_INFOGRAPHIES_DATA|oui)
[(#AUTORISER{modifier,infographies_data,#ID_INFOGRAPHIES_DATA}|sinon_interdire_acces)]
][(#ID_INFOGRAPHIES_DATA|non)
[(#AUTORISER{creer,infographies_data}|sinon_interdire_acces)]
]
#SET{redirect,#ENV{redirect}|sinon{#ENV{lier_trad,#ID_INFOGRAPHIES_DATA}|?{#ENV{lier_trad,#ID_INFOGRAPHIES_DATA}|generer_url_entite{infographies_data},#URL_ECRIRE{infographies_data|objet_info{table_objet}}}}}
<div class='cadre-formulaire-editer'>
<div class="entete-formulaire">
[(#ID_INFOGRAPHIES_DATA|oui)
[(#GET{redirect}|icone_verticale{[(#VAL{infographies_data}|objet_info{texte_retour}|_T)],#VAL{infographies_data}|objet_info{icone_objet},'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})]
]
[
[(#VAL{infographies_data}|objet_info{#ID_INFOGRAPHIES_DATA|?{texte_modifier,texte_creer}}|_T)]
<h1>(#ENV{titre,#INFO_TITRE{infographies_data,#ID_INFOGRAPHIES_DATA}|sinon{<:info_sans_titre:>}})</h1>
]
</div>
#SET{redirect,#ENV{redirect,#ID_INFOGRAPHIES_DATA|generer_url_entite{infographies_data}}}
[(#ENV{retourajax,''}|oui)
#SET{redirect,'javascript:if (window.jQuery) jQuery(".entete-formulaire .retour a").followLink();'}
<div class="ajax">
]
[(#FORMULAIRE_EDITER_INFOGRAPHIES_DATA{#ENV{id_infographies_data,oui},#GET{redirect},#ENV{associer_objet}})]
[(#ENV{retourajax,''}|oui)
</div>
<script type="text/javascript">/*<!\[CDATA\[*/reloadExecPage('#ENV{exec}','#navigation,#chemin');/*\]\]>*/</script>
]
</div>

31
prive/squelettes/contenu/infographies_donnee_edit.html

@ -0,0 +1,31 @@
[(#ID_INFOGRAPHIES_DONNEE|sinon_interdire_acces)]
[(#AUTORISER{modifier,infographies_donnee,#ID_INFOGRAPHIES_DONNEE}|sinon_interdire_acces)]
<div class="cadre-formulaire-editer[(#ENV{popin,''}|oui)popin]">
<div class="entete-formulaire">