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 
7 function XMLtoWeb( $DOM ) {
8  header('Content-Type: text/plain');
9  $DOM->preserveWhiteSpace = false;
10  $DOM->formatOutput = true;
11  print $DOM->saveXML();
12 }
13 
14 function importXML( $DOM, $xmlString ) {
15  $frag = $DOM->createDocumentFragment();
16  $frag->appendXML($xmlString);
17  return $frag;
18 }
19 
20 function appendInnerXML( $elt, $xmlString ) {
21  $DOM = $elt->ownerDocument;
22  $frag = importXML( $DOM, $xmlString );
23  $elt->appendChild( $frag );
24 }
25 
26 function setInnerXML( $elt, $xmlString ) {
27  while( $elt->hasChildNodes() )
28  $elt->removeChild( $elt->lastChild );
29  appendInnerXML( $elt, $xmlString );
30 }
31 
32 function 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 
45 function do_redirect($url) {
46  if(!headers_sent()) header("Location: $url");
47  $url_html = htmlspecialchars($url);
48 echo "<!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 
52 function 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 
77 function 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 
98 function 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 
115 function 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 /*
133 function importXML($DOM, $content) {
134  $DOMInnerXML = new DOMDocument();
135  $DOMInnerXML->loadXML($content);
136  $contentNode = $DOM->importNode($DOMInnerXML->documentElement, true);
137  return $contentNode;
138 }
139 
140 function 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 
149 function appendInnerXML($DOM, $element, $content) {
150  $contentNode = importXML($DOM, $content);
151  $element->appendChild($contentNode);
152  return $element;
153 }
154 */
155 
156 function join_paths(...$paths) {
157  return preg_replace('~[/\\\\]+~', DIRECTORY_SEPARATOR, implode(DIRECTORY_SEPARATOR, $paths));
158 }
XMLtoWeb( $DOM)
Definition: grima-util.php:7
$key
Definition: encrypt.php:4
bib_get($mms_id)
Definition: grima-util.php:98
appendInnerXML( $elt, $xmlString)
Definition: grima-util.php:20
setInnerXML( $elt, $xmlString)
Definition: grima-util.php:26
getenvWithFileFallbackAndDefault( $env_name, $default=false)
Definition: grima-util.php:52
do_redirect($url)
Definition: grima-util.php:45
pauseAndAsk()
Definition: grima-util.php:32
importXML( $DOM, $xmlString)
Definition: grima-util.php:14
join_paths(... $paths)
Definition: grima-util.php:156
mfhd_get($mms_id, $holding_id)
Definition: grima-util.php:115
capture($curl, $line)
Definition: grima-util.php:62
arrayToXml($array, &$xml)
Definition: grima-util.php:77