'test'); //$query = apachesolr_drupal_query($name, $params); //$result = apachesolr_do_query($query); die('test'); dsm('TEST'); //dsm($result); /* //Initialisation du batch $batch = array( 'title' => t("Exporter les résultats d'une recherche"), 'operations' => array( array( 'export_oai_telecharger_batch', array('view'=>$view, 'request'=>$_GET) ), //'force_index'=>$force_index ), 'finished' => 'export_oai_telecharger_jdd_batch_finish', 'file' => drupal_get_path('module','export_oai').'/export_oai.inc', ); //ATTENTION, SI LE BATCH N'EST PAS DANS UN .MODULE ON SPECIFIE OBLIGATOIREMENT L'ARGUMENT FILE DANS LA DEFINITION DU BATCH, //SINON DRUPAL CONSIDERE QUE LES FONCTIONS APPELEES NE SONT PAS DANS LE SCOPE (SANS PREVENIR D'UNE ERREUR) //batch_set($batch); //batch_process('rechercher-jdd/telecharger'); * return 'TEST'; }*/ /* // Fonction d'export des élements d'un même réferentiel issus d'une recherche function sandre_telecharger_jdd_batch($view, $request, $context){ if (!isset($context['sandbox']['current_page'])) { $context['sandbox']['current_page'] = 0; $context['sandbox']['total'] = 0; $context['results']['format'] = $request['format']; } $view->current_page = $context['sandbox']['current_page']; $view->pre_execute(); $view->items_per_page = 100; $view->execute(); if($context['sandbox']['current_page'] == 0){ $context['results']['total'] = $view->total_rows; $context['sandbox']['pages'] = ceil($view->total_rows/$view->items_per_page); } //====== Appel du WS Alpha à partir des résultats de la vue if(!empty($view->result)){ $filter_cd_sandre=''; foreach($view->result as $row){ if(isset($row->ss_item_code) && $row->ss_item_code!=''){ $filter_cd_sandre.=''.$row->ss_item_code.''; } } //$lbRef = $request['ss_lbref_sandre']; //$cdRef = sandre_utils_getCdFromFormatedName($request['ss_lbref_sandre']); $cdRef = $request['ss_cdref_sandre']; if(is_array($cdRef)) $cdRef = array_shift($cdRef); if(!isset($context['sandbox']['refConfig'])){ $refConfig = sandre_utils_getAllProperties($cdRef); $context['sandbox']['refConfig'] = $refConfig; $context['results']['refConfig'] = $refConfig; } else{ $refConfig = $context['sandbox']['refConfig']; } //dsm($refConfig); $params = array( "version"=>"1.3.0", "service"=>"References", "request"=>"getReferenceElements", "outputFormat"=>$request['format'], "CdReferentiel"=>$cdRef, "outputSchema"=>"http://xml.sandre.eaufrance.fr/scenario/referentiel/".$refConfig['Version']."/sandre_sc_referentiel.xsd", "Filter"=>"".$filter_cd_sandre."", ); //Http query form the $params array $http_query = drupal_http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, URL_WS_ALPHA_SANDRE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); //tps max de connexion au service en seconde curl_setopt($ch, CURLOPT_TIMEOUT, 120); //tps max de traitement curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,$http_query); curl_setopt( $ch, CURLOPT_AUTOREFERER, true ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); //autoriser les redirections curl_setopt( $ch, CURLOPT_MAXREDIRS, 5); //au max 5 redirection curl_setopt($ch, CURLOPT_HEADER, false); //curl_setopt( $ch, CURLINFO_HEADER_SIZE, true); $r = curl_exec($ch); $context['results']['data'][] = $r; } //Incrémentation du batch $context['sandbox']['current_page']++; $msg = ''; //$msg = $view->result[0]->ss_lbref_sandre .' : '. $view->result[0]->ss_libelle_sandre; //$msg.= ' - '.$context['sandbox']['current_page'].'/'.$context['sandbox']['pages']; $context['message'] = check_plain($msg); if ($context['sandbox']['current_page'] != $context['sandbox']['pages']) { $context['finished'] = $context['sandbox']['current_page'] / $context['sandbox']['pages']; } } function sandre_telecharger_jdd_batch_finish($success, $results, $operations) { //On aggrege les résulats $output = ''; if(!empty($results['data'])){ //dsm($results); $root_tag=$results['refConfig']['Nom']; if($results['format'] == 'text/xml'){ $filename = 'public://export-data/export_'.time().'.xml'; foreach($results['data'] as $k=>$data){ $xml = simplexml_load_string($data); //Cas des nomenclatures if($results['refConfig']['name']=='NSA'){ if($k==0){ $dom = $xml; $dom_file = dom_import_simplexml($dom); }else{ foreach($xml->Referentiel as $node){ $element = dom_import_simplexml($node); $element = $dom_file->ownerDocument->importNode($element, TRUE); //$element = $dom->ownerDocument->importNode($node, true); $dom_file->appendChild($element); } } } //Cas des autres référentiels alpha else{ if($k==0){ $dom = $xml; $dom->Referentiel->NbOccurrences = $results['total']; $dom_file = dom_import_simplexml($dom->Referentiel); }else{ foreach($xml->Referentiel->{$root_tag} as $node){ $element = dom_import_simplexml($node); $element = $dom_file->ownerDocument->importNode($element, TRUE); //$element = $dom->ownerDocument->importNode($node, true); $dom_file->appendChild($element); } } } } $output=$dom->asXML(); } elseif($results['format'] == 'application/json'){ $filename = 'public://export-data/export_'.time().'.json'; foreach($results['data'] as $k=>$data){ $json = json_decode($data); //Cas des nomenclatures if($results['refConfig']['name']=='NSA'){ if($k==0){ $document = $json; $ref = $document->Referentiel; //On doit changer le type de la propriete "$document->Referentiel" $document->Referentiel = array(); $document->Referentiel[] = $ref; unset($ref); } else{ $document->Referentiel[]=$json->Referentiel; } } //Cas des autres référentiels alpha else{ if($k==0){ $document = $json; $document->Referentiel->NbOccurrences = $results['total']; } else{ foreach($json->Referentiel->{$root_tag} as $node){ $document->Referentiel->{$root_tag}[]=$node; } } } } $output=json_encode($document); } elseif($results['format'] == 'text/csv' || $results['format']=='sandre/simplexml'){ $filename = 'public://export-data/export_'.time().'.csv'; foreach($results['data'] as $k=>$data){ if($k==0){ $output=$data; } else{ $pos = strpos($output, "\n"); $output.= substr($data, $pos+1); } } } } file_save_data($output, $filename, FILE_EXISTS_REPLACE); if ($success) { $wrapper = file_stream_wrapper_get_instance_by_uri($filename); if ($wrapper instanceof DrupalLocalStreamWrapper) { $path = $wrapper->getDirectoryPath() . '/' . file_uri_target($filename); } drupal_set_message("Votre export est disponible en suivant le lien suivant : ".l($filename, $path),'status'); } else { drupal_set_message("Erreur dans l'export",'error'); } //On fait le ménage sur le répertoire en supprimant tout ce qui a plus de 7 jours. $dir = drupal_realpath('public://export-data'); //On fait le ménage $delai = 604800; // 7 jours sandre_telecharger_jdd_remove_old_file($dir, $delai); } //Cette permet de supprimer un fichier s'il est plus vieux que le delai (10h par défaut) function sandre_telecharger_jdd_remove_old_file($dir, $delai=36000){ $files = scandir($dir); foreach($files as $key => $file){ if(substr($file,-3,3) == "xml" || substr($file,-3,3) == "csv" || substr($file,-4,4) == "json"){ //$crea_date = (int)@filectime($dir.'/'.$file); $crea_date = exec ('stat -c %Y '. escapeshellarg ($dir.'/'.$file)); if((time() - $crea_date) > $delai){ @unlink($dir."/".$file); } } } }