id=$id; $this->n_ligne=$n_ligne; $this->params=$params; $this->search=&$search; } //fonction de récupération des opérateurs disponibles pour ce champ spécial (renvoie un tableau d'opérateurs) public function get_op() { $operators = array(); $operators["EQ"]="="; return $operators; } //fonction de récupération de l'affichage de la saisie du critère public function get_input_box() { global $msg; global $charset; global $get_input_box_id; global $base_path; //$this->s = new search(false,"search_simple_fields.xml"); //Récupération de la valeur de saisie $valeur_="field_".$this->n_ligne."_s_".$this->id; global ${$valeur_}; $valeur=${$valeur_}; $r.="
"; return $r; } public function get_ajax_params(){ global $selected_sources; global $field_form; global $charset; global $serial_title; global $onchange; global $msg; $response = array(); $queries = array(); $response['field'] = $field_form; $response['onchange'] = ($onchange ? true : false); $elem = explode("_",$field_form); switch($elem[0]){ case "issues" : if($serial_title){ foreach($selected_sources as $source){ $queries[] = "select distinct concat(num_issue.value,if(num_issue.value = '','',if(date_issue.value='','',' - ')),date_format(date_issue.value,'".$msg['format_date']."')) as val,date_issue.value as date, num_issue.value as num from entrepot_source_".$source." as serial join entrepot_source_".$source." as num_issue on serial.recid = num_issue.recid join entrepot_source_".$source." as date_issue on serial.recid = date_issue.recid where serial.ufield='461' and serial.usubfield='t' and serial.value='".$serial_title."' and num_issue.ufield = '463' and num_issue.usubfield='v' and date_issue.ufield = '463' and date_issue.usubfield='d' "; } } if(count($queries)>1){ $query = "select * from (".implode(" union ",$queries).") as uni order by date,num,val"; }else if(count($queries)==1){ $query = $queries[0]. "order by date,num,val"; } if($query){ $result = pmb_mysql_query($query); $list=array(); if(pmb_mysql_num_rows($result)){ while($row = pmb_mysql_fetch_object($result)){ if($charset!="utf-8"){ $list[] = array( 'value' => utf8_encode($row->num."|||".$row->date), 'text' => utf8_encode($row->val) ); }else $list[] = array( 'value' => $row->num."|||".$row->date, 'text' => $row->val ); } } $response['list'] = $list; }else{ $response['list'] = array(); } break; default : if($selected_sources){ foreach($selected_sources as $source){ $queries[] = "select distinct entrepot.value as val from entrepot_source_".$source." as entrepot join entrepot_source_".$source." on entrepot.recid = entrepot_source_".$source.".recid where entrepot_source_".$source.".ufield = 'bl' and entrepot_source_".$source.".value!='m' and entrepot.ufield='461' and entrepot.usubfield='t'"; } } if(count($queries)>1){ $query = "select * from (".implode(" union ",$queries).") as uni order by val"; }else if(count($queries)==1){ $query = $queries[0]. "order by val"; } if($query){ $result = pmb_mysql_query($query); $list=array(); if(pmb_mysql_num_rows($result)){ while($row = pmb_mysql_fetch_object($result)){ if($charset!="utf-8"){ $list[] = utf8_encode($row->val); }else $list[] = $row->val; } } $response['list'] = $list; }else{ $response['list'] = array(); } break; } ajax_http_send_response($response,'application/json'); } //fonction de conversion de la saisie en quelque chose de compatible avec l'environnement public function transform_input() { } //fonction de création de la requête (retourne une table temporaire) public function make_search() { global $search; global $source; //Récupération de la valeur de saisie $serial_="field_".$this->n_ligne."_s_".$this->id; $issues_="fieldvar_".$this->n_ligne."_s_".$this->id; global ${$serial_}; global ${$issues_}; $serial=${$serial_}; $issues = ${$issues_}; //$issues=$issues[0]; global $field_0_s_2; if (count($field_0_s_2) && !$source){ $selected_sources =$field_0_s_2; }else $selected_sources = $source; if(!$this->is_empty($serial)){ $issues_infos = array(); foreach($issues as $issue){ $issues_infos[] = explode('|||',$issue[0]); } if($selected_sources){ foreach($selected_sources as $s){ $query= "select distinct analysis.recid as notice_id from entrepot_source_".$s." as serial join entrepot_source_".$s." as num_issue on serial.recid = num_issue.recid join entrepot_source_".$s." as date_issue on serial.recid = date_issue.recid join entrepot_source_".$s." as analysis on serial.recid = analysis.recid where analysis.ufield ='bl' and analysis.value!='m' and serial.ufield='461' and serial.usubfield='t' and serial.value='".addslashes($serial[0])."' "; $restricted_issues = array(); foreach($issues_infos as $issue){ $restricted_issues[] = "(num_issue.value='".$issue[0]."' and date_issue.value='".$issue[1]."')"; } $query.=" and (".implode(" or ",$restricted_issues).")"; $queries[] = $query; } $t_table= "table_".$this->n_ligne."_s_".$this->id; $query = "create temporary table ".$t_table." select * from(".implode(" union ",$queries).") as uni"; pmb_mysql_query($query); return $t_table; } } } public function make_unimarc_query() { global $search; global $source; //Récupération de la valeur de saisie $serial_="field_".$this->n_ligne."_s_".$this->id; $issues_="fieldvar_".$this->n_ligne."_s_".$this->id; global ${$serial_}; global ${$issues_}; $serial=${$serial_}; $issues = ${$issues_}; //$issues=$issues[0]; global $field_0_s_2; if (count($field_0_s_2) && !$source){ $selected_sources =$field_0_s_2; }else $selected_sources = $source; if(!$this->is_empty($serial)){ $issues_infos = array(); foreach($issues as $issue){ $issues_infos[] = explode('|||',$issue[0]); } if($selected_sources){ foreach($selected_sources as $s){ $query= "select distinct analysis.recid as notice_id from entrepot_source_".$s." as serial join entrepot_source_".$s." as num_issue on serial.recid = num_issue.recid join entrepot_source_".$s." as date_issue on serial.recid = date_issue.recid join entrepot_source_".$s." as analysis on serial.recid = analysis.recid where analysis.ufield ='bl' and analysis.value!='m' and serial.ufield='461' and serial.usubfield='t' and serial.value='".addslashes($serial[0])."' "; $restricted_issues = array(); foreach($issues_infos as $issue){ $restricted_issues[] = "(num_issue.value='".$issue[0]."' and date_issue.value='".$issue[1]."')"; } $query.=" and (".implode(" or ",$restricted_issues).")"; $queries[] = $query; } $t_table= "table_".$this->n_ligne."_s_".$this->id; $query = "create temporary table ".$t_table." select * from(".implode(" union ",$queries).") as uni"; pmb_mysql_query($query); return $t_table; } } } //fonction de traduction littérale de la requête effectuée (renvoie un tableau des termes saisis) public function make_human_query() { global $search; global $source; //Récupération de la valeur de saisie $serial_="field_".$this->n_ligne."_s_".$this->id; $issues_="fieldvar_".$this->n_ligne."_s_".$this->id; global ${$serial_}; global ${$issues_}; $serial=${$serial_}; $issues = ${$issues_}; //$issues=$issues[0]; if(!$this->is_empty($serial)){ $issues_infos = array(); foreach($issues as $issue){ $elem = explode('|||',$issue[0]); $issues_infos[] = $elem[0].($elem[0] && $elem[1] ? " - ":"").format_date($elem[1]); } $label = $serial[0]." (".implode(" / ",$issues_infos).")"; $litteral=array($label); return $litteral; } } //fonction de vérification du champ saisi ou sélectionné public function is_empty($valeur) { if($valeur[0]!= ""){ $issues_="fieldvar_".$this->n_ligne."_s_".$this->id; global ${$issues_}; if(count(${$issues_})>0){ return false; } } return true; } //fonction de découpage d'une chaine trop longue public function cutlongwords($valeur,$size=50) { if (strlen($valeur)>=$size) { $pos=strrpos(substr($valeur,0,$size)," "); if ($pos) { $valeur=substr($valeur,0,$pos+1)."..."; } } return $valeur; } } ?>