source: spip-zone/_plugins_/refbase/trunk/refbase_balise.php @ 54493

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

Réorganisation du répertoire selon trunk/branche

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