Passed
Push — master ( b85d4e...511693 )
by Dispositif
02:38
created

OuvrageTemplate::serializeExternalTemplates()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 3
eloc 5
c 2
b 0
f 0
nc 2
nop 0
dl 0
loc 10
rs 10
1
<?php
2
/**
3
 * This file is part of dispositif/wikibot application
4
 * 2019 : Philippe M. <[email protected]>
5
 * For the full copyright and MIT license information, please view the LICENSE file.
6
 */
7
8
declare(strict_types=1);
9
10
namespace App\Domain\Models\Wiki;
11
12
/**
13
 * Parameters names changed on hydration (alias)
14
 * Raw datas : Value are not normalized (see rather OuvrageClean class for optimized values)
15
 * Note : Avec serialization(), extraction de plume=,extrait=,commentaire= (obsolètes)
16
 * sur {{plume}}, {{citationbloc}},{{commentaire biblio}}...
17
 * Class OuvrageTemplate.
18
 */
19
class OuvrageTemplate extends AbstractWikiTemplate
20
{
21
    const MODEL_NAME = 'Ouvrage'; // todo
22
23
    const REQUIRED_PARAMETERS
24
        = [
25
            //            'langue' => '', // inutile avec 'fr'
26
            //            'auteur1' => '', // duplicate with prénom1/nom1
27
            'titre' => '', // obligatoire
28
            'éditeur' => '',
29
            'année' => '', // géré dans serialize
30
            //            'pages totales' => '',
31
            //            'passage' => '', // pas pertinent sur biblio et liste oeuvres
32
            'isbn' => '',
33
        ];
34
35
    /**
36
     * update 18 sept 2019.
37
     */
38
    const PARAM_ALIAS
39
        = [
40
            'lang' => 'langue',
41
            'lien langue' => 'langue',
42
            'prénom' => 'prénom1', // fréquent : ajouté sur params normaux
43
            'first1' => 'prénom1',
44
            'first2' => 'prénom2',
45
            'first3' => 'prénom3',
46
            'nom' => 'nom1', // fréquent : ajouté sur params normaux
47
            'last1' => 'nom1',
48
            'last2' => 'nom2',
49
            'last3' => 'nom3',
50
            'postnom' => 'postnom1',
51
            'lien auteur' => 'lien auteur1',
52
            'auteur' => 'auteur1', // fréquent : ajouté sur params normaux malgré alias
53
            'directeur' => 'directeur1',
54
            // non-documenté (Aristote)
55
            'author1' => 'auteur1',
56
            'author2' => 'auteur2',
57
            'author3' => 'auteur3',
58
            'author4' => 'auteur4',
59
            'et alii' => 'et al.',
60
            'trad' => 'traducteur',
61
            'traduction' => 'traducteur',
62
            'title' => 'titre',
63
            'titre vo' => 'titre original',
64
            'location' => 'lieu',
65
            'year' => 'année',
66
            'édition' => 'éditeur',
67
            'publisher' => 'éditeur',
68
            'numéro édition' => "numéro d'édition",
69
            'origyear' => 'année première édition',
70
            'publi' => 'réimpression',
71
            //            'pages' => 'pages totales', // doc - mis temporairement en paramètre normal
72
            //            'page' => 'passage', // Doc - mis temporairement en paramètre normal
73
            //        'format' => 'format livre', //  ou 'format électronique' (pdf)
74
            'ISBN' => 'isbn',
75
            'isbn1' => 'isbn',
76
            'ISBN1' => 'isbn',
77
            'ISBN2' => 'isbn2',
78
            'ISBN3' => 'isbn3',
79
            'issn1' => 'issn',
80
            'iSSN' => 'issn',
81
            'iSSN1' => 'issn',
82
            'ISSN2' => 'issn2',
83
            'ISSN3' => 'issn3',
84
            'E-ISSN' => 'e-issn',
85
            'ASIN' => 'asin',
86
            'résumé' => 'présentation en ligne',
87
            'url résumé' => 'présentation en ligne',
88
            'url' => 'lire en ligne',
89
            'url texte' => 'lire en ligne',
90
            'accessdate' => 'consulté le',
91
            'numéro' => 'numéro chapitre',
92
            'chapitre' => 'numéro chapitre',
93
            'chap' => 'titre chapitre',
94
            'chapter' => 'titre chapitre',
95
            'ref' => 'référence simplifiée',
96
            // TODO: desactive ?
97
            /*
98
             * Conversion enwiki {{cite book}} => {{ouvrage}} (2012)
99
             */
100
            'author1-link' => 'lien auteur1',
101
            'author2-link' => 'lien auteur2',
102
            'author3-link' => 'lien auteur3',
103
            'author4-link' => 'lien auteur4',
104
            'author5-link' => 'lien auteur5',
105
            'author6-link' => 'lien auteur6',
106
            'author7-link' => 'lien auteur7',
107
            'author8-link' => 'lien auteur8',
108
            'author9-link' => 'lien auteur9',
109
            'last' => 'nom1',
110
            'first' => 'prénom1',
111
            'last4' => 'nom4',
112
            'first4' => 'prénom4',
113
            'last5' => 'nom5',
114
            'first5' => 'prénom5',
115
            'last6' => 'nom6',
116
            'first6' => 'prénom6',
117
            'last7' => 'nom7',
118
            'first7' => 'prénom7',
119
            'last8' => 'nom8',
120
            'first8' => 'prénom8',
121
            'last9' => 'nom9',
122
            'first9' => 'prénom9',
123
            'author' => 'auteur',
124
            'authorlink' => 'lien auteur',
125
            'coauthors' => 'co-auteur',
126
            //            'editor' => '',
127
            //            'editor-link' => '',
128
            //            'others' => '',
129
            'trans_title' => 'titre traduit',
130
            //            'type' => '',
131
            'edition' => "numéro d'édition",
132
            //            'series' => '',
133
            'date' => 'date',
134
            'month' => 'mois',
135
            'language' => 'langue',
136
            'trans_chapter' => 'titre chapitre traduit',
137
            'quote' => 'extrait',
138
            /* END {{cite book}} to {{ouvrage}} convertion */
139
            'publication-place' => 'lieu',
140
            //  'editor-last', 'editor-first', 'editor2-last', etc
141
            'publication-date' => 'date',
142
            'author-link' => 'lien auteur1',
143
            'première édition' => 'année première édition',
144
            'citation' => 'extrait',
145
        ];
146
147
    public $externalTemplates = [];
148
149
    protected $parametersByOrder
150
        = [
151
            'id', // déconseillé. En tête pour visibilité, car utilisé comme ancre
152
            'langue',
153
            'langue originale',
154
            'auteurs', // déconseillé => auteur1, auteur2...
155
            'co-auteur', // obsolète
156
            //            'auteur', // alias de auteur1 mais très fréquent (conservation style)
157
            'auteur1',
158
            'prénom1',
159
            //            'prénom', // alias mais fréquent
160
            'nom1',
161
            //            'nom', // alias mais fréquent
162
            'postnom1',
163
            'lien auteur1',
164
            'directeur1',
165
            'responsabilité1',
166
            'auteur2',
167
            'prénom2',
168
            'nom2',
169
            'postnom2',
170
            'lien auteur2',
171
            'directeur2',
172
            'responsabilité2',
173
            'auteur3',
174
            'prénom3',
175
            'nom3',
176
            'postnom3',
177
            'lien auteur3',
178
            'directeur3',
179
            'responsabilité3',
180
            'auteur4',
181
            'prénom4',
182
            'nom4',
183
            'postnom4',
184
            'lien auteur4',
185
            'directeur4',
186
            'responsabilité4',
187
            'auteur5',
188
            'prénom5',
189
            'nom5',
190
            'postnom5',
191
            'lien auteur5',
192
            'directeur5',
193
            'responsabilité5',
194
            'auteur6',
195
            'prénom6',
196
            'nom6',
197
            'postnom6',
198
            'lien auteur6',
199
            'directeur6',
200
            'responsabilité6',
201
            'auteur7',
202
            'prénom7',
203
            'nom7',
204
            'postnom7',
205
            'lien auteur7',
206
            'directeur7',
207
            'responsabilité7',
208
            'auteur8',
209
            'prénom8',
210
            'nom8',
211
            'postnom8',
212
            'lien auteur8',
213
            'directeur8',
214
            'responsabilité8',
215
            'auteur9',
216
            'prénom9',
217
            'nom9',
218
            'postnom9',
219
            'lien auteur9',
220
            'directeur9',
221
            'responsabilité9',
222
            'auteur10',
223
            'prénom10',
224
            'nom10',
225
            'postnom10',
226
            'lien auteur10',
227
            'directeur10',
228
            'responsabilité10',
229
            'auteur11',
230
            'prénom11',
231
            'nom11',
232
            'postnom11',
233
            'lien auteur11',
234
            'directeur11',
235
            'responsabilité11',
236
            'auteur12',
237
            'prénom12',
238
            'nom12',
239
            'postnom12',
240
            'lien auteur12',
241
            'directeur12',
242
            'responsabilité12',
243
            'auteur13',
244
            'prénom13',
245
            'nom13',
246
            'postnom13',
247
            'lien auteur13',
248
            'directeur13',
249
            'responsabilité13',
250
            'auteur14',
251
            'prénom14',
252
            'nom14',
253
            'postnom14',
254
            'lien auteur14',
255
            'directeur14',
256
            'responsabilité14',
257
            'auteur15',
258
            'prénom15',
259
            'nom15',
260
            'postnom15',
261
            'lien auteur15',
262
            'directeur15',
263
            'responsabilité15',
264
            'auteur16',
265
            'prénom16',
266
            'nom16',
267
            'postnom16',
268
            'lien auteur16',
269
            'directeur16',
270
            'responsabilité16',
271
            'auteur17',
272
            'prénom17',
273
            'nom17',
274
            'postnom17',
275
            'lien auteur17',
276
            'directeur17',
277
            'responsabilité17',
278
            'auteur18',
279
            'prénom18',
280
            'nom18',
281
            'postnom18',
282
            'lien auteur18',
283
            'directeur18',
284
            'responsabilité18',
285
            'auteur19',
286
            'prénom19',
287
            'nom19',
288
            'postnom19',
289
            'lien auteur19',
290
            'directeur19',
291
            'responsabilité19',
292
            /**/
293
            'et al.',
294
            'auteur institutionnel',
295
            'traducteur',
296
            'traductrice',
297
            'préface',
298
            'postface',
299
            'illustrateur',
300
            'photographe',
301
            'champ libre',
302
            'titre',
303
            'sous-titre',
304
            'lien titre',
305
            'titre original',
306
            'traduction titre',
307
            'volume',
308
            'tome',
309
            'titre volume',
310
            'titre tome', // alias 'titre volume' à utilisé avec 'tome'
311
            'éditeur',
312
            'lien éditeur', // obsolète
313
            'collection',
314
            'lieu',
315
            'nature ouvrage',
316
            'série',
317
            'numéro dans collection',
318
            'année',
319
            'mois',
320
            'jour',
321
            'date',
322
            "numéro d'édition",
323
            'année première édition',
324
            'réimpression',
325
            'pages totales',
326
            'page', // temporaire
327
            'pages', // temporaire
328
            'format livre',
329
            'format', // obsolete
330
            'passage',
331
            'isbn',
332
            'isbn10',
333
            'isbn2',
334
            'isbn3',
335
            'isbn erroné',
336
            'isbn invalide', // not official // pour bot
337
            'issn',
338
            'issn2',
339
            'issn3',
340
            'e-issn',
341
            'ismn',
342
            'ean',
343
            'asin',
344
            'oclc',
345
            'bnf',
346
            'lccn',
347
            'dnb',
348
            'doi',
349
            'pmid',
350
            'jstor',
351
            'bibcode',
352
            'math reviews',
353
            'zbl',
354
            'arxiv',
355
            'sudoc',
356
            'wikisource',
357
            'présentation en ligne',
358
            'lire en ligne',
359
            'écouter en ligne',
360
            'format électronique',
361
            'consulté le',
362
            'partie',
363
            'numéro chapitre',
364
            'titre chapitre',
365
            'libellé',
366
            'référence',
367
            'référence simplifiée',
368
            'plume', // obsolete {{plume}}
369
            'extrait', // obsolete => {{citation bloc}}
370
            'commentaire', // obsolete => {{commentaire biblio}}
371
        ];
372
373
    /**
374
     * @param bool|null $cleanOrder
375
     *
376
     * @return string
377
     */
378
    public function serialize(?bool $cleanOrder = false): string
379
    {
380
        $serial = parent::serialize($cleanOrder);
381
        $serial = $this->anneeOrDateSerialize($serial);
382
383
        return $serial.$this->serializeExternalTemplates();
384
    }
385
386
    /**
387
     * todo move to abstract ? + refac
388
     * dirty.
389
     */
390
    public function serializeExternalTemplates(): string
391
    {
392
        $res = '';
393
        if (!empty($this->externalTemplates)) {
394
            foreach ($this->externalTemplates as $externalTemplate) {
395
                $res .= $externalTemplate->raw;
396
            }
397
        }
398
399
        return $res;
400
    }
401
402
    /**
403
     * Pas de serialization année vide si date non vide.
404
     */
405
    private function anneeOrDateSerialize(string $serial): string
406
    {
407
        if (preg_match("#\|[\n ]*année=[\n ]*\|#", $serial) > 0
408
            && preg_match("#\|[\n ]*date=#", $serial) > 0
409
        ) {
410
            $serial = preg_replace("#\|[\n ]*année=[\n ]*#", '', $serial);
411
        }
412
413
        return $serial;
414
    }
415
}
416