source: pmb4.2/trunk/fuentes/pmb/classes/harvest.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 26.4 KB
Line 
1<?php
2// +-------------------------------------------------+
3// | 2002-2007 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: harvest.class.php,v 1.4 2015-04-03 11:16:20 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($include_path."/templates/harvest.tpl.php");
10require_once($include_path."/parser.inc.php");
11       
12require_once($class_path."/connecteurs.class.php");
13require_once($class_path."/search.class.php");
14require_once($class_path."/facette_search_opac.class.php");
15
16class harvest {
17        var $id=0;
18        var $info=array();
19        var $fields_id=array();
20        var $fields=array();
21       
22        function harvest($id=0) {
23                $this->id=$id+0;
24                $this->fetch_data();
25        }
26       
27        function fetch_data() {
28                global $include_path;
29               
30                $this->info=array();
31               
32                $nomfichier=$include_path."/harvest/harvest_fields.xml";
33                if (file_exists($nomfichier)) {
34                        $fp = fopen($nomfichier, "r");         
35                        if ($fp) {
36                                //un fichier est ouvert donc on le lit
37                                $xml = fread($fp, filesize($nomfichier));
38                                //on le ferme
39                                fclose($fp);                   
40                                $param=_parser_text_no_function_($xml,"HARVEST");
41                                $this->fields=$param["FIELD"];                         
42                        }
43                }
44                $this->fields_id=array();
45                $i=0;
46                foreach($this->fields as $key => $field){
47                        $this->fields_id[$this->fields[$key]["ID"]]=$field;                     
48                }
49                if(!$this->id) return;
50                $req="select * from harvest_profil where id_harvest_profil=". $this->id;
51               
52                $resultat=pmb_mysql_query($req);       
53                if (pmb_mysql_num_rows($resultat)) {
54                        $r=pmb_mysql_fetch_object($resultat);           
55                        $this->info['id']= $r->id_harvest_profil;       
56                        $this->info['name']= $r->harvest_profil_name;   
57                }       
58                $this->info['fields']=array(); 
59                $req="select * from harvest_field where num_harvest_profil=".$this->id." order by harvest_field_order";
60                $resultat=pmb_mysql_query($req);       
61                if (pmb_mysql_num_rows($resultat)) {
62                        while($r=pmb_mysql_fetch_object($resultat)){                                           
63                                $this->info['fields'][$r->harvest_field_xml_id]['id']= $r->id_harvest_field;   
64                                $this->info['fields'][$r->harvest_field_xml_id]['xml']= $r->harvest_field_xml_id;       
65                                $this->info['fields'][$r->harvest_field_xml_id]['first_flag']= $r->harvest_field_first_flag;   
66                                $cpt=0;
67                                $this->info['fields'][$r->harvest_field_xml_id]['src']=array(); 
68                                $req_src="select * from harvest_src where num_harvest_field=". $r->id_harvest_field." order by harvest_src_order";
69                                $resultat_src=pmb_mysql_query($req_src);
70                                while($r_src=pmb_mysql_fetch_object($resultat_src)){   
71                                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['id']=$r_src->id_harvest_src;
72                                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['num_field']=$r_src->num_harvest_field;
73                                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['num_source']=$r_src->num_source;
74                                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['unimacfield']=$r_src->harvest_src_unimacfield;
75                                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['unimacsubfield']=$r_src->harvest_src_unimacsubfield;                     
76                                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['pmb_unimacfield']=$r_src->harvest_src_pmb_unimacfield;           
77                                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['pmb_unimacsubfield']=$r_src->harvest_src_pmb_unimacsubfield;                                     
78                                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['prec_flag']=$r_src->harvest_src_prec_flag;                       
79                                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['order']=$r_src->harvest_src_order;
80
81                                        $this->info['source_fields'][$r_src->num_source][]=$r->harvest_field_xml_id;
82                                        $cpt++;
83                                }
84                        }
85                }       
86                $this->info['connector']=array();
87                $requete="SELECT connectors_categ_sources.num_categ, connectors_sources.source_id, connectors_categ.connectors_categ_name as categ_name, connectors_sources.name, connectors_sources.comment, connectors_sources.repository, connectors_sources.opac_allowed, source_sync.cancel FROM connectors_sources LEFT JOIN connectors_categ_sources ON (connectors_categ_sources.num_source = connectors_sources.source_id) LEFT JOIN connectors_categ ON (connectors_categ.connectors_categ_id = connectors_categ_sources.num_categ) LEFT JOIN source_sync ON (connectors_sources.source_id = source_sync.source_id AND connectors_sources.repository=2) ORDER BY connectors_categ_sources.num_categ DESC, connectors_sources.name";
88        $resultat=pmb_mysql_query($requete);
89
90        while ($source=pmb_mysql_fetch_object($resultat)) {             
91                $this->info['connector'][$source->source_id]=$source->name;     
92        }
93        $this->info['champ_base']=array();             
94        $facette=new facette_search();
95    //  printr($facette->fields_array["FIELD"][24]);
96        foreach($facette->fields_array["FIELD"] as $f){                 
97                $id_field=$f['ID']+0;
98                if($id_field==100) continue;
99                $this->info['champ_base'][$id_field]['libelle']=$f['NAME'];             
100                $this->info['champ_base'][$id_field]['id']=$id_field;                   
101                $this->info['champ_base'][$id_field]['table']='';
102                $this->info['champ_base'][$id_field]['tabfield']=$f['TABLE'][0]['TABLEFIELD'][0]['value'];
103                if($f['EXTERNAL']){
104                        $this->info['champ_base'][$id_field]['table']=$f['TABLE'][0]['NAME'];                           
105                        $this->info['champ_base'][$id_field]['key']=$f['TABLE'][0]['TABLEKEY'][0]['value'];
106                        $this->info['champ_base'][$id_field]['link']=$f['TABLE'][0]['LINK'][0]['REFERENCEFIELD'][0]['value'];                           
107                        $this->info['champ_base'][$id_field]['extable']=$f['TABLE'][0]['LINK'][0]['TABLE'][0]['value'];                         
108                        $this->info['champ_base'][$id_field]['exfield']=$f['TABLE'][0]['LINK'][0]['EXTERNALFIELD'][0]['value'];
109
110                        foreach($f['TABLE'][0]['TABLEFIELD'] as $ss_f){
111                                $id_ss_field=$ss_f['ID']+0;             
112                                $this->info['champ_base'][$id_field]['ss_field'][$id_ss_field]['id']=$id_ss_field; 
113                                $this->info['champ_base'][$id_field]['ss_field'][$id_ss_field]['id_parent']=$id_field;         
114                                $this->info['champ_base'][$id_field]['ss_field'][$id_ss_field]['tabfield']=$ss_f['value'];
115                                $this->info['champ_base'][$id_field]['ss_field'][$id_ss_field]['libelle']=$ss_f['NAME'];
116                        }
117                }                       
118        }
119       
120                $requete="SELECT * from harvest_search_field where num_harvest_profil=". $this->id;
121        $resultat=pmb_mysql_query($requete);
122        while ($source=pmb_mysql_fetch_object($resultat)) { 
123                if($this->info['connector'][$source->num_source]) {             
124                        $this->info['search_field'][$source->num_source]['field']=$source->num_field; 
125                        $this->info['search_field'][$source->num_source]['ss_field']=$source->num_ss_field;   
126                }           
127        }
128                               
129        // printr($this->info['champ_base'][28]);
130        }
131   
132    function get_code($num_source,$notice_id){
133        $field=$this->info['search_field'][$num_source]['field'];
134        $ss_field=$this->info['search_field'][$num_source]['ss_field'];
135        $data=$this->info['champ_base'][$field];
136       
137        if($ss_field){
138                $req="select x.".$data['ss_field'][$ss_field]['tabfield']." as code from ".$data['table']." as x, ".$data['extable']." as x2 where 
139                 x2.".$data['exfield']."=  x.".$data['key']."   and $notice_id= ".$data['link']."
140                ";             
141        } else{
142                $req="select ".$data['tabfield']." as code from notices where notice_id=$notice_id ";
143        }
144        // print $req;
145                $resultat=@pmb_mysql_query($req);
146        if ($r=@pmb_mysql_fetch_object($resultat)) {                   
147                return   $r->code; 
148        }
149        return '';
150    }
151   
152    function havest_notice($isbn="",$notice_id=0){
153        global $charset, $class_path,$include_path,$base_path; 
154                global $dbh,$msg;
155               
156                global $search;                         
157        $search[]="s_2";
158               
159                global $op_0_s_2;
160                $op_0_s_2="EQ"; 
161                       
162                global $field_0_s_2;   
163                foreach( $this->info['source_fields'] as $source_id => $harvest_fields){
164                        $field_0_s_2[]=$source_id;
165                }
166               
167        $search[]="f_22";
168                       
169                global $inter_1_f_22;
170                $inter_1_f_22="or";     
171               
172                global $op_1_f_22;
173                $op_1_f_22="STARTWITH"; 
174                               
175                global $field_1_f_22;
176                $field_1_f_22[]=$isbn; 
177                /*
178        foreach( $this->info['source_fields'] as $source_id => $harvest_fields){                       
179                        if($notice_id){                         
180                                $code=$this->get_code($source_id,$notice_id);
181                                $field_1_f_22[]=$code;
182                                 print  $code.", ";
183                        }else   $field_1_f_22[]=$isbn;         
184                }       
185        */
186                global $explicit_search;
187                $explicit_search="1";   
188               
189                $s=new search('',"search_fields_unimarc");     
190               
191                $res=$s->make_search();
192                $req="select * from ".$res ;
193                $resultat=pmb_mysql_query($req);
194                while($r=pmb_mysql_fetch_object($resultat)){                           
195                        // printr( $r);
196                        $recid=$r->notice_id;
197                        $requete = "SELECT source_id FROM external_count WHERE rid=".$r->notice_id.";";
198                        $myQuery = pmb_mysql_query($requete, $dbh);
199                        $source_id = pmb_mysql_result($myQuery, 0, 0);
200                               
201                        $req="select * from entrepot_source_".$source_id." where recid='".$recid."' order by ufield,field_order,usubfield,subfield_order,value";
202                        $res_entrepot=pmb_mysql_query($req);
203                        while($r_ent=pmb_mysql_fetch_object($res_entrepot)){
204                                $this->info['notice'][$source_id][$r_ent->ufield][]=$r_ent;     
205                        }       
206                        // on fait le ménage ou pas vu les requetes
207                        /*$req="DELETE FROM entrepot_source_".$source_id."  where where recid='".$recid."'  ";
208                pmb_mysql_query($req);                                 
209                        $req="DELETE FROM FROM external_count WHERE rid=".$r->notice_id."";
210                pmb_mysql_query($req);*/
211                }
212                // printr(      $this->info['notice']);   
213            $notice_composite=array();
214            $cpt=0;
215            // $this->info['fields'][$r->harvest_field_xml_id]['xml']
216            foreach($this->info['fields'] as $xml_id=>$src_list){               
217                //printr( $src_list);
218                $first_flag=$src_list['first_flag'];   
219               
220                foreach($src_list['src'] as $src){
221                        $prec_flag=$src['prec_flag'];
222                        $unimacsubfield=$src['unimacsubfield']; // source sub_field
223                        $pmb_unimacfield=$src['pmb_unimacfield']; // destination $this->fields_id[$this->fields[$key]["ID"]]
224                       
225                        $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['pmb_unimacfield']=$r_src->harvest_src_pmb_unimacfield;           
226                                $this->info['fields'][$r->harvest_field_xml_id]['src'][$cpt]['pmb_unimacsubfield']=$r_src->harvest_src_pmb_unimacsubfield;     
227                        $found=0;
228                        if($this->info['notice'][ $src['num_source'] ][$src['unimacfield']]){                           
229                                foreach($this->info['notice'][ $src['num_source'] ][$src['unimacfield']] as $notice_field){
230                                        $no_memo_subfield_flag=0;
231                                        if($unimacsubfield && ($notice_field->usubfield != $unimacsubfield)){
232                                                $no_memo_subfield_flag=1;
233                                        }
234                                        //printr( $notice_ufield);
235                                        if($notice_field->value && !$no_memo_subfield_flag){
236                                                                                               
237                                                $notice_composite[$cpt]['xml_id']=$xml_id;
238                                                $notice_composite[$cpt]['num_source']=$src['num_source'];
239                                                $notice_composite[$cpt]['ufield']=$pmb_unimacfield;
240                                                $notice_composite[$cpt]['field_ind']=$notice_field->field_ind;
241                                                $notice_composite[$cpt]['usubfield']=$notice_field->usubfield;
242                                                $notice_composite[$cpt]['field_order']=$notice_field->field_order;
243                                                $notice_composite[$cpt]['subfield_order']=$notice_field->subfield_order;
244                                                $notice_composite[$cpt]['value']=$notice_field->value;
245                                                $notice_composite[$cpt]['pmb_unimacfield']=$this->fields_id[$xml_id]['UNIMARCFIELD'];
246                                                $notice_composite[$cpt]['pmb_unimacsubfield']=$this->fields_id[$xml_id]['UNIMARCSUBFIELD'];
247                                                $cpt++;
248                                                $found=1;
249                                        }
250                                }
251                        }
252                        // une valeur est trouvée , on ne s'occupe pas des sources suivantes si demandé
253                        if($first_flag && $found) {
254                                break;
255                        }
256                }               
257            } 
258           // printr(   $this->info['notice']);
259            return($notice_composite); 
260           
261    }
262   
263        function get_form() {
264                global $harvest_form_tpl, $harvest_form_elt_tpl,$msg,$charset;
265                global $harvest_form_elt_ajax_tpl,$harvest_form_elt_src_tpl;
266               
267                $tpl=$harvest_form_tpl;
268                if($this->id){
269                        $tpl=str_replace('!!msg_title!!',$msg['admin_harvest_build_form_edit'],$tpl);
270                        $tpl=str_replace('!!delete!!',"<input type='button' class='bouton' value='".$msg['admin_harvest_build_delete']."'  onclick=\"document.getElementById('action').value='delete';this.form.submit();\"  />", $tpl);
271                        $name=$this->info['name'];
272                }else{ 
273                        $tpl=str_replace('!!msg_title!!',$msg['admin_harvest_build_form_add'],$tpl);
274                        $tpl=str_replace('!!delete!!',"",$tpl);
275                        $name="";
276                }
277                $tpl=str_replace('!!name!!',htmlentities($name, ENT_QUOTES, $charset),$tpl);
278               
279                $elt_list="";
280               
281                foreach($this->fields as $field){       // pour tout les champs unimarc à récolter     
282                        $elt=$harvest_form_elt_tpl;
283                        $nb=0;
284                       
285                        $elt=str_replace("!!pmb_field_msg!!",$msg[$field["NAME"]],$elt);
286                       
287                        if($this->id && $this->info['fields'][$field["ID"]]['src']){
288                                // Edition: les valeurs des champs sont issues de la base               
289                                $add_zone_harvest="";   
290                                if($this->info['fields'][$field["ID"]]['first_flag']) $first_flag=" checked='checked' ";
291                                else $first_flag="";
292                                $elt=str_replace("!!first_flagchecked!!",$first_flag,$elt);
293                                foreach($this->info['fields'][$field["ID"]]['src'] as $harvest_src){   
294                                        if(!$nb){
295                                                // Le principal
296                                                $elt=$this->build_memo_field($elt,$field,$harvest_src,$nb);
297                                        } else{
298                                                // Les autres ajouts de sources
299                                                $zone_suite=$harvest_form_elt_src_tpl;
300                                                $zone_suite=$this->build_memo_field($zone_suite,$field,$harvest_src,$nb);
301                                                $zone_suite=str_replace("!!nb!!",$nb,$zone_suite);     
302                       
303                                                $add_zone_harvest.=$zone_suite;
304                                        }                                       
305                                        $nb++;
306                                }
307                                $elt=str_replace("!!nb!!",$nb,$elt);   
308                               
309                        } else { 
310                                // Création:les valeurs des champs sont issues du fichier XML
311                                $elt=str_replace("!!first_flagchecked!!"," checked='checked' ",$elt);
312                                $elt=$this->build_new_field($elt,$field,$nb);                                   
313                                $elt=str_replace("!!nb!!",0,$elt);             
314                                $add_zone_harvest="";   
315                        }                       
316                        $elt=str_replace('!!add_zone_harvest!!',$add_zone_harvest,$elt);       
317                               
318                        // pour pouvoir ajouter une nouvelle source en js
319                        $add_tpl=$harvest_form_elt_ajax_tpl;
320                        $add_tpl=$this->build_new_field($add_tpl,$field,'!!nb!!');                                                     
321                        $elt=str_replace('!!harvest_field_form_add!!',$add_tpl,$elt);   
322                                                               
323                        $elt=str_replace("!!id!!",$field["ID"],$elt);                   
324                        $elt_list.=$elt;
325                }
326                $src_list=$this->get_src_list();
327                $tpl=str_replace('!!src_list!!',$src_list,$tpl);
328                $tpl=str_replace('!!elt_list!!',$elt_list,$tpl);       
329                $tpl=str_replace('!!id_harvest!!',$this->id,$tpl);
330                 
331                return $tpl;
332        }
333       
334        function build_memo_field($elt,$field,$data_field,$nb){ 
335                //      !!unimarcfield!! !!subfield!! !!sources!! !!pmb_unimarc_select!!               
336                $elt=str_replace('!!unimarcfield!!',$this->build_unimarcfield($field["ID"],$nb,$data_field["unimacfield"]),$elt);
337
338                if($field["UNIMARCSUBFIELD"]) $elt=str_replace("!!subfield!!",$this->build_unimarcsubfield($field["ID"],$nb,$data_field["unimacsubfield"]),$elt);
339                else $elt=str_replace("!!subfield!!","",$elt);
340       
341                $elt=str_replace('!!sources!!',$this->build_sources($field["ID"],$nb,$data_field["num_source"]),$elt);
342                $elt=str_replace('!!pmb_unimarc_select!!',$this->build_pmbunimarcfield($field["ID"],$nb,$field["UNIMARCFIELD"],$data_field["pmb_unimacfield"]),$elt);   
343               
344                $elt=str_replace('!!onlylastempty!!',$this->build_lastempty($field["ID"],$nb,$data_field["prec_flag"]),$elt);   
345                return  $elt;   
346        }
347       
348        function build_new_field($elt,$field,$nb){
349                //      !!unimarcfield!! !!subfield!! !!sources!! !!pmb_unimarc_select!!
350                $elt=str_replace('!!unimarcfield!!',$this->build_unimarcfield($field["ID"],$nb,$field["UNIMARCFIELD"]),$elt);
351
352                if($field["UNIMARCSUBFIELD"]) $elt=str_replace("!!subfield!!",$this->build_unimarcsubfield($field["ID"],$nb,$field["UNIMARCSUBFIELD"]),$elt);
353                else $elt=str_replace("!!subfield!!","",$elt);
354       
355                $elt=str_replace('!!sources!!',$this->build_sources($field["ID"],$nb,''),$elt);
356                $elt=str_replace('!!pmb_unimarc_select!!',$this->build_pmbunimarcfield($field["ID"],$nb,$field["UNIMARCFIELD"],''),$elt);       
357               
358                $elt=str_replace('!!onlylastempty!!',$this->build_lastempty($field["ID"],$nb,1),$elt); 
359                return  $elt;   
360        }
361        function build_sources($id,$nb,$val){
362                global $msg,$charset;
363                $field=$this->get_sources_sel($id,$nb,$val);
364                return $field;
365        }
366        function build_unimarcfield($id,$nb,$val){
367                global $msg,$charset;
368                $tab=explode(',',$val);
369                $field="<input type='text' size='3' name='unimarcfield_".$id."_".$nb."' value='".$tab[0]."' />";
370                return $field;
371        }       
372        function build_unimarcsubfield($id,$nb,$val){
373                global $msg,$charset;
374                $field="<input type='text' size='1' name='unimarcsubfield_".$id."_".$nb."' id='unimarcsubfield_".$id."_".$nb."' value='".$val."'/> ";
375               
376                return $field;
377        }
378        function build_pmbunimarcfield($id,$nb,$unimacfields,$val){
379                global $msg,$charset;
380                               
381                $tab=explode(',',$unimacfields);
382                if(count($tab)>1){
383                        $sel_unimac="<select name='pmb_unimarc_".$id."_".$nb."' >";
384                        $first=$val;
385                        foreach($tab as $uni){
386                                if(!$first)     $first=$uni; // premier par défaut                     
387                                if($first==$uni){
388                                        $selected = " selected='selected' ";
389                                }else $selected = "";
390                                $sel_unimac.="<option value='$uni' $selected>".$uni."</option>\n";
391                        }
392                        $sel_unimac.="</select>";       
393                }else{
394                        $sel_unimac="<input type='hidden' name='pmb_unimarc_".$id."_".$nb."' value='".$tab[0]."'>";     
395                }
396                return $sel_unimac;
397        }
398        function build_lastempty($id,$nb,$val){
399                global $msg,$charset;
400                if($val) $checked=" checked='checked' ";
401                $field="<input type='checkbox'  name='onlylastempty_".$id."_".$nb."' id='onlylastempty_".$id."_".$nb."' $checked value='1' /> ".$msg['admin_harvest_build_form_onlylastempty']."";
402                return $field;
403        }
404
405        function save($data) {
406                global $dbh;
407                if(!$this->id){ // Ajout
408                        $req="INSERT INTO harvest_profil SET
409                                harvest_profil_name='".$data['name']."'
410                        ";     
411                        pmb_mysql_query($req, $dbh);
412                        $this->id = pmb_mysql_insert_id($dbh);
413                } else {
414                        $req="UPDATE harvest_profil SET
415                                harvest_profil_name='".$data['name']."'
416                                where   id_harvest_profil=".$this->id; 
417                        pmb_mysql_query($req, $dbh);                           
418                               
419                        foreach($this->info['fields'] as $harvest_field){                               
420                                $req="DELETE from harvest_src WHERE num_harvest_field=".$harvest_field['id'];   
421                                pmb_mysql_query($req, $dbh);
422                        }                       
423                        $req=" DELETE from harvest_field WHERE num_harvest_profil=".$this->id;
424                        pmb_mysql_query($req, $dbh);                   
425                                       
426                        $req=" DELETE from harvest_search_field WHERE num_harvest_profil=".$this->id;
427                        pmb_mysql_query($req, $dbh);                                   
428                }
429                $cpt_fields=0;
430                foreach($this->fields as $field ){
431                        $var="firstfound_".$field["ID"];
432                        global $$var;
433                $first_flag=$$var+0;
434               
435                        $req="INSERT INTO harvest_field SET
436                                num_harvest_profil=".$this->id.",
437                                harvest_field_xml_id=".$field["ID"].",
438                                harvest_field_first_flag=".$first_flag.",
439                                harvest_field_order=".$cpt_fields++."   
440                        ";     
441                        pmb_mysql_query($req, $dbh);
442                        $harvest_field_id = pmb_mysql_insert_id($dbh); 
443                       
444                        $var="unimarcfieldnumber_".$field["ID"];
445                        global $$var;
446                $nb_srce=$$var;
447                $cpt=0;
448                for($i=0;$i<=$nb_srce;$i++){                                           
449                        $var="unimarcfield_".$field["ID"]."_".$i;
450                        global $$var;
451                        $unimarcfield=$$var;
452                        if($unimarcfield){ 
453                                $var="unimarcsubfield_".$field["ID"]."_".$i;
454                                global $$var;
455                                $unimarcsubfield=$$var;
456                               
457                                $var="source_".$field["ID"]."_".$i;
458                                global $$var;
459                                $source=$$var+0;                               
460                                       
461                                $var="pmb_unimarc_".$field["ID"]."_".$i;
462                                global $$var;
463                                $pmb_unimarc=$$var;
464                               
465                                $var="onlylastempty_".$field["ID"]."_".$i;
466                                global $$var;
467                                $rec_flag=$$var+0;
468                               
469                                $req="INSERT INTO harvest_src SET
470                                        num_harvest_field=".$harvest_field_id.",
471                                        num_source=".$source.",
472                                        harvest_src_unimacfield='".$unimarcfield."',
473                                        harvest_src_unimacsubfield='".$unimarcsubfield."',     
474                                        harvest_src_pmb_unimacfield='".$pmb_unimarc."',         
475                                        harvest_src_prec_flag=".$rec_flag.",   
476                                        harvest_src_order=".$cpt."
477                                        ";     
478                                        pmb_mysql_query($req, $dbh);
479                                        $cpt++;
480                        }                       
481                }
482                }
483                foreach($this->info['connector'] as $source=> $name){
484                        $var="list_crit_".$source;
485                        global $$var;
486                $field=$$var+0;
487                        $var="list_ss_champs_".$source;
488                        global $$var;
489                $ss_field=$$var+0;
490                if($field){
491                        $req="INSERT INTO harvest_search_field SET
492                                        num_harvest_profil=".$this->id.",
493                                        num_source=".$source.",
494                                        num_field='".$field."',
495                                        num_ss_field='".$ss_field."'
496                                ";     
497                                pmb_mysql_query($req, $dbh);   
498                }
499                }
500                $this->fetch_data();
501        }       
502       
503        function delete() {
504                global $dbh;
505                foreach($this->info['fields'] as $harvest_field){                               
506                        $req="DELETE from harvest_src WHERE num_harvest_field=".$harvest_field['id'];   
507                        pmb_mysql_query($req, $dbh);
508                }                       
509                $req=" DELETE from harvest_field WHERE num_harvest_profil=".$this->id;
510                pmb_mysql_query($req, $dbh);                           
511                $req=" DELETE from  harvest_profil where id_harvest_profil=". $this->id;
512                pmb_mysql_query($req, $dbh);                                                           
513                $req=" DELETE from harvest_search_field WHERE num_harvest_profil=".$this->id;
514                pmb_mysql_query($req, $dbh);   
515               
516                $this->fetch_data();   
517        }       
518       
519    function get_sources_sel($id_field,$nb,$value) {
520        global $msg,$charset;
521       
522        //Recherche des sources
523        $requete="SELECT connectors_categ_sources.num_categ, connectors_sources.source_id, connectors_categ.connectors_categ_name as categ_name, connectors_sources.name, connectors_sources.comment, connectors_sources.repository, connectors_sources.opac_allowed, source_sync.cancel FROM connectors_sources LEFT JOIN connectors_categ_sources ON (connectors_categ_sources.num_source = connectors_sources.source_id) LEFT JOIN connectors_categ ON (connectors_categ.connectors_categ_id = connectors_categ_sources.num_categ) LEFT JOIN source_sync ON (connectors_sources.source_id = source_sync.source_id AND connectors_sources.repository=2) ORDER BY connectors_categ_sources.num_categ DESC, connectors_sources.name";
524        $resultat=pmb_mysql_query($requete);
525        $r="<select name='source_".$id_field."_".$nb."' >";
526        $current_categ=0;
527        $count = 0;
528        if(!$value)$selected=" selected='selected' ";
529        while ($source=pmb_mysql_fetch_object($resultat)) {
530                if ($current_categ !== $source->num_categ) {
531                        $current_categ = $source->num_categ;
532                        $source->categ_name = $source->categ_name ? $source->categ_name : $msg["source_no_category"];
533                        $r .= "<optgroup label='".$source->categ_name."'>";
534                        $count++;
535                }
536                if($value==$source->source_id){
537                        $selected=" selected='selected' ";
538                }
539                $r.="<option $selected value='".$source->source_id."' >".htmlentities($source->name.($source->comment?" : ".$source->comment:""),ENT_QUOTES,$charset)."</option>\n";
540                $selected="";
541        }
542        $r.="</select>";
543        return $r;
544    }
545
546        function create_list_fields($array,$source_id=0,$id_selected=0,$ss_field=0){
547                global $msg;
548               
549                $select ="<select id='"."list_crit_".$source_id."' name='list_crit_".$source_id."' onchange=\"load_subfields('".$source_id."',0)\">";           
550                $selected="";
551                if(!$id_selected)$selected=" selected='selected' ";
552                $select.="<option value='0' $selected>".$msg["connecteurs_no_upload_rep"]."</option>";
553                foreach ($array as $id => $value) {                     
554                        if($id==$id_selected){
555                                $select.="<option value=".$id." selected='selected'>".$value."</option>";
556                        } else {
557                                $select.="<option value=".$id.">".$value."</option>";
558                        }
559                }
560                $select.="</select></br>
561                <div id='list_ss_crit_$source_id'>
562               
563                </div>";               
564                if($ss_field) $select .= "<script>load_subfields($source_id, $ss_field)</script>";
565                return $select;
566        }
567       
568    function get_src_list() {
569        global $msg,$charset;
570       
571        $r="
572                <script type='text/javascript'>
573                                       
574                                function load_subfields(source_id,id_ss_champs){
575                               
576                                        var lst = document.getElementById('list_crit_'+source_id);
577                                        var id = lst.value;
578                                        var lst = document.getElementById('list_ss_crit_'+source_id);
579                                        if(id=='0'){   
580                                                lst.innerHTML = '';
581                                                return;         
582                                        }
583                                        var xhr_object=  new http_request();                                   
584                                        xhr_object.request('./ajax.php?module=admin&categ=opac&section=lst_facette',1,'list_crit=' +id+ '&sub_field=' +id_ss_champs+ '&suffixe_id='+source_id );
585                                        lst.innerHTML = xhr_object.get_text();
586                                }
587                        </script>";
588        //Recherche des sources
589        $requete="SELECT connectors_categ_sources.num_categ, connectors_sources.source_id as source_id, connectors_categ.connectors_categ_name as categ_name, connectors_sources.name, connectors_sources.comment, connectors_sources.repository, connectors_sources.opac_allowed, source_sync.cancel FROM connectors_sources LEFT JOIN connectors_categ_sources ON (connectors_categ_sources.num_source = connectors_sources.source_id) LEFT JOIN connectors_categ ON (connectors_categ.connectors_categ_id = connectors_categ_sources.num_categ) LEFT JOIN source_sync ON (connectors_sources.source_id = source_sync.source_id AND connectors_sources.repository=2) ORDER BY connectors_categ_sources.num_categ DESC, connectors_sources.name";
590        $resultat=pmb_mysql_query($requete);
591       
592        $current_categ=0;
593        $count = 0;
594       
595        $facette=new facette_search();
596       
597        while ($source=pmb_mysql_fetch_object($resultat)) {
598                $r.="
599                        <tr>
600                                <td>".
601                                htmlentities($source->name.($source->comment?" : ".$source->comment:""),ENT_QUOTES,$charset)."
602                                </td>
603                                <td>".
604                                $this->create_list_fields($facette->array_sort(),$source->source_id,$this->info['search_field'][$source->source_id]['field'], $this->info['search_field'][$source->source_id]['ss_field'])."
605                                </td>
606                        </tr>";                         
607        }
608       
609        return $r;
610    }   
611} //harvest class end
612
613
614
615
616
617
618
619
620
621class harvests {       
622        var $info=array();
623       
624        function harvests() {
625                $this->fetch_data();
626        }
627       
628        function fetch_data() {
629                $this->info=array();
630                $i=0;
631                $req="select * from harvest_profil ";
632                $resultat=pmb_mysql_query($req);       
633                if (pmb_mysql_num_rows($resultat)) {
634                        while($r=pmb_mysql_fetch_object($resultat)){   
635                                $this->info[$i]= $harvest=new harvest($r->id_harvest_profil);   
636                               
637                                $i++;
638                        }
639                }       
640        }
641               
642        function get_list() {
643                global $harvest_list_tpl,$harvest_list_line_tpl,$msg;
644               
645                $tpl=$harvest_list_tpl;
646                $tpl_list="";
647                $odd_even="odd";
648                foreach($this->info as $elt){
649                        $tpl_elt=$harvest_list_line_tpl;
650                        if($odd_even=='odd')$odd_even="even";
651                        else $odd_even="odd";
652                        $tpl_elt=str_replace('!!odd_even!!',$odd_even, $tpl_elt);       
653                        $tpl_elt=str_replace('!!name!!',$elt->info['name'], $tpl_elt); 
654                        $tpl_elt=str_replace('!!id!!',$elt->info['id'], $tpl_elt);     
655                        $tpl_list.=$tpl_elt;   
656                }
657                $tpl=str_replace('!!list!!',$tpl_list, $tpl);
658                return $tpl;
659        }       
660       
661        function get_sel($sel_name,$sel_id=0) {
662                global $harvest_list_tpl,$harvest_list_line_tpl,$msg;
663                $tpl="<select name='$sel_name' >";
664                               
665                foreach($this->info as $elt){
666                        if($elt->info['id']==$sel_id){
667                                $tpl.="<option value=".$elt->info['id']." selected='selected'>".$elt->info['name']."</option>";
668                        } else {
669                                $tpl.="<option value=".$elt->info['id'].">".$elt->info['name']."</option>";
670                        }
671                }
672                $tpl.="</select>";
673                return $tpl;
674        }               
675} //harvests class end
676       
Note: See TracBrowser for help on using the repository browser.