Un objet Devis tout con à priori pour l'instant, très peu de champs, surtout là pour suivre le statut, et qui a surtout vocation a être le contenant pour d'autres choses (comme des Chapitres par exemple). On peut le placer dans l'arbo des rubriques comme les articles.

Reste à faire : pas grand chose, surtout dans la page récap qui liste tous, les séparer en plusieurs listes, ceux acceptés, ceux refusés, etc.
svn/root/trunk
rastapopoulos@spip.org 5 years ago
commit 42f3e0f84d

35
.gitattributes vendored

@ -0,0 +1,35 @@
* text=auto !eol
base/devis.php -text
/devis_administrations.php -text
/devis_autorisations.php -text
/devis_pipelines.php -text
/fabrique_devis.php -text
/fabrique_diff.diff -text
formulaires/editer_devis.html -text
formulaires/editer_devis.php -text
lang/devis_fr.php -text
lang/paquet-devis_fr.php -text
/paquet.xml -text
prive/objets/contenu/devis.html -text
prive/objets/infos/devis.html -text
prive/objets/liste/devis.html -text
prive/squelettes/contenu/devis_tous.html -text
prive/squelettes/inclure/plan-devis.html -text
prive/themes/spip/images/devis-12.png -text
prive/themes/spip/images/devis-128.png -text
prive/themes/spip/images/devis-16.png -text
prive/themes/spip/images/devis-24.png -text
prive/themes/spip/images/devis-32.png -text
prive/themes/spip/images/devis-64.png -text
prive/themes/spip/images/devis-add-16.png -text
prive/themes/spip/images/devis-add-24.png -text
prive/themes/spip/images/devis-add-32.png -text
prive/themes/spip/images/devis-del-16.png -text
prive/themes/spip/images/devis-del-24.png -text
prive/themes/spip/images/devis-del-32.png -text
prive/themes/spip/images/devis-edit-16.png -text
prive/themes/spip/images/devis-edit-24.png -text
prive/themes/spip/images/devis-edit-32.png -text
prive/themes/spip/images/devis-new-16.png -text
prive/themes/spip/images/devis-new-24.png -text
prive/themes/spip/images/devis-new-32.png -text

