'; $html_footer = ''; /* Input form */ $input_form = '
Forfatter:
Titel:

'; /* Tekster til navigation */ define('LABEL_NESTE_SIDE', 'Næste side'); define('LABEL_FORRIGE_SIDE', 'Forrige side'); define('LABEL_NY_SOGNING', 'Ny søgning'); /* Antal poster pr. sider - kan ikke være større end 10 pt. */ define ("RECORDS_PR_PAGE", 5); /* Bruges http-proxy, skal nedenstående inkluderes og "minproxy.dk" rettes til */ define ("HTTP_PROXY", "phobos.dbc.dk:3128"); // url til evt. proxy /* * css klasser * postno bruges til linien: "Post nn .... " * label bruges til felt-navnen * * Skal forskellige dele af posten udskrives med forskellig typografi, så opret * flere typer og referer til dem fra $show_tsgs tabellen nedenfor */ $css_style = ' .postno {font-style:italic;} .label {display:inline;width:5em; font-weight:bold;margin-right:0.5em} .normal {font-size:1em; margin: 0 0 0 0;} body {background-color:#F8F8F8;color:#111111} .logo {margin:0 0 0 0;} .left {display:inline; float:left} .clear_left {clear:left} .field {width:4em;} .input {width:15em;} '; /* * Tabel over hvilke felter af de fundne poster der skal vises * index: navn på det datalement der skal vises * "prefix": bruger kun hvis samme indes findes med forskellige prefixer * og indeholder så (namespace-)prefixet * "label": Tekst der vises foran dataelementet * "css": Navn på den css-klasse (fra $css_style) der skal bruges * "delimiter": Skilletegn mellem flere forekomster af "tag". Udelades delimiter, * skrives hvert felt på sin linie * "format": Bruges feltet skal printes på en særlig måde (fx link) */ $show_tags = array(); $show_tags["creator"] = array("label" => "Forfatter ", "css" => "normal", "delimiter" => ". "); $show_tags["title"] = array("label" => "Titel ", "css" => "normal", "delimiter" => ". "); $show_tags["description"] = array("label" => "Beskrivelse ", "css" => "normal", "delimiter" => ". "); $show_tags["version"] = array("label" => "Udgave ", "css" => "normal", "delimiter" => "; "); $show_tags["publisher"] = array("label" => "Forlag ", "css" => "normal", "delimiter" => "; "); $show_tags["subject"] = array("label" => "Emne ", "css" => "normal", "delimiter" => "; "); $show_tags["identifier"] = array("prefix" => "dc", "label" => "identifier ", "css" => "normal", "delimiter" => "; "); $show_tags["location"] = array("label" => "bibdk ", "css" => "normal", "format" => 'Link til bibliotek.dk'); /* * Tabel over mulige input-felter * Tabellen fungere dels som filter overfor de input-felter der kan bruges og * som oversættelse til CQL-søgekoden */ $field_to_cql = array("forfatter" => "dc.creator", "titel" => "dc.title", "emne" => "dc.subject", "fritekst" => "dc.serverChoice", "id" => "dc.identifier", "år" => "dc.date", "sprog" => "dc.language", "materialetype" => "dc.type", "person" => "bath.personalName", "ejer" => "bath.possessingInstitution", "noter" => "bath.notes", "postid" => "rec.id" ); /* Main() */ /* ====== */ // Lav query - hvis der er en // $query kommer til at indeholde CQL søgestrengen // $url_query indeholder argumenter som bruges ved bladring // $user_query indeholder søgningen som brugeren har valgt foreach ($_REQUEST as $field => $term) if ($term && isset($field_to_cql[strtolower($field)])) { $url_query .= "&" . $field . "=" . urlencode($term); $user_query .= ($user_query ? " og " : "") . $field . "=" . $term; $terms = split(" ", $term); foreach ($terms as $t) $query .= ($query ? " and ": "") . $field_to_cql[strtolower($field)] . "=(" . $t . ")"; } if ($_REQUEST["debug"]) $url_query .= "&debug=" . $_REQUEST["debug"]; // Start hmtl-dok header('Content-Type: text/html; charset=utf-8'); printf($html_header, $css_style); if (empty($query)) { // hvis der ikke er en query, så vis søgeformen echo $input_form; } else { // ellers udfør søgningen // echo $user_query; $curl["url"] = "http://webservice.bibliotek.dk/soeg/"; if (defined("HTTP_PROXY")) $curl["proxy"] = HTTP_PROXY; $curl["timeout"] = 20; $curl["post"] = ' 1.1 ' . $query . ' ' . ($_REQUEST["start"] ? $_REQUEST["start"] : 1) . ' ' . ($_REQUEST["step"] ? $_REQUEST["step"] : RECORDS_PR_PAGE) . ' abm xml '; w_service($curl); if (empty($curl["reply"])) $error = "Der er ikke noget svar"; else $error = display_recs($curl["reply"], $show_tags, $url_query); if ($error) { if ($error == "No records found") echo 'Der blev fundet 0 poster.'; else echo 'Error: ' . $error; echo '

' . LABEL_NY_SOGNING . ''; } // debug if ($_REQUEST["debug"]) { $curl["post"] = str_replace("<", "<", $curl["post"]); $curl["reply"] = str_replace("<", "<", $curl["reply"]); echo "
"; print_r($curl); echo "
"; } } echo $html_footer; exit(); /* Hjælpefunk */ /* ========== */ /* * Løber svaret igennem og tager de dataelementer som $show_tags specificerer */ function display_recs($reply, $tags, $add_url) { // Valid xml? $dom = new DomDocument(); if (!$dom->loadXML($reply)) return("Svaret er ikke valid xml"); // SOAP envelope? $soap_env = $dom->documentElement; // envelope check... if ($soap_env->localName != "Envelope") return("XML mangler Envelope"); // error check... $diag=$dom->getElementsByTagName('diagnostic'); if($diag->length>=1) { $msg=$dom->getElementsByTagName('message'); if($msg->length>=1) { return $msg->item(0)->nodeValue; } return ("Ukendt fejl"); } $hits=$dom->getElementsByTagName('numberOfRecords')->item(0)->nodeValue; $start = ($_REQUEST["start"] ? $_REQUEST["start"] : 1); $step = ($_REQUEST["step"] ? $_REQUEST["step"] : RECORDS_PR_PAGE); if ($start > 1) $naviger .= '' . LABEL_FORRIGE_SIDE . ''; if ($start + $step <= $hits) $naviger .= '' . LABEL_NESTE_SIDE . ''; $naviger .= '' . LABEL_NY_SOGNING . ''; echo $naviger . '

'; echo $uri = $dom->lookupnamespaceURI("dc"); $recordData=$dom->getElementsByTagName('recordData'); $item=0; foreach($recordData as $rec) { echo "

"; $record_position = $dom->getElementsByTagName('recordPosition')->item($item)->nodeValue; echo "\n" . '

Post ' . $record_position . ' af ' . $hits . ':
'; $item++; foreach($tags as $tagname => $tagvalue) { $label=$tagvalue["label"]; $css=$tagvalue["css"]; $delimiter=$tagvalue["delimiter"]; $data=$rec->getElementsByTagName($tagname); if($data->length>0) { echo "".$label.""; foreach($data as $dataval) { if($tagvalue["prefix"]=="" || $tagvalue["prefix"]==$dataval->prefix) { if($tagvalue["format"]) { printf($tagvalue["format"],$dataval->nodeValue); } else { echo $dataval->nodeValue; } if($data->length>1) { echo $delimiter; } } } echo "
"; } } } } /* * Udfører kaldet til bibliotek.dk webservicen * * ws elements: * url: url'en på servicen * proxy: Evt. proxy url * timeout: antal sekunder der vil ventes på svar * post: xml-post der skal sendes * persistent: skal forbindelse holdes * result: * reply: xml-svar-post * error: evt. fejl */ function w_service(&$ws) { if (empty($ws["id"])) $ws["id"] = curl_init(); if (is_resource($ws["id"])) { curl_setopt($ws["id"], CURLOPT_URL, $ws["url"]); if (isset($ws["proxy"])) { curl_setopt($ws["id"], CURLOPT_HTTPPROXYTUNNEL, true); curl_setopt($ws["id"], CURLOPT_PROXY, $ws["proxy"]); } curl_setopt($ws["id"], CURLOPT_RETURNTRANSFER,1); if (isset($ws["timeout"])) curl_setopt($ws["id"], CURLOPT_CONNECTTIMEOUT,$ws["timeout"]); else curl_setopt($ws["id"], CURLOPT_CONNECTTIMEOUT,5); curl_setopt($ws["id"], CURLOPT_POST, 1); $http_header = array("Content-Type: text/xml;charset=UTF-8"); curl_setopt($ws["id"], CURLOPT_HTTPHEADER, $http_header); curl_setopt($ws["id"], CURLOPT_POSTFIELDS, $ws["post"]); curl_setopt($ws["id"], CURLOPT_USERPWD, "USER:PWD"); $ws["reply"] = curl_exec($ws["id"]); if (curl_error($ws["id"])) $ws["error"] = curl_error($ws["id"]) . " (" . curl_errno($ws["id"]) . ")"; if (empty($ws["persistent"])) curl_close($ws["id"]); } else $ws["error"] = "FATAL: Cannot initialize CURL session"; return(empty($ws["error"])); } ?>