PluginProbe
HAL / trunk
HAL vtrunk
trunk 1.0 1.1 1.2 1.3 1.4 1.4.2 1.4.3 1.4.4 2.0 2.0.1 2.0.10 2.0.2 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.2 2.3 2.4 2.4.1 2.4.2 2.5 All 30 releases
hal / wp-hal.php

wp-hal.php in HAL trunk, at wp-hal.php

1,559 lines 89.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: HAL
4 * Plugin URI: http://www.ccsd.cnrs.fr
5 * Description: Crée une page qui remonte les publications d'un auteur ou d'une structure en relation avec HAL et un widget des dernières publications d'un auteur ou d'une structure.
6 * Version: 2.7.2
7 * Author: CCSD
8 * Author URI: http://www.ccsd.cnrs.fr
9 * Text Domain: wp-hal
10 * Domain Path: /lang/
11 */
12 //Récupère les constantes
13 require_once("constantes.php");
14
15 $generalLang = preg_replace('/_.*/', '', wphal_locale);
16 switch ($generalLang) {
17 case 'fr':
18 case 'es':
19 case 'en':
20 // Known languages...
21 define('wphal_lang', $generalLang);
22 break;
23 default:
24 define('wphal_lang', 'en');
25 }
26
27 function wphal_is_curl_installed() {
28 $loaded_extentions = get_loaded_extensions();
29 return (bool) (in_array('curl', $loaded_extentions));
30 }
31
32 // Création du shortcode ('nom du shortcode', 'fonction appelée')
33 add_shortcode( 'cv-hal', 'wphal_cv_hal' );
34 add_shortcode( 'nb-doc', 'wphal_nb_doc' );
35
36 function wphal_charger_languages() {
37 load_plugin_textdomain('wp-hal', false, dirname(plugin_basename(__FILE__)) . '/lang/');
38 }
39
40 add_action('plugins_loaded', 'wphal_charger_languages');
41
42 function wphal_action_links( $links, $file ) {
43 if ( $file != plugin_basename( __FILE__ ))
44 return $links;
45
46 $settings_link = '<a href="admin.php?page=wp-hal.php">' . __( 'Paramètres', 'wp-hal' ) . '</a>';
47 array_unshift( $links, $settings_link );
48 return $links;
49 }
50
51
52 add_filter( 'query_vars', 'wphal_query_vars' );
53 function wphal_query_vars( $query_vars ) {
54 $query_vars[] = 'hal_page';
55 return $query_vars;
56 }
57
58 add_filter( 'plugin_action_links', 'wphal_action_links',10,2);
59 /**
60 * @param $url
61 * @return object
62 */
63 function wphal_do_common_curl_call($url) {
64 $response = wp_remote_get($url, [
65 'timeout'=>20,
66 'user-agent'=>"HAL Plugin Wordpress " . wphal_version,
67 'headers' => ['Content-type'=> 'application/json']
68 ]);
69 // we could ve parsed the response but if in general if no results then we get empty content
70 $body = wp_remote_retrieve_body($response);
71 // Récupération du résultat JSON
72 $json = json_decode($body);
73 return $json;
74 }
75
76 function wphal_clear_transients()
77 {
78 global $wpdb;
79 // delete all "hal namespace" transients
80 $sql = "
81 DELETE
82 FROM {$wpdb->options}
83 WHERE option_name like '\_transient\_hal\_%'
84 OR option_name like '\_transient\_timeout\_hal\_%'
85 ";
86
87 $wpdb->query($sql);
88 }
89
90 /**
91 * fetches data from cache or download data from HAL API
92 * @param $url
93 * @return object
94 */
95 function wphal_do_get_data($url) {
96 $transient_id = 'hal_'.md5($url);
97 if(!empty(get_option('option_erase_cache'))){
98 // we reset cache transient for hal namespace
99 wphal_clear_transients();
100 update_option('option_erase_cache', '');
101 }
102 $cache_expiration = empty(get_option('option_cache_timeout')) ? 1 * DAY_IN_SECONDS : intval(get_option('option_cache_timeout')) * MINUTE_IN_SECONDS;
103 if ( false === ( $value = get_transient( $transient_id ) ) ) {
104 $json = wphal_do_common_curl_call($url);
105 if ($json) {
106 set_transient($transient_id, $json, $cache_expiration);
107 }
108 return $json;
109 } else{
110 return $value;
111 }
112 }
113
114 /**
115 * PLUGIN SHORTCODE ND-DOC
116 * @param $param
117 * @return int
118 */
119 function wphal_nb_doc($param)
120 {
121 $idhal = wphal_verifSolr(get_option('option_idhal'));
122 extract(shortcode_atts(array(
123 'type' => get_option('option_type'),
124 'id' => $idhal
125 ),
126 $param
127 ));
128 /**
129 * @var $id : defined by extract
130 * @var string $type : defined by extract
131 */
132 $id = wphal_verifSolr($id);
133
134 $url = wphal_api . '?q=*:*&fq=' . $type . ':(' . urlencode($id) . ')&rows=0&wt=json';
135
136 $json =wphal_do_get_data($url);
137 return $json->response->numFound;
138 }
139
140 /**
141 * PLUGIN SHORTCODE CV-HAL
142 * @param $param
143 * @return string
144 */
145 function wphal_cv_hal($param){
146 $content = '';
147 if ( !wphal_is_curl_installed() ) {
148 $content = 'CURL not installed, please check the <a href="https://wordpress.org/plugins/hal/faq/" target="_blank" id="curl">FAQ</a> with the code : CURL';
149 } else {
150 $possible_ids = ["authIdHal_s", "structId_i", "anrProjectId_i", "europeanProjectId_i", "collCode_s"];
151 $option_choix = !empty(get_option('option_choix')) ? get_option('option_choix') : [];
152 if(in_array('disciplines', $option_choix)){ //Lance les scripts pour le Graphique
153 wp_enqueue_style('wp-hal-style2');
154
155 wp_enqueue_script('wp-hal-script1');
156 wp_enqueue_script('wp-hal-script2');
157 wp_enqueue_script('wp-hal-script3');
158 }
159 $facetdomain = null;
160
161 // those parameters are configured from plusing settings
162 $default_id = wphal_verifSolr(get_option('option_idhal'));
163 $default_type = get_option('option_type');
164 $default_contact = get_option('option_infocontact');
165 // here we merge with shortcode parameters
166 extract(shortcode_atts(array(
167 'type' => $default_type,
168 'id' => $default_id,
169 'contact' => $default_contact,
170 'doctype_s' => null,
171 'debug' => false,
172 'option_groupe' => get_option('option_groupe')
173 ),
174 $param
175 ));
176 if ($doctype_s && !preg_match("/^[A-Z_ ]*$/", $doctype_s)) {
177 // Control of shortcode doctype_s which must be a valid doctype or a valid expression for doctype_s
178 // can accept: "ART OR REPORT AND NOT UNDEFINED"
179 $doctype_s = null;
180 }
181 if (! in_array($option_groupe, ['paginer', 'grouper'])) {
182 $option_groupe = 'paginer';
183 }
184
185 $content = 'Plugin is not configured correctly or shortcode parameters are not valid, please check the <a href="https://doc.hal.science/afficher-une-liste-de-publications-dans-wordpress/" target="_blank" id="wrong_params">documentation</a>';
186
187 /** @var $id : defined by extract
188 * @var string $type : defined by extract
189 * @var string $contact : defined by extract
190 */
191 if (!empty($id) && in_array($type, $possible_ids)) {
192 $id = wphal_verifSolr($id);
193
194 // in case the type is struct we need to split in order to build facet and display it back
195 $structIDs =[];
196 if($type=="structId_i"){
197 $structIDs = explode(' OR ', $id);
198 }
199
200 $facets = wphal_buildfacet($option_choix, $structIDs);
201 $facetQuery = !empty($facets) ? 'facet.field='.implode("&facet.field=", $facets).'&facet.limit=200&facet.mincount=1&facet=true':'';
202
203 $url = wphal_api . '?q=*:*&fq=' . $type . ':(' . urlencode($id) . ')';
204 if (!empty($doctype_s) && $doctype_s != "") {
205 $url .= '&fq=docType_s:('.$doctype_s.')';
206 }
207 switch ($option_groupe) {
208 case 'grouper':
209 //cURL sur l'API pour récupérer les données
210 $url .= '&group=true&group.field=docType_s&group.limit=1000';
211 break;
212 case 'paginer':
213 break;
214 default:
215 // impossible 2 cases only
216 }
217 $url .= '&fl=docid,citationFull_s&'.$facetQuery.'&sort=' . wphal_producedDateY . '&wt=json&json.nl=arrarr';
218
219 $json = wphal_do_get_data($url);
220 if(!isset($json->error)){
221 $content = "";
222 $hal_page = (get_query_var('hal_page')) ? get_query_var('hal_page') : 1;
223 if ($debug) {
224 $formattedJson = str_replace(["\n", ' '], ['<br />', '&nbsp;'] , json_encode($json,JSON_PRETTY_PRINT));
225 $content .= sprintf('<div class="debug"><ul><li>Option groupe: %s</li><li>url=%s</li><li>doctype_s: %s</li><li>json result: %s</li></ul></div>',
226 $option_groupe, $url, $doctype_s, $formattedJson );
227 }
228
229 $content .= '<div id="wphal-content">';
230 if (is_array($option_choix) && !empty($option_choix)){
231 $content .= '<ul id="wphal-menu">';
232 $content .= '<li><a href="#publications" onclick="displayElem(\'publications\'); return false;" style="font-size:18px; text-decoration: none;">' . __('Publications', 'wp-hal') . '</a></li>';
233
234 $content .= '<li><a href="#filtres" onclick="return false;" style="font-size:18px; text-decoration: none; cursor:default;">' . __('Filtres', 'wp-hal') . '</a>';
235 $content .= '<ul id="wphal-filtres">';
236 foreach ($option_choix as $option) {
237 if ($option == 'contact') {
238 $content .= '<li><a href="#contact" onclick="displayElem(\'wphal-contact\'); return false;" style="margin:1px; text-decoration: none;">' . __('Contact', 'wp-hal');
239 $content .= '</a></li>';
240 }
241 if ($option == 'disciplines') {
242 $content .= '<li><a href="#disciplines" onclick="displayElem(\'wphal-disciplines\'); return false;" style="margin:1px; text-decoration: none;">' . __('Disciplines', 'wp-hal');
243 $content .= '</a></li>';
244 }
245 if ($option == 'mots-clefs') {
246 $content .= '<li><a href="#keywords" onclick="displayElem(\'wphal-keywords\'); return false;" style="margin:1px; text-decoration: none;">' . __('Mots-clefs', 'wp-hal');
247 $content .= '</a></li>';
248 }
249 if ($option == 'auteurs') {
250 $content .= '<li><a href="#auteurs" onclick="displayElem(\'wphal-auteurs\'); return false;" style="margin:1px; text-decoration: none;">' . __('Auteurs', 'wp-hal');
251 $content .= '</a></li>';
252 }
253 if ($option == 'affiliated') {
254 $content .= '<li><a href="#affiliated" onclick="displayElem(\'wphal-affiliated\'); return false;" style="margin:1px; text-decoration: none;">' . __('Auteurs de la structure', 'wp-hal');
255 $content .= '</a></li>';
256 }
257 if ($option == 'revues') {
258 $content .= '<li><a href="#revues" onclick="displayElem(\'wphal-revues\'); return false;" style="margin:1px; text-decoration: none;">' . __('Revues', 'wp-hal');
259 $content .= '</a></li>';
260 }
261 if ($option == 'annee') {
262 $content .= '<li><a href="#annees" onclick="displayElem(\'wphal-annees\'); return false;" style="margin:1px; text-decoration: none;">' . __('Année de production', 'wp-hal');
263 $content .= '</a></li>';
264 }
265 if ($option == 'institution') {
266 $content .= '<li><a href="#insts" onclick="displayElem(\'wphal-insts\'); return false;" style="margin:1px; text-decoration: none;">' . __('Institutions', 'wp-hal');
267 $content .= '</a></li>';
268 }
269 if ($option == 'laboratoire') {
270 $content .= '<li><a href="#labs" onclick="displayElem(\'wphal-labs\'); return false;" style="margin:1px; text-decoration: none;">' . __('Laboratoires', 'wp-hal');
271 $content .= '</a></li>';
272 }
273 if ($option == 'departement') {
274 $content .= '<li><a href="#depts" onclick="displayElem(\'wphal-depts\'); return false;" style="margin:1px; text-decoration: none;">' . __('Départements', 'wp-hal');
275 $content .= '</a></li>';
276 }
277 if ($option == 'equipe') {
278 $content .= '<li><a href="#equipes" onclick="displayElem(\'wphal-equipes\'); return false;" style="margin:1px; text-decoration: none;">' . __('Équipes de recherche', 'wp-hal');
279 $content .= '</a></li>';
280 }
281 }
282 $content .= '</ul></li>';
283 $content .= '</ul><br/><hr>';
284 }
285
286 $content .= '<div id="meta">
287 <div class="display" id="wphal-contact" style="display: none;">
288 <h3 class="wphal-titre">' . __('Contact', 'wp-hal');
289 $content .= '</h3>
290
291 <ul id="wphal-cont" style="list-style-type: none;">';
292
293 if ($contact == 'yes' && $type == 'authIdHal_s') {
294 $urlauthor = wphal_urlauthor . '?indent=true&fq=valid_s:PREFERRED&fl=fullName_s,idHal_s,hasCV_bool,arxivId_s,idrefId_s,isniId_s,orcidId_s,viafId_s&q=idHal_s:' . urlencode($id);
295 $jsonauthor = wphal_do_get_data($urlauthor);
296
297 foreach ($jsonauthor->response->docs as $i=>$doc) {
298 $content .= '<div class="wphal-infocontact" id="wphal-infocontact'.$i.'">';
299 if ($doc->fullName_s != '') {
300 $content .= '<li class="wphal-fullname"><span>Nom : </span><span>'. $doc->fullName_s .'</span></li>';
301 }
302 if ($doc->idHal_s != '') {
303 $content .= '<li class="wphal-idhal"><span>IdHAL : </span><span>' . $doc->idHal_s . '</span></li>';
304 }
305 if ($doc->hasCV_bool == true){
306 $content .= '<li class="wphal-cvhal"><span>CV HAL : </span><a href="'.esc_url(cvhal. $doc->idHal_s).'" target="_blank">CV de '.$doc->fullName_s.'</a></li>';
307 }
308 if (isset($doc->arxivId_s ) && is_array($doc->arxivId_s)) {
309 $content .= '<li class="wphal-"><span>arXiv : </span><span>';
310 foreach($doc->arxivId_s as $arxivId_s){
311 $content .= '<a href="' . esc_url($arxivId_s) . '" target="_blank">' . substr(strrchr($arxivId_s, "/"), 1) . '</a> ,';
312 }
313 $content .= '</span></li>';
314 }
315 if (isset($doc->idrefId_s ) && is_array($doc->idrefId_s)) {
316 $content .= '<li class="wphal-"><span>IdRef : </span><span>';
317 foreach($doc->idrefId_s as $idref){
318 $content .= '<a href="' . esc_url($idref) . '" target="_blank">' . substr(strrchr($idref, "/"), 1) . '</a> ,';
319 }
320 $content .= '</span></li>';
321 }
322 if (isset($doc->orcidId_s ) && $doc->orcidId_s != '') {
323 $content .= '<li class="wphal-"><span>ORCID : </span><span>';
324 foreach($doc->orcidId_s as $orcidId_s){
325 $content .= '<a href="' . esc_url($orcidId_s) . '" target="_blank">' . substr(strrchr($orcidId_s, "/"), 1) . '</a> ,';
326 }
327 $content .= '</span></li>';
328 }
329 if (isset($doc->viafId_s ) && $doc->viafId_s != '') {
330 $content .= '<li class="wphal-"><span>VIAF : </span><span>';
331 foreach($doc->viafId_s as $viafId_s){
332 $content .= '<a href="' . esc_url($viafId_s) . '" target="_blank">' . substr(strrchr($viafId_s, "/"), 1) . '</a> ,';
333 }
334 $content .= '</span></li>';
335 }
336 if (isset($doc->isniId_s ) && $doc->isniId_s != '') {
337 $content .= '<li class="wphal-"><span>ISNI : </span><span>';
338 foreach($doc->isniId_s as $isniId_s){
339 $content .= '<a href="' . esc_url($isniId_s) . '" target="_blank">' . substr(strrchr($isniId_s, "/"), 1) . '</a> ,';
340 }
341 $content .= '</span></li>';
342 }
343 $content .= '</div>';
344 }
345 }
346 if (get_option('option_email') != '') {
347 $content .= '<li><img alt="mail" src=" ' . esc_url(plugin_dir_url(__FILE__) . 'img/mail.svg').' " style=" width:16px; margin-left:2px; margin-right:2px;"/><a href="'.esc_url('mailto:' . get_option('option_email')) . '" target="_blank">' . get_option('option_email') . '</a></li>';
348 }
349 if (get_option('option_tel') != '') {
350 $content .= '<li><img alt="phone" src=" ' . esc_url(plugin_dir_url(__FILE__) . 'img/phone.svg'). '" style="width:16px; margin-left:2px; margin-right:2px;"/>' . get_option('option_tel') . '</li>';
351 }
352 if (get_option('option_social0') != '') {
353 $content .= '<li><a href="'.esc_url('http://www.facebook.com/' . get_option('option_social0')) . '" target="_blank"><img
354 alt="Facebook" src=" ' . esc_url(plugin_dir_url(__FILE__) . 'img/facebook.svg').'" style="width:32px; margin:4px;"/></a></li>';
355 }
356 if (get_option('option_social1') != '') {
357 $content .= '<li><a href="'.esc_url('http://www.twitter.com/' . get_option('option_social1')) . '" target="_blank"><img
358 alt="Twitter" src=" ' . esc_url(plugin_dir_url(__FILE__) . 'img/twitter.svg').'" style="width:32px; margin:4px;"/></a></li>';
359 }
360 if (get_option('option_social2') != '') {
361 $content .= '<li><a href="'.esc_url('https://plus.google.com/u/0/+' . get_option('option_social2')) . '" target="_blank"><img
362 alt="Google+" src=" ' . esc_url(plugin_dir_url(__FILE__) . 'img/google-plus.svg').'" style="width:32px; margin:4px;"/></a></li>';
363 }
364 if (get_option('option_social3') != '') {
365 $content .= '<li><a href="'.esc_url('https://www.linkedin.com/in/' . get_option('option_social3')) . '" target="_blank"><img
366 alt="LinkedIn" src=" ' . esc_url(plugin_dir_url(__FILE__) . 'img/linkedin.svg').'" style="width:32px; margin:4px;"/></a></li>';
367 }
368 $content .= '</ul>
369 </div>
370 <div class="display" id="wphal-disciplines" style="display: none;">
371 <h3 class="wphal-titre">' . __('Disciplines', 'wp-hal') . '</h3>';
372
373 if (wphal_locale == 'fr_FR') {
374 $facetdomain = isset($json->facet_counts->facet_fields->fr_domainAllCodeLabel_fs) ? $json->facet_counts->facet_fields->fr_domainAllCodeLabel_fs:null;
375 } elseif (wphal_locale == 'es_ES') {
376 $facetdomain = isset($json->facet_counts->facet_fields->es_domainAllCodeLabel_fs) ? $json->facet_counts->facet_fields->es_domainAllCodeLabel_fs:null;
377 } else {
378 $facetdomain = isset($json->facet_counts->facet_fields->en_domainAllCodeLabel_fs) ? $json->facet_counts->facet_fields->en_domainAllCodeLabel_fs:null;
379 }
380
381 if (!is_null($facetdomain) && !empty($facetdomain)) {
382 $content .= '<div id="listdisci">';
383 $content .= '<span id="tridisciplines">';
384 $content .= '<button type="button" class="trial" id="tridisci" onclick="toggleSort(this, true, \'wphal-discipline\', \'wphal-discipline\', \'tridisci\'); return false;" style="font-size:16px; text-decoration: none;" >Tri Alphabétique</button>';
385 $content .= '<button type="button" class="trioc" id="trinbdisci" onclick="toggleSort(this, false, \'wphal-discipline\', \'wphal-discipline\', \'trinbdisci\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
386 $content .= '</span>';
387 $content .= '<ul id="wphal-discipline" class="wphal-discipline">';
388 foreach ($facetdomain as $res) {
389 $name = explode(wphal_delimiter, $res[0]);
390 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=domainAllCode_s:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
391 }
392 $content .= '</ul>';
393 $content .= '</div>';
394
395 $content .= '<div id="wphal-graph" style="display:none;">';
396 $content .= '<div id="wphal-piedisci"></div>';
397 $content .= '</div>';
398 $content .= '<button type="button" style="text-decoration: none;" id="wphal-disci" onclick="visibilitedisci(\'listdisci\',\'wphal-graph\',\'tridisciplines\'); return false;" >' . __('Graphique', 'wp-hal');
399 $content .= '</button>';
400 }
401 $content .= '</div>
402 <div class="display" id="wphal-keywords" style="display: none;">
403 <h3 class="wphal-titre">' . __('Mots-clefs', 'wp-hal') . '</h3>';
404 if (isset($json->facet_counts->facet_fields->keyword_s) && !is_null($json->facet_counts->facet_fields->keyword_s) && !empty($json->facet_counts->facet_fields->keyword_s)) {
405 $content .= '<div id="wphal-keys">';
406 $r = 0;
407 // CSS Nuage de mots
408 $maxsize = 25;
409 $minsize = 10;
410 /** @var int[] $keywordCounts */
411 $keywordCounts = array_column($json->facet_counts->facet_fields->keyword_s, 1);
412 $maxval = max($keywordCounts);
413 $minval = min($keywordCounts);
414 $spread = ( $maxval - $minval );
415 $step = ( $spread > 0 ) ? ($maxsize - $minsize) / $spread : 0;
416 $tab = [];
417 foreach ($json->facet_counts->facet_fields->keyword_s as $res) {
418 $r = $r + 1;
419 if ($r > 20) {
420 break;
421 }
422 $tab[] = $res;
423 }
424 asort($tab); // Tri du tableau par ordre alphabétique
425 foreach ($tab as $res) {
426 $size = round($minsize + (($res[1] - $minval) * $step));
427 $content .= '<a style="display: inline-block; font-size:' . $size . 'px" href="' . esc_url(halv3 . '?q=keyword_s:' . urlencode('"' . $res[0] . '"') . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $res[0] . '</a>&nbsp;';
428 }
429 $content .= '</div>';
430 $content .= '<div id="keysuite" style="display:none;">';
431 $content .= '<span id="trikeywords">';
432 $content .= '<button type="button" class="trial" id="trikey" onclick="toggleSort(this, true, \'wphal-keyw\', \'wphal-keyword\', \'trikey\'); return false;" style="font-size:16px; text-decoration: none;" >Tri Alphabétique</button>';
433 $content .= '<button type="button" class="trioc" id="trinbkey" onclick="toggleSort(this, false, \'wphal-keyw\', \'wphal-keyword\', \'trinbkey\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
434 $content .= '</span>';
435 $content .= '<ul class="wphal-keyword">';
436 $content .= '<div id="wphal-keyw">';
437 foreach ($json->facet_counts->facet_fields->keyword_s as $res) {
438 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=keyword_s:' . urlencode('"' . $res[0] . '"') . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $res[0] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
439 }
440 $content .= '</div>';
441 $content .= '</ul>';
442 $content .= '</div>';
443 $content .= '<button type="button" style="text-decoration: none;" id="wphal-key" onclick="visibilitekey(\'wphal-keys\',\'keysuite\', \'trikeywords\'); return false;" >' . __('Liste complète', 'wp-hal');
444 $content .= '</button>';
445 }
446 $content .= '</div>
447 <div class="display" id="wphal-auteurs" style="display: none;">
448 <h3 class="wphal-titre">' . __('Auteurs', 'wp-hal') . '</h3>';
449 if (isset($json->facet_counts->facet_fields->authIdLastNameFirstName_fs) && !is_null($json->facet_counts->facet_fields->authIdLastNameFirstName_fs) && !empty($json->facet_counts->facet_fields->authIdLastNameFirstName_fs)) {
450 $content .= '<span id="triauteurs">';
451 $content .= '<button type="button" class="trial" id="triaut" onclick="toggleSort(this, true, \'wphal-aut\', \'auteursuite\', \'triaut\'); return false;" style="font-size:16px; text-decoration: none;" >Tri Alphabétique</button>';
452 $content .= '<button type="button" class="trioc" id="trinbaut" onclick="toggleSort(this, false, \'wphal-aut\', \'auteursuite\', \'trinbaut\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
453 $content .= '</span>';
454 $content .= '<ul class="wphal-auteurs" style="list-style-type: none;">';
455 $content .= '<div id="wphal-aut">';
456 $r = 0;
457 foreach ($json->facet_counts->facet_fields->authIdLastNameFirstName_fs as $res) {
458 $r = $r + 1;
459 if ($r > 10) {
460 break;
461 }
462 $name = explode(wphal_delimiter, $res[0]);
463 if($name[0] == 0){
464 $q = 'authLastNameFirstName_s:'.urlencode("\"".$name[1]."\"");
465 }else{
466 $q = "authIdPerson_i:$name[0]";
467 }
468 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><img alt="user" src=" ' . esc_url(plugin_dir_url(__FILE__) . '/img/user.svg').'" style="width:16px; margin-left:2px; margin-right:2px;"/><a href="' . esc_url(halv3 . '?q='. $q . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
469 }
470 $i = 1;
471 $content .= '<div id="auteursuite" style="display:none;">';
472 foreach ($json->facet_counts->facet_fields->authIdLastNameFirstName_fs as $res) {
473 if ($r < 10) {
474 break;
475 }
476 if ($i < $r) {
477 $i = $i + 1;
478 } else {
479 $name = explode(wphal_delimiter, $res[0]);
480 if($name[0] == 0){
481 $q = 'authLastNameFirstName_s:'.urlencode("\"".$name[1]."\"");
482 }else{
483 $q = "authIdPerson_i:$name[0]";
484 }
485 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><img alt="user" src=" ' . esc_url(plugin_dir_url(__FILE__) . '/img/user.svg').'" style="width:16px; margin-left:2px; margin-right:2px;"/><a href="' . esc_url(halv3 . '?q='. $q . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
486 }
487 }
488 $content .= '</div>';
489 $content .= '</div>';
490 $content .= '</ul>';
491 if ($r > 10) {
492 $content .= '<button type="button" style="text-decoration: none;" id="wphal-auteur" onclick="visibilite(\'auteursuite\'); return false;" >' . __('Liste complète', 'wp-hal');
493 $content .= '</button>';
494 }
495 }
496 $content .= '</div>
497 <div class="display" id="wphal-affiliated" style="display: none;">
498 <h3 class="wphal-titre">' . __('Auteurs de la structure', 'wp-hal') . '</h3>';
499 $parsed_facetfield = isset($json->facet_counts->facet_fields) ? wphal_parse_affiliation_facet($json->facet_counts->facet_fields, $structIDs) : [];
500 if (!empty($parsed_facetfield)) {
501 $content .= '<span id="triauteurs">';
502 $content .= '<button type="button" class="trial" id="triaff" onclick="toggleSort(this, true, \'wphal-aff\', \'affiliateduite\', \'triaff\'); return false;" style="font-size:16px; text-decoration: none;" >Tri Alphabétique</button>';
503 $content .= '<button type="button" class="trioc" id="trinbaff" onclick="toggleSort(this, false, \'wphal-aff\', \'affiliateduite\', \'trinbaff\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
504 $content .= '</span>';
505 $content .= '<ul class="wphal-auteurs" style="list-style-type: none;">';
506 $content .= '<div id="wphal-aff">';
507 $r = 0;
508 foreach ($parsed_facetfield as $author=>$count) {
509 $r = $r + 1;
510 if ($r > 10) {
511 break;
512 }
513 $name = explode(wphal_delimiter, $author);
514 if($name[1] == 0){
515 $q = 'authLastNameFirstName_s:'.urlencode("\"".$name[2]."\"");
516 }else{
517 $q = "authIdPerson_i:$name[1]";
518 }
519 $content .= '<li class="metadata" data-percentage="' . $count . '"><img alt="user" src=" ' . esc_url(plugin_dir_url(__FILE__) . '/img/user.svg').'" style="width:16px; margin-left:2px; margin-right:2px;"/><a href="' . esc_url(halv3 . '?q='. $q . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[2] . '</a><span class="wphal-nbmetadata">' . $count . '</span></li>';
520 }
521 $i = 1;
522 $content .= '<div id="affiliateduite" style="display:none;">';
523 foreach ($parsed_facetfield as $author=>$count) {
524 if ($r < 10) {
525 break;
526 }
527 if ($i < $r) {
528 $i = $i + 1;
529 } else {
530 $name = explode(wphal_delimiter, $author);
531 if($name[1] == 0){
532 $q = 'authLastNameFirstName_s:'.urlencode("\"".$name[2]."\"");
533 }else{
534 $q = "authIdPerson_i:$name[1]";
535 }
536 $content .= '<li class="metadata" data-percentage="' . $count . '"><img alt="user" src=" ' . esc_url(plugin_dir_url(__FILE__) . '/img/user.svg').'" style="width:16px; margin-left:2px; margin-right:2px;"/><a href="' . esc_url(halv3 . '?q='. $q . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[2] . '</a><span class="wphal-nbmetadata">' . $count . '</span></li>';
537 }
538 }
539 $content .= '</div>';
540 $content .= '</div>';
541 $content .= '</ul>';
542 if ($r > 10) {
543 $content .= '<button type="button" style="text-decoration: none;" id="wphal-auteur" onclick="visibilite(\'affiliateduite\'); return false;" >' . __('Liste complète', 'wp-hal');
544 $content .= '</button>';
545 }
546 }
547 $content .= '</div>
548 <div class="display" id="wphal-revues" style="display: none;">
549 <h3 class="wphal-titre">' . __('Revues', 'wp-hal') . '</h3>';
550 if (isset($json->facet_counts->facet_fields->journalIdTitle_fs) && !is_null($json->facet_counts->facet_fields->journalIdTitle_fs) && !empty($json->facet_counts->facet_fields->journalIdTitle_fs)) {
551 $content .= '<span id="trirevues">';
552 $content .= '<button type="button" class="trial" id="trirev" onclick="toggleSort(this, true, \'wphal-rev\', \'revuesuite\', \'trirev\'); return false;" style="font-size:16px; text-decoration: none;" >Tri Alphabétique</button>';
553 $content .= '<button type="button" class="trioc" id="trinbrev" onclick="toggleSort(this, false, \'wphal-rev\', \'revuesuite\', \'trinbrev\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
554 $content .= '</span>';
555 $content .= '<ul class="wphal-revues">';
556 $content .= '<div id="wphal-rev">';
557 $r = 0;
558 foreach ($json->facet_counts->facet_fields->journalIdTitle_fs as $res) {
559 $r = $r + 1;
560 if ($r > 10) {
561 break;
562 }
563 $name = explode(wphal_delimiter, $res[0]);
564 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=journalId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
565 }
566 $i = 1;
567 $content .= '<div id="revuesuite" style="display:none;">';
568 foreach ($json->facet_counts->facet_fields->journalIdTitle_fs as $res) {
569 if ($r < 10) {
570 break;
571 }
572 if ($i < $r) {
573 $i = $i + 1;
574 } else {
575 $name = explode(wphal_delimiter, $res[0]);
576 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=journalId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
577 }
578 }
579 $content .= '</div>';
580 $content .= '</div>';
581 $content .= '</ul>';
582 if ($r > 10) {
583 $content .= '<button type="button" style="text-decoration: none;" id="wphal-revue" onclick="visibiliterevues(\'revuesuite\'); return false;" >' . __('Liste complète', 'wp-hal');
584 $content .= '</button>';
585 }
586 }
587 $content .= '</div>
588 <div class="display" id="wphal-annees" style="display: none;">
589 <h3 class="wphal-titre">' . __('Année de production', 'wp-hal') . '</h3>';
590 if (isset($json->facet_counts->facet_fields->producedDateY_i) && !is_null($json->facet_counts->facet_fields->producedDateY_i) && !empty($json->facet_counts->facet_fields->producedDateY_i)) {
591 $content .= '<span id="triannees">';
592 $content .= '<button type="button" class="trial" id="trian" onclick="toggleSort(this, true, \'wphal-an\', \'anneesuite\', \'trian\'); return false;" style="font-size:16px; text-decoration: none;" >Tri Alphabétique</button>';
593 $content .= '<button type="button" class="trioc" id="trinban" onclick="toggleSort(this, false, \'wphal-an\', \'anneesuite\', \'trinban\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
594 $content .= '</span>';
595 $content .= '<ul class="wphal-annees">';
596 $content .= '<div id="wphal-an">';
597
598 rsort($json->facet_counts->facet_fields->producedDateY_i);
599 $r = 0;
600 foreach ($json->facet_counts->facet_fields->producedDateY_i as $res) {
601 $r = $r + 1;
602 if ($r > 10) {
603 break;
604 }
605 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=producedDateY_i:' . urlencode($res[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $res[0] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
606 }
607 $i = 1;
608 $content .= '<div id="anneesuite" style="display:none;">';
609 foreach ($json->facet_counts->facet_fields->producedDateY_i as $res) {
610 if ($r < 10) {
611 break;
612 }
613 if ($i < $r) {
614 $i = $i + 1;
615 } else {
616 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=producedDateY_i:' . urlencode($res[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $res[0] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
617 }
618 }
619 $content .= '</div>';
620 $content .= '</div>';
621 $content .= '</ul>';
622 if ($r > 10) {
623 $content .= '<button type="button" style="text-decoration: none;" id="wphal-annee" onclick="visibiliteannee(\'anneesuite\'); return false;" >' . __('Liste complète', 'wp-hal');
624 $content .= '</button>';
625 }
626 }
627 $content .= '</div>
628 <div class="display" id="wphal-insts" style="display: none;">
629 <h3 class="wphal-titre">' . __('Institutions', 'wp-hal') . '</h3>';
630 if (isset($json->facet_counts->facet_fields->instStructIdName_fs) && !is_null($json->facet_counts->facet_fields->instStructIdName_fs) && !empty($json->facet_counts->facet_fields->instStructIdName_fs)) {
631 $content .= '<span id="triinsts">';
632 $content .= '<button type="button" class="trial" id="triinst" onclick="toggleSort(this, true, \'wphal-institu\', \'instsuite\', \'triinst\'); return false;" style="font-size:16px; text-decoration: none;" >Tri Alphabétique</button>';
633 $content .= '<button type="button" class="trioc" id="trinbinst" onclick="toggleSort(this, false, \'wphal-institu\', \'instsuite\', \'trinbinst\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
634 $content .= '</span>';
635 $content .= '<ul class="wphal-insts">';
636 $content .= '<div id="wphal-institu">';
637 $r = 0;
638 foreach ($json->facet_counts->facet_fields->instStructIdName_fs as $res) {
639 $r = $r + 1;
640 if ($r > 10) {
641 break;
642 }
643 $name = explode(wphal_delimiter, $res[0]);
644 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=instStructId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
645 }
646 $i = 1;
647 $content .= '<div id="instsuite" style="display:none;">';
648 foreach ($json->facet_counts->facet_fields->instStructIdName_fs as $res) {
649 if ($r < 10) {
650 break;
651 }
652 if ($i < $r) {
653 $i = $i + 1;
654 } else {
655 $name = explode(wphal_delimiter, $res[0]);
656 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=instStructId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
657 }
658 }
659 $content .= '</div>';
660 $content .= '</div>';
661 $content .= '</ul>';
662 if ($r > 10) {
663 $content .= '<button type="button" style="text-decoration: none;" id="wphal-inst" onclick="visibiliteinst(\'instsuite\'); return false;" >' . __('Liste complète', 'wp-hal');
664 $content .= '</button>';
665 }
666 }
667 $content .= '</div>
668 <div class="display" id="wphal-labs" style="display: none;">
669 <h3 class="wphal-titre">' . __('Laboratoires', 'wp-hal') . '</h3>';
670 if (isset($json->facet_counts->facet_fields->labStructIdName_fs) && !is_null($json->facet_counts->facet_fields->labStructIdName_fs) && !empty($json->facet_counts->facet_fields->labStructIdName_fs)) {
671 $content .= '<span id="trilabs">';
672 $content .= '<button type="button" class="trial" id="trilab" onclick="toggleSort(this, true, \'wphal-labo\', \'labsuite\', \'trilab\'); return false;" style="font-size:16px; text-decoration: none;" >Tri Alphabétique</button>';
673 $content .= '<button type="button" class="trioc" id="trinblab" onclick="toggleSort(this, false, \'wphal-labo\', \'labsuite\', \'trinblab\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
674 $content .= '</span>';
675 $content .= '<ul class="wphal-labs">';
676 $content .= '<div id="wphal-labo">';
677
678 $r = 0;
679 foreach ($json->facet_counts->facet_fields->labStructIdName_fs as $res) {
680 $r = $r + 1;
681 if ($r > 10) {
682 break;
683 }
684 $name = explode(wphal_delimiter, $res[0]);
685 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=labStructId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
686 }
687 $i = 1;
688 $content .= '<div id="labsuite" style="display:none;">';
689 foreach ($json->facet_counts->facet_fields->labStructIdName_fs as $res) {
690 if ($r < 10) {
691 break;
692 }
693 if ($i < $r) {
694 $i = $i + 1;
695 } else {
696 $name = explode(wphal_delimiter, $res[0]);
697 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=labStructId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
698 }
699 }
700 $content .= '</div>';
701 $content .= '</div>';
702 $content .= '</ul>';
703 if ($r > 10) {
704 $content .= '<button type="button" style="text-decoration: none;" id="wphal-lab" onclick="visibilitelab(\'labsuite\'); return false;" >' . __('Liste complète', 'wp-hal');
705 $content .= '</button>';
706 }
707 }
708 $content .= '</div>
709 <div class="display" id="wphal-depts" style="display: none;">
710 <h3 class="wphal-titre">' . __('Départements', 'wp-hal') . '</h3>';
711 if (isset($json->facet_counts->facet_fields->deptStructIdName_fs) && !is_null($json->facet_counts->facet_fields->deptStructIdName_fs) && !empty($json->facet_counts->facet_fields->deptStructIdName_fs)) {
712 $content .= '<span id="tridept">';
713 $content .= '<button type="button" class="trial" id="tridept" onclick="toggleSort(this, true, \'wphal-dpt\', \'deptsuite\', \'tridept\'); return false;" style="font-size:16px; text-decoration: none;" >Tri Alphabétique</button>';
714 $content .= '<button type="button" class="trioc" id="trinbdept" onclick="toggleSort(this, false, \'wphal-dpt\', \'deptsuite\', \'trinbdept\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
715 $content .= '</span>';
716 $content .= '<ul class="wphal-depts">';
717 $content .= '<div id="wphal-dpt">';
718 $r = 0;
719 foreach ($json->facet_counts->facet_fields->deptStructIdName_fs as $res) {
720 $r = $r + 1;
721 if ($r > 10) {
722 break;
723 }
724 $name = explode(wphal_delimiter, $res[0]);
725 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=deptStructId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
726 }
727 $i = 1;
728 $content .= '<div id="deptsuite" style="display:none;">';
729 foreach ($json->facet_counts->facet_fields->deptStructIdName_fs as $res) {
730 if ($r < 10) {
731 break;
732 }
733 if ($i < $r) {
734 $i = $i + 1;
735 } else {
736 $name = explode(wphal_delimiter, $res[0]);
737 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=deptStructId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
738 }
739 }
740 $content .= '</div>';
741 $content .= '</div>';
742 $content .= '</ul>';
743 if ($r > 10) {
744 $content .= '<button type="button" style="text-decoration: none;" id="wphal-dept" onclick="visibilitedept(\'deptsuite\'); return false;" >' . __('Liste complète', 'wp-hal');
745 $content .= '</button>';
746 }
747 }
748 $content .= '</div>
749 <div class="display" id="wphal-equipes" style="display: none;">
750 <h3 class="wphal-titre">' . __('Équipes de recherche', 'wp-hal') . '</h3>';
751 if (isset($json->facet_counts->facet_fields->rteamStructIdName_fs) && !is_null($json->facet_counts->facet_fields->rteamStructIdName_fs) && !empty($json->facet_counts->facet_fields->rteamStructIdName_fs)) {
752 $content .= '<span id="triequipe">';
753 $content .= '<button type="button" class="trial" id="triequipe" onclick="toggleSort(this, true, \'wphal-rteam\', \'equipesuite\', \'triequipe\'); return false;" style="font-size:16px;text-decoration: none;" >Tri Alphabétique</button>';
754 $content .= '<button type="button" class="trioc" id="trinbequipe" onclick="toggleSort(this, false, \'wphal-rteam\', \'equipesuite\', \'trinbequipe\'); return false;" style="font-size:16px; text-decoration: none;">Tri Occurrence</button>';
755 $content .= '</span>';
756 $content .= '<ul class="wphal-equipes">';
757 $content .= '<div id="wphal-rteam">';
758
759 $r = 0;
760 $name=[];
761 foreach ($json->facet_counts->facet_fields->rteamStructIdName_fs as $res) {
762 $r = $r + 1;
763 if ($r > 10) {
764 break;
765 }
766 $name = explode(wphal_delimiter, $res[0]);
767 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=rteamStructId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
768 }
769 $i = 1;
770 $content .= '<div id="equipesuite" style="display:none;">';
771 foreach ($json->facet_counts->facet_fields->rteamStructIdName_fs as $res) {
772 if ($r < 10) {
773 break;
774 }
775 if ($i < $r) {
776 $i = $i + 1;
777 } else {
778 $name = explode(wphal_delimiter, $res[0]);
779 $content .= '<li class="metadata" data-percentage="' . $res[1] . '"><a href="' . esc_url(halv3 . '?q=rteamStructId_i:' . urlencode($name[0]) . "+AND+" . $type . ':(' . $id . ')').'" target="_blank">' . $name[1] . '</a><span class="wphal-nbmetadata">' . $res[1] . '</span></li>';
780 }
781 }
782 $content .= '</div>';
783 $content .= '</div>';
784 $content .= '</ul>';
785 if ($r > 10) {
786 $content .= '<button type="button" style="text-decoration: none;" id="wphal-equipe" onclick="visibiliteequipe(\'equipesuite\'); return false;" >' . __('Liste complète', 'wp-hal');
787 $content .= '</button>';
788 }
789 }
790 $content .= '</div>
791 <div class="display" id="publications">';
792 if(null === $json || !isset($jsontype->response)) {
793 if ($option_groupe == 'grouper') {
794 $doctype = file_get_contents(plugin_dir_path(__FILE__) . 'json' . DIRECTORY_SEPARATOR . 'doctype_fr.json');
795 $jsontype = json_decode($doctype);
796
797 //LISTE DES DOCUMENTS PAR GROUPE
798
799 $content .= '<div class="counter-doc"><span class="wphal-nbtot">' . $json->grouped->docType_s->matches . ' </span>';
800 $content .= __('documents', 'wp-hal') . '</div><br>';
801 for ($i = 0; !empty($jsontype->response->result->doc[$i]); $i++) {
802 for ($d = 0; !empty($json->grouped->docType_s->groups[$d]); $d++) {
803 if ($json->grouped->docType_s->groups[$d]->groupValue == $jsontype->response->result->doc[$i]->str[0]) {
804 $titre = $jsontype->response->result->doc[$i]->str[1];
805 $content .= '<div class="grp-div"><h3 class="wphal-titre-groupe">' . __($titre, 'wp-hal') . '<span class="wphal-nbmetadata" style="margin-left:10px;">' . $json->grouped->docType_s->groups[$d]->doclist->numFound . ' ' . _n('document', 'documents', $json->grouped->docType_s->groups[$d]->doclist->numFound, 'wp-hal') . '</span></h3>';
806 $content .= '<div class="grp-content">';
807 $content .= '<ul>';
808 foreach ($json->grouped->docType_s->groups[$d]->doclist->docs as $result) {
809 $content .= '<li>' . $result->citationFull_s . '</li>';
810 }
811 $content .= '</ul></div>';
812 $content .= '</div><br>';
813 break;
814 }
815 }
816 }
817 } elseif ($option_groupe == 'paginer') {
818
819 //LISTE DES DOCUMENTS AVEC PAGINATION
820 $content .= '<div class="counter-doc"><span class="wphal-nbtot">' . $json->response->numFound . ' </span>';
821 $content .= __('documents', 'wp-hal') . '</div><br>';
822
823 //--MODULE PAGINATION--//
824 $messagesParPage = 10;
825
826 $total = $json->response->numFound;
827
828 $nombreDePages = ceil($total / $messagesParPage);
829
830 if (isset($hal_page)) {
831 $pageActuelle = intval($hal_page);
832
833 if ($pageActuelle > $nombreDePages) {
834 $pageActuelle = $nombreDePages;
835 }
836 } else {
837 $pageActuelle = 1;
838 }
839 $premiereEntree = ($pageActuelle - 1) * $messagesParPage;
840
841 $url = wphal_api . '?q=*:*&fq=' . $type . ':(' . urlencode($id) . ')&fl=docid,citationFull_s,keyword_s,bookTitle_s,producedDate_s,authFullName_s&start=' . $premiereEntree . '&rows=' . $messagesParPage . '&sort=' . wphal_producedDateY . '&wt=json';
842 if (!empty($doctype_s) && $doctype_s != "") {
843 $url .= '&fq=docType_s:('.$doctype_s.')';
844 }
845 $json = wphal_do_get_data($url);
846
847 //--MODULE PAGINATION--//
848 $count_results = is_array($json->response->docs) ? count($json->response->docs) : 0;
849 if ($count_results > 0) {
850 $content .= '<ul>';
851 for ($i = 0; $i <= $count_results - 1; $i++) {
852 $content .= '<li>' . $json->response->docs[$i]->citationFull_s . '</li>';
853 }
854 $content .= '</ul>';
855 } else {
856 $content = '<div> no results !</div>';
857 }
858 if ($total > $messagesParPage) {
859 $base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
860 $url = $base_url . $_SERVER["REQUEST_URI"];
861 $explodedURL = explode('?', $url);
862 $queryString = isset($explodedURL[1]) ? $explodedURL[1] : "";
863 $pagedHref = $explodedURL[0];
864 if (!empty($queryString)) {
865 $parsedQueryString = [];
866 parse_str($queryString, $parsedQueryString);
867 if (isset($parsedQueryString["hal_page"])) {
868 unset($parsedQueryString["hal_page"]);
869 }
870 $pagedHref .= '?';
871 foreach ($parsedQueryString as $name => $value) {
872 $pagedHref .= $name . '=' . $value . '&';
873 }
874 // we add it back..
875 $pagedHref .= 'hal_page=';
876 } else {
877 $pagedHref .= '?hal_page=';
878 }
879
880 //--AFFICHAGE PAGINATION--//
881 $precedents = $pageActuelle - 2;
882 $suivants = $pageActuelle + 2;
883 $precedent = $pageActuelle - 1;
884 $suivant = $pageActuelle + 1;
885 $penultimate = $nombreDePages - 1;
886
887 $content .= '<ul class="wphal-pagination">';
888 //--BOUTON PRECEDENT--//
889 if ($pageActuelle != 1) {
890 $content .= '<li><a href="' . $pagedHref . $precedent . '">&laquo;</a></li>';
891 }
892 if ($nombreDePages <= 6) {// Cas 1 : 6 pages ou moins - Pas de troncature
893 for ($i = 1; $i <= $nombreDePages; $i++) {
894 if ($i == $pageActuelle) {
895 $content .= '<li class="active"><a href="#">' . $i . '</a></li>';
896 } else {
897 $content .= ' <li><a href="' . $pagedHref . $i . '">' . $i . '</a></li> ';
898 }
899 }
900 } elseif ($nombreDePages >= 7) {// Cas 2 : 7 pages ou plus - Troncature
901 if ($pageActuelle <= 3) {// Lorsque l'on est sur les trois premières pages
902 for ($i = 1; $i <= 4; $i++) {
903 if ($i == $pageActuelle) {
904 $content .= '<li class="active"><a href="#">' . $i . '</a></li>';
905 } else {
906 $content .= '<li><a href="' . $pagedHref . $i . '">' . $i . '</a></li>';
907 }
908 }
909 $content .= '<li class="disabled"><a href="#">&hellip;</a></li>';
910 $content .= '<li><a href="' . $pagedHref . $penultimate . '">' . $penultimate . '</a></li>';
911 $content .= '<li><a href="' . $pagedHref . $nombreDePages . '">' . $nombreDePages . '</a></li>';
912 }
913 if ($pageActuelle >= 4 && $pageActuelle <= $penultimate - 2) {//Lorsque l'on arrive sur la quatrième page
914 $content .= '<li><a href="' . $pagedHref . '1">1</a></li>';
915 $content .= '<li class="disabled"><a href="#">&hellip;</a></li>';
916 $content .= '<li><a href="' . $pagedHref . $precedents . '">' . $precedents . '</a></li>';
917 $content .= '<li><a href="' . $pagedHref . $precedent . '">' . $precedent . '</a></li>';
918 $content .= '<li class="active"><a href="#">' . $pageActuelle . '</a></li>';
919 $content .= '<li><a href="' . $pagedHref . $suivant . '">' . $suivant . '</a></li>';
920 $content .= '<li><a href="' . $pagedHref . $suivants . '">' . $suivants . '</a></li>';
921 $content .= '<li class="disabled"><a href="#">&hellip;</a></li>';
922 $content .= '<li><a href="' . $pagedHref . $nombreDePages . '">' . $nombreDePages . '</a></li>';
923 }
924 if ($pageActuelle >= $penultimate - 1) {
925 $content .= '<li><a href="' . $pagedHref . '1">1</a></li>';
926 $content .= '<li><a href="' . $pagedHref . '2">2</a></li>';
927 $content .= '<li class="disabled"><a href="#">&hellip;</a></li>';
928 for ($i = $penultimate - 2; $i <= $nombreDePages; $i++) {
929 if ($i == $pageActuelle) {
930 $content .= '<li class="active"><a href="#">' . $i . '</a></li>';
931 } else {
932 $content .= '<li><a href="' . $pagedHref . $i . '">' . $i . '</a></li>';
933 }
934 }
935 }
936 }
937 //--BOUTON SUIVANT--//
938 if ($pageActuelle < $nombreDePages) {
939 $content .= '<li><a href="' . $pagedHref . $suivant . '">&raquo;</a></li>';
940 }
941 $content .= '</ul>';
942 //--AFFICHAGE PAGINATION--//
943 }
944 }
945 } else {
946 $content .= '<div> empty response !</div>';
947 }
948 $content .= '</div>
949 </div>
950 </div>';
951 }}
952 $content .= '<div class="wphal-footer">';
953 $content .= '<p style="color:#B3B2B0">' . __("Documents récupérés de l'archive ouverte HAL", 'wp-hal') . '&nbsp;<a href="' . wphal_site . '" target="_blank"><img alt="logo" src=" ' . esc_url(plugin_dir_url(__FILE__) . 'img/logo-hal.png').'" style="width:90px;"></a></p>';
954 $content .= '</div>';
955
956 //--AFFICHAGE GRAPHIQUE DOMAINE--//
957 if (!is_null($facetdomain)) {
958 foreach ($facetdomain as $res) {
959 $name = explode(wphal_delimiter, $res[0])[1];
960 $value = $res[1];
961 $array[] = array($name, $value);
962 }
963 wp_localize_script('wp-hal-script4', 'WPWallSettings', $array);
964 }
965 $translation = array('liste' => __('Liste', 'wp-hal'), 'compl' => __('Liste complète', 'wp-hal'), 'princ' => __('Liste principale', 'wp-hal'), 'graph' => __('Graphique', 'wp-hal'), 'nuage' => __('Nuage de mots', 'wp-hal'));
966 wp_localize_script('wp-hal-script4', 'translate', $translation);
967 }
968 // tags other that those will be stripped
969 $allowed_html_tags = array(
970 'div' => array(
971 'class' => array(),
972 'id' => array(),
973 'style' => array(),
974 ),
975 "span"=> array(
976 'class' => array(),
977 'id' => array(),
978 'style' => array(),
979 ),
980 "img"=> array(
981 'alt' => array(),
982 'src' => array(),
983 'style' => array(),
984
985 ),
986 'p' => array(
987 'style' => array(),
988 'id' => array(),
989 ),
990 'h3' => array(
991 'id' => array(),
992 'class' => array(),
993 'style' => array()
994 ),
995 'a' => array(
996 'href' => array(),
997 'target' => array(),
998 'title' => array(),
999 'id' => array(),
1000 'class' => array(),
1001 'style' => array(),
1002 'onclick' => array(),
1003 ),
1004 'ul' => array(
1005 'class' => array(),
1006 'id' => array(),
1007 'style' => array(),
1008 ),
1009 'li' => array(
1010 'class' => array(),
1011 'id' => array(),
1012 'data-percentage' => array()
1013 ),
1014 'button' => array(
1015 'class' => array(),
1016 'id' => array(),
1017 'type' => array(),
1018 'style' => array(),
1019 'onclick' => array()
1020 )
1021 ,'br' => array()
1022 ,'hr' => array()
1023 ,'i' => array(),
1024 );
1025 add_filter( 'safe_style_css', function( $styles ) {
1026 $styles[] = 'display';
1027 return $styles;
1028 } );
1029 return wp_kses($content, $allowed_html_tags);
1030 }
1031
1032 /**
1033 * build facet query based on the option choice
1034 *
1035 * @param array $option_choix
1036 * @param array $structIDs to build prefixed facet
1037 * @return array
1038 */
1039 function wphal_buildfacet($option_choix, $structIDs)
1040 {
1041 $facetQuery = [];
1042 if (is_array($option_choix) && !empty($option_choix)) {
1043 foreach ($option_choix as $option) {
1044 if ($option == 'disciplines') {
1045 $facetQuery[] = wphal_lang . '_domainAllCodeLabel_fs';
1046 }
1047 if ($option == 'mots-clefs') {
1048 $facetQuery[] = 'keyword_s';
1049 }
1050 if ($option == 'auteurs') {
1051 $facetQuery[] = 'authIdLastNameFirstName_fs';
1052 }
1053 if ($option == 'revues') {
1054 $facetQuery[] = 'journalIdTitle_fs';
1055 }
1056 if ($option == 'annee') {
1057 $facetQuery[] = 'producedDateY_i';
1058 }
1059 if ($option == 'institution') {
1060 $facetQuery[] = 'instStructIdName_fs';
1061 }
1062 if ($option == 'laboratoire') {
1063 $facetQuery[] = 'labStructIdName_fs';
1064 }
1065 if ($option == 'departement') {
1066 $facetQuery[] = 'deptStructIdName_fs';
1067 }
1068 if ($option == 'equipe') {
1069 $facetQuery[] = 'rteamStructIdName_fs';
1070 }
1071 if ($option == 'affiliated') {
1072 $facetField = 'structHasAuthIdHalPersonid_s';
1073 foreach($structIDs as $k => $structID){
1074 $facetPrefix = $structID . wphal_delimiter;
1075 $facetQuery[] = '&facet.field={!key=affiliated_' . $k . '+facet.prefix=' . urlencode($facetPrefix) . '}' . urlencode($facetField);
1076 }
1077 }
1078 }
1079 }
1080 return $facetQuery;
1081 }
1082
1083 function wphal_verifSolr($values){
1084 $verifsolr = explode(',',$values);
1085 $numverif = count($verifsolr);
1086 $solrsql = '';
1087 if ($numverif<1024){
1088 $solrsql = str_replace(',',' OR ',$values);
1089 } else {
1090 $listsolrsql = explode(',',$values);
1091 for($i=0;$i<1024;$i++){
1092 if ($i == 0){
1093 $solrsql = $listsolrsql[$i];
1094 } else {
1095 $solrsql .= ' OR ';
1096 $solrsql .= $listsolrsql[$i];
1097 }
1098 }
1099 }
1100
1101 return $solrsql;
1102 }
1103
1104
1105 /**
1106 * parses the affiliation facet
1107 *
1108 * @return array
1109 */
1110 function wphal_parse_affiliation_facet($facet_fields, $structIDs)
1111 {
1112 $result=[];
1113 foreach($structIDs as $k => $structID){
1114 if(isset($facet_fields->{'affiliated_'.$k}) && !empty($facet_fields->{'affiliated_'.$k})){
1115 foreach($facet_fields->{'affiliated_'.$k} as $r){
1116 $t = explode(wphal_delimiter_join, $r[0]);
1117 if (!isset($result[$t[1]])){
1118 $result[$t[1]] = $r[1];
1119 }else {
1120 $result[$t[1]] += $r[1];
1121 }
1122 }
1123 }
1124 }
1125 return $result;
1126 }
1127
1128 function wphal_adding_style() {
1129 wp_register_style('wp-hal-style1', plugins_url('/css/style.css', __FILE__));
1130 wp_register_style('wp-hal-style2', plugins_url('/css/jquery.jqplot.css', __FILE__));
1131
1132 wp_enqueue_style('wp-hal-style1');
1133 }
1134
1135 function wphal_adding_script() {
1136 wp_register_script('wp-hal-script1',plugins_url('/js/jquery.jqplot.js', __FILE__));
1137 wp_register_script('wp-hal-script2',plugins_url('/js/jqplot.highlighter.js', __FILE__));
1138 wp_register_script('wp-hal-script3',plugins_url('/js/jqplot.pieRenderer.js', __FILE__));
1139 wp_register_script('wp-hal-script4',plugins_url('/js/cv-hal.js', __FILE__));
1140
1141
1142 wp_enqueue_script("jquery");
1143 wp_enqueue_script('wp-hal-script4', false, array(), false, true);
1144 }
1145
1146 /**
1147 * Récupère les fichiers css et js
1148 */
1149 if ( wphal_is_curl_installed() ) {
1150 add_action('wp_enqueue_scripts', 'wphal_adding_style');
1151 add_action('wp_enqueue_scripts', 'wphal_adding_script');
1152 }
1153
1154 /**
1155 * Charge lorsque le plugin est désactivé
1156 */
1157 register_deactivation_hook( __FILE__, 'wphal_reset_option' );
1158
1159 /**
1160 * Ajoute le widget wphal à l'initialisation des widgets
1161 */
1162 add_action('widgets_init','wphal_init');
1163
1164 /**
1165 * Ajoute le menu à l'initialisation du menu admin
1166 */
1167 add_action( 'admin_menu', 'wphal_menu' );
1168
1169 /**
1170 * Fonction de création du menu
1171 */
1172 function wphal_menu() {
1173 add_menu_page( 'Options', 'Hal', 'manage_options', 'wp-hal.php', 'wphal_option' , '', 21);
1174
1175 add_action( 'admin_init', 'wphal_register_settings' );
1176 }
1177
1178
1179 /**
1180 * Initialise le nouveau widget
1181 */
1182 function wphal_init(){
1183 register_widget("wphal_widget");
1184 }
1185
1186 /***********************************************************************************************************************
1187 * PLUGIN WIDGET
1188 **********************************************************************************************************************/
1189
1190 /**
1191 * Classe du widget wphal
1192 */
1193
1194 class wphal_widget extends WP_widget{
1195 /**
1196 * Défini les propriétés du widget
1197 */
1198 function __construct(){
1199 $options = array(
1200 "classname" => "wphal-publications",
1201 "description" => __("Afficher les dernières publications d'un auteur ou d'une structure.", 'wp-hal')
1202 );
1203
1204 parent::__construct(
1205 'hal-publications',
1206 __("Publications HAL", 'wp-hal'),
1207 $options
1208 );
1209 }
1210
1211 /**
1212 * Crée le widget
1213 * @param $args
1214 * @param $instance
1215 */
1216 function widget($args, $instance){
1217 if(isset($instance['idhal']) && !empty($instance['idhal'])) {
1218 $content = '';
1219 extract($args);
1220 /**
1221 * @var $before_widget : defined by extract
1222 * @var $before_title : defined by extract
1223 * @var $after_title : defined by extract
1224 * @var $after_widget : defined by extract
1225 */
1226 if (!wphal_is_curl_installed()) {
1227 $content = 'Please check the <a href="https://wordpress.org/plugins/hal/faq/" target="_blank" id="FAQ">FAQ</a> with the code : CURL';
1228
1229 } else {
1230 $instance['idhal'] = wphal_verifSolr($instance['idhal']);
1231 $fieldName = $instance['typetext'] == 'title_s' ? 'title_s':'citationFull_s';
1232
1233 $url = wphal_api . '?q=*:*&fq=' . $instance['select'] . ':' . urlencode($instance['idhal']) . '&fl=uri_s,' . $fieldName . '&sort=' . wphal_producedDateY . '&rows=' . $instance['nbdoc'] . '&wt=json';
1234 $json = wphal_do_get_data($url);
1235
1236 $count_results = is_array($json->response->docs) ? count($json->response->docs) : 0;
1237 if (isset($json->response->docs) && $count_results > 0) {
1238 $content = '<ul class="widhal-ul">';
1239 for ($i = 0; $i < $count_results - 1; $i++) {
1240 if ($fieldName == 'title_s') {
1241 $typetext = $json->response->docs[$i]->title_s[0];
1242 } else {
1243 $typetext = $json->response->docs[$i]->citationFull_s;
1244 }
1245 $content .= '<li class="widhal-li"><a href="' . esc_url($json->response->docs[$i]->uri_s) . '" target="_blank">' . $typetext . '</a></li>';
1246 }
1247 $content .= '</ul>';
1248 } else {
1249 $content = '<div> no results !</div>';
1250 }
1251 }
1252 // tags other that those will be stripped
1253 $allowed_html_tags = array(
1254 'div' => array(
1255 'class' => array(),
1256 'id' => array(),
1257 ),
1258 'h2' => array(),
1259 'section' => array(),
1260 'a' => array(
1261 'href' => array(),
1262 'target' => array(),
1263 'title' => array(),
1264 'id' => array(),
1265 'class' => array(),
1266 ),
1267 'ul' => array(
1268 'class' => array(),
1269 'id' => array(),
1270 ),
1271 'li' => array(
1272 'class' => array(),
1273 'id' => array(),
1274 )
1275 );
1276 $widget_block = $before_widget;
1277 $widget_block .= $before_title . $instance['titre'] . $after_title;
1278 $widget_block .= $content;
1279 $widget_block .= $after_widget;
1280 echo wp_kses($widget_block, $allowed_html_tags);
1281 }
1282 }
1283
1284 /**
1285 * Sauvegarde des données
1286 * @param $new
1287 * @param $old
1288 */
1289 function update($new, $old){
1290 //the id must be provided
1291 if(isset($new['idhal']) && !empty($new['idhal'])) {
1292 $new['idhal'] = wphal_sanitize_username($new['idhal']);
1293 $new['nbdoc'] = wphal_sanitize_id($new['nbdoc']);
1294 return $new;
1295 }else
1296 return false;
1297 }
1298
1299 /**
1300 * Formulaire du widget
1301 * @param $instance
1302 */
1303 function form($instance){
1304
1305 $defaut = array(
1306 'titre' => __("Publications Hal", 'wp-hal'),
1307 'select' => "authIdHal_s",
1308 'typetext' => "title_s",
1309 'idhal' => "",
1310 'nbdoc' => 5
1311 );
1312 $instance = wp_parse_args($instance,$defaut);
1313 ?>
1314 <p>
1315 <label for="<?php echo esc_attr($this->get_field_id("titre"));?>"><?php echo esc_html(__('Titre','wp-hal')) .' :'?></label>
1316 <input value="<?php echo esc_js($instance['titre']);?>" name="<?php echo esc_attr($this->get_field_name("titre"));?>" id="<?php echo esc_attr($this->get_field_id("titre"));?>" class="widefat" type="text"/>
1317 </p>
1318 <p>
1319 <label for="<?php echo esc_attr($this->get_field_id("nbdoc"));?>"><?php echo esc_html(__("Nombre de documents affichés",'wp-hal')) .' :'?></label>
1320 <input class="tiny-text" id="<?php echo esc_attr($this->get_field_id("nbdoc"));?>" name="<?php echo esc_attr($this->get_field_name("nbdoc"));?>" type="number" step="1" min="1" max="10" value="<?php echo esc_js($instance['nbdoc']);?>" size="3">
1321 </p>
1322 <p>
1323 <label for="<?php echo esc_attr($this->get_field_id("typetext"));?>"><?php echo esc_html(__("Type d'affichage",'wp-hal')) .' :'?></label>
1324 <select id="<?php echo esc_attr($this->get_field_id("typetext"));?>" name="<?php echo esc_attr($this->get_field_name("typetext"));?>">
1325 <option id="<?php echo esc_attr($this->get_field_id("Title"));?>" value="title_s" <?php echo esc_attr(($instance["typetext"] == "title_s")?'selected':''); ?>><label for="<?php echo wp_kses($this->get_field_id("Title"), []);?>"><?php echo esc_html(__("Titre", 'wp-hal'))?></label></option>
1326 <option id="<?php echo esc_attr($this->get_field_id("Citation"));?>" value="citationFull_s" <?php echo esc_attr(($instance["typetext"] == "citationFull_s")?'selected':''); ?>><label for="<?php echo esc_attr($this->get_field_id("Citation"));?>"><?php echo esc_html(__("Citation", 'wp-hal'), [])?></label></option>
1327 </select>
1328 </p>
1329 <p>
1330 <label for="<?php echo esc_attr($this->get_field_id("select"));?>"><?php echo esc_html(__("Type d'Id",'wp-hal') .' :')?></label>
1331 <select id="<?php echo esc_attr($this->get_field_id("select"));?>" name="<?php echo esc_attr($this->get_field_name("select"));?>">
1332 <option id="<?php echo esc_attr($this->get_field_id("Idhal"));?>" value="authIdHal_s" <?php echo esc_attr(($instance["select"] == "authIdHal_s")?'selected':''); ?>><label for="<?php echo esc_attr($this->get_field_id("Idhal"));?>">Id Hal</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : laurent-capelli)','wp-hal'));?></span></option>
1333 <option id="<?php echo esc_attr($this->get_field_id("StructId"));?>" value="structId_i" <?php echo esc_attr(($instance["select"] == "structId_i")?'selected':''); ?>><label for="<?php echo esc_attr($this->get_field_id("StructId"));?>">Struct Id</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : 413106)','wp-hal'));?></span></option>
1334 <option id="<?php echo esc_attr($this->get_field_id("Anrproject"));?>" value="anrProjectId_i" <?php echo esc_attr(($instance["select"] == "anrProjectId_i")?'selected':''); ?>><label for="<?php echo esc_attr($this->get_field_id("Anrproject"));?>">anrProject Id</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : 1646)','wp-hal'));?></span></option>
1335 <option id="<?php echo esc_attr($this->get_field_id("Europeanproject"));?>" value="europeanProjectId_i" <?php echo esc_attr(($instance["select"] == "europeanProjectId_i")?'selected':''); ?>><label for="<?php echo esc_attr($this->get_field_id("Europeanproject"));?>">europeanProject Id</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : 17877)','wp-hal'));?></span></option>
1336 <option id="<?php echo esc_attr($this->get_field_id("Collection"));?>" value="collCode_s" <?php echo esc_attr(($instance["select"] == "collCode_s")?'selected':''); ?>><label for="<?php echo esc_attr($this->get_field_id("Collection"));?>">Collection</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : TICE2014)','wp-hal'));?></span></option>
1337 </select>
1338 </p>
1339 <p>
1340 <label for="<?php echo esc_attr($this->get_field_id("idhal"));?>"><?php echo esc_html(__("Id",'wp-hal')) .' :'?></label>
1341 <input value="<?php echo esc_js($instance['idhal']);?>" name="<?php echo esc_attr($this->get_field_name("idhal"));?>" id="<?php echo esc_attr($this->get_field_id("idhal"));?>" type="text"/>
1342 </p>
1343 <?php
1344 }
1345 }
1346
1347
1348 function wphal_sanitize_id( $input ){
1349 if(is_numeric($input)){
1350 return $input;
1351 }
1352 }
1353
1354 function wphal_sanitize_username($input)
1355 {
1356 $allowed = array(".", "-", "_"); // you can add here more value, you want to allow.
1357 if(ctype_alnum(str_replace($allowed, '', $input ))) {
1358 return $input;
1359 }
1360 }
1361
1362 function wphal_sanitize_phone( $input ){
1363 $phone_num = $input;
1364 $phone_num = preg_replace('/[^0-9]/', '', $phone_num);
1365 if(strlen($phone_num) === 10) {
1366 //Phone is 10 characters in length
1367 return $input;
1368 }
1369 }
1370
1371
1372 function wphal_register_settings() {
1373 register_setting( 'wphal_option', 'option_choix' );
1374 register_setting( 'wphal_option', 'option_type' );
1375 register_setting( 'wphal_option', 'option_groupe' );
1376 register_setting( 'wphal_option', 'option_idhal' , array(
1377 'type' => 'string',
1378 'sanitize_callback' => 'wphal_sanitize_username',
1379 'default' => NULL,
1380 ));
1381 register_setting( 'wphal_option', 'option_lang' );
1382 register_setting( 'wphal_option', 'option_infocontact' );
1383 register_setting( 'wphal_option', 'option_email' , array(
1384 'type' => 'string',
1385 'sanitize_callback' => 'sanitize_email',
1386 'default' => NULL,
1387 ));
1388 register_setting( 'wphal_option', 'option_tel' , array(
1389 'type' => 'string',
1390 'sanitize_callback' => 'wphal_sanitize_phone',
1391 'default' => NULL,
1392 ));
1393 register_setting( 'wphal_option', 'option_social0' , array(
1394 'type' => 'string',
1395 'sanitize_callback' => 'wphal_sanitize_username',
1396 'default' => NULL,
1397 ));
1398 register_setting( 'wphal_option', 'option_social1' , array(
1399 'type' => 'string',
1400 'sanitize_callback' => 'wphal_sanitize_username',
1401 'default' => NULL,
1402 ));
1403 register_setting( 'wphal_option', 'option_social2' , array(
1404 'type' => 'string',
1405 'sanitize_callback' => 'wphal_sanitize_username',
1406 'default' => NULL,
1407 ));
1408 register_setting( 'wphal_option', 'option_social3' , array(
1409 'type' => 'string',
1410 'sanitize_callback' => 'wphal_sanitize_username',
1411 'default' => NULL,
1412 ));
1413 register_setting( 'wphal_option', 'option_cache_timeout' , array(
1414 'type' => 'string',
1415 'sanitize_callback' => 'wphal_sanitize_id',
1416 'default' => NULL,
1417 ));
1418 register_setting( 'wphal_option', 'option_erase_cache' );
1419 }
1420
1421 /**
1422 * Crée le menu d'option du plugin
1423 */
1424 function wphal_option() {
1425
1426 if (get_option('option_type')==''){
1427 update_option('option_type', 'authIdHal_s');
1428 }
1429 if (get_option('option_groupe')==''){
1430 update_option('option_groupe', 'paginer');
1431 }
1432 ?>
1433 <div class="wrap">
1434 <h2><?php echo esc_html(__('Plugin HAL','wp-hal'));?></h2>
1435 <form method="post" enctype="multipart/form-data" action="options.php">
1436 <div id="poststuff">
1437 <div id="post-body" class="metabox-holder columns-2">
1438 <div id="post-body-content">
1439 <?php settings_fields( 'wphal_option' ); ?>
1440 <?php do_settings_sections( 'wphal_option' ); ?>
1441 <table class="form-table">
1442 <tr style="vertical-align:top;">
1443 <th scope="row" style="font-size: 18px;"><?php echo esc_html(__('Paramètre de la page :','wp-hal'));?></th>
1444 </tr>
1445 <tr style="vertical-align:top;">
1446 <th scope="row"><label for="option_type"><?php echo esc_html(__('Type d\'Id','wp-hal'));?></label></th>
1447 <td><select name="option_type">
1448 <option id="Idhal" value="authIdHal_s" <?php echo esc_attr(((get_option('option_type') == "authIdHal_s")?'selected':'')); ?>><label for="Idhal">Id Hal</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : laurent-capelli)','wp-hal'));?></span></option>
1449 <option id="StructId" value="structId_i" <?php echo esc_attr(((get_option('option_type') == "structId_i")?'selected':'')); ?>><label for="StructId">Struct Id</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : 413106)','wp-hal'));?></span></option>
1450 <option id="Anrproject" value="anrProjectId_i" <?php echo esc_attr(((get_option('option_type') == "anrProjectId_i")?'selected':'')); ?>><label for="Anrproject">anrProject Id</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : 1646)','wp-hal'));?></span></option>
1451 <option id="Europeanproject" value="europeanProjectId_i" <?php echo esc_attr(((get_option('option_type') == "europeanProjectId_i")?'selected':'')); ?>><label for="Europeanproject">europeanProject Id</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : 17877)','wp-hal'));?></span></option>
1452 <option id="Collection" value="collCode_s" <?php echo esc_attr(((get_option('option_type') == "collCode_s")?'selected':'')); ?>><label for="Collection">Collection</label><span style="font-style: italic;"> <?php echo esc_html(__('(Exemple : TICE2014)','wp-hal'));?></span></option>
1453 </select>
1454 <input type="text" name="option_idhal" id="option_idhal" value="<?php echo esc_js(get_option('option_idhal')); ?>"/>
1455 </td>
1456 </tr>
1457 <tr style="vertical-align:top;">
1458 <th scope="row"><?php echo esc_html(__('Affichage des documents','wp-hal'));?></th>
1459 <td><input type="radio" name="option_groupe" id="paginer" value="paginer" <?php echo esc_attr((get_option('option_groupe') == "paginer")?'checked':''); ?>><label for="paginer"><?php echo esc_html(__('Documents avec pagination','wp-hal'));?></label><br>
1460 <input type="radio" name="option_groupe" id="grouper" value="grouper" <?php echo esc_js((get_option('option_groupe') == "grouper")?'checked':''); ?>><label for="grouper"><?php echo esc_html(__('Documents groupés par type','wp-hal'));?></label><br>
1461 </td>
1462 </tr>
1463 <tr style="vertical-align:top;">
1464 <th scope="row"><?php echo esc_html(__('Choix des éléments menu(facette)','wp-hal'));?></th>
1465 <?php $option_choix = get_option('option_choix'); ?>
1466 <td><input type="checkbox" name="option_choix[1]" id="Contact" value="contact" <?php echo esc_attr((isset($option_choix[1]) && $option_choix[1] == "contact")?'checked':''); ?>><label for="Contact"><?php echo esc_html(__('Contact','wp-hal'));?></label><br/>
1467 <input type="checkbox" name="option_choix[2]" id="Disciplines" value="disciplines" <?php echo esc_attr((isset($option_choix[2]) && $option_choix[2] == "disciplines")?'checked':''); ?>><label for="Disciplines"><?php echo esc_html(__('Disciplines','wp-hal'));?></label><br/>
1468 <input type="checkbox" name="option_choix[3]" id="Mots-clefs" value="mots-clefs" <?php echo esc_attr((isset($option_choix[3]) && $option_choix[3] == "mots-clefs")?'checked':''); ?>><label for="Mots-clefs"><?php echo esc_html(__('Mots-clefs','wp-hal'));?></label><br/>
1469 <input type="checkbox" name="option_choix[4]" id="Auteurs" value="auteurs" <?php echo esc_attr((isset($option_choix[4]) && $option_choix[4] == "auteurs")?'checked':''); ?>><label for="Auteurs"><?php echo esc_html(__('Auteurs','wp-hal'));?></label><br/>
1470 <input type="checkbox" name="option_choix[5]" id="Affiliated" value="affiliated" <?php echo esc_attr((isset($option_choix[5]) && $option_choix[5] == "affiliated")?'checked':''); ?>><label for="Affiliated"><?php echo esc_html(__('Auteurs de la structure','wp-hal'));?></label><br/>
1471 <input type="checkbox" name="option_choix[6]" id="Revues" value="revues" <?php echo esc_attr((isset($option_choix[6]) && $option_choix[6] == "revues")?'checked':''); ?>><label for="Revues"><?php echo esc_html(__('Revues','wp-hal'));?></label><br/>
1472 <input type="checkbox" name="option_choix[7]" id="Annee" value="annee" <?php echo esc_attr((isset($option_choix[7]) && $option_choix[7] == "annee")?'checked':''); ?>><label for="Annee"><?php echo esc_html(__('Année de production','wp-hal'));?></label><br/>
1473 <input type="checkbox" name="option_choix[8]" id="Institution" value="institution" <?php echo esc_attr((isset($option_choix[8]) && $option_choix[8] == "institution")?'checked':''); ?>><label for="Institution"><?php echo esc_html(__('Institutions','wp-hal'));?></label><br/>
1474 <input type="checkbox" name="option_choix[9]" id="Laboratoire" value="laboratoire" <?php echo esc_attr((isset($option_choix[9]) && $option_choix[9] == "laboratoire")?'checked':''); ?>><label for="Laboratoire"><?php echo esc_html(__('Laboratoires','wp-hal'));?></label><br/>
1475 <input type="checkbox" name="option_choix[10]" id="Departement" value="departement" <?php echo esc_attr((isset($option_choix[10]) && $option_choix[10] == "departement")?'checked':''); ?>><label for="Departement"><?php echo esc_html(__('Départements','wp-hal'));?></label><br/>
1476 <input type="checkbox" name="option_choix[11]" id="Equipe" value="equipe" <?php echo esc_attr((isset($option_choix[11]) && $option_choix[11] == "equipe")?'checked':''); ?>><label for="Equipe"><?php echo esc_html(__('Équipes de recherche','wp-hal'));?></label>
1477 </td>
1478 </tr>
1479 <tr style="vertical-align:top;">
1480 <th scope="row" style="font-size: 18px;"><?php echo esc_html(__('Contact :','wp-hal'));?></th>
1481 </tr>
1482 <tr>
1483 <th scope="row"><?php echo esc_html(__("Afficher les informations d'un chercheur ayant un IdHal ?",'wp-hal'));?></th>
1484 <td><input type="radio" name="option_infocontact" id="wphal-yes" value="yes" <?php echo esc_attr((get_option('option_infocontact') == "yes")?'checked':''); ?>><label for="wphal-yes"><?php echo esc_html(__("Oui",'wp-hal'))?></label><br>
1485 <input type="radio" name="option_infocontact" id="wphal-no" value="no" <?php echo esc_attr((get_option('option_infocontact') == "no")?'checked':''); ?>><label for="wphal-no"><?php echo esc_html(__("Non",'wp-hal'))?></label><br>
1486 </td>
1487 </tr>
1488 <tr>
1489 <th scope="row"><label for="option_cache_timeout"><?php echo esc_html(__('Expiration cache (minutes)','wp-hal'));?></label></th>
1490 <td><input type="number" min="1440" style="width:300px;" placeholder="Default(1 day) : 1440" name="option_cache_timeout" id="option_cache_timeout" value="<?php echo esc_js(get_option('option_cache_timeout')); ?>"/><img alt="cache" src="<?php echo esc_url(plugin_dir_url( __FILE__ ).'img/clock.svg'); ?>" style="vertical-align:middle; width:32px; margin-left:2px; margin-right:2px;"/></td>
1491 </tr>
1492 <tr>
1493 <th scope="row"><label for="option_erase_cache"><?php echo esc_html(__('Reinitialiser le cache','wp-hal'));?></label></th>
1494 <td><input type="checkbox" name="option_erase_cache" id="option_erase_cache" value="1"/><img alt="option_erase_cache" src="<?php echo esc_url(plugin_dir_url( __FILE__ )."img/groom.svg"); ?>" style="vertical-align:middle; width:32px; margin-left:2px; margin-right:2px;"/></td>
1495 </tr>
1496 <tr>
1497 <th scope="row"><label for="option_email"><?php echo esc_html(__('Email','wp-hal'));?></label></th>
1498 <td><input type="text" style="width:300px;" placeholder="Exemple : hi@mail.com" name="option_email" id="option_email" value="<?php echo esc_js(get_option('option_email')); ?>"/><img alt="email" src="<?php echo esc_url(plugin_dir_url( __FILE__ )."img/mail.svg"); ?>" style="vertical-align:middle; width:32px; margin-left:2px; margin-right:2px;"/></td>
1499 </tr>
1500 <tr>
1501 <th scope="row"><label for="option_tel"><?php echo esc_html(__('Téléphone','wp-hal'));?></label></th>
1502 <td><input type="text" style="width:300px;" placeholder="Exemple : 06-01-02-03-04" name="option_tel" id="option_tel" value="<?php echo esc_js(get_option('option_tel'));?>"/><img alt="phone" src="<?php echo esc_url(plugin_dir_url( __FILE__ )."img/phone.svg"); ?>" style="vertical-align:middle; width:32px; margin-left:2px; margin-right:2px;"/></td>
1503 </tr>
1504 <tr>
1505 <th><label for="option_social0">Facebook (http://www.facebook.com/)</label></th>
1506 <td><input type="text" style="width:300px;" placeholder="Exemple : fa.book" name="option_social0" id="option_social0" value="<?php echo esc_js(get_option('option_social0')); ?>"/><img alt="facebook" src="<?php echo esc_url(plugin_dir_url( __FILE__ )."img/facebook.svg"); ?>" style="vertical-align:middle; width:32px; margin-left:2px; margin-right:2px;"/></td>
1507 </tr>
1508 <tr>
1509 <th><label for="option_social1">Twitter (http://www.twitter.com/)</label></th>
1510 <td><input type="text" style="width:300px;" placeholder="Exemple : tweet_heure" name="option_social1" id="option_social1" value="<?php echo esc_js(get_option('option_social1')); ?>"/><img alt="twitter" src="<?php echo esc_url(plugin_dir_url( __FILE__ )."img/twitter.svg"); ?>" style="vertical-align:middle; width:32px; margin-left:2px; margin-right:2px;"/></td>
1511 </tr>
1512 <tr>
1513 <th><label for="option_social2">Google + (https://plus.google.com/u/0/+)</label></th>
1514 <td><input type="text" style="width:300px;" placeholder="Exemple : goo.plus" name="option_social2" id="option_social2" value="<?php echo esc_js(get_option('option_social2')); ?>"/><img alt="google" src="<?php echo esc_url(plugin_dir_url( __FILE__ )."img/google-plus.svg"); ?>" style="vertical-align:middle; width:32px; margin-left:2px; margin-right:2px;"/></td>
1515 </tr>
1516 <tr>
1517 <th><label for="option_social3">LinkedIn (https://www.linkedin.com/in/)</label></th>
1518 <td><input type="text" style="width:300px;" placeholder="Exemple : link.dine" name="option_social3" id="option_social3" value="<?php echo esc_js(get_option('option_social3')); ?>"/><img alt="linkedin" src="<?php echo esc_url(plugin_dir_url( __FILE__ )."img/linkedin.svg"); ?>" style="vertical-align:middle; width:32px; margin-left:2px; margin-right:2px;"/></td>
1519 </tr>
1520 </table>
1521 <?php
1522 submit_button(__('Enregistrer','wp-hal'), 'primary large', 'submit', true); ?>
1523 </div>
1524 <div id="postbox-container-1" class="postbox-container">
1525
1526 </div>
1527 </div>
1528 <br class="clear"><br/>
1529 </div>
1530 </form>
1531
1532 </div>
1533
1534 <?php
1535 }
1536
1537
1538 /**
1539 * Reset les données Hal
1540 */
1541 function wphal_reset_option() {
1542 delete_option('option_choix');
1543 delete_option('option_type');
1544 delete_option('option_groupe');
1545 delete_option('option_idhal');
1546 delete_option('option_lang');
1547 delete_option('option_infocontact');
1548 delete_option('option_email');
1549 delete_option('option_tel');
1550 delete_option('option_social0');
1551 delete_option('option_social1');
1552 delete_option('option_social2');
1553 delete_option('option_social3');
1554 delete_option('option_cache_timeout');
1555 delete_option('option_erase_cache');
1556 }
1557
1558 ?>
1559