@ -0,0 +1,100 @@
<?php
/**
* Déclarations relatives à la base de données
*
* @plugin Devis
* @copyright 2018
* @author RastaPopoulos
* @licence GNU/GPL
* @package SPIP\Devis\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* 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 devis_declarer_tables_interfaces($interfaces) {
$interfaces['table_des_tables']['devis'] = 'devis';
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 devis_declarer_tables_objets_sql($tables) {
$tables['spip_devis'] = array(
'type' => 'devis',
'principale' => 'oui',
'field'=> array(
'id_devis' => 'bigint(21) NOT NULL',
'id_rubrique' => 'bigint(21) NOT NULL DEFAULT 0',
'id_secteur' => 'bigint(21) NOT NULL DEFAULT 0',
'titre' => 'text NOT NULL DEFAULT ""',
'reference' => 'varchar(255) NOT NULL DEFAULT ""',
'descriptif' => 'text NOT NULL DEFAULT ""',
'date' => 'datetime NOT NULL DEFAULT "0000-00-00 00:00:00"',
'statut' => 'varchar(20) DEFAULT "0" NOT NULL',
'maj' => 'TIMESTAMP'
),
'key' => array(
'PRIMARY KEY' => 'id_devis',
'KEY id_rubrique' => 'id_rubrique',
'KEY id_secteur' => 'id_secteur',
'KEY statut' => 'statut',
),
'titre' => 'titre AS titre, "" AS lang',
'date' => 'date',
'champs_editables' => array('titre', 'reference', 'descriptif', 'id_rubrique', 'id_secteur'),
'champs_versionnes' => array('titre', 'reference', 'descriptif', 'id_rubrique', 'id_secteur'),
'rechercher_champs' => array("titre" => 10, "reference" => 10, "descriptif" => 8),
'tables_jointures' => array(),
'statut_textes_instituer' => array(
'prepa' => 'texte_statut_en_cours_redaction',
'prop' => 'texte_statut_propose_evaluation',
'accepte' => 'devis:statut_accepte',
'refuse' => 'texte_statut_refuse',
'poubelle' => 'texte_statut_poubelle',
),
'statut_images' => array(
'prepa' => 'puce-blanche.gif',
'prop' => 'puce-orange.gif',
'accepte' => 'puce-verte.gif',
'refuse' => 'puce-rouge.gif',
'poubelle' => 'puce-poubelle.gif',
),
'statut'=> array(
array(
'champ' => 'statut',
'publie' => 'accepte,prop,refuse',
'previsu' => 'accepte,prop,prepa',
'post_date' => 'date',
'exception' => array('statut','tout')
)
),
'texte_changer_statut' => 'devis:texte_changer_statut_devis',
);
return $tables;
}

@ -0,0 +1,57 @@
<?php
/**
* Fichier gérant l'installation et désinstallation du plugin Devis
*
* @plugin Devis
* @copyright 2018
* @author RastaPopoulos
* @licence GNU/GPL
* @package SPIP\Devis\Installation
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'installation et de mise à jour du plugin Devis.
*
* @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 devis_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(array('maj_tables', array('spip_devis')));
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
/**
* Fonction de désinstallation du plugin Devis.
*
* @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 devis_vider_tables($nom_meta_base_version) {
sql_drop_table('spip_devis');
# 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('devis')));
sql_delete('spip_mots_liens', sql_in('objet', array('devis')));
sql_delete('spip_auteurs_liens', sql_in('objet', array('devis')));
# Nettoyer les versionnages et forums
sql_delete('spip_versions', sql_in('objet', array('devis')));
sql_delete('spip_versions_fragments', sql_in('objet', array('devis')));
sql_delete('spip_forum', sql_in('objet', array('devis')));
effacer_meta($nom_meta_base_version);
}

@ -0,0 +1,125 @@
<?php
/**
* Définit les autorisations du plugin Devis
*
* @plugin Devis
* @copyright 2018
* @author RastaPopoulos
* @licence GNU/GPL
* @package SPIP\Devis\Autorisations
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'appel pour le pipeline
* @pipeline autoriser */
function devis_autoriser() {
}
// -----------------
// Objet devis
/**
* Autorisation de voir un élément de menu (devis)
*
* @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_devis_menu_dist($faire, $type, $id, $qui, $opt) {
return true;
}
/**
* Autorisation de voir le bouton d'accès rapide de création (devis)
*
* @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_deviscreer_menu_dist($faire, $type, $id, $qui, $opt) {
return autoriser('creer', 'devis', '', $qui, $opt);
}
/**
* Autorisation de créer (devis)
*
* @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_devis_creer_dist($faire, $type, $id, $qui, $opt) {
return (in_array($qui['statut'], array('0minirezo', '1comite')) and sql_countsel('spip_rubriques')>0);
}
/**
* Autorisation de voir (devis)
*
* @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_devis_voir_dist($faire, $type, $id, $qui, $opt) {
return true;
}
/**
* Autorisation de modifier (devis)
*
* @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_devis_modifier_dist($faire, $type, $id, $qui, $opt) {
return in_array($qui['statut'], array('0minirezo', '1comite'));
}
/**
* Autorisation de supprimer (devis)
*
* @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_devis_supprimer_dist($faire, $type, $id, $qui, $opt) {
return $qui['statut'] == '0minirezo' and !$qui['restreint'];
}
/**
* Autorisation de créer l'élément (devis) dans une rubrique
*
* @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_rubrique_creerdevisdans_dist($faire, $type, $id, $qui, $opt) {
return ($id and autoriser('voir', 'rubrique', $id) and autoriser('creer', 'devis', $id));
}

@ -0,0 +1,185 @@
<?php
/**
* Utilisations de pipelines par Devis
*
* @plugin Devis
* @copyright 2018
* @author RastaPopoulos
* @licence GNU/GPL
* @package SPIP\Devis\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* 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 devis_affiche_enfants($flux) {
if ($e = trouver_objet_exec($flux['args']['exec']) and $e['edition'] == false) {
$id_objet = $flux['args']['id_objet'];
if ($e['type'] == 'rubrique') {
$flux['data'] .= recuperer_fond(
'prive/objets/liste/devis',
array(
'titre' => _T('devis:titre_devis_rubrique'),
'id_rubrique' => $id_objet
)
);
if (autoriser('creerdevisdans', 'rubrique', $id_objet)) {
include_spip('inc/presentation');
$flux['data'] .= icone_verticale(
_T('devis:icone_creer_devis'),
generer_url_ecrire('devis_edit', "id_rubrique=$id_objet"),
'devis-24.png',
'new',
'right'
) . "<br class='nettoyeur' />";
}
}
}
return $flux;
}
/**
* Ajout de contenu sur certaines pages,
* notamment des formulaires de liaisons entre objets
*
* @pipeline affiche_milieu
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function devis_affiche_milieu($flux) {
$texte = '';
$e = trouver_objet_exec($flux['args']['exec']);
// auteurs sur les devis
if (!$e['edition'] and in_array($e['type'], array('devis'))) {
$texte .= recuperer_fond('prive/objets/editer/liens', array(
'table_source' => 'auteurs',
'objet' => $e['type'],
'id_objet' => $flux['args'][$e['id_table_objet']]
));
}
if ($texte) {
if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
} else {
$flux['data'] .= $texte;
}
}
return $flux;
}
/**
* Ajout de liste sur la vue d'un auteur
*
* @pipeline affiche_auteurs_interventions
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function devis_affiche_auteurs_interventions($flux) {
if ($id_auteur = intval($flux['args']['id_auteur'])) {
$flux['data'] .= recuperer_fond('prive/objets/liste/devis', array(
'id_auteur' => $id_auteur,
'titre' => _T('devis:info_devis_auteur')
), array('ajax' => true));
}
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 devis_boite_infos($flux) {
if (isset($flux['args']['type']) and isset($flux['args']['id']) and $id = intval($flux['args']['id'])) {
$texte = '';
if ($flux['args']['type'] == 'rubrique' and $nb = sql_countsel('spip_devis', array("statut='publie'", 'id_rubrique=' . $id))) {
$texte .= '<div>' . singulier_ou_pluriel($nb, 'devis:info_1_devis', 'devis:info_nb_devis') . "</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 devis_objet_compte_enfants($flux) {
if ($flux['args']['objet'] == 'rubrique' and $id_rubrique = intval($flux['args']['id_objet'])) {
// juste les publiés ?
if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) {
$flux['data']['devis'] = sql_countsel('spip_devis', 'id_rubrique= ' . intval($id_rubrique) . " AND (statut = 'publie')");
} else {
$flux['data']['devis'] = sql_countsel('spip_devis', 'id_rubrique= ' . intval($id_rubrique) . " AND (statut <> 'poubelle')");
}
}
return $flux;
}
/**
* Optimiser la base de données
*
* Supprime les objets à la poubelle.
*
* @pipeline optimiser_base_disparus
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function devis_optimiser_base_disparus($flux) {
sql_delete('spip_devis', "statut='poubelle' AND maj < " . $flux['args']['date']);
return $flux;
}
/**
* Synchroniser la valeur de id secteur
*
* @pipeline trig_propager_les_secteurs
* @param string $flux Données du pipeline
* @return string Données du pipeline
**/
function devis_trig_propager_les_secteurs($flux) {
// synchroniser spip_devis
$r = sql_select(
'A.id_devis AS id, R.id_secteur AS secteur',
'spip_devis AS A, spip_rubriques AS R',
'A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur'
);
while ($row = sql_fetch($r)) {
sql_update('spip_devis', array('id_secteur' => $row['secteur']), 'id_devis=' . $row['id']);
}
return $flux;
}

