source: spip-zone/_plugins_/refbase/trunk/refbase_fonctions.php @ 54498

Last change on this file since 54498 was 54498, checked in by joseph@…, 8 years ago

Changement de catégorie
Début de conformité SPIP 3 (reste la config à faire)

File size: 9.2 KB
Line 
1<?php
2
3// Sécurité
4if (!defined("_ECRIRE_INC_VERSION")) return;
5
6
7function balise_REFBASE_dist($p) {
8        $option = interprete_argument_balise(1,$p);
9        $p->code = "calculer_balise_REFBASE(\$Pile[0],$option)";
10        return $p;
11}
12
13function calculer_balise_REFBASE($env, $option=''){
14        include_spip('inc/config');
15        // On determine l url a utiliser
16        $url_refbase = $env['url_refbase'] ? trim($env['url_refbase']) : trim(lire_config('refbase/url_refbase'));
17        // on ajoute le / final au besoin
18        if (substr($url_refbase,-1)!='/') $url_refbase .= '/';
19        $requete = $url_refbase;
20        // Elements constants de la requete
21        $requete .= 'show.php?client=inc-refbase-1.0&wrapResults=0';
22        if ($env['id']!='') $requete .= '&records='.trim($env['id']);
23        // On recupere le parametre par
24        $par = $env['by'] ? trim($env['by']) : trim($env['par']);
25       
26        // On determine la vue (citations par defaut)
27        $vue = $env['vue'] ? trim($env['vue']) : trim(lire_config('refbase/vue'));
28        $submit = trim($env['submit']);
29        switch ($submit) {
30                case 'Cite':
31                $vue = 'citations';
32                break;
33                case 'List':
34                $vue = 'liste';
35                break;
36                case 'Display':
37                $vue = 'details';
38                break;
39                case 'Browse':
40                $vue = 'recap';
41                break;
42        }
43        if (!$vue) $vue = 'citations';
44        if ($env['id'])  $vue = 'citations'; // Si un id, on force en citations
45        switch ($vue) {
46                case 'citations':
47                $requete .= '&submit=Cite';
48                break;
49                case 'liste':
50                $requete .= '&submit=List';
51                break;
52                case 'details':
53                $requete .= '&submit=Display';
54                break;
55                case 'recap':
56                $requete .= '&submit=Browse';
57                break;
58        }
59        if ($vue=='recap' and !$par) $par = 'year'; // Si vue recap, un par est obligatoire, year par defaut
60        // Doit on afficher les liens externes ?
61        $liens = $env['liens'] ? trim($env['liens']) : trim(lire_config('refbase/liens'));
62        switch (trim($env['showLinks'])) {
63                case '1':
64                case 'yes':
65                $liens = 'oui';
66                break;
67                case '0':
68                case 'no':
69                $liens = 'non';
70                break;
71        }
72        if ($liens =='non' AND !$env['id']) // Si id, on force en oui
73                $requete .= '&showLinks=0';
74        else
75                $requete .= '&showLinks=1';
76        // Nombre maximum de liens affiches
77        $max = $env['max'] ? trim($env['max']) : trim(lire_config('refbase/max'));
78        if ($env['showRows']) $max = trim($env['showRows']);
79        if (!$max) $max = '100';
80        $requete .= '&showRows='.$max;
81        // Doit on afficher doublons ?
82        $doublons = $env['doublons'] ? trim($env['doublons']) : trim(lire_config('refbase/doublons'));
83        switch (trim($env['showDups'])) {
84                case '1':
85                case 'yes':
86                $doublons = 'oui';
87                break;
88                case '0':
89                case 'no':
90                $doublons = 'non';
91                break;
92        }
93        if (trim($env['without'])=='dups') $doublons = 'non';
94        if ($doublons=='non') $requete .= '&without=dups';
95        // On determine le tri (annee par defaut)
96        $tri = $env['tri'] ? trim($env['tri']) : trim(lire_config('refbase/tri'));
97        switch (trim($env['citeOrder'])) {
98                case 'year':
99                $tri = 'annee';
100                break;
101                case 'author':
102                $tri = 'auteur';
103                break;
104                case 'type':
105                $tri = 'type';
106                break;
107                case 'type-year':
108                $tri = 'type-annee';
109                break;
110                case 'creation-date':
111                $tri = 'date-creation';
112                break;
113        }       
114        if (!$tri) $tri = 'annee';
115        if (!$env['id'] && !$par)  { // Si un id ou si un par est passe, pas de tri via CiteOrder
116                switch ($tri) {
117                        case "annee":
118                        $requete .= '&citeOrder=year';
119                        break;
120                        case "auteur":
121                        $requete .= '&citeOrder=author';
122                        break;
123                        case "type":
124                        $requete .= '&citeOrder=type';
125                        break;
126                        case "type-annee":
127                        $requete .= '&citeOrder=type-year';
128                        break;
129                        case "date-creation":
130                        $requete .= '&citeOrder=creation-date';
131                        break;
132                }
133        }
134        if ($par) $requete .= '&by='.urlencode($par); //si on a un par, on transmet
135        // Style des citations
136        $style = $env['style'] ? trim($env['style']) : trim(lire_config('refbase/style'));
137        if ($env['citeStyle']) $style = trim($env['citeStyle']);
138        if (!$style) $style = 'APA';
139        $requete .= '&citeStyle='.urlencode($style);
140        // Doit on masquer abstracts et options export ?
141        $liens_exports = $env['liens_exports'] ? trim($env['liens_exports']) : trim(lire_config('refbase/liens_exports'));
142        switch (trim($env['showAbstract'])) {
143                case '1':
144                case 'yes':
145                $liens_exports = 'oui';
146                break;
147                case '0':
148                case 'no':
149                $liens_exports = 'non';
150                break;
151        }
152        switch (trim($env['viewType'])) {
153                case 'Mobile':
154                $liens_exports = 'non';
155                break;
156                case 'Web':
157                $liens_exports = 'oui';
158                break;
159        }
160        if ($liens_exports=='non' OR $env['id']) // Si id on n'affiche pas les liens
161                $requete .= '&viewType=Mobile';
162        else
163                $requete .= '&viewType=Web';
164       
165        // Parametres de la recherche
166        $where = trim($env['where']);
167        if (!preg_match('#%20#',$where)) $where = urlencode($where); // On verifie la necissite d encode l url
168        if ($where) $requete .= '&where='.$where;
169       
170        if ($env['type']) $requete .= '&type='.urlencode(trim($env['type']));
171       
172        $auteur = $env['author'] ? urlencode(trim($env['author'])) : urlencode(trim($env['auteur']));
173        if ($auteur) $requete .= '&author='.$auteur;
174       
175        if (trim($env['voir'])=='tout' OR trim($env['records'])=='all') $requete .= '&records=all';
176       
177        $institution = $env['contribution_id'] ? urlencode(trim($env['contribution_id'])) : urlencode(trim($env['institution']));
178        if ($institution) $requete .= '&contribution_id='.$institution;
179       
180        $motcle = $env['keywords'] ? urlencode(trim($env['keywords'])) : urlencode(trim($env['motcle']));
181        if ($motcle) $requete .= '&keywords='.$motcle;
182       
183        $journal = $env['publication'] ? urlencode(trim($env['publication'])) : urlencode(trim($env['journal']));
184        if ($journal) $requete .= '&publication='.$journal;
185       
186        $identifiants = trim($env['identifiants']);
187        if ($env['records'] AND trim($env['records']) !='all') $identifiants=trim($env['records']);
188        if ($identifiants) $requete .= '&records='.$identifiants;
189       
190        $annee = $env['year'] ? urlencode(trim($env['year'])) : urlencode(trim($env['annee']));
191        if ($annee) $requete .= '&year='.$annee;
192       
193        $titre = $env['title'] ? urlencode(trim($env['title'])) : urlencode(trim($env['titre']));
194        if ($titre) $requete .= '&title='.$titre;
195       
196        $depuis = $env['since'] ? trim($env['since']) : trim($env['depuis']);
197        if ($depuis) {
198                // Si c est une annee
199                if (preg_match('#^[0-9]{4}$#',$depuis))
200                        $requete .= '&where=year+>+'.($depuis-1);
201                // Si c est une duree en annee
202                elseif (preg_match('#^[0-9]{1,3}ans$#',$depuis))
203                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-3);
204                elseif (preg_match('#^[0-9]{1,3}an$#',$depuis))
205                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-2);
206                elseif (preg_match('#^[0-9]{1,3}a$#',$depuis))
207                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-1);
208                elseif (preg_match('#^[0-9]{1,3}y$#',$depuis))
209                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-1);
210                elseif (preg_match('#^[0-9]{1,3}year$#',$depuis))
211                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-4);
212                elseif (preg_match('#^[0-9]{1,3}years$#',$depuis))
213                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-5);
214                elseif (preg_match('#^[0-9]{1,3} ans$#',$depuis))
215                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-4);
216                elseif (preg_match('#^[0-9]{1,3} an$#',$depuis))
217                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-3);
218                elseif (preg_match('#^[0-9]{1,3} a$#',$depuis))
219                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-2);
220                elseif (preg_match('#^[0-9]{1,3} y$#',$depuis))
221                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-2);
222                elseif (preg_match('#^[0-9]{1,3} year$#',$depuis))
223                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-5);
224                elseif (preg_match('#^[0-9]{1,3} years$#',$depuis))
225                        $requete .= '&where=year+>+YEAR(NOW())-'.substr($depuis,0,-6);
226                if (preg_match('#^[0-9]{3}$#',$depuis))
227                        $requete .= '&where=year+>+YEAR(NOW())-'.$depuis;
228        }
229       
230        if ($env['doi']) $requete .= '&where=doi%20RLIKE%20%22'.urlencode(trim($env['doi'])).'%22';
231       
232        if ($option=='lien_requete')
233                return $requete;
234        else {
235       
236                // On recupere le flux
237                $texte = spip_file_get_contents($requete);
238               
239                // Cas de plusieurs références
240                if (!$env['id']) {
241                        // Renommage pour eviter toute interference
242                        $texte = str_replace('toggleVisibilitySlide','refbase_toggleVisibilitySlide',$texte);
243                        // Si vue=recap, il faut rendre les liens absolus
244                        if ($vue=='recap') {
245                                $texte = str_replace('<a href="search.php','<a href="'.$url_refbase.'search.php',$texte);
246                                $texte = str_replace('src="img/details','src="'.$url_refbase.'img/details',$texte);
247                        }
248                        // On affiche
249                        $retour = '<div class="refbasecss"';
250                        $css = $env['css'] ? trim($env['css']) : trim(lire_config('refbase/css'));
251                        if ($css) $retour .= ' style="'.$css.'"';
252                        $retour .= ">\n";
253                        $retour .= $texte;
254                        $retour .= "\n</div>";
255                        return $retour;
256                }
257                else { // Cas d une reference unique
258                       
259                        preg_match("#<div class=\"citation\">.*</div>#",$texte,$reference);
260                        preg_match("#<span class=\"Z3988\".*</span>#",$texte,$coins);
261                        $reference = substr($reference[0],22,-6);
262                       
263                        // rendre url clicable
264                        $in=array(
265                                '#((?:https?|ftp)://\S+)(\s|\z)#',
266                                '#((?<!//)(www\.)\S+)(\s|\z)#'
267                        );
268                        $out=array(
269                                '<a href="$1">$1</a>',
270                                '<a href="http://$1">$1</a>'
271                        );
272                        $reference = preg_replace($in,$out,$reference);
273                       
274                        return $reference.' '.$coins[0];
275                }
276        }
277}
278
279?>
Note: See TracBrowser for help on using the repository browser.