Browse Source

Plugin «Date de modification manuelle».

Il ajoute un champ 'date_modif_manuelle' sur la table des articles.
Ce champ est éditable au même endroit que la date habituelle.
Cette date de modification n'est pas modifiée automatiquement par l'édition
ou des changements dans l'objet éditorial articles (contrairement à date_modif).

On peut utiliser par exemple en critère `{!par GREATEST(date,date_modif_manuelle)}`.

Le code est *presque* générique pour gérer plusieurs objets éditoriaux, mais ce n'est pas fait.
svn/root/tags/v1.0.1
marcimat@rezo.net 6 years ago
commit
153ca9f8d6
  1. 12
      .gitattributes
  2. 34
      base/date_modif_manuelle.php
  3. 49
      date_modif_manuelle_administrations.php
  4. 21
      date_modif_manuelle_autorisations.php
  5. 196
      date_modif_manuelle_pipelines.php
  6. 18
      lang/date_modif_manuelle_fr.php
  7. 16
      lang/paquet-date_modif_manuelle_fr.php
  8. 26
      paquet.xml
  9. 18
      prive/formulaires/inc-dater-modif_manuelle.html
  10. BIN
      prive/themes/spip/images/date_modif_manuelle-128.png
  11. BIN
      prive/themes/spip/images/date_modif_manuelle-32.png
  12. BIN
      prive/themes/spip/images/date_modif_manuelle-64.png

12
.gitattributes vendored

@ -0,0 +1,12 @@
* text=auto !eol
base/date_modif_manuelle.php -text
/date_modif_manuelle_administrations.php -text
/date_modif_manuelle_autorisations.php -text
/date_modif_manuelle_pipelines.php -text
lang/date_modif_manuelle_fr.php -text
lang/paquet-date_modif_manuelle_fr.php -text
/paquet.xml -text
prive/formulaires/inc-dater-modif_manuelle.html -text
prive/themes/spip/images/date_modif_manuelle-128.png -text
prive/themes/spip/images/date_modif_manuelle-32.png -text
prive/themes/spip/images/date_modif_manuelle-64.png -text

34
base/date_modif_manuelle.php

@ -0,0 +1,34 @@
<?php
/**
* Déclaration des champs SQL pour Date de modification manuelle
*
* @plugin Date de modification manuelle
* @copyright 2017
* @author Matthieu Marcillaud
* @licence GNU/GPL
* @package SPIP\Date_modif_manuelle\Pipelines
*/
/**
* Déclaration des champs SQL
*
* Déclarer les champs additionnels `date_modif_manuelle`
*
* @param array $tables
* Définition de tous les objets éditoriaux
* @return array $tables
* Définition (complétée) de tous les objets éditoriaux
*/
function date_modif_manuelle_declarer_tables_objets_sql($tables)
{
$tables_date_modif_manuelle = array('spip_articles');
include_spip('inc/config');
foreach($tables_date_modif_manuelle as $table) {
$tables[$table]['field'] += array(
'date_modif_manuelle' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
);
}
return $tables;
}

49
date_modif_manuelle_administrations.php

@ -0,0 +1,49 @@
<?php
/**
* Fichier gérant l'installation et désinstallation du plugin Date de modification manuelle
*
* @plugin Date de modification manuelle
* @copyright 2017
* @author Matthieu Marcillaud
* @licence GNU/GPL
* @package SPIP\Date_modif_manuelle\Installation
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'installation et de mise à jour du plugin Date de modification manuelle.
*
* @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 date_modif_manuelle_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(
array('sql_alter', "TABLE spip_articles ADD COLUMN date_modif_manuelle datetime DEFAULT '0000-00-00 00:00:00' NOT NULL AFTER date_modif")
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
/**
* Fonction de désinstallation du plugin Date de modification manuelle.
*
* @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 date_modif_manuelle_vider_tables($nom_meta_base_version) {
include_spip('inc/meta');
include_spip('base/abstract_sql');
sql_alter("TABLE spip_articles DROP COLUMN date_modif_manuelle");
effacer_meta('date_modif_manuelle');
effacer_meta($nom_meta_base_version);
}

21
date_modif_manuelle_autorisations.php

@ -0,0 +1,21 @@
<?php
/**
* Définit les autorisations du plugin Date de modification manuelle
*
* @plugin Date de modification manuelle
* @copyright 2017
* @author Matthieu Marcillaud
* @licence GNU/GPL
* @package SPIP\Date_modif_manuelle\Autorisations
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'appel pour le pipeline
* @pipeline autoriser */
function date_modif_manuelle_autoriser() {
}

196
date_modif_manuelle_pipelines.php

@ -0,0 +1,196 @@
<?php
/**
* Utilisations de pipelines par Date de modification manuelle
*
* @plugin Date de modification manuelle
* @copyright 2017
* @author Matthieu Marcillaud
* @licence GNU/GPL
* @package SPIP\Date_modif_manuelle\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Retourne la liste des objets sur lesquels on doit
* ajouter une gestion de date de modification manuelle
*
* @return array Liste de type d'objet
**/
function date_modif_manuelle_objets_valides() {
// TODO: Mettre en configuration
return array('article');
}
/**
* Ajouter la gestion de notre date au formulaire dater (chargement)
*
* @param array $flux
* @return array $flux
**/
function date_modif_manuelle_formulaire_charger($flux){
if ($flux['args']['form'] != 'dater') {
return $flux;
}
$objet = $flux['data']['objet'];
$id_objet = $flux['data']['id_objet'];
if (!in_array($objet, date_modif_manuelle_objets_valides())) {
return $flux;
}
$_id_objet = id_table_objet($objet);
$table = table_objet($objet);
$trouver_table = charger_fonction('trouver_table','base');
$desc = $trouver_table($table);
if (!$desc) {
return false;
}
if (!isset($desc['field']['date_modif_manuelle'])) {
return false;
}
$date = sql_getfetsel('date_modif_manuelle', $desc['table'], "$_id_objet=" . intval($id_objet));
$annee = $mois = $jour = $heure = $minute = 0;
if ($regs = recup_date($date, false)) {
$annee = $regs[0];
$mois = $regs[1];
$jour = $regs[2];
$heure = $regs[3];
$minute = $regs[4];
}
// données pour la date
$flux['data']['_label_date_modif_manuelle'] = _T('date_modif_manuelle:label_date_modif_manuelle');
$flux['data']['aucune_date_modif_manuelle'] = intval($annee) ? false : true;
$flux['data']['afficher_date_modif_manuelle'] = $date;
$date_texte = dater_formater_saisie_jour($jour, $mois, $annee);
$heure_texte = "$heure:$minute";
$flux['data']['date_modif_manuelle_jour'] = ($date_texte == '0000') ? '' : $date_texte;
$flux['data']['date_modif_manuelle_heure'] = ($heure_texte == '00:00') ? '' : $heure_texte;
return $flux;
}
/**
* Ajouter la gestion de notre date au formulaire dater (verifications)
*
* @param array $flux
* @return array $flux
**/
function date_modif_manuelle_formulaire_verifier($flux) {
if ($flux['args']['form'] != 'dater'){
return $flux;
}
$objet = $flux['args']['args'][0];
$id_objet = $flux['args']['args'][1];
if (!in_array($objet, date_modif_manuelle_objets_valides())) {
return $flux;
}
$k = 'date_modif_manuelle';
if ($v = _request($k . "_jour") AND !dater_recuperer_date_saisie($v)) {
$flux['data'][$k] = _T('format_date_incorrecte');
}
elseif ($v=_request($k."_heure") AND !dater_recuperer_heure_saisie($v)) {
$flux['data'][$k] = _T('format_heure_incorrecte');
}
return $flux;
}
/**
* Ajouter la gestion de notre date au formulaire dater (traitements)
*
* @param array $flux
* @return array $flux
**/
function date_modif_manuelle_formulaire_traiter($flux) {
if ($flux['args']['form'] != 'dater'){
return $flux;
}
$objet = $flux['args']['args'][0];
$id_objet = $flux['args']['args'][1];
if (!in_array($objet, date_modif_manuelle_objets_valides())) {
return $flux;
}
if (_request('changer')){
$_id_objet = id_table_objet($objet);
$table = table_objet($objet);
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table);
if (!$desc)
return array('message_erreur' => _L('erreur')); #impossible en principe
$set = array();
if (!_request('date_modif_manuelle_jour')) {
$set['date_modif_manuelle'] = sql_format_date(0,0,0,0,0,0);
} else {
if (!$d = dater_recuperer_date_saisie(_request('date_modif_manuelle_jour'))) {
$d = array(date('Y'),date('m'),date('d'));
}
if (!$h = dater_recuperer_heure_saisie(_request('date_modif_manuelle_heure'))) {
$h = array(0,0);
}
$set['date_modif_manuelle'] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
}
include_spip('action/editer_objet');
objet_modifier($objet, $id_objet, $set);
}
set_request('date_modif_manuelle_jour');
set_request('date_modif_manuelle_heure');
return $flux;
}
/**
* Ajouter la gestion de notre date au formulaire dater (vue)
*
* @param array $flux
* @return array $flux
**/
function date_modif_manuelle_formulaire_fond($flux){
if ($flux['args']['form'] != 'dater') {
return $flux;
}
$env = $flux['args']['contexte'];
if (!in_array($env['objet'], date_modif_manuelle_objets_valides())) {
return $flux;
}
if (!$id_objet = $env['id_objet']) {
return $flux;
}
// insertion des saisies HTML
if (($p = strpos($flux['data'], "<!--extra-->")) !== false){
$input = recuperer_fond('prive/formulaires/inc-dater-modif_manuelle', $env);
$flux['data'] = substr_replace($flux['data'], $input, $p, 0);
}
return $flux;
}

18
lang/date_modif_manuelle_fr.php

@ -0,0 +1,18 @@
<?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
'aucune_date_definie' => 'Aucune',
// D
'date_modif_manuelle_titre' => 'Date de modification manuelle',
// L
'label_date_modif_manuelle' => 'Date de modification manuelle :',
);

16
lang/paquet-date_modif_manuelle_fr.php

@ -0,0 +1,16 @@
<?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(
// D
'date_modif_manuelle_description' => 'Par défaut la date de modification (champ date_modif) d\'un article est calculée automatiquement à chaque modification faite sur un contenu de l\'article. Ce plugin ajoute un champ date_modif_manuelle, et permet aux utilisateurs de saisir manuellement une date de modification de l\'article, qui ne change pas à chaque édition.
Une écriture sympa dans un squelette peut être de faire des tris <code>{!par GREATEST(date,date_modif_manuelle)}</code> qui trient en fonction soit de la date de publication, soit de modification manuelle, du plus récent au plus ancien.',
'date_modif_manuelle_nom' => 'Date de modification manuelle',
'date_modif_manuelle_slogan' => 'Ajoute une date de modification sur les articles à saisir',
);

26
paquet.xml

@ -0,0 +1,26 @@
<paquet
prefix="date_modif_manuelle"
categorie="date"
version="1.0.0"
etat="dev"
compatibilite="[3.1.0;3.2.*]"
logo="prive/themes/spip/images/date_modif_manuelle-64.png"
documentation=""
schema="1.0.0"
>
<nom>Date de modification manuelle</nom>
<!-- Ajoute une date de modification sur les articles à saisir -->
<auteur>Matthieu Marcillaud</auteur>
<credit lien='https://www.iconfinder.com/icons/66719/date_edit_icon'>Pawel Kadysz (logo)</credit>
<licence>GNU/GPL</licence>
<pipeline nom="autoriser" inclure="date_modif_manuelle_autorisations.php" />
<pipeline nom="declarer_tables_objets_sql" inclure="base/date_modif_manuelle.php" />
<pipeline nom="formulaire_fond" inclure="date_modif_manuelle_pipelines.php" />
<pipeline nom="formulaire_charger" inclure="date_modif_manuelle_pipelines.php" />
<pipeline nom="formulaire_verifier" inclure="date_modif_manuelle_pipelines.php" />
<pipeline nom="formulaire_traiter" inclure="date_modif_manuelle_pipelines.php" />
</paquet>

18
prive/formulaires/inc-dater-modif_manuelle.html

@ -0,0 +1,18 @@
<div class='editer-groupe'>
#SET{name,date_modif_manuelle}#SET{erreurs,#ENV{erreurs/#GET{name}}}
<div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}">[(#ENV{_label_date_modif_manuelle})]</label>[
<span class='erreur_message'>(#GET{erreurs})</span>
]
<span class="affiche"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>
[(#ENV{aucune_date_modif_manuelle}|?{<:date_modif_manuelle:aucune_date_definie:>,[(#ENV*{afficher_#GET{name}}|affdate)]})]
</span>
[(#ENV{editable})
<span class="input[(#ENV{_editer_date}|oui)editable]"[(#ENV{_saisie_en_cours}|et{#ENV{_editer_date}}|non)style="display:none;"]>
<input type="text" class="text date" name="#GET{name}_jour" id="#GET{name}_jour" value="#ENV{#GET{name}_jour}" size="10"/>
<input type="text" class="text heure time" name="#GET{name}_heure" id="#GET{name}_heure" value="#ENV{#GET{name}_heure}" size="5"/>
</span>
]
</div>
</div>

BIN
prive/themes/spip/images/date_modif_manuelle-128.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
prive/themes/spip/images/date_modif_manuelle-32.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
prive/themes/spip/images/date_modif_manuelle-64.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Loading…
Cancel
Save