@ -0,0 +1,237 @@
<?php
/**
* Fichier généré par la Fabrique de plugin v6
* le 2018-04-18 17:22:14
*
* Ce fichier de sauvegarde peut servir à recréer
* votre plugin avec le plugin «Fabrique» qui a servi à le créer.
*
* Bien évidemment, les modifications apportées ultérieurement
* par vos soins dans le code de ce plugin généré
* NE SERONT PAS connues du plugin «Fabrique» et ne pourront pas
* être recréées par lui !
*
* La «Fabrique» ne pourra que régénerer le code de base du plugin
* avec les informations dont il dispose.
*
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$data = array (
'fabrique' =>
array (
'version' => 6,
),
'paquet' =>
array (
'prefixe' => 'devis',
'nom' => 'Devis',
'slogan' => 'Lister des devis',
'description' => '',
'logo' =>
array (
0 => '',
),
'version' => '1.0.0',
'auteur' => 'RastaPopoulos',
'auteur_lien' => '',
'licence' => 'GNU/GPL',
'categorie' => 'divers',
'etat' => 'dev',
'compatibilite' => '[3.2.1;3.2.*]',
'documentation' => '',
'administrations' => 'on',
'schema' => '1.0.0',
'formulaire_config' => '',
'formulaire_config_titre' => '',
'inserer' =>
array (
'paquet' => '',
'administrations' =>
array (
'maj' => '',
'desinstallation' => '',
'fin' => '',
),
'base' =>
array (
'tables' =>
array (
'fin' => '',
),
),
),
'scripts' =>
array (
'pre_copie' => '',
'post_creation' => '',
),
'exemples' => '',
),
'objets' =>
array (
0 =>
array (
'nom' => 'Devis',
'nom_singulier' => 'Devis',
'genre' => 'masculin',
'logo' =>
array (
0 => '',
32 => '',
24 => '',
16 => '',
12 => '',
),
'logo_variantes' => 'on',
'table' => 'spip_devis',
'cle_primaire' => 'id_devis',
'cle_primaire_sql' => 'bigint(21) NOT NULL',
'table_type' => 'devis',
'champs' =>
array (
0 =>
array (
'nom' => 'Titre',
'champ' => 'titre',
'sql' => 'text NOT NULL DEFAULT \'\'',
'caracteristiques' =>
array (
0 => 'editable',
1 => 'versionne',
2 => 'obligatoire',
),
'recherche' => '10',
'saisie' => 'input',
'explication' => '',
'saisie_options' => '',
),
1 =>
array (
'nom' => 'Référence',
'champ' => 'reference',
'sql' => 'varchar(255) NOT NULL DEFAULT \'\'',
'caracteristiques' =>
array (
0 => 'editable',
1 => 'versionne',
2 => 'obligatoire',
),
'recherche' => '10',
'saisie' => 'input',
'explication' => '',
'saisie_options' => '',
),
2 =>
array (
'nom' => 'Descriptif',
'champ' => 'descriptif',
'sql' => 'text NOT NULL DEFAULT \'\'',
'caracteristiques' =>
array (
0 => 'editable',
1 => 'versionne',
),
'recherche' => '8',
'saisie' => 'textarea',
'explication' => '',
'saisie_options' => '',
),
),
'champ_titre' => 'titre',
'champ_date' => 'date',
'statut' => 'on',
'chaines' =>
array (
'titre_objets' => 'Devis',
'titre_objet' => 'Devis',
'info_aucun_objet' => 'Aucun devis',
'info_1_objet' => 'Un devis',
'info_nb_objets' => '@nb@ devis',
'icone_creer_objet' => 'Créer un devis',
'icone_modifier_objet' => 'Modifier ce devis',
'titre_logo_objet' => 'Logo de ce devis',
'titre_langue_objet' => 'Langue de ce devis',
'texte_definir_comme_traduction_objet' => 'Ce devis est une traduction du devis numéro :',
'titre_\\objets_lies_objet' => 'Liés à ce devis',
'titre_objets_rubrique' => 'Devis de la rubrique',
'info_objets_auteur' => 'Les devis de cet auteur',
'retirer_lien_objet' => 'Retirer ce devis',
'retirer_tous_liens_objets' => 'Retirer tous les devis',
'ajouter_lien_objet' => 'Ajouter ce devis',
'texte_ajouter_objet' => 'Ajouter un devis',
'texte_creer_associer_objet' => 'Créer et associer un devis',
'texte_changer_statut_objet' => 'Ce devis est :',
'supprimer_objet' => 'Supprimer ce devis',
'confirmer_supprimer_objet' => 'Confirmez-vous la suppression de ce devis ?',
),
'rubriques' =>
array (
0 => 'id_rubrique',
1 => 'id_secteur',
2 => 'vue_rubrique',
3 => 'statut_rubrique',
4 => 'plan',
),
'liaison_directe' => '',
'table_liens' => '',
'afficher_liens' => '',
'roles' => '',
'auteurs_liens' => 'on',
'vue_auteurs_liens' => 'on',
'fichiers' =>
array (
'echafaudages' =>
array (
0 => 'prive/squelettes/contenu/objets.html',
1 => 'prive/objets/infos/objet.html',
),
),
'autorisations' =>
array (
'objet_creer' => '',
'objet_voir' => '',
'objet_modifier' => '',
'objet_supprimer' => '',
'associerobjet' => '',
),
'boutons' =>
array (
0 => 'menu_edition',
1 => 'outils_rapides',
),
),
),
'images' =>
array (
'paquet' =>
array (
'logo' =>
array (
0 =>
array (
'extension' => 'png',
'contenu' => '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',
),
),
),
'objets' =>
array (
0 =>
array (
'logo' =>
array (
0 =>
array (
'extension' => 'png',
'contenu' => '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',
),
),
),
),
),
);

@ -0,0 +1,82 @@
diff -r -x . -x .. -x fabrique_diff.diff -x fabrique_devis.php ../tmp/cache/fabrique/.backup/devis/base/devis.php ../tmp/cache/fabrique/devis/base/devis.php
74c74
< 'accepte' => 'texte_statut_publie',
---
> 'publie' => 'texte_statut_publie',
78,84d77
< 'statut_images' => array(
< 'prepa' => 'puce-blanche.gif',
< 'prop' => 'puce-orange.gif',
< 'accepte' => 'puce-verte.gif',
< 'refuse' => 'puce-rouge.gif',
< 'poubelle' => 'puce-poubelle.gif',
< ),
88,89c81,82
< 'publie' => 'accepte,prop,refuse',
< 'previsu' => 'accepte,prop,prepa',
---
> 'publie' => 'publie',
> 'previsu' => 'publie,prop,prepa',
diff -r -x . -x .. -x fabrique_diff.diff -x fabrique_devis.php ../tmp/cache/fabrique/.backup/devis/devis_pipelines.php ../tmp/cache/fabrique/devis/devis_pipelines.php
53a54,106
>
> /**
> * Ajout de contenu sur certaines pages,
> * notamment des formulaires de liaisons entre objets
> *
> * @pipeline affiche_milieu
> * @param array $flux Données du pipeline
> * @return array Données du pipeline
> */
> function devis_affiche_milieu($flux) {
> $texte = '';
> $e = trouver_objet_exec($flux['args']['exec']);
>
> // auteurs sur les devis
> if (!$e['edition'] and in_array($e['type'], array('devis'))) {
> $texte .= recuperer_fond('prive/objets/editer/liens', array(
> 'table_source' => 'auteurs',
> 'objet' => $e['type'],
> 'id_objet' => $flux['args'][$e['id_table_objet']]
> ));
> }
>
>
>
> if ($texte) {
> if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
> $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
> } else {
> $flux['data'] .= $texte;
> }
> }
>
> return $flux;
> }
>
>
> /**
> * Ajout de liste sur la vue d'un auteur
> *
> * @pipeline affiche_auteurs_interventions
> * @param array $flux Données du pipeline
> * @return array Données du pipeline
> */
> function devis_affiche_auteurs_interventions($flux) {
> if ($id_auteur = intval($flux['args']['id_auteur'])) {
> $flux['data'] .= recuperer_fond('prive/objets/liste/devis', array(
> 'id_auteur' => $id_auteur,
> 'titre' => _T('devis:info_devis_auteur')
> ), array('ajax' => true));
> }
> return $flux;
> }
>
diff -r -x . -x .. -x fabrique_diff.diff -x fabrique_devis.php ../tmp/cache/fabrique/.backup/devis/paquet.xml ../tmp/cache/fabrique/devis/paquet.xml
12c12
< Paquet généré le 2018-04-18 17:06:16
---
> Paquet généré le 2018-04-18 17:22:14
28a29,30
> <pipeline nom="affiche_milieu" inclure="devis_pipelines.php" />
> <pipeline nom="affiche_auteurs_interventions" inclure="devis_pipelines.php" />

