"Actualités",
"DZ/CODES-SECS"=>"Code",
"DZ/JURISPRUDENCE"=>"Jurisprudence",
"EL/SOURCES"=>"Jurisprudence",
"DZ/OASIS"=>"Fiches d'orientation",
"DZ/ENCYCLOPEDIES"=>"Encyclopédie",
"DZ/FORMULES"=>"Formules"
];
private $listeCodes;
private $listeJuridictions;
private $listeTypedoc;
public function __construct($connector_path="") {
global $base_path;
parent::__construct($connector_path);
$this->listeCodes=json_decode(file_get_contents($base_path.'/admin/connecteurs/in/dalloz/codes_legi_dalloz.json'),true);
$this->listeJuridictions=json_decode(file_get_contents($base_path.'/admin/connecteurs/in/dalloz/juridictions_legi_dalloz.json'),true);
$this->listeTypedoc=json_decode(file_get_contents($base_path.'/admin/connecteurs/in/dalloz/typdoc_dalloz.json'),true);
}
public function get_id() {
return "dalloz";
}
//Est-ce un entrepot ?
public function is_repository() {
return 2;
}
public function enrichment_is_allow(){
return false;
}
//Formulaire des propriétés générales
public function get_property_form() {
global $charset;
$this->fetch_global_properties();
//Affichage du formulaire en fonction de $this->parameters
$apikey='';
if ($this->parameters) {
$vars = unserialize($this->parameters);
$apikey=$vars['apikey'];
$limit=$vars['limit'];
}
$form="
";
$form.="
";
return $form;
}
public function source_get_property_form($source_id) {
global $charset;
$form.="
";
return $form;
}
public function make_serialized_source_properties($source_id) {
$this->sources[$source_id]["PARAMETERS"]=serialize([]);
}
public function make_serialized_properties() {
global $apikey,$limit;
//Mise en forme des paramètres à partir de variables globales (mettre le résultat dans $this->parameters)
$keys = array();
$keys['apikey']= stripslashes($apikey);
$keys['limit']= stripslashes($limit)*1;
$this->parameters = serialize($keys);
}
public function rec_record($record,$source_id,$search_id) {
global $charset;
//Initialisation
$ref="";
$ufield="";
$usubfield="";
$field_order=0;
$subfield_order=0;
$value="";
$date_import=date("Y-m-d H:i:s",time());
$ref = md5($record->Digest->UrId);
//Si conservation des anciennes notices, on regarde si elle existe
if (!$this->del_old) {
$ref_exists = $this->has_ref($source_id, $ref);
}
//Si pas de conservation des anciennes notices, on supprime
if ($this->del_old) {
$this->delete_from_entrepot($source_id, $ref);
$this->delete_from_external_count($source_id, $ref);
}
$ref_exists = false;
//Si pas de conservation ou refï¿œrence inexistante
if (($this->del_old)||((!$this->del_old)&&(!$ref_exists))) {
//Insertion de l'entï¿œte
$n_header["rs"]="*";
$n_header["ru"]="*";
$n_header["el"]="*";
$n_header["bl"]="m";
$n_header["hl"]="0";
$n_header["dt"]="a";
//Récupération d'un ID
$recid = $this->insert_into_external_count($source_id, $ref);
foreach($n_header as $hc=>$code) {
$this->insert_header_into_entrepot($source_id, $ref, $date_import, $hc, $code, $recid, $search_id);
}
$to_insert=[];
//Champs communs
//ur-id
$to_insert[]=["ufield"=>"001","usubfield"=>"","field_order"=>0,"value"=>$record->NodeValues->{'ur-id'}];
//Sommaire
$to_insert[]=["ufield"=>"330","usubfield"=>"a","field_order"=>0,"value"=>$record->NodeValues->summary];
//Source
$to_insert[]=["ufield"=>"801","usubfield"=>"b","field_order"=>0,"value"=>"Dalloz"];
//Traitement de UR-METAS
$urMetas=json_decode($record->NodeValues->{'ur-metas'});
if (empty($urMetas)) return;
//Lien
$url="https://www.dalloz-avocats.fr/documentation/Document?id=".$urMetas->{"els-id"};
$to_insert[]=["ufield"=>"856","usubfield"=>"u","field_order"=>0,"value"=>$url];
//Titre
$to_insert[]=["ufield"=>"200","usubfield"=>"a","field_order"=>0,"value"=>$urMetas->titre];
//Type de document
$value = urldecode($urMetas->categorie);
if (array_key_exists($value, $this->listeTypedoc)) {
$value = $this->listeTypedoc[$urMetas->categorie];
}
$to_insert[]=["ufield"=>"900","usubfield"=>"a","field_order"=>0,"value"=>$value];
switch (true) {
case (substr($record->PapidocUri,0,strlen("DZ/ACTUALITES"))=="DZ/ACTUALITES"):
if (!empty($urMetas->doctrine)) {
$to_insert[]=["ufield"=>"210","usubfield"=>"d","field_order"=>0,"value"=>substr($urMetas->doctrine->{"date-publication"},0,4)];
$to_insert[]=["ufield"=>"902","usubfield"=>"a","field_order"=>0,"value"=>$urMetas->doctrine->{"date-publication"}];
$to_insert[]=["ufield"=>"902","usubfield"=>"b","field_order"=>0,"value"=>formatdate($urMetas->doctrine->{"date-publication"})];
$to_insert[]=["ufield"=>"700","usubfield"=>"a","field_order"=>0,"value"=>$urMetas->doctrine->{"auteur"}];
}
break;
case (substr($record->PapidocUri,0,strlen("DZ/OASIS"))=="DZ/OASIS"):
if (!empty($urMetas->doctrine)) {
$to_insert[]=["ufield"=>"210","usubfield"=>"d","field_order"=>0,"value"=>substr($urMetas->doctrine->{"date-publication"},0,4)];
$to_insert[]=["ufield"=>"902","usubfield"=>"a","field_order"=>0,"value"=>$urMetas->doctrine->{"date-publication"}];
$to_insert[]=["ufield"=>"902","usubfield"=>"b","field_order"=>0,"value"=>formatdate($urMetas->doctrine->{"date-publication"})];
}
break;
case (substr($record->PapidocUri,0,strlen("DZ/CODES-SECS"))=="DZ/CODES-SECS"):
$to_insert[]=["ufield"=>"200","usubfield"=>"e","field_order"=>0,"value"=>$urMetas->code->article." - ".$urMetas->code->nom];
$to_insert[]=["ufield"=>"901","usubfield"=>"h","field_order"=>0,"value"=>$urMetas->code->nom];
if (!empty($urMetas->plan)) $to_insert[]=["ufield"=>"300","usubfield"=>"a","field_order"=>0,"value"=>implode("\n",$urMetas->plan)];
break;
case (substr($record->PapidocUri,0,strlen("EL/SOURCES/JRP"))=="EL/SOURCES/JRP"):
$to_insert[]=["ufield"=>"200","usubfield"=>"e","field_order"=>0,"value"=>$urMetas->jurisprudence->reference];
$to_insert[]=["ufield"=>"901","usubfield"=>"e","field_order"=>0,"value"=>$urMetas->jurisprudence->juridiction." ".$urMetas->jurisprudence->ville];
$to_insert[]=["ufield"=>"210","usubfield"=>"d","field_order"=>0,"value"=>substr($urMetas->jurisprudence->date,0,4)];
$to_insert[]=["ufield"=>"902","usubfield"=>"a","field_order"=>0,"value"=>$urMetas->jurisprudence->date];
$to_insert[]=["ufield"=>"902","usubfield"=>"b","field_order"=>0,"value"=>formatdate($urMetas->jurisprudence->date)];
break;
case (substr($record->PapidocUri,0,strlen("DZ/JURISPRUDENCE"))=="DZ/JURISPRUDENCE"):
$to_insert[]=["ufield"=>"200","usubfield"=>"e","field_order"=>0,"value"=>$urMetas->jurisprudence->reference];
$to_insert[]=["ufield"=>"901","usubfield"=>"e","field_order"=>0,"value"=>$urMetas->jurisprudence->juridiction." ".$urMetas->jurisprudence->ville." ".$urMetas->jurisprudence->chambre];
$to_insert[]=["ufield"=>"210","usubfield"=>"d","field_order"=>0,"value"=>substr($urMetas->jurisprudence->date,0,4)];
$to_insert[]=["ufield"=>"902","usubfield"=>"a","field_order"=>0,"value"=>$urMetas->jurisprudence->date];
$to_insert[]=["ufield"=>"902","usubfield"=>"b","field_order"=>0,"value"=>formatdate($urMetas->jurisprudence->date)];
break;
case (substr($record->PapidocUri,0,strlen("DZ/ENCYCLOPEDIES"))=="DZ/ENCYCLOPEDIES"):
if (!empty($urMetas->plan)) $to_insert[]=["ufield"=>"300","usubfield"=>"a","field_order"=>0,"value"=>implode("\n",$urMetas->plan)];
break;
case (substr($record->PapidocUri,0,strlen("DZ/FORMULES"))=="DZ/FORMULES"):
if (!empty($urMetas->plan)) $to_insert[]=["ufield"=>"300","usubfield"=>"a","field_order"=>0,"value"=>implode("\n",$urMetas->plan)];
$to_insert[]=["ufield"=>"210","usubfield"=>"d","field_order"=>0,"value"=>substr($urMetas->doctrine->{"date-publication"},0,4)];
$to_insert[]=["ufield"=>"902","usubfield"=>"a","field_order"=>0,"value"=>$urMetas->doctrine->{"date-publication"}];
$to_insert[]=["ufield"=>"902","usubfield"=>"b","field_order"=>0,"value"=>formatdate($urMetas->doctrine->{"date-publication"})];
break;
}
$record=[
"source_id"=>$source_id,
"ref"=>$ref,
"date_import"=>$date_import,
"recid"=>$recid,
"search_id"=>$search_id,
"subfield_order"=>0
];
$records=[];
foreach ($to_insert as $rec) {
if ($rec["value"]) {
$record["ufield"]=$rec["ufield"];
$record["usubfield"]=$rec["usubfield"];
$record["field_order"]=$rec["field_order"];
$record["value"]=$rec["value"];
$records[]=$record;
//$this->insert_content_into_entrepot($source_id, $ref, $date_import, $rec["ufield"], $rec["usubfield"], $rec["field_order"], 0, $rec["value"], $recid, $search_id);
}
}
$this->insert_content_into_entrepot_multiple($records);
$this->rec_isbd_record($source_id, $ref, $recid);
$this->n_recu++;
}
}
private function dallozTime($date) {
$dallozDate=explode('/',$date);
return $dallozDate[1]."/".$dallozDate[0]."/".$dallozDate[2];
}
private function makeDate($criterion,$criterias,&$queryParts) {
if ($criterias['date']) {
if (count($criterias['date'])==1) {
switch ($criterias['date'][0]->op) {
case "EQ":
$operator="On";
break;
case "LT":
$operator="Before";
break;
case "GT":
$operator="After";
break;
case "LTEQ":
$operator="Until";
break;
case "GTEQ":
$operator="After";
break;
default:
$operator="EQ";
break;
}
$queryParts[]=[
"criterion-id"=>$criterion,
"query-part-type"=>"Date range",
"value"=>[
"query-values-type"=>"Date",
"operator"=>$operator,
"value"=>$this->dallozTime($criterias['date'][0]->values[0])
]
];
} else if (count($criterias['date'])==2) {
$queryParts[]=[
"criterion-id"=>$criterion,
"query-part-type"=>"Date range",
"value"=>[
"query-values-type"=>"Date Interval",
"lower-value"=>$this->dallozTime($criterias['date'][0]->values[0]),
"upper-value"=>$this->dallozTime($criterias['date'][1]->values[0])
]
];
}
}
}
private function makeSearchNonCodifieText($criterias) {
$queryParts=[];
$this->makeDate("legis-non-codifie-date", $criterias, $queryParts);
if ($criterias['texteno']) {
$queryParts[]=[
"criterion-id"=>"legis-non-codifie-numero",
"query-part-type"=>"Field",
"values"=>[
$criterias['texteno']
]
];
}
if ($criterias['articleno']) {
$queryParts[]=[
"criterion-id"=>"legis-non-codifie-article",
"query-part-type"=>"Field",
"values"=>[
$criterias['articleno']
]
];
}
if ($criterias['nature']) {
$queryParts[]=[
"criterion-id"=>"legis-non-codifie-nature",
"query-part-type"=>"Field",
"values"=>[
$criterias['nature']
]
];
}
return $queryParts;
}
private function makeSearchJurisprudence2($criterias) {
$queryParts=[
[
"criterion-id"=>"fdoc",
"query-part-type"=>"Field",
//"operator"=>"or",
"values"=>[
"EL/SOURCES/JRP"
]
]
];
$this->makeDate("juris-date", $criterias, $queryParts);
if ($criterias['nodecision']) {
$queryParts[]=[
"criterion-id"=>"juris-reference",
"query-part-type"=>"Field",
"values"=>[
$criterias['nodecision']
]
];
}
if ($criterias['juridiction']) {
if (isset($this->listeJuridictions[$criterias['juridiction']])&&($this->listeJuridictions[$criterias['juridiction']]["code"])) {
$queryParts[]=[
"criterion-id"=>"juris-juridiction",
"query-part-type"=>"Field",
"values"=>[
$this->listeJuridictions[$criterias['juridiction']]["code"]
]
];
}
}
return $queryParts;
}
private function makeSearchJurisprudence($criterias) {
$queryParts=[
[
"criterion-id"=>"fdoc",
"query-part-type"=>"Field",
//"operator"=>"or",
"values"=>[
"DZ/JURISPRUDENCE"
]
]
];
$this->makeDate("juris-date", $criterias, $queryParts);
if ($criterias['nodecision']) {
$queryParts[]=[
"criterion-id"=>"juris-reference",
"query-part-type"=>"Field",
"values"=>[
$criterias['nodecision']
]
];
}
if ($criterias['juridiction']) {
if (isset($this->listeJuridictions[$criterias['juridiction']])&&($this->listeJuridictions[$criterias['juridiction']]["code"])) {
$queryParts[]=[
"criterion-id"=>"juris-juridiction",
"query-part-type"=>"Field",
"values"=>[
$this->listeJuridictions[$criterias['juridiction']]["code"]
]
];
}
}
return $queryParts;
}
private function makeSearchOthers($criterias) {
$queryParts=[
[
"criterion-id"=>"fdoc",
"query-part-type"=>"Field",
"values"=>[
"DZ/ACTUALITES-DZFR",
"DZ/ACTUALITES/ACTUS-DZ",
"DZ/ACTUALITES-DZAV",
"DZ/OASIS",
"DZ/ENCYCLOPEDIES/BDAC",
"DZ/ENCYCLOPEDIES/BDAP",
"DZ/FORMULES/FORMBDA"
],
"operator"=>"OR"
]
];
if ($criterias['titre']) {
$queryParts[]=[
"criterion-id"=>"fulltext_type3",
"query-part-type"=>"Field",
"values"=>[
$criterias['titre']
]
];
}
$this->makeDate("doct_date_publication", $criterias, $queryParts);
return $queryParts;
}
private function makeSearchEncyclopedies($criterias) {
$queryParts=[
[
"criterion-id"=>"fdoc",
"query-part-type"=>"Field",
"values"=>[
"DZ/ENCYCLOPEDIES/BDAC",
"DZ/ENCYCLOPEDIES/BDAP"
],
"operator"=>"OR"
]
];
return $queryParts;
}
private function makeSearchCodifieText($criterias) {
$queryParts=[
[
"criterion-id"=>"fdoc",
"query-part-type"=>"Field",
"values"=>[
"DZ/CODES-SECS",
]
]
];
if ($criterias['articleno']) {
$queryParts[]=[
"criterion-id"=>"legis-codifie-article",
"query-part-type"=>"Field",
"values"=>[
$criterias['articleno']
]
];
}
if ($criterias['code']) {
if (isset($this->listeCodes[$criterias['code']])&&($this->listeCodes[$criterias['code']]["code"])) {
$queryParts[]=[
"criterion-id"=>"legis-codifie-code",
"query-part-type"=>"Field",
"values"=>[
$this->listeCodes[$criterias['code']]["code"]
]
];
}
}
return $queryParts;
}
private function makeSearchRevues($criterias) {
$queryParts=[
[
"criterion-id"=>"fdoc",
"query-part-type"=>"Field",
"values"=>[
"DZ/REVUES",
]
]
];
$this->makeDate("doct-date-publication", $criterias, $queryParts);
if ($criterias['trevue']) {
$queryParts[]=[
"criterion-id"=>"doct-titre",
"query-part-type"=>"Field",
"values"=>[
$criterias['trevue']
]
];
}
if ($criterias['auteur']) {
$queryParts[]=[
"criterion-id"=>"doct-auteur",
"query-part-type"=>"Field",
"values"=>[
$criterias['auteur']
]
];
}
if ($criterias['titre']) {
$queryParts[]=[
"criterion-id"=>"fulltext_type3",
"query-part-type"=>"Field",
"values"=>[
$criterias['titre']
]
];
}
return $queryParts;
}
private function makeCurlSearch($queryParts,$criterias,$apikey,$limit, $search_id, $source_id) {
if (count($queryParts)==0) return;
if ((count($queryParts)==1)&&($criterias['all']=='')) return;
//Requête CURL au webservice...
$post="http://els-sie-test.apigee.net/h2o/search-service/api/v1/search/instance/test-oap-dzavoc/results";
$query=["request"=>[
"query-tree"=>[]
],
"result-number-per-page"=>200,
"result-page-number"=>1,
"meta-data-list"=>[
/*"ur_infos",*/
"ur-metas",
"ur_id",
"uri",
"fdoc",
"fulltext_type2"
/*"fulltext_type7",
"fulltext_type6",
"fulltext_type5",
"fulltext_type4",
"fulltext_type3",
"fulltext_type0",*/
]
];
if ($criterias['all']) {
$query["request"]["query-tree"]["fulltext-query-part"]=[
"query-part-type"=>"FullText",
"value"=>$criterias['all']
];
}
$query["request"]["query-tree"]["filter-query-part"]=[
"query-part-type"=>"Multiple queries",
"operator"=>"AND",
"query-parts"=>$queryParts
];
//highlight_string(print_r($query,true));
//print json_encode($query);
//Appel Curl
$curl = new Curl();
$curl->headers=[
"Content-Type"=>"application/json",
"x-apikey"=>$apikey
];
$result = $curl->post($post,json_encode($query));
if ($result) {
$result=json_decode($result);
//Nombre :
$total=$result->resultsCount;
$red=0;
$page=1;
while ($red<$total) {
$nb=count($result->urs);
for ($i=0; $i<$nb; $i++) {
$elt=$result->urs[$i];
if ($elt) {
$this->rec_record($elt,$source_id,$search_id);
}
$red++;
if ($red>$limit) break;
}
if ($red>$limit) break;
if ($red<$total) {
$page++;
$query["result-page-number"]=$page;
$result=$curl->post($post,json_encode($query));
if ($result) {
$result=json_decode($result);
} else break;
}
}
}
}
//Fonction de recherche
public function search($source_id,$query,$search_id) {
global $base_path;
global $restrict_dalloz_search;
if (empty($restrict_dalloz_search)) {
$restrict_dalloz_search=["CodifiedText"=>1,"Jurisprudence"=>1,"Jurisprudence2"=>1,"Revues"=>1,"Others"=>1,"Encyclopedies"=>1];
}
//highlight_string(print_r($query,true));
$this->fetch_global_properties();
$params=unserialize($this->parameters);
$apikey=$params['apikey'];
$limit=$params['limit'];
if (!$limit) $limit=100;
$criterias=[];
foreach($query as $amterm) {
switch ($amterm->ufield) {
case '200$a':
$criterias['titre']=$amterm->values[0];
break;
case 'XXX':
$criterias['all']=$amterm->values[0];
break;
case '330$a':
$criterias['resume']=$amterm->values[0];
break;
case '210$d':
if (empty($criterias['date'])) $criterias['date']=[];
$criterias['date'][]=$amterm;
break;
case '200$h':
$criterias['articleno']=$amterm->values[0];
break;
case '461$t':
$criterias['trevue']=$amterm->values[0];
break;
case '7XX':
$criterias['auteur']=$amterm->values[0];
break;
case '901$a':
$criterias['texteno']=$amterm->values[0];
break;
case '900$a':
$criterias['nature']=$amterm->values[0];
break;
case '901$h':
$criterias['code']=$amterm->values[0];
break;
case '901$e':
$criterias['juridiction']=$amterm->values[0];
break;
case '901$c':
$criterias['nodecision']=$amterm->values[0];
break;
default:
break;
}
}
//Textes codifiés
//Textes non codifiés
/*$qp=$this->makeSearchNonCodifieText($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);*/
if (empty($criterias['juridiction'])&&empty($criterias['nodecision'])&&empty($criterias['articleno'])&&empty($criterias['code'])&&empty($criterias['auteur'])&&empty($criterias['trevue'])) {
if (!empty($criterias['date'])) {
if ($restrict_dalloz_search["Jurisprudence"]) {
$qp=$this->makeSearchJurisprudence($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
if ($restrict_dalloz_search["Jurisprudence2"]) {
$qp=$this->makeSearchJurisprudence2($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
if ($restrict_dalloz_search["Revues"]) {
$qp=$this->makeSearchRevues($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
if ($restrict_dalloz_search["Others"]) {
$qp=$this->makeSearchOthers($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
} else {
//On recherche sur tout
if ($restrict_dalloz_search["CodifiedText"]) {
$qp=$this->makeSearchCodifieText($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
if ($restrict_dalloz_search["Jurisprudence"]) {
$qp=$this->makeSearchJurisprudence($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
if ($restrict_dalloz_search["Jurisprudence2"]) {
$qp=$this->makeSearchJurisprudence2($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
if ($restrict_dalloz_search["Revues"]) {
$qp=$this->makeSearchRevues($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
if ($restrict_dalloz_search["Others"]) {
$qp=$this->makeSearchOthers($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
if ($restrict_dalloz_search["Encyclopedies"]) {
$qp=$this->makeSearchEncyclopedies($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
}
} else {
if (!empty($criterias['articleno'])||!empty($criterias['code'])) {
if ($restrict_dalloz_search["CodifiedText"]) {
$qp=$this->makeSearchCodifieText($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
} elseif (!empty($criterias['juridiction'])||!empty($criterias['nodecision'])) {
if ($restrict_dalloz_search["Jurisprudence"]) {
$qp=$this->makeSearchJurisprudence($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
if ($restrict_dalloz_search["Jurisprudence2"]) {
$qp=$this->makeSearchJurisprudence2($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
} elseif (!empty($criterias['auteur'])||!empty($criterias['trevue'])) {
if ($restrict_dalloz_search["Revues"]) {
$qp=$this->makeSearchRevues($criterias);
$this->makeCurlSearch($qp, $criterias, $apikey, $limit, $search_id, $source_id);
}
}
}
}
}