Grima 2018-08
Whispering into Alma's ear
grima-util.php
Go to the documentation of this file.
1<?php
2
3//
4// UTILITIES
5//
6
7function XMLtoWeb( $DOM ) {
8 header('Content-Type: text/plain');
9 $DOM->preserveWhiteSpace = false;
10 $DOM->formatOutput = true;
11 print $DOM->saveXML();
12}
13
14function importXML( $DOM, $xmlString ) {
15 $frag = $DOM->createDocumentFragment();
16 $frag->appendXML($xmlString);
17 return $frag;
18}
19
20function appendInnerXML( $elt, $xmlString ) {
21 $DOM = $elt->ownerDocument;
22 $frag = importXML($DOM, $xmlString);
23 $elt->appendChild($frag);
24}
25
26function setInnerXML( $elt, $xmlString ) {
27 while( $elt->hasChildNodes() )
28 $elt->removeChild($elt->lastChild);
29 appendInnerXML($elt, $xmlString);
30}
31
32function pauseAndAsk() {
33 echo "Are you sure you want to do this? Type 'yes' to continue: ";
34 $handle = fopen("php://stdin", "r");
35 $line = fgets($handle);
36 if(trim($line) != 'yes'){
37 echo "ABORTING!\n";
38 exit;
39 }
40 fclose($handle);
41 echo "\n";
42 echo "Thank you, continuing...\n";
43}
44
45function do_redirect($url) {
46 if(!headers_sent()) header("Location: $url");
47 $url_html = htmlspecialchars($url);
48echo "<!DOCTYPE html><html><head><title>Redirect</title><meta http-equiv=refresh content='1; url=$url'></head><body><a href='$url_html'>Go here: $url_html</a></body></html>\n";
49 exit;
50}
51
52function getenvWithFileFallbackAndDefault( $env_name, $default = false ) {
53 return getenv($env_name) ?:
54 rtrim(@file_get_contents(getenv($env_name."_FILE"))) ?:
55 rtrim(@file_get_contents(getenv($env_name."_file"))) ?:
56 $default;
57}
58
60 public $headers = array();
61 public $rawHeaders = array();
62 function capture($curl,$line) {
63 $len = strlen($line);
64 $line = rtrim($line);
65 if (! preg_match('/: /', $line)) {
66 $this->headers[] = $line;
67 $this->rawHeaders[] = $line;
68 } else if ($len>2) {
69 list( $key, $val ) = explode(': ', $line, 2);
70 $this->headers[strtolower($key)] = $val;
71 $this->rawHeaders[] = $line;
72 }
73 return $len;
74 }
75}
76
77function arrayToXml($array, &$xml){
78 foreach ($array as $key => $value) {
79 if(is_int($key)){
80 $key = "int$key";
81 }
82 $node = $xml->ownerDocument->createElement($key);
83 if(is_array($value)) {
84 arrayToXml($value, $node);
85 $xml->appendChild($node);
86 } else {
87 $text = $xml->ownerDocument->createTextNode($value);
88 $node->appendChild($text);
89 $xml->appendChild($node);
90 }
91 }
92}
93
94//
95// INSANITY
96//
97
98function bib_get($mms_id) {
99 require_once("grima-config.php");
100 $url = $hostname . '/almaws/v1/bibs/{mms_id}';
101 $ch = curl_init();
102 $templateParamNames = array('{mms_id}');
103 $templateParamValues = array(urlencode($mms_id));
104 $url = str_replace($templateParamNames, $templateParamValues, $url);
105 $queryParams = '?view=full&expand=None&apikey=' . urlencode($apikey);
106 curl_setopt($ch, CURLOPT_URL, $url . $queryParams);
107 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
108 curl_setopt($ch, CURLOPT_HEADER, FALSE);
109 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
110 $response = curl_exec($ch);
111 curl_close($ch);
112 return $response;
113}
114
115function mfhd_get($mms_id,$holding_id) {
116 require_once("grima-config.php");
117 $url = $hostname . '/almaws/v1/bibs/{mms_id}/holdings/{holding_id}';
118 $ch = curl_init();
119 $templateParamNames = array('{mms_id}','{holding_id}');
120 $templateParamValues = array(urlencode($mms_id, $holding_id));
121 $url = str_replace($templateParamNames, $templateParamValues, $url);
122 $queryParams = '?view=full&expand=None&apikey=' . urlencode($apikey);
123 curl_setopt($ch, CURLOPT_URL, $url . $queryParams);
124 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
125 curl_setopt($ch, CURLOPT_HEADER, FALSE);
126 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
127 $response = curl_exec($ch);
128 curl_close($ch);
129 return $response;
130}
131
132/*
133function importXML($DOM, $content) {
134 $DOMInnerXML = new DOMDocument();
135 $DOMInnerXML->loadXML($content);
136 $contentNode = $DOM->importNode($DOMInnerXML->documentElement, true);
137 return $contentNode;
138}
139
140function setInnerXML($DOM, $element, $content) {
141 $contentNode = importXML($DOM, $content);
142 while($element->hasChildNodes()) {
143 $element->removeChild($element->lastChild);
144 }
145 $element->appendChild($contentNode);
146 return $element;
147}
148
149function appendInnerXML($DOM, $element, $content) {
150 $contentNode = importXML($DOM, $content);
151 $element->appendChild($contentNode);
152 return $element;
153}
154*/
155
156function join_paths(...$paths) {
157 return preg_replace('~[/\\\\]+~', DIRECTORY_SEPARATOR, implode(DIRECTORY_SEPARATOR, $paths));
158}
capture($curl, $line)
Definition: grima-util.php:62
getenvWithFileFallbackAndDefault( $env_name, $default=false)
Definition: grima-util.php:52
importXML( $DOM, $xmlString)
Definition: grima-util.php:14
arrayToXml($array, &$xml)
Definition: grima-util.php:77
pauseAndAsk()
Definition: grima-util.php:32
bib_get($mms_id)
Definition: grima-util.php:98
do_redirect($url)
Definition: grima-util.php:45
appendInnerXML( $elt, $xmlString)
Definition: grima-util.php:20
setInnerXML( $elt, $xmlString)
Definition: grima-util.php:26
join_paths(... $paths)
Definition: grima-util.php:156
XMLtoWeb( $DOM)
Definition: grima-util.php:7
mfhd_get($mms_id, $holding_id)
Definition: grima-util.php:115