@ -0,0 +1,35 @@
<div class='formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_devis,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_devis" value="#ENV{id_devis}" />
<div class="editer-groupe">
[(#SAISIE{input, titre, obligatoire=oui,
label=<:devis:champ_titre_label:>})]
[<div class="editer editer_rubrique[ (#ENV**{erreurs/id_parent}|oui)erreur]">
<label for="id_parent"><:titre_cadre_interieur_rubrique:></label>[
<span class="erreur_message">(#ENV**{erreurs/id_parent})</span>
]
(#VAL|chercher_rubrique{#ENV{id_devis},#ENV{id_parent},'devis',#ENV{id_secteur},'',0,form_simple})
</div>]
[(#SAISIE{input, reference, obligatoire=oui,
label=<:devis:champ_reference_label:>})]
[(#SAISIE{textarea, descriptif,
label=<:devis:champ_descriptif_label:>})]
</div>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class="boutons"><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div></form>
]
</div>

@ -0,0 +1,132 @@
<?php
/**
* Gestion du formulaire de d'édition de devis
*
* @plugin Devis
* @copyright 2018
* @author RastaPopoulos
* @licence GNU/GPL
* @package SPIP\Devis\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_devis
* Identifiant du devis. 'new' pour un nouveau devis.
* @param int $id_rubrique
* 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 devis 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 devis, 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_devis_identifier_dist($id_devis = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
return serialize(array(intval($id_devis)));
}
/**
* Chargement du formulaire d'édition de devis
*
* Déclarer les champs postés et y intégrer les valeurs par défaut
*
* @uses formulaires_editer_objet_charger()
*
* @param int|string $id_devis
* Identifiant du devis. 'new' pour un nouveau devis.
* @param int $id_rubrique
* 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 devis 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 devis, 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_devis_charger_dist($id_devis = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$valeurs = formulaires_editer_objet_charger('devis', $id_devis, $id_rubrique, $lier_trad, $retour, $config_fonc, $row, $hidden);
return $valeurs;
}
/**
* Vérifications du formulaire d'édition de devis
*
* Vérifier les champs postés et signaler d'éventuelles erreurs
*
* @uses formulaires_editer_objet_verifier()
*
* @param int|string $id_devis
* Identifiant du devis. 'new' pour un nouveau devis.
* @param int $id_rubrique
* 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 devis 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 devis, 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_devis_verifier_dist($id_devis = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$erreurs = array();
$erreurs = formulaires_editer_objet_verifier('devis', $id_devis, array('titre', 'reference'));
return $erreurs;
}
/**
* Traitement du formulaire d'édition de devis
*
* Traiter les champs postés
*
* @uses formulaires_editer_objet_traiter()
*
* @param int|string $id_devis
* Identifiant du devis. 'new' pour un nouveau devis.
* @param int $id_rubrique
* 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 devis 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 devis, 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_devis_traiter_dist($id_devis = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$retours = formulaires_editer_objet_traiter('devis', $id_devis, $id_rubrique, $lier_trad, $retour, $config_fonc, $row, $hidden);
return $retours;
}

@ -0,0 +1,46 @@
<?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_devis' => 'Ajouter ce devis',
// C
'champ_descriptif_label' => 'Descriptif',
'champ_reference_label' => 'Référence',
'champ_titre_label' => 'Titre',
'confirmer_supprimer_devis' => 'Confirmez-vous la suppression de ce devis ?',
// I
'icone_creer_devis' => 'Créer un devis',
'icone_modifier_devis' => 'Modifier ce devis',
'info_1_devis' => 'Un devis',
'info_aucun_devis' => 'Aucun devis',
'info_devis_auteur' => 'Les devis de cet auteur',
'info_nb_devis' => '@nb@ devis',
// R
'retirer_lien_devis' => 'Retirer ce devis',
'retirer_tous_liens_devis' => 'Retirer tous les devis',
// S
'statut_accepte' => 'accepté',
'supprimer_devis' => 'Supprimer ce devis',
// T
'texte_ajouter_devis' => 'Ajouter un devis',
'texte_changer_statut_devis' => 'Ce devis est :',
'texte_creer_associer_devis' => 'Créer et associer un devis',
'texte_definir_comme_traduction_devis' => 'Ce devis est une traduction du devis numéro :',
'titre_devis' => 'Devis',
'titre_devis_rubrique' => 'Devis de la rubrique',
'titre_langue_devis' => 'Langue de ce devis',
'titre_logo_devis' => 'Logo de ce devis',
'titre_objets_lies_devis' => 'Liés à ce devis',
);

@ -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(
// D
'devis_description' => '',
'devis_nom' => 'Devis',
'devis_slogan' => 'Lister des devis',
);

@ -0,0 +1,38 @@
<paquet
prefix="devis"
categorie="divers"
version="1.0.0"
etat="dev"
compatibilite="[3.2.1;3.2.*]"
logo="prive/themes/spip/images/devis-64.png"
documentation=""
schema="1.0.0"
>
<!--
Paquet généré le 2018-04-18 17:25:04
-->
<nom>Devis</nom>
<!-- Lister des devis -->
<auteur>RastaPopoulos</auteur>
<licence>GNU/GPL</licence>
<necessite nom="saisies" compatibilite="[2.4.0;]" />
<pipeline nom="autoriser" inclure="devis_autorisations.php" />
<pipeline nom="declarer_tables_objets_sql" inclure="base/devis.php" />
<pipeline nom="declarer_tables_interfaces" inclure="base/devis.php" />
<pipeline nom="affiche_enfants" inclure="devis_pipelines.php" />
<pipeline nom="affiche_milieu" inclure="devis_pipelines.php" />
<pipeline nom="affiche_auteurs_interventions" inclure="devis_pipelines.php" />
<pipeline nom="boite_infos" inclure="devis_pipelines.php" />
<pipeline nom="objet_compte_enfants" inclure="devis_pipelines.php" />
<pipeline nom="optimiser_base_disparus" inclure="devis_pipelines.php" />
<pipeline nom="trig_propager_les_secteurs" inclure="devis_pipelines.php" />
<menu nom="devis" titre="devis:titre_devis" parent="menu_edition" icone="images/devis-16.png" action="devis_tous" />
<menu nom="devis_creer" titre="devis:icone_creer_devis" parent="outils_rapides" icone="images/devis-new-16.png" action="devis_edit" parametres="new=oui" />
</paquet>

@ -0,0 +1,17 @@
<BOUCLE_devis(DEVIS){id_devis}{statut?}>
[<div class="champ contenu_titre[ (#TITRE*|strlen|?{'',vide})]">
<label><:devis:champ_titre_label:> : </label>
<span dir="#LANG_DIR" class="#EDIT{titre} titre">(#TITRE)</span>
</div>]
[<div class="champ contenu_reference[ (#REFERENCE*|strlen|?{'',vide})]">
<label><:devis:champ_reference_label:> : </label>
<span dir="#LANG_DIR" class="#EDIT{reference} reference">(#REFERENCE)</span>
</div>]
[<div class="champ contenu_descriptif[ (#DESCRIPTIF*|strlen|?{'',vide})]">
<label><:devis:champ_descriptif_label:> : </label>
<span dir="#LANG_DIR" class="#EDIT{descriptif} descriptif">(#DESCRIPTIF)</span>
</div>]
</BOUCLE_devis>

@ -0,0 +1,30 @@
<BOUCLE_devis(DEVIS){id_devis=#ENV{id}}{statut?}>
<div class="infos">
[(#SET{texte_objet,<:devis:titre_devis:>})]
<div class="numero"><:titre_cadre_numero_objet{objet=#GET{texte_objet}}:><p>#ID_DEVIS</p></div>
[(#FORMULAIRE_INSTITUER_OBJET{devis,#ID_DEVIS})]
<div class='nb_elements'><!--nb_elements--></div>
[(#REM)
Bouton voir en ligne
]
<BOUCLE_publie(DEVIS){id_devis}>
[(#VAL{redirect}
|generer_url_action{type=devis&id=#ID_DEVIS}
|parametre_url{var_mode,calcul}
|icone_horizontale{<:icone_voir_en_ligne:>,racine})]
</BOUCLE_publie>
[(#AUTORISER{previsualiser,devis,#ID_DEVIS,'',#ARRAY{statut,#STATUT}})
[(#VAL{redirect}
|generer_url_action{type=devis&id=#ID_DEVIS}
|parametre_url{var_mode,preview}
|icone_horizontale{<:previsualiser:>,preview})]
]
<//B_publie>
</div>
</BOUCLE_devis>

@ -0,0 +1,39 @@
[(#SET{defaut_tri,#ARRAY{
titre,1,
date,-1,
id_devis,1,
points,-1
}})]<B_liste_devis>
#ANCRE_PAGINATION
<div class="liste-objets devis">
<table class="spip liste">
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{devis:info_1_devis,devis:info_nb_devis}})</strong></caption>]
<thead>
<tr class="first_row">
<th class="picto" scope="col"></th>
<th class="statut" scope="col">[(#TRI{statut,<span title="<:lien_trier_statut|attribut_html:>">#</span>,ajax})]</th>
<th class="titre" scope="col">[(#TRI{titre,<:devis:champ_titre_label:>,ajax})]</th>
<th class="date" scope="col">[(#TRI{date,<:date:>,ajax})]</th>
<th class="id" scope="col">[(#TRI{id_devis,<:info_numero_abbreviation:>,ajax})]</th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_devis(DEVIS){id_rubrique?}{id_secteur?}{id_mot?}{id_auteur?}{where?}{statut?}{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{devis-16.png}|balise_img)]</td>
<td class="statut">[(#STATUT|puce_statut{devis,#ID_DEVIS,#ID_RUBRIQUE})]</td>
<td class="titre principale">[(#LOGO_DEVIS|image_reduire{20,26})]<a href="[(#ID_DEVIS|generer_url_entite{devis})]" title="<:info_numero_abbreviation|attribut_html:> #ID_DEVIS">[(#RANG). ]#TITRE</a></td>
<td class="date secondaire">[(#DATE|affdate_jourcourt)]</td>
<td class="id">[(#AUTORISER{modifier,devis,#ID_DEVIS}|?{
<a href="[(#URL_ECRIRE{devis_edit,id_devis=#ID_DEVIS})]">#ID_DEVIS</a>,
#ID_DEVIS
})]</td>
</tr>
</BOUCLE_liste_devis>
</tbody>
</table>
[<p class="pagination">(#PAGINATION{prive})</p>]
</div>
</B_liste_devis>[
<div class="liste-objets devis caption-wrap"><strong class="caption">(#ENV*{sinon,''})</strong></div>
]<//B_liste_devis>

@ -0,0 +1,8 @@
#FORMULAIRE_RECHERCHE_ECRIRE{#SELF,ajax}
<div class="nettoyeur"></div>
<INCLURE{fond=prive/objets/liste/devis, env, ajax, sinon=<:devis:info_aucun_devis:>}>
[(#AUTORISER{creer,devis})
[(#URL_ECRIRE{devis_edit,new=oui}|icone_verticale{<:devis:icone_creer_devis:>,devis,new,right})]
]

@ -0,0 +1,40 @@
<BOUCLE_nb_items(DEVIS)
{id_rubrique}
{statut == .*}{statut ?}
{pagination 1}>
#SET{total,#GRAND_TOTAL}
#SET{lister,#PLAN_AFFICHER_LISTE}
</BOUCLE_nb_items>
[(#ENV{conteneur}|=={non}|non)
<ul class="menu-items devis">
<li id="devis-rubrique-#ID_RUBRIQUE"
class="item group[ (#GET{lister}|non)jstree-closed]"
data-jstree='{"type":"box_devis"}' data-objet="devis">
<strong>[(#GET{total}|objet_afficher_nb{devis})]</strong>
]
<B_items>
<ul class="menu-items devis">
<BOUCLE_items(DEVIS)
{id_rubrique}
{par titre}
{statut == .*}{statut ?}
{si #GET{lister}}
>
<li id="devis-#ID_DEVIS" class="item" data-jstree='{"type":"devis"}' data-objet="devis">
<a href="[(#ID_DEVIS|generer_url_entite{devis})]"
[hreflang="(#ENV{lang}|=={#LANG}|non|?{#LANG})"]
title="[(#VAL{devis}|objet_info{texte_objet}|_T) #ID_DEVIS]">
[(#STATUT|puce_statut{devis}) ][(#TITRE|couper{80}|sinon{<:info_sans_titre:>})]
</a>
</li>
</BOUCLE_items>
</ul>
</B_items>
[(#ENV{conteneur}|=={non}|non)
</li>
</ul>
]
</B_nb_items>

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Loading…
Cancel
Save