id = $id*1;
$this->fetch_data();
}
// récupération des infos en base
public function fetch_data() {
if($this->id) {
$result = pmb_mysql_query("SELECT * FROM search_persopac WHERE search_id='".$this->id."'");
$row = pmb_mysql_fetch_object($result);
$this->name = $row->search_name;
$this->shortname = $row->search_shortname;
$this->query = $row->search_query;
$this->human = $row->search_human;
$this->directlink = $row->search_directlink;
$this->limitsearch = $row->search_limitsearch;
$this->order = $row->search_order;
$this->empr_categ_restrict = array();
$query = "select id_categ_empr from search_persopac_empr_categ where id_search_persopac = ".$this->id;
$result = pmb_mysql_query($query);
if(pmb_mysql_num_rows($result)){
while ($row = pmb_mysql_fetch_object($result)){
$this->empr_categ_restrict[]=$row->id_categ_empr;
}
}
}
$this->load_xml();
}
protected function set_order_in_database($id, $order) {
if($id) {
$query = "update search_persopac set search_order = '".$order."' where search_id = ".$id;
pmb_mysql_query($query);
}
}
public function get_link() {
$result = pmb_mysql_query("SELECT * FROM search_persopac order by search_order, search_name ");
$this->search_persopac_list=array();
if(pmb_mysql_num_rows($result)){
$i=0;
while(($row=pmb_mysql_fetch_object($result))) {
if($row->search_order == ($i+1)) {
$order = $row->search_order;
} else {
$this->set_order_in_database($row->search_id, ($i+1));
$order = ($i+1);
}
$this->search_persopac_list[$i]= new stdClass();
$this->search_persopac_list[$i]->id=$row->search_id;
$this->search_persopac_list[$i]->name=$row->search_name;
$this->search_persopac_list[$i]->shortname=$row->search_shortname;
$this->search_persopac_list[$i]->query=$row->search_query;
$this->search_persopac_list[$i]->human=$row->search_human;
$this->search_persopac_list[$i]->directlink=$row->search_directlink;
$this->search_persopac_list[$i]->limitsearch=$row->search_limitsearch;
$this->search_persopac_list[$i]->order=$order;
$i++;
}
}
return true;
}
public function set_properties_from_form() {
global $name, $shortname, $query, $human, $directlink, $limitsearch;
global $empr_restrict;
$this->name = stripslashes($name);
$this->shortname = stripslashes($shortname);
$this->query = stripslashes($query);
$this->human = stripslashes($human);
$this->directlink = $directlink;
$this->limitsearch = $limitsearch;
$this->empr_categ_restrict = $empr_restrict;
}
public function set_order($order=0) {
$order += 0;
if(!$order) {
$query = "select max(search_order) as max_order from search_persopac";
$result = pmb_mysql_query($query);
$order = pmb_mysql_result($result, 0)+1;
}
$this->order = $order;
}
public function save() {
global $msg;
global $thesaurus_liste_trad;
if(!$this->id) {
$this->set_order(0);
}
$fields = "
search_name = '".addslashes($this->name)."',
search_shortname = '".addslashes($this->shortname)."',
search_query = '".addslashes($this->query)."',
search_human = '".addslashes($this->human)."',
search_directlink = '".$this->directlink."',
search_limitsearch = '".$this->limitsearch."',
search_order = '".$this->order."'
";
if($this->id) {
// modif
$no_erreur=pmb_mysql_query("UPDATE search_persopac SET $fields WHERE search_id=".$this->id);
if(!$no_erreur) {
error_message($msg["search_persopac_form_edit"], $msg["search_persopac_form_add_error"],1);
exit;
}
} else {
// create
$no_erreur=pmb_mysql_query("INSERT INTO search_persopac SET $fields ");
$this->id = pmb_mysql_insert_id($dbh);
if(!$no_erreur) {
error_message($msg["search_persopac_form_add"], $msg["search_persopac_form_add_error"],1);
exit;
}
}
//on s'occupe maintenant de la restriction par caégories de lecteur
$query = "delete from search_persopac_empr_categ where id_search_persopac = ".$this->id;
pmb_mysql_query($query);
if(count($this->empr_categ_restrict)){
foreach($this->empr_categ_restrict as $id_categ_empr){
$query = "insert into search_persopac_empr_categ set id_search_persopac=".$this->id.", id_categ_empr=".$id_categ_empr;
pmb_mysql_query($query);
}
}
$trans= new translation($this->id,"search_persopac","search_name",$thesaurus_liste_trad);
$trans->update("name");
$trans= new translation($this->id,"search_persopac","search_shortname",$thesaurus_liste_trad);
$trans->update("shortname");
}
// fonction générant le form de saisie
public function do_form() {
global $msg,$tpl_search_persopac_form,$charset,$base_path;
global $thesaurus_liste_trad;
global $id_search_persopac;
// titre formulaire
$my_search=new search(false,"search_fields_opac","$base_path/temp/");
if($this->id) {
$libelle=$msg["search_persopac_form_edit"];
$link_delete="";
$button_modif_requete = "id.".submit();\">";
//Mémorisation de recherche prédéfinie en édition
if ($id_search_persopac) {
$this->query=$my_search->serialize_search();
$my_search->unserialize_search($this->query);
} else {
$my_search->unserialize_search($this->query);
$this->query=$my_search->serialize_search();
}
$form_modif_requete = $this->make_hidden_search_form();
} else {
$libelle=$msg["search_persopac_form_add"];
$link_delete="";
$button_modif_requete = "";
$form_modif_requete = "";
$this->query=$my_search->serialize_search();
}
$this->human = $my_search->make_human_query();
// Champ éditable
$tpl_search_persopac_form = str_replace('!!id!!', htmlentities($this->id,ENT_QUOTES,$charset), $tpl_search_persopac_form);
$trans= new translation($this->id,"search_persopac","search_name",$thesaurus_liste_trad);
$field_name=$trans->get_form($msg["search_persopac_form_name"],"form_nom","name",$this->name,"saisie-80em");
$tpl_search_persopac_form = str_replace('!!name!!', $field_name, $tpl_search_persopac_form);
$trans= new translation($this->id,"search_persopac","search_shortname",$thesaurus_liste_trad);
$field_name=$trans->get_form($msg["search_persopac_form_shortname"],"shortname","shortname",$this->shortname,"saisie-80em");
$tpl_search_persopac_form = str_replace('!!shortname!!', $field_name, $tpl_search_persopac_form);
$checked='';
if($this->directlink) $checked= " checked='checked' ";
$tpl_search_persopac_form = str_replace('!!directlink!!', $checked, $tpl_search_persopac_form);
$checked='';
if($this->limitsearch) $checked= " checked='checked' ";
$tpl_search_persopac_form = str_replace('!!limitsearch!!', $checked, $tpl_search_persopac_form);
$tpl_search_persopac_form = str_replace('!!query!!', htmlentities($this->query,ENT_QUOTES,$charset), $tpl_search_persopac_form);
$tpl_search_persopac_form = str_replace('!!human!!', htmlentities($this->human,ENT_QUOTES,$charset), $tpl_search_persopac_form);
$action="./admin.php?categ=opac&sub=search_persopac§ion=liste&action=collstate_update&serial_id=".$this->serial_id."&id=".$this->id;
$tpl_search_persopac_form = str_replace('!!action!!', $action, $tpl_search_persopac_form);
$tpl_search_persopac_form = str_replace('!!delete!!', $link_delete, $tpl_search_persopac_form);
$tpl_search_persopac_form = str_replace('!!libelle!!',htmlentities($libelle,ENT_QUOTES,$charset) , $tpl_search_persopac_form);
$link_annul = "onClick=\"unload_off();history.go(-1);\"";
$tpl_search_persopac_form = str_replace('!!annul!!', $link_annul, $tpl_search_persopac_form);
//restriction aux catégories de lecteur
$requete = "SELECT id_categ_empr, libelle FROM empr_categ ORDER BY libelle ";
$res = pmb_mysql_query($requete);
if(pmb_mysql_num_rows($res)>0){
$categ = "
";
}else $categ = "";
$tpl_search_persopac_form = str_replace('!!categorie!!', $categ, $tpl_search_persopac_form);
$tpl_search_persopac_form = str_replace('!!requete!!', htmlentities($this->query,ENT_QUOTES, $charset), $tpl_search_persopac_form);
$tpl_search_persopac_form = str_replace('!!requete_human!!', $this->human, $tpl_search_persopac_form);
$tpl_search_persopac_form = str_replace('!!bouton_modif_requete!!', $button_modif_requete, $tpl_search_persopac_form);
$tpl_search_persopac_form = str_replace('!!form_modif_requete!!', $form_modif_requete, $tpl_search_persopac_form);
return $tpl_search_persopac_form;
}
public function do_list() {
global $tpl_search_persopac_liste_tableau,$tpl_search_persopac_liste_tableau_ligne;
$forms_search = '';
// liste des lien de recherche directe
$liste="";
// pour toute les recherche de l'utilisateur
$this->get_link();
for($i=0;$isearch_persopac_list);$i++) {
if ($i % 2) $pair_impair = "even"; else $pair_impair = "odd";
/*
//composer le formulaire de la recherche
$my_search=new search();
$my_search->unserialize_search($this->search_persopac_list[$i]->query);
$forms_search.= $my_search->make_hidden_search_form("./catalog.php?categ=search&mode=6","search_form".$this->search_persopac_list[$i]->id);
*/
$td_javascript=" ";
$tr_surbrillance = "onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='".$pair_impair."'\" ";
$line = str_replace('!!td_javascript!!',$td_javascript , $tpl_search_persopac_liste_tableau_ligne);
$line = str_replace('!!tr_surbrillance!!',$tr_surbrillance , $line);
$line = str_replace('!!pair_impair!!',$pair_impair , $line);
$line =str_replace('!!id!!', $this->search_persopac_list[$i]->id, $line);
$line = str_replace('!!name!!', $this->search_persopac_list[$i]->name, $line);
$line = str_replace('!!human!!', $this->search_persopac_list[$i]->human, $line);
$line = str_replace('!!shortname!!', $this->search_persopac_list[$i]->shortname, $line);
if($this->search_persopac_list[$i]->directlink)
$directlink="
";
else $directlink="";
$line = str_replace('!!directlink!!', $directlink, $line);
$liste.=$line;
}
$tpl_search_persopac_liste_tableau = str_replace('!!lignes_tableau!!',$liste , $tpl_search_persopac_liste_tableau);
return $forms_search.$tpl_search_persopac_liste_tableau;
}
public function delete() {
if($this->id) {
pmb_mysql_query("DELETE from search_persopac WHERE search_id='".$this->id."' ");
pmb_mysql_query("delete from search_persopac_empr_categ where id_search_persopac = ".$this->id);
}
}
public function up() {
$query = "select search_order from search_persopac where search_id=".$this->id;
$result = pmb_mysql_query($query);
$order = pmb_mysql_result($result, 0, 0);
$query = "select max(search_order) as order_max from search_persopac where search_order < $order";
$result=pmb_mysql_query($query);
$order_max=@pmb_mysql_result($result, 0, 0);
if ($order_max) {
$query="select search_id from search_persopac where search_order=$order_max limit 1";
$result=pmb_mysql_query($query);
$id_search_up=pmb_mysql_result($result,0,0);
$query="update search_persopac set search_order='".$order_max."' where search_id=".$this->id;
pmb_mysql_query($query);
$query="update search_persopac set search_order='".$order."' where search_id=".$id_search_up;
pmb_mysql_query($query);
}
}
public function down() {
$query = "select search_order from search_persopac where search_id=".$this->id;
$result = pmb_mysql_query($query);
$order = pmb_mysql_result($result, 0, 0);
$query = "select min(search_order) as order_min from search_persopac where search_order > $order";
$result=pmb_mysql_query($query);
$order_min=@pmb_mysql_result($result, 0, 0);
if ($order_min) {
$query="select search_id from search_persopac where search_order=$order_min limit 1";
$result=pmb_mysql_query($query);
$id_search_down=pmb_mysql_result($result,0,0);
$query="update search_persopac set search_order='".$order_min."' where search_id=".$this->id;
pmb_mysql_query($query);
$query="update search_persopac set search_order='".$order."' where search_id=".$id_search_down;
pmb_mysql_query($query);
}
}
public function add_search(){
global $msg,$base_path;
$my_search=new search(false,"search_fields_opac","$base_path/temp/");
$form= $my_search->show_form("./admin.php?categ=opac&sub=search_persopac§ion=liste&action=build",
"","","./admin.php?categ=opac&sub=search_persopac§ion=liste&action=form".($this->id ? "&id=".$this->id : ""));
print $form;
}
public function continu_search(){
global $msg,$base_path;
$my_search=new search(false,"search_fields_opac");
$form= $my_search->show_form("./admin.php?categ=opac&sub=search_persopac§ion=liste&action=build",
"","","./admin.php?categ=opac&sub=search_persopac§ion=liste&action=form");
print $form;
}
public function curl_load_file($url, $filename) {
global $opac_curl_available, $msg ;
if (!$opac_curl_available) die("PHP Curl must be available");
//Calcul du subst
$url_subst=str_replace(".xml","_subst.xml",$url);
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url_subst);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$filename_subst=str_replace(".xml","_subst.xml",$filename);
$fp = fopen($filename_subst, "w+");
curl_setopt($curl, CURLOPT_FILE, $fp);
//pour déclarer un certificat ou des options supplémentaires sur le même domaine
if (strpos($url,$_SERVER["HTTP_HOST"])) {
global $curl_addon_array_cert;
if (is_array($curl_addon_array_cert) && count($curl_addon_array_cert)) {
curl_setopt_array($curl, $curl_addon_array_cert);
}
}
if(curl_exec ($curl)) {
fclose($fp);
if (curl_getinfo($curl,CURLINFO_HTTP_CODE)=="404") {
unset($fp);
@unlink($filename_subst);
}
curl_setopt ($curl, CURLOPT_URL, $url);
$fp = fopen($filename, "w+");
curl_setopt($curl, CURLOPT_FILE, $fp);
if(!curl_exec ($curl)) die($msg["search_perso_error_param_opac_url"]);
} else die($msg["search_perso_error_param_opac_url"]);
curl_close ($curl);
fclose($fp);
}
// pour maj de requete de recherche prédéfinie
public function make_hidden_search_form($url="") {
global $search;
global $charset;
$url = "./admin.php?categ=opac&sub=search_persopac§ion=liste&action=add" ;
$r="";
return $r;
}
public function load_xml() {
global $pmb_opac_url,$lang,$base_path;
// Recherche du fichier lang de l'opac
$url = $pmb_opac_url."includes/messages/$lang.xml";
$fichier_xml = $base_path."/temp/opac_lang.xml";
$this->curl_load_file($url,$fichier_xml);
$url = $pmb_opac_url."includes/search_queries/search_fields.xml";
$fichier_xml="$base_path/temp/search_fields_opac.xml";
$this->curl_load_file($url,$fichier_xml);
}
} // fin définition classe