示例#1
0
 /**
  * @throws BadData
  * @return mixed
  */
 public function parse()
 {
     $record = $this->createRecord();
     // While this recipe is still open
     while ($this->tagName != $this->xmlReader->name || \XMLReader::END_ELEMENT != $this->xmlReader->nodeType) {
         if (!@$this->xmlReader->read()) {
             throw new BadData('Surprise end of file! Missing close tag <' . $this->tagName . '>');
         }
         if ($this->xmlReader->isEmptyElement) {
             continue;
         }
         if (\XMLReader::ELEMENT == $this->xmlReader->nodeType) {
             if (isset($this->simpleProperties[$this->xmlReader->name])) {
                 $method = $this->simpleProperties[$this->xmlReader->name];
                 // Call the setter method
                 $record->{$method}($this->xmlReader->readString());
             } elseif (isset($this->complexProperties[$this->xmlReader->name])) {
                 $this->setComplexProperty($record);
             } elseif (isset($this->complexPropertySets[$this->xmlReader->name])) {
                 $this->setComplexPropertySet($record);
             } else {
                 $this->otherElementEncountered($record);
             }
         }
     }
     return $record;
 }
示例#2
0
 /**
  * @param  \XMLReader $xml an XML document to be transformed to GitHub Markdown
  * @return String
  */
 protected function processXml($xml)
 {
     $output = '';
     // states
     $inLink = false;
     /**
      * Mapping of elements which just append additional markup to the text
      */
     $appendersMap = [self::NODE_HR => '----', self::NODE_BR => "\n", self::NODE_H1 => 'h1. ', self::NODE_H2 => 'h2. ', self::NODE_H3 => 'h3. ', self::NODE_H4 => 'h4. ', self::NODE_H5 => 'h5. ', self::NODE_H6 => 'h6. ', self::NODE_BLOCKQUOTE => 'bq. '];
     /**
      * Mapping of elements which wrap text with additional markup
      */
     $wrappersMap = [self::NODE_EMPHASIZED => '_', self::NODE_STRONG => '*'];
     while ($xml->read()) {
         // if it's a beginning of new paragraph just continue
         if ($xml->nodeType === \XMLReader::ELEMENT && $xml->name === self::NODE_PARAGRAPH) {
             continue;
         }
         // if it's an ending of a paragraph add newlines
         if ($xml->nodeType === \XMLReader::END_ELEMENT && $xml->name === self::NODE_PARAGRAPH) {
             $output .= "\n\n";
         }
         // take care of wrapping nodes
         if (in_array($xml->name, array_keys($wrappersMap))) {
             $output .= $wrappersMap[$xml->name];
         }
         // take care of nodes which just append things to their text
         if (in_array($xml->name, array_keys($appendersMap)) && $xml->nodeType !== \XMLReader::END_ELEMENT) {
             $output .= $appendersMap[$xml->name];
         }
         // links
         if ($xml->name === self::NODE_A && $xml->nodeType !== \XMLReader::END_ELEMENT) {
             $output .= '[';
             $inLink = true;
         }
         if ($xml->name === self::NODE_A && $xml->nodeType === \XMLReader::END_ELEMENT) {
             $output .= $xml->getAttribute('href') . ']';
             $inLink = false;
         }
         // just add the text
         if ($xml->nodeType === \XMLReader::TEXT) {
             $text = $xml->readString();
             if ($inLink && !empty($text)) {
                 $output .= $text . '|';
             } else {
                 $output .= $text;
             }
         }
     }
     return trim($output);
 }
 /**
  * Scans conntent for cachedUntil and error
  *   
  * @param string $content
  * @param int $errorCode
  * @param string $errorText
  */
 protected function scanContent($content, &$errorCode, &$errorText)
 {
     $this->cachedUntil = null;
     $reader = new XMLReader();
     $reader->xml($content);
     while ($reader->read()) {
         if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == "error") {
             // got an error
             $errorText = $reader->readString();
             $errorCode = intval($reader->getAttribute('code'));
             if ($reader->next("cachedUntil")) {
                 $this->cachedUntil = $reader->readString();
             }
         } else {
             if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == "result") {
                 // no errors, we need to read the cache time though
                 if ($reader->next("cachedUntil")) {
                     $this->cachedUntil = $reader->readString();
                 }
             }
         }
     }
     $reader->close();
 }
示例#4
0
 public function parse(\XMLReader $xmlReader, $startingDepth = 0, $parseOne = false)
 {
     if ($this->callback !== null) {
         $node = new Node();
         $node->name = $xmlReader->name;
         $node->depth = $xmlReader->depth;
         $node->text = $xmlReader->readString();
         if ($xmlReader->hasAttributes && $xmlReader->moveToFirstAttribute()) {
             do {
                 $node->attributes[$xmlReader->name] = $xmlReader->value;
             } while ($xmlReader->moveToNextAttribute());
             $xmlReader->moveToElement();
         }
         $callback = $this->callback;
         $callback($this->processNode($node, $xmlReader));
     }
 }
 /**
  * {@inheritdoc}
  */
 public function next()
 {
     $this->valid = false;
     $style = null;
     $type = null;
     $columnIndex = null;
     $rowBuilder = null;
     $currentKey = 0;
     while ($this->xml->read()) {
         if (\XMLReader::ELEMENT === $this->xml->nodeType) {
             switch ($this->xml->name) {
                 case 'row':
                     $currentKey = (int) $this->xml->getAttribute('r');
                     $rowBuilder = $this->rowBuilderFactory->create();
                     break;
                 case 'c':
                     $columnIndex = $this->columnIndexTransformer->transform($this->xml->getAttribute('r'));
                     $style = $this->getValue($this->xml->getAttribute('s'));
                     $type = $this->getValue($this->xml->getAttribute('t'));
                     break;
                 case 'v':
                     $rowBuilder->addValue($columnIndex, $this->valueTransformer->transform($this->xml->readString(), $type, $style));
                     break;
                 case 'is':
                     $rowBuilder->addValue($columnIndex, $this->xml->readString());
                     break;
             }
         } elseif (\XMLReader::END_ELEMENT === $this->xml->nodeType) {
             switch ($this->xml->name) {
                 case 'row':
                     $currentValue = $rowBuilder->getData();
                     if (count($currentValue)) {
                         $this->currentKey = $currentKey;
                         $this->currentValue = $currentValue;
                         $this->valid = true;
                         return;
                     }
                     break;
                 case 'sheetData':
                     break 2;
             }
         }
     }
 }
示例#6
0
 /**
  * Tests JFeedParser::moveToNextElement()
  *
  * @return  void
  *
  * @since   12.3
  */
 public function testMoveToNextElement()
 {
     // Set the XML for the internal reader and move the stream to the <root> element.
     $this->_reader->Xml('<root><node test="first"><child>foobar</child></node><node test="second"></node></root>');
     $this->_reader->next('root');
     // Ensure that the current node is "root".
     $this->assertEquals('root', $this->_reader->name);
     // Move to the next element, which should be <node test="first">.
     TestReflection::invoke($this->_instance, 'moveToNextElement');
     $this->assertEquals('node', $this->_reader->name);
     $this->assertEquals('first', $this->_reader->getAttribute('test'));
     // Move to the next element, which should be <child> with a data value of "foobar".
     TestReflection::invoke($this->_instance, 'moveToNextElement');
     $this->assertEquals('child', $this->_reader->name);
     $this->assertEquals('foobar', $this->_reader->readString());
     // Move to the next element, which should be <node test="second">.
     TestReflection::invoke($this->_instance, 'moveToNextElement');
     $this->assertEquals('node', $this->_reader->name);
     $this->assertEquals('second', $this->_reader->getAttribute('test'));
     // Move to the next element, which should be <node test="second">.
     $return = TestReflection::invoke($this->_instance, 'moveToNextElement');
     $this->assertFalse($return);
 }
示例#7
0
文件: Link.php 项目: servandserv/sf
 /**
  * Чтение элементов из \XMLReader
  * @param \XMLReader $xr
  */
 public function elementsFromXmlReader(\XMLReader &$xr)
 {
     switch ($xr->localName) {
         case "autouid":
             $this->setAutouid($xr->readString());
             break;
         case "ID":
             $this->setID($xr->readString());
             break;
         case "source":
             $this->setSource($xr->readString());
             break;
         case "destination":
             $this->setDestination($xr->readString());
             break;
         case "dtStart":
             $this->setDtStart($xr->readString());
             break;
         case "dtEnd":
             $this->setDtEnd($xr->readString());
             break;
         case "type":
             $this->setType($xr->readString());
             break;
         case "comments":
             $this->setComments($xr->readString());
             break;
         case "Ref":
             $Ref = \Adaptor_Bindings::create("\\Archive\\Port\\Adaptor\\Data\\Archive\\Refs\\Ref");
             $this->setRef($Ref->fromXmlReader($xr));
             break;
         default:
             parent::elementsFromXmlReader($xr);
     }
 }
示例#8
0
文件: Area.php 项目: servandserv/sf
 /**
  * Чтение элементов из \XMLReader
  * @param \XMLReader $xr
  */
 public function elementsFromXmlReader(\XMLReader &$xr)
 {
     switch ($xr->localName) {
         case "x":
             $this->setX($xr->readString());
             break;
         case "y":
             $this->setY($xr->readString());
             break;
         case "width":
             $this->setWidth($xr->readString());
             break;
         case "height":
             $this->setHeight($xr->readString());
             break;
         case "Ref":
             $Ref = \Adaptor_Bindings::create("\\Archive\\Port\\Adaptor\\Data\\Archive\\Refs\\Ref");
             $this->setRef($Ref->fromXmlReader($xr));
             break;
         default:
             parent::elementsFromXmlReader($xr);
     }
 }
 while ($reader->read()) {
     if ($reader->nodeType == XMLREADER::ELEMENT && array_search($reader->name, $field_keys)) {
         $nodeName = $reader->name;
         $readThrough[] = $nodeName;
         if ($nodeName === "Author") {
             $authorIndex++;
         }
     }
     if ($reader->nodeType == XMLREADER::END_ELEMENT && array_search($reader->name, $field_keys)) {
         array_pop($readThrough);
         $nodeName = $readThrough[count($readThrough) - 1];
     }
     if ($reader->nodeType == XMLREADER::ELEMENT && count($readThrough) > 0) {
         if (in_array($reader->name, $fieldsArray[$nodeName])) {
             if ($nodeName === "PubDate") {
                 $record_data["pubDate"][$reader->name] = $reader->readString();
             }
             if ($nodeName === "DateCreated") {
                 $record_data["creationDate"][$reader->name] = $reader->readString();
             }
             if ($nodeName === "Author") {
                 $record_data["authorList"][$authorIndex][$reader->name] = $reader->readString();
             }
             if ($nodeName === "ArticleIdList") {
                 if ($reader->name === "ArticleId") {
                     $record_data["idList"][$reader->getAttribute("IdType")] = $reader->readString();
                 }
             }
             if (in_array($reader->name, array_keys($recordFields))) {
                 $record_data[$recordFields[$reader->name]] = $reader->readString();
             }
示例#10
0
 public function getRecentSMS()
 {
     $html = '';
     $json = '';
     $returnJSON = array();
     $returnJSON['SMS'] = array();
     // $params = $this->getBaseParams();
     $session = $this->getCurlGet($this->gvBaseURL . 'inbox/recent/sms?auth=' . $this->authToken);
     $result = curl_exec($session);
     // echo $result;
     $xml = new XMLReader();
     $xml->xml($result);
     $xml->read();
     if ($xml->name == 'response') {
         $xml->read();
         $xml->next('json');
         if ($xml->name == 'json') {
             $json = $xml->readString();
             $returnJSON['SMS']['data'] = json_decode($json, true);
         }
         $xml->next('html');
         // echo "name: " . $xml->name . " end";
         if ($xml->name == 'html') {
             // echo 'html: ' > $xml->readString();
             // echo "in HTML";
             // echo $xml->readString();
             $html = $xml->readString();
         }
     }
     $returnJSON['SMS']['data']['messagesByNumber'] = array();
     if (strlen($html) > 0) {
         $dom = new DOMDocument();
         // $smsData = array('conversations'=>array());
         if (@$dom->loadHTML($html)) {
             // echo $dom->saveHTML();
             $xpath = new DOMXPath($dom);
             $conversations = $xpath->query('//div[contains(@class, " gc-message ")]');
             $convo = array();
             // for ($citer = 0; $citer < $conversations->length; $citer++) {//$conversations as $conversation) {
             for ($citer = $conversations->length - 1; $citer >= 0; $citer--) {
                 $conversation = $conversations->item($citer);
                 // echo $entry->textContent . '<br>';
                 // echo $conversation->textContent;
                 $conversationID = $conversation->attributes->getNamedItem('id')->value;
                 $contactInfo = $xpath->query('div//a[contains(@class, "gc-message-name-link")]', $conversation);
                 $contactName = $contactInfo->item(0)->textContent;
                 $returnJSON['SMS']['data']['messages'][$conversationID]['contactName'] = $contactName;
                 $contactNumber = $returnJSON['SMS']['data']['messages'][$conversationID]['phoneNumber'];
                 if (!$returnJSON['SMS']['data']['messagesByNumber'][$contactNumber]) {
                     $returnJSON['SMS']['data']['messagesByNumber'][$contactNumber] = array();
                     $returnJSON['SMS']['data']['messagesByNumber'][$contactNumber]['meta'] = array('contactName' => $contactName, 'displayNumber' => $returnJSON['SMS']['data']['messages'][$conversationID]['displayNumber']);
                     $returnJSON['SMS']['data']['messagesByNumber'][$contactNumber]['messages'] = array();
                 }
                 $msgJSON = array('from' => 'TIME_CHANGE', 'text' => $returnJSON['SMS']['data']['messages'][$conversationID]['displayStartDateTime'], 'time' => '');
                 array_push($returnJSON['SMS']['data']['messagesByNumber'][$contactNumber]['messages'], $msgJSON);
                 $messages = $xpath->query('div//div[contains(@class, "gc-message-sms-row")]', $conversation);
                 for ($miter = 0; $miter < $messages->length; $miter++) {
                     // ($messages as $message) {
                     $message = $messages->item($miter);
                     $from = trim($message->childNodes->item(1)->textContent);
                     $text = $message->childNodes->item(3)->textContent;
                     $time = trim($message->childNodes->item(5)->textContent);
                     $messageJSON = array('from' => $from, 'text' => $text, 'time' => $time);
                     array_push($convo, $messageJSON);
                     array_push($returnJSON['SMS']['data']['messagesByNumber'][$contactNumber]['messages'], $messageJSON);
                     // echo "Message: " . $from . " " . $text . " " . $time . "<br>";
                 }
                 // echo "<br><br>";
                 // array_push($smsData['conversations'], $convo);
                 // echo $conversationID;
                 $returnJSON['SMS']['data']['messages'][$conversationID]['messages'] = $convo;
                 $convo = array();
             }
             // $returnJSON['SMS']['data'] = $smsData;
         }
     }
     return json_encode($returnJSON);
 }
 /**
  * Function for parsing XML file of repository
  * 
  * This function parses XML file and updates database used for searching. 
  * @param string last modified date
  * @param string URL of OL repository
  */
 function parse($date, $urlforrepo, $baseurl)
 {
     //create object of class XMLReader for reading XML file
     $xml = new XMLReader();
     //Parsing may take a few minutes because OL repository is quite large.
     @set_time_limit(0);
     global $db;
     //open XML file
     $xml->open($urlforrepo . "&from=" . $date . "T00:00:00Z");
     //$xml->open("oai2.php.xml");
     $members = array();
     //main array which will contain all entries of repo.
     $flag = false;
     $resumption = 'dummy';
     //resumption token of repository
     //parse while resumption token is not null.
     while ($resumption != '') {
         if ($resumption == 'dummy') {
             $xml->open($urlforrepo . "&from=" . $date . "T00:00:00Z");
             $resumption = '';
         } else {
             $xml->open($baseurl . 'verb=ListRecords&resumptionToken=' . $resumption);
         }
         //main logic starts
         while ($xml->read()) {
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'error') {
                 //error in parsing
                 $resumption = '';
             }
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'record') {
                 //starting of a new record
                 $member = array();
                 $flag = false;
                 //$member['uni']='';
             }
             //starting tag of identifier
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'identifier' && !isset($member['identifier'])) {
                 $member['identifier'] = addslashes(trim($xml->readString()));
             }
             //starting tag of datestamp
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'datestamp' && !isset($member['datestamp'])) {
                 $member['datestamp'] = addslashes(trim($xml->readString()));
             }
             //starting tag of entry
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'entry' && !isset($member['entry'])) {
                 $member['entry'] = trim($xml->readString());
             }
             //starting tag of catalog
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'catalog' && !isset($member['catalog'])) {
                 $member['catalog'] = addslashes(trim($xml->readString()));
             }
             //starting tag of description
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'description' && !isset($member['description'])) {
                 $tag1 = '';
                 while ($tag1 != 'title') {
                     $xml->read();
                     $tag1 = $xml->localName;
                 }
                 $member['title'] = addslashes(trim($xml->readString()));
                 while ($tag1 != 'description') {
                     $xml->read();
                     $tag1 = $xml->localName;
                 }
                 $member['description'] = addslashes(trim($xml->readString()));
                 $member['keywords'] = '';
             }
             //starting tag of keyword
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'keyword' && !$flag) {
                 $member['keywords'] .= addslashes(trim($xml->readString())) . ", ";
             }
             if ($xml->nodeType == XMLReader::END_ELEMENT && $xml->localName == 'general') {
                 $flag = true;
                 rtrim($member['keywords']);
                 $member['keywords'] = substr($member['keywords'], 0, strlen($member['keywords']) - 2);
             }
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'manifestation') {
                 $data = $xml->readString();
                 $tag = '';
                 if (strpos($data, 'web site') > 0) {
                     //echo 'case 1<br/>';
                     while ($tag != 'location') {
                         $xml->read();
                         $tag = $xml->localName;
                     }
                     $member['website'] = trim($xml->readString());
                 } else {
                     if (strpos($data, 'Common Cartridge') > 0) {
                         //echo 'case 2<br/>';
                         while ($tag != 'location') {
                             $xml->read();
                             $tag = $xml->localName;
                         }
                         $member['common'] = trim($xml->readString());
                     } else {
                         if (strpos($data, 'Content Package') > 0) {
                             //echo 'case 3<br/>';
                             while ($tag != 'location') {
                                 $xml->read();
                                 $tag = $xml->localName;
                             }
                             $member['package'] = trim($xml->readString());
                         }
                     }
                 }
             }
             //record ends insert record to the main array
             if ($xml->nodeType == XMLReader::END_ELEMENT && $xml->localName == 'record') {
                 $members[] = $member;
                 if ($resumption == 'dummy') {
                     $resumption = '';
                 }
             }
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'resumptionToken') {
                 $resumption = $xml->readString();
             }
         }
     }
     $res = '';
     //insert or update records in database
     if (count($members) > 0) {
         //define('AT_INCLUDE_PATH', '../../include/');
         //require (AT_INCLUDE_PATH.'vitals.inc.php');
         $qry = "SELECT * FROM " . TABLE_PREFIX . "ol_search_open_learn";
         $result = mysql_query($qry, $db);
         //index starts from last number of record in database + 1
         $index = mysql_num_rows($result) + 1;
         foreach ($members as $member) {
             $qry = "SELECT * FROM " . TABLE_PREFIX . "ol_search_open_learn where ENTRY='" . $member['entry'] . "' ";
             //try to get record from database having same entry
             $result = mysql_query($qry, $db);
             //if record exists in database then update it else insert it in database
             if (mysql_num_rows($result) > 0) {
                 $qry = "UPDATE " . TABLE_PREFIX . "ol_search_open_learn SET DATESTAMP='" . $member['datestamp'] . "' , CATALOG='" . $member['catalog'] . "' , TITLE='" . $member['title'] . "' , DESCRIPTION='" . $member['description'] . "' , \tKEYWORDS='" . $member['keywords'] . "' ," . " WEBSITE='" . $member['website'] . "' , CC='" . $member['common'] . "' , CP='" . $member['package'] . "' WHERE ENTRY='" . $member['entry'] . "'";
             } else {
                 $qry = 'INSERT INTO ' . TABLE_PREFIX . 'ol_search_open_learn VALUES (' . $index . ',"' . $member['identifier'] . '","' . $member['datestamp'] . '","' . $member['catalog'] . '","' . $member['entry'] . '","' . $member['title'] . '","' . $member['description'] . '","' . $member['keywords'] . '","' . $member['website'] . '","' . $member['common'] . '","' . $member['package'] . '")';
                 $index++;
             }
             $tmp = "Success";
             if (mysql_query($qry, $db)) {
                 $tmp = "Success";
             } else {
                 echo $qry;
                 exit;
                 $tmp = "Failed";
             }
         }
     }
     define('AT_INCLUDE_PATH', '../../include/');
     require_once AT_INCLUDE_PATH . '/classes/Message/Message.class.php';
     global $savant;
     //feedback messsage for admin
     $msg = new Message($savant);
     //change date of last updation
     if ($tmp != "Failed") {
         $qry = "UPDATE " . TABLE_PREFIX . "config SET value=CURDATE() WHERE name='ol_last_updation'";
         $feedback = array('OL_DB_UPDATED');
         $msg->addFeedback($feedback);
         mysql_query($qry, $db);
         $qry = "UPDATE " . TABLE_PREFIX . "config SET value='" . time() . "' WHERE name='ol_last_time'";
         mysql_query($qry, $db);
     } else {
         $msg->addError('OL_DB_NOT_UPDATED');
     }
 }
示例#12
0
 /**
 * * @expectedException PHPUnit_Framework_Error
 * XMLReader::read(): I/O warning : failed to load
 external entity "file:///C:/Christopher_Spaeth/code/xml_files_windows/xxe.txt"
 */
 public function testXXE_setParserProperty_SUBST_ENTITIES_disable_entity_loader()
 {
     $xml = new XMLReader();
     // use setParserProperty
     $xml->open("../../xml_files_windows/xxe/xxe.xml");
     $xml->setParserProperty(XMLReader::SUBST_ENTITIES, true);
     libxml_disable_entity_loader(true);
     while ($xml->read()) {
         if ($xml->nodeType == XMLReader::ELEMENT && $xml->name == 'data') {
             $node = $xml->name;
             $content = $xml->readString();
         }
     }
     $content = preg_replace('/\\s+/', '', $content);
     $this->assertEquals("", $content);
 }
示例#13
0
 /**
  * Чтение элементов из \XMLReader
  * @param \XMLReader $xr
  */
 public function elementsFromXmlReader(\XMLReader &$xr)
 {
     switch ($xr->localName) {
         case "id":
             $this->setId($xr->readString());
             break;
         case "userId":
             $this->setUserId($xr->readString());
             break;
         case "code":
             $this->setCode($xr->readString());
             break;
         case "word":
             $this->setWord($xr->readString());
             break;
         case "cAttempts":
             $this->setCAttempts($xr->readString());
             break;
         case "tAttempts":
             $this->setTAttempts($xr->readString());
             break;
         case "fAttempts":
             $this->setFAttempts($xr->readString());
             break;
         case "status":
             $this->setStatus($xr->readString());
             break;
         case "lastmod":
             $this->setLastmod($xr->readString());
             break;
         default:
             parent::elementsFromXmlReader($xr);
     }
 }
示例#14
0
 /**
  * Чтение элементов из \XMLReader
  * @param \XMLReader $xr
  */
 public function elementsFromXmlReader(\XMLReader &$xr)
 {
     switch ($xr->localName) {
         case "id":
             $this->setId($xr->readString());
             break;
         case "firstName":
             $this->setFirstName($xr->readString());
             break;
         case "email":
             $this->setEmail($xr->readString());
             break;
         case "gender":
             $this->setGender($xr->readString());
             break;
         case "lastName":
             $this->setLastName($xr->readString());
             break;
         case "link":
             $this->setLink($xr->readString());
             break;
         case "locale":
             $this->setLocale($xr->readString());
             break;
         case "name":
             $this->setName($xr->readString());
             break;
         case "timezone":
             $this->setTimezone($xr->readString());
             break;
         case "updatedTime":
             $this->setUpdatedTime($xr->readString());
             break;
         case "verified":
             $this->setVerified($xr->readString());
             break;
         default:
             parent::elementsFromXmlReader($xr);
     }
 }
 /**
  * Function for parsing XML file of repository
  * 
  * This function parses XML file and creates initial database used for searching. 
  * It may work on both online and offline modes. If internet connection is not
  * available then XML file attached in the module is used.
  *
  */
 function parse()
 {
     //create object of class XMLReader for reading XML file
     $xml = new XMLReader();
     //Parsing may take a few minutes because OL repository is quite large.
     @set_time_limit(0);
     global $db;
     $connS = false;
     //Find internet connection's status
     $conn = checkConnection();
     $op = '';
     if ($conn) {
         //internet connection is available so we can directly parse using URL
         $connS = true;
         $xml->open("http://openlearn.open.ac.uk/local/oai/oai2.php?verb=ListRecords&metadataPrefix=oai_ilox");
         $op = '1';
     } else {
         $connS = false;
         //internet connection is unavailable so we need to use repository's offline version
         $xml->open("../../ol_search_open_learn/oai2.php.xml");
         $op = '2';
     }
     $members = array();
     //main array which will contain all entries of repo.
     $flag = false;
     $resumption = 'dummy';
     //resumption token of repository
     //parse while resumption token is not null.
     while ($resumption != '') {
         if ($resumption == 'dummy' && $connS) {
             //if this is first iteration then use following URL
             $xml->open('http://openlearn.open.ac.uk/local/oai/oai2.php?verb=ListRecords&metadataPrefix=oai_ilox');
             $resumption = '';
         } else {
             if ($connS) {
                 //if this is not first URL then use resumption token of last page
                 $xml->open('http://openlearn.open.ac.uk/local/oai/oai2.php?verb=ListRecords&resumptionToken=' . $resumption);
             }
         }
         //main logic of parsing
         while ($xml->read()) {
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'record') {
                 //starting of a new record
                 $member = array();
                 $flag = false;
                 //$member['uni']='';
             }
             //starting tag of identifier
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'identifier' && !isset($member['identifier'])) {
                 $member['identifier'] = addslashes(trim($xml->readString()));
             }
             //starting tag of datestamp
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'datestamp' && !isset($member['datestamp'])) {
                 $member['datestamp'] = addslashes(trim($xml->readString()));
             }
             //starting tag of entry
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'entry' && !isset($member['entry'])) {
                 $member['entry'] = trim($xml->readString());
             }
             //starting tag of catalog
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'catalog' && !isset($member['catalog'])) {
                 $member['catalog'] = addslashes(trim($xml->readString()));
             }
             //starting tag of description
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'description' && !isset($member['description'])) {
                 $tag1 = '';
                 while ($tag1 != 'title') {
                     $xml->read();
                     $tag1 = $xml->localName;
                 }
                 $member['title'] = addslashes(trim($xml->readString()));
                 while ($tag1 != 'description') {
                     $xml->read();
                     $tag1 = $xml->localName;
                 }
                 $member['description'] = addslashes(trim($xml->readString()));
                 $member['keywords'] = '';
             }
             //starting tag of keywords
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'keyword' && !$flag) {
                 $member['keywords'] .= addslashes(trim($xml->readString())) . ", ";
             }
             if ($xml->nodeType == XMLReader::END_ELEMENT && $xml->localName == 'general') {
                 $flag = true;
                 rtrim($member['keywords']);
                 $member['keywords'] = substr($member['keywords'], 0, strlen($member['keywords']) - 2);
             }
             if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'manifestation') {
                 $data = $xml->readString();
                 $tag = '';
                 if (strpos($data, 'web site') > 0) {
                     //echo 'case 1<br/>';
                     while ($tag != 'location') {
                         $xml->read();
                         $tag = $xml->localName;
                     }
                     $member['website'] = trim($xml->readString());
                 } else {
                     if (strpos($data, 'Common Cartridge') > 0) {
                         //echo 'case 2<br/>';
                         while ($tag != 'location') {
                             $xml->read();
                             $tag = $xml->localName;
                         }
                         $member['common'] = trim($xml->readString());
                     } else {
                         if (strpos($data, 'Content Package') > 0) {
                             //echo 'case 3<br/>';
                             while ($tag != 'location') {
                                 $xml->read();
                                 $tag = $xml->localName;
                             }
                             $member['package'] = trim($xml->readString());
                         }
                     }
                 }
             }
             //record ends insert record to the main array
             if ($xml->nodeType == XMLReader::END_ELEMENT && $xml->localName == 'record') {
                 $members[] = $member;
             }
             //read resumption token
             if ($connS && $xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'resumptionToken') {
                 $resumption = $xml->readString();
             }
         }
         if (!$connS) {
             //if in offline mode then only one iteration is needed
             break;
         }
     }
     $res = '';
     $index = 1;
     //enter records in database
     if (count($members) > 0) {
         foreach ($members as $member) {
             $qry = 'INSERT INTO ' . TABLE_PREFIX . 'ol_search_open_learn VALUES (' . $index . ',"' . $member['identifier'] . '","' . $member['datestamp'] . '","' . $member['catalog'] . '","' . $member['entry'] . '","' . $member['title'] . '","' . $member['description'] . '","' . $member['keywords'] . '","' . $member['website'] . '","' . $member['common'] . '","' . $member['package'] . '")';
             $index++;
             if (mysql_query($qry, $db)) {
                 $tmp = "Success";
             } else {
                 $tmp = "Failed";
             }
         }
     }
     //enter date when database last updated in config table which will be used by admin later on
     if ($connS) {
         //online mode
         $qry = "UPDATE " . TABLE_PREFIX . "config SET value=CURDATE() WHERE name='ol_last_updation'";
     } else {
         //offline mode
         $qry = "UPDATE " . TABLE_PREFIX . "config SET value='2011-06-28' WHERE name='ol_last_updation'";
     }
     mysql_query($qry, $db);
     //insert current time of installation in database
     $qry = "INSERT INTO " . TABLE_PREFIX . "config VALUES ('ol_last_time','" . time() . "')";
     mysql_query($qry, $db);
 }
示例#16
0
function odt2html($odt_file, $xml_string = NULL)
{
    global $_ophir_odt_import_conf;
    $xml = new XMLReader();
    if ($xml_string === NULL) {
        if (@$xml->open('zip://' . $odt_file . '#content.xml') === FALSE) {
            ophir_error("Unable to read file contents.");
            return false;
        }
    } else {
        if (@$xml->xml($xml_string) === FALSE) {
            ophir_error("Invalid file contents.");
            return false;
        }
    }
    //Now, convert the xml from a string to an
    $html = "";
    $elements_tree = array();
    static $styles = array("Quotations" => array("tags" => array("blockquote")));
    $footnotes = "";
    $translation_table = array();
    $translation_table['draw:frame'] = 'div class="odt-frame"';
    if ($_ophir_odt_import_conf["features"]["list"] === 0) {
        $translation_table["text:list"] = FALSE;
    } elseif ($_ophir_odt_import_conf["features"]["list"] === 2) {
        $translation_table["text:list"] = "ul";
        $translation_table["text:list-item"] = "li";
    }
    if ($_ophir_odt_import_conf["features"]["table"] === 0) {
        $translation_table["table:table"] = FALSE;
    } elseif ($_ophir_odt_import_conf["features"]["table"] === 2) {
        $translation_table["table:table"] = "table cellspacing=0 cellpadding=0 border=1";
        $translation_table["table:table-row"] = "tr";
        $translation_table["table:table-cell"] = "td";
    }
    if ($_ophir_odt_import_conf["features"]["table of contents"] === 0) {
        $translation_table['text:table-of-content'] = FALSE;
    } elseif ($_ophir_odt_import_conf["features"]["table of contents"] === 2) {
        $translation_table['text:table-of-content'] = 'div class="odt-table-of-contents"';
    }
    $translation_table['text:line-break'] = 'br';
    while ($xml->read()) {
        $opened_tags = array();
        //This array will contain the HTML tags opened in every iteration
        if ($xml->nodeType === XMLReader::END_ELEMENT) {
            //Handle a closing tag
            if (empty($elements_tree)) {
                continue;
            }
            do {
                $element = array_pop($elements_tree);
                if ($element && $element["tags"]) {
                    //Close opened tags
                    $element["tags"] = array_reverse($element["tags"]);
                    foreach ($element["tags"] as $HTML_tag) {
                        //$html.= "<font style='color:red' title='Closing $HTML_tag, from $element[name]. Current element is " .($xml->name). "'>©</font>";
                        $HTML_tag = current(explode(" ", $HTML_tag));
                        $html .= "</" . $HTML_tag . ">";
                    }
                }
            } while ($xml->name !== $element["name"] && $element);
            //Close every opened tags. This should also handle malformed XML files
            continue;
        } elseif (in_array($xml->nodeType, array(XMLReader::ELEMENT, XMLReader::TEXT, XMLReader::SIGNIFICANT_WHITESPACE))) {
            //Handle tags
            switch ($xml->name) {
                case "#text":
                    //Text
                    $html .= htmlspecialchars($xml->value);
                    break;
                case "text:h":
                    //Title
                    if ($_ophir_odt_import_conf["features"]["header"] === 0) {
                        $xml->next();
                        break;
                    } elseif ($_ophir_odt_import_conf["features"]["header"] === 1) {
                        break;
                    }
                    $n = $xml->getAttribute("text:outline-level");
                    if ($n > 6) {
                        $n = 6;
                    }
                    $opened_tags[] = "h{$n}";
                    $html .= "\n\n<h{$n}>";
                    break;
                case "text:p":
                    //Paragraph
                    //Just convert odf <text:p> to html <p>
                    $tags = @$styles[$xml->getAttribute("text:style-name")]["tags"];
                    if (!($tags && !in_array("blockquote", $tags))) {
                        // Do not print a <p> immediatly after or before a <blockquote>
                        $opened_tags[] = "p";
                        $html .= "\n<p>";
                    }
                    break;
                case "text:a":
                    if ($_ophir_odt_import_conf["features"]["link"] === 0) {
                        $xml->next();
                        break;
                    } elseif ($_ophir_odt_import_conf["features"]["link"] === 1) {
                        break;
                    }
                    $href = $xml->getAttribute("xlink:href");
                    $opened_tags[] = 'a';
                    $html .= '<a href="' . $href . '">';
                    break;
                case "draw:image":
                    if ($_ophir_odt_import_conf["features"]["image"] === 0) {
                        $xml->next();
                        break;
                    } elseif ($_ophir_odt_import_conf["features"]["image"] === 1) {
                        break;
                    }
                    $image_file = 'zip://' . $odt_file . '#' . $xml->getAttribute("xlink:href");
                    if (isset($_ophir_odt_import_conf["images_folder"]) && is_dir($_ophir_odt_import_conf["images_folder"])) {
                        if (ophir_is_image($image_file)) {
                            $image_to_save = $_ophir_odt_import_conf["images_folder"] . '/' . basename($image_file);
                            if (!($src = ophir_copy_file($image_file, $image_to_save))) {
                                ophir_error("Unable to move image file");
                                break;
                            }
                        } else {
                            ophir_error("Found invalid image file.");
                            break;
                        }
                    } else {
                        //ophir_error('Unable to save the image. Creating a data URL. Image saved directly in the body.F');
                        $src = 'data:image;base64,' . base64_encode(file_get_contents($image_file));
                    }
                    $html .= "\n<img src=\"{$src}\" />";
                    break;
                case "style:style":
                    $name = $xml->getAttribute("style:name");
                    $parent = $xml->getAttribute("style:parent-style-name");
                    if (array_key_exists($parent, $styles)) {
                        $styles[$name] = $styles[$parent];
                    }
                    //Not optimal
                    if ($xml->isEmptyElement) {
                        break;
                    }
                    //We can't handle that at the moment
                    while ($xml->read() && ($xml->name != "style:style" || $xml->nodeType != XMLReader::END_ELEMENT)) {
                        if ($xml->name == "style:text-properties") {
                            if ($xml->getAttribute("fo:font-style") == "italic") {
                                $styles[$name]["tags"][] = "em";
                            }
                            //Creates the style and add <em> to its tags
                            if ($xml->getAttribute("fo:font-weight") == "bold") {
                                $styles[$name]["tags"][] = "strong";
                            }
                            //Creates the style and add <strong> to its tags
                            if ($xml->getAttribute("style:text-underline-style") == "solid") {
                                $styles[$name]["tags"][] = "u";
                            }
                            //Creates the style and add <u> to its tags
                        }
                    }
                    break;
                case "text:note":
                    if ($_ophir_odt_import_conf["features"]["note"] === 0) {
                        $xml->next();
                        break;
                    } elseif ($_ophir_odt_import_conf["features"]["note"] === 1) {
                        break;
                    }
                    $note_id = $xml->getAttribute("text:id");
                    $note_name = "Note";
                    while ($xml->read() && ($xml->name != "text:note" || $xml->nodeType != XMLReader::END_ELEMENT)) {
                        if ($xml->name == "text:note-citation" && $xml->nodeType == XMLReader::ELEMENT) {
                            $note_name = $xml->readString();
                        } elseif ($xml->name == "text:note-body" && $xml->nodeType == XMLReader::ELEMENT) {
                            $note_content = odt2html($odt_file, $xml->readOuterXML());
                        }
                    }
                    $html .= "<sup><a href=\"#odt-footnote-{$note_id}\" class=\"odt-footnote-anchor\" name=\"anchor-odt-{$note_id}\">{$note_name}</a></sup>";
                    $footnotes .= "\n" . '<div class="odt-footnote" id="odt-footnote-' . $note_id . '" >';
                    $footnotes .= '<a class="footnote-name" href="#anchor-odt-' . $note_id . '">' . $note_name . ' .</a> ';
                    $footnotes .= $note_content;
                    $footnotes .= '</div>' . "\n";
                    break;
                case "office:annotation":
                    if ($_ophir_odt_import_conf["features"]["annotation"] === 0) {
                        $xml->next();
                        break;
                    } elseif ($_ophir_odt_import_conf["features"]["annotation"] === 1) {
                        break;
                    }
                    $annotation_id = isset($annotation_id) ? $annotation_id + 1 : 1;
                    $annotation_content = "";
                    $annotation_creator = "Anonymous";
                    $annotation_date = "";
                    do {
                        $xml->read();
                        if ($xml->name == "dc:creator" && $xml->nodeType == XMLReader::ELEMENT) {
                            $annotation_creator = $xml->readString();
                        } elseif ($xml->name == "dc:date" && $xml->nodeType == XMLReader::ELEMENT) {
                            $annotation_date = date("jS \\of F Y, H\\h i\\m", strtotime($xml->readString()));
                        } elseif ($xml->nodeType == XMLReader::ELEMENT) {
                            $annotation_content .= $xml->readString();
                            $xml->next();
                        }
                    } while (!($xml->name === "office:annotation" && $xml->nodeType === XMLReader::END_ELEMENT));
                    //End of the note
                    $html .= '<sup><a href="#odt-annotation-' . $annotation_id . '" name="anchor-odt-annotation-' . $annotation_id . '" title="Annotation (' . $annotation_creator . ')">(' . $annotation_id . ')</a></sup>';
                    $footnotes .= "\n" . '<div class="odt-annotation" id="odt-annotation-' . $annotation_id . '" >';
                    $footnotes .= '<a class="annotation-name" href="#anchor-odt-annotation-' . $annotation_id . '"> (' . $annotation_id . ')&nbsp;</a>';
                    $footnotes .= "\n" . '<b>' . $annotation_creator . ' (<i>' . $annotation_date . '</i>)</b> :';
                    $footnotes .= "\n" . '<div class="odt-annotation-content">' . $annotation_content . '</div>';
                    $footnotes .= '</div>' . "\n";
                    break;
                default:
                    if (array_key_exists($xml->name, $translation_table)) {
                        if ($translation_table[$xml->name] === FALSE) {
                            $xml->next();
                            break;
                        }
                        $tag = explode(" ", $translation_table[$xml->name], 1);
                        //$tag[0] is the tag name, other indexes are attributes
                        $opened_tags[] = $tag[0];
                        $html .= "\n<" . $translation_table[$xml->name] . ">";
                    }
            }
        }
        if ($xml->nodeType === XMLReader::ELEMENT && !$xml->isEmptyElement) {
            //Opening tag
            $current_element_style = $xml->getAttribute("text:style-name");
            if ($current_element_style && isset($styles[$current_element_style])) {
                //Styling tags management
                foreach ($styles[$current_element_style]["tags"] as $HTML_tag) {
                    $html .= "<" . $HTML_tag . ">";
                    $opened_tags[] = $HTML_tag;
                }
            }
            $elements_tree[] = array("name" => $xml->name, "tags" => $opened_tags);
        }
    }
    return $html . $footnotes;
}
示例#17
0
 /**
  * Чтение элементов из \XMLReader
  * @param \XMLReader $xr
  */
 public function elementsFromXmlReader(\XMLReader &$xr)
 {
     switch ($xr->localName) {
         case "src":
             $this->setSrc($xr->readString());
             break;
         case "width":
             $this->setWidth($xr->readString());
             break;
         case "height":
             $this->setHeight($xr->readString());
             break;
         case "size":
             $this->setSize($xr->readString());
             break;
         default:
             parent::elementsFromXmlReader($xr);
     }
 }
示例#18
0
 /**
  * Update the database.
  */
 protected function updateDatabase($strZipPath)
 {
     $arrError = array();
     // New archive
     $objZipArchive = new ZipArchiveCto();
     // Open archive
     if (($mixError = $objZipArchive->open($strZipPath, ZipArchiveCto::CREATE)) !== true) {
         throw new Exception($GLOBALS['TL_LANG']['MSC']['error'] . ": " . $objZipArchive->getErrorDescription($mixError));
     }
     // Read XML
     $xmlReader = new XMLReader();
     $xmlReader->XML($objZipArchive->getFromName("SQL/sql.xml"));
     // Init tmp vars
     $strTableName = "";
     $arrFieldList = array();
     $arrDefList = array();
     $strOptions = array();
     while ($xmlReader->read()) {
         switch ($xmlReader->nodeType) {
             case XMLReader::ELEMENT:
                 switch ($xmlReader->localName) {
                     case "table":
                         $strTableName = $xmlReader->getAttribute("name");
                         $arrFieldList = array();
                         $arrDefList = array();
                         break;
                     case "field":
                         $arrFieldList[$xmlReader->getAttribute("name")] = $xmlReader->readString();
                         break;
                     case "def":
                         $arrDefList[$xmlReader->getAttribute("name")] = $xmlReader->readString();
                         break;
                     case "option":
                         $strOptions = $xmlReader->readString();
                         break;
                 }
                 break;
             case XMLReader::END_ELEMENT:
                 switch ($xmlReader->localName) {
                     case "table":
                         $mixResult = $this->compareDatabase($strTableName, $arrFieldList, $arrDefList, $strOptions);
                         if ($mixResult !== true && is_array($mixResult)) {
                             $arrError = array_merge($arrError, $mixResult);
                         }
                         break;
                 }
                 break;
         }
     }
     if (count($arrError) == 0) {
         return true;
     } else {
         return $arrError;
     }
 }
示例#19
0
 /**
  * debug utility method
  *
  * @param XMLReader $reader
  * @param bool $return (optional) prints by default but can return string
  * @return string|null
  */
 public static function dump(XMLReader $reader, $return = FALSE)
 {
     $node = new self($reader);
     $nodeType = $reader->nodeType;
     $nodeName = $node->getNodeTypeName();
     $extra = '';
     if ($reader->nodeType === XMLReader::ELEMENT) {
         $extra = '<' . $reader->name . '> ';
         $extra .= sprintf("(isEmptyElement: %s) ", $reader->isEmptyElement ? 'Yes' : 'No');
     }
     if ($reader->nodeType === XMLReader::END_ELEMENT) {
         $extra = '</' . $reader->name . '> ';
     }
     if ($reader->nodeType === XMLReader::ATTRIBUTE) {
         $str = $reader->value;
         $len = strlen($str);
         if ($len > 20) {
             $str = substr($str, 0, 17) . '...';
         }
         $str = strtr($str, array("\n" => '\\n'));
         $extra = sprintf('%s = (%d) "%s" ', $reader->name, strlen($str), $str);
     }
     if ($reader->nodeType === XMLReader::TEXT || $reader->nodeType === XMLReader::WHITESPACE || $reader->nodeType === XMLReader::SIGNIFICANT_WHITESPACE) {
         $str = $reader->readString();
         $len = strlen($str);
         if ($len > 20) {
             $str = substr($str, 0, 17) . '...';
         }
         $str = strtr($str, array("\n" => '\\n'));
         $extra = sprintf('(%d) "%s" ', strlen($str), $str);
     }
     $label = sprintf("(#%d) %s %s", $nodeType, $nodeName, $extra);
     if ($return) {
         return $label;
     }
     printf("%s%s\n", str_repeat('  ', $reader->depth), $label);
     return null;
 }
 /**
  * Merges a parameter into the list of parameters read for the report. Updates existing
  * ones if there is a name match.
  * @todo Review the handling of $this->surveyParam
  */
 private function mergeParam($name, $reader = null)
 {
     // Some parts of the code assume the survey will be identified by a parameter called survey or survey_id.
     if ($name === 'survey_id' || $name === 'survey') {
         $this->surveyParam = $name;
     }
     $display = $reader === null ? '' : $reader->getAttribute('display');
     $type = $reader === null ? '' : $reader->getAttribute('datatype');
     $allow_buffer = $reader === null ? '' : $reader->getAttribute('allow_buffer');
     $fieldname = $reader === null ? '' : $reader->getAttribute('fieldname');
     $alias = $reader === null ? '' : $reader->getAttribute('alias');
     $emptyvalue = $reader === null ? '' : $reader->getAttribute('emptyvalue');
     $default = $reader === null ? null : $reader->getAttribute('default');
     $description = $reader === null ? '' : $reader->getAttribute('description');
     $query = $reader === null ? '' : $reader->getAttribute('query');
     $lookup_values = $reader === null ? '' : $reader->getAttribute('lookup_values');
     $population_call = $reader === null ? '' : $reader->getAttribute('population_call');
     $linked_to = $reader === null ? '' : $reader->getAttribute('linked_to');
     $linked_filter_field = $reader === null ? '' : $reader->getAttribute('linked_filter_field');
     if (array_key_exists($name, $this->params)) {
         if ($display != '') {
             $this->params[$name]['display'] = $display;
         }
         if ($type != '') {
             $this->params[$name]['datatype'] = $type;
         }
         if ($allow_buffer != '') {
             $this->params[$name]['allow_buffer'] = $allow_buffer;
         }
         if ($fieldname != '') {
             $this->params[$name]['fieldname'] = $fieldname;
         }
         if ($alias != '') {
             $this->params[$name]['alias'] = $alias;
         }
         if ($emptyvalue != '') {
             $this->params[$name]['emptyvalue'] = $emptyvalue;
         }
         if ($default != null) {
             $this->params[$name]['default'] = $default;
         }
         if ($description != '') {
             $this->params[$name]['description'] = $description;
         }
         if ($query != '') {
             $this->params[$name]['query'] = $query;
         }
         if ($lookup_values != '') {
             $this->params[$name]['lookup_values'] = $lookup_values;
         }
         if ($population_call != '') {
             $this->params[$name]['population_call'] = $population_call;
         }
         if ($linked_to != '') {
             $this->params[$name]['linked_to'] = $linked_to;
         }
         if ($linked_filter_field != '') {
             $this->params[$name]['linked_filter_field'] = $linked_filter_field;
         }
     } else {
         $this->params[$name] = array('datatype' => $type, 'allow_buffer' => $allow_buffer, 'fieldname' => $fieldname, 'alias' => $alias, 'emptyvalue' => $emptyvalue, 'default' => $default, 'display' => $display, 'description' => $description, 'query' => $query, 'lookup_values' => $lookup_values, 'population_call' => $population_call, 'linked_to' => $linked_to, 'linked_filter_field' => $linked_filter_field);
     }
     // if we have a default value, keep a list
     if (isset($this->params[$name]['default']) && $this->params[$name]['default'] !== null) {
         $this->defaultParamValues[$name] = $this->params[$name]['default'];
     }
     // Does the parameter define optional join elements which are associated with specific parameter values?
     if ($reader !== null) {
         $paramXml = $reader->readInnerXML();
         if (!empty($paramXml)) {
             $reader = new XMLReader();
             // wrap contents of param in a container so we only have 1 top level node
             $reader->XML("<container>{$paramXml}</container>");
             while ($reader->read()) {
                 if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'join') {
                     if (!isset($this->params[$name]['joins'])) {
                         $this->params[$name]['joins'] = array();
                     }
                     $this->params[$name]['joins'][] = array('value' => $reader->getAttribute('value'), 'operator' => $reader->getAttribute('operator'), 'sql' => $reader->readString());
                 }
                 if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'where') {
                     if (!isset($this->params[$name]['wheres'])) {
                         $this->params[$name]['wheres'] = array();
                     }
                     $this->params[$name]['wheres'][] = array('value' => $reader->getAttribute('value'), 'operator' => $reader->getAttribute('operator'), 'sql' => $reader->readString());
                 }
             }
         }
     }
 }
function _pugpig_package_parse_atom($atom_xml)
{
    $atom_ret = array();
    $manifest_urls = array();
    $html_urls = array();
    $edition_tag = '';
    if ($atom_xml != '') {
        $atom = new XMLReader();
        $atom->XML($atom_xml);
        while ($atom->read()) {
            if ($atom->localName == 'id' && $edition_tag == '') {
                $edition_tag = $atom->readString();
            } elseif ($atom->localName == 'link') {
                $url = $atom->getAttribute('href');
                $rel = $atom->getAttribute('rel');
                $type = $atom->getAttribute('type');
                switch ($rel) {
                    case 'related':
                        if ($type == "text/cache-manifest") {
                            $manifest_urls[] = $url;
                        }
                        break;
                    case 'alternate':
                        if ($type == "text/html") {
                            $html_urls[] = $url;
                        }
                        break;
                }
            }
        }
        $atom->close();
    }
    $atom_ret['edition_tag'] = $edition_tag;
    $atom_ret['manifest_urls'] = $manifest_urls;
    $atom_ret['html_urls'] = $html_urls;
    return $atom_ret;
}
示例#22
0
 /**
  * Чтение элементов из \XMLReader
  * @param \XMLReader $xr
  */
 public function elementsFromXmlReader(\XMLReader &$xr)
 {
     switch ($xr->localName) {
         case "resource":
             $this->setResource($xr->readString());
             break;
         default:
             parent::elementsFromXmlReader($xr);
     }
 }
示例#23
0
 public function import($file)
 {
     $objs = array();
     $xml = new XMLReader();
     $xml->open($file, 'UTF-8', LIBXML_NONET);
     if (!$xml) {
         return false;
     }
     $inmark = false;
     $innerRing = false;
     while (@$xml->read()) {
         if ($xml->nodeType == XMLReader::ELEMENT) {
             if ($xml->name == 'Placemark') {
                 $inmark = true;
             } elseif ($xml->name == 'name') {
                 if ($inmark) {
                     $objtext = $xml->readString();
                 } else {
                     $title = $xml->readString();
                 }
             } elseif ($xml->name == 'styleUrl') {
                 $styleUrl = $xml->readString();
                 foreach ($this->colors as $k => $v) {
                     if (strpos($styleUrl, $k) !== false) {
                         $objcolor = $k;
                         break;
                     }
                 }
             } elseif ($xml->name == 'innerBoundaryIs') {
                 $innerRing = true;
             } elseif ($xml->name == 'coordinates' && !$innerRing) {
                 $coordstr = preg_split('/\\s+/', trim($xml->readString()));
                 $coords = array();
                 foreach ($coordstr as $latlon) {
                     $ll = explode(',', $latlon);
                     if (count($ll) >= 2) {
                         $coords[] = array((double) $ll[1], (double) $ll[0]);
                     }
                 }
             }
         } elseif ($xml->nodeType == XMLReader::END_ELEMENT) {
             if ($xml->name == 'Placemark') {
                 if (isset($coords) && count($coords) > 0) {
                     $obj = array('coords' => $coords);
                     if (isset($objcolor)) {
                         $obj['params'] = array($objcolor);
                         unset($objcolor);
                     }
                     if (isset($objtext)) {
                         $obj['text'] = $objtext;
                         unset($objtext);
                     }
                     $objs[] = $obj;
                     unset($coords);
                 }
                 $inplace = false;
             } elseif ($xml->name == 'innerBoundaryIs') {
                 $innerRing = false;
             }
         }
     }
     $xml->close();
     $res = array('objs' => $objs);
     if (isset($title) && strlen($title) > 0) {
         $res['title'] = $title;
     }
     return $res;
 }
示例#24
0
 /**
  * Чтение элементов из \XMLReader
  * @param \XMLReader $xr
  */
 public function elementsFromXmlReader(\XMLReader &$xr)
 {
     switch ($xr->localName) {
         case "ID":
             $this->setID($xr->readString());
             break;
         case "type":
             $this->setType($xr->readString());
             break;
         case "uniqueId":
             $this->setUniqueId($xr->readString());
             break;
         default:
             parent::elementsFromXmlReader($xr);
     }
 }
示例#25
0
############## REMOVE CLOSURE NODES FROM CHCHTRAFFIC XML ##################
$dom = new DOMDocument();
$dom->load("../XML/chchTraffic.xml");
$delete = $dom->getElementsByTagName('roadClosures');
foreach ($delete as $node) {
    $node->parentNode->removeChild($node);
}
$dom->save("../XML/chchTraffic.xml");
####### READ CHCHTRAFFIC XML ####### READ CHCHTRAFFIC XML #######
$x = new XMLReader();
$x->open('../XML/chchTraffic.xml');
$events = array();
while ($x->read()) {
    if ($x->localName === 'id' && $x->nodeType == XMLREADER::ELEMENT) {
        $event = array();
        $event[id] = $x->readString();
    }
    if ($x->localName === 'address' && $x->nodeType == XMLREADER::ELEMENT) {
        $event[description] = $x->readString();
    }
    if ($x->localName === 'startDate' && $x->nodeType == XMLREADER::ELEMENT) {
        $event[startDate] = $x->readString();
    }
    if ($x->localName === 'endDate' && $x->nodeType == XMLREADER::ELEMENT) {
        $event[endDate] = $x->readString();
    }
    if ($x->localName === 'publicDescription' && $x->nodeType == XMLREADER::ELEMENT) {
        $event[description] .= ". " . $x->readString();
    }
    if ($x->localName === 'lastUpdated' && $x->nodeType == XMLREADER::ELEMENT) {
        $event[eventModified] = $x->readString();
示例#26
0
 public function import($file)
 {
     $objs = array();
     $title = '';
     $xml = new XMLReader();
     $xml->open($file, 'UTF-8', LIBXML_NONET);
     if (!$xml) {
         return false;
     }
     $mode = '';
     $inobject = false;
     while (@$xml->read()) {
         if ($xml->nodeType == XMLReader::ELEMENT) {
             if ($xml->name == 'metadata' && $mode == '') {
                 $mode = 'metadata';
             } elseif ($xml->name == 'name' && $mode == 'metadata') {
                 $title = $xml->readString();
             } elseif ($xml->name == 'wpt') {
                 $mode = $xml->name;
                 $inobject = true;
                 $lat = $xml->getAttribute('lat');
                 $lon = $xml->getAttribute('lon');
                 if ($lat !== null && $lon !== null) {
                     $coords = array(array($lat, $lon));
                 }
             } elseif ($xml->name == 'rte' || $xml->name == 'trkseg' || $xml->name == 'trk') {
                 $mode = $xml->name;
                 $inobject = true;
                 $coords = array();
             } elseif (($xml->name == 'rtept' || $xml->name == 'trkpt') && $inobject) {
                 $lat = $xml->getAttribute('lat');
                 $lon = $xml->getAttribute('lon');
                 if ($lat !== null && $lon !== null) {
                     $coords[] = array($lat, $lon);
                 }
             } elseif ($xml->name == 'gpxx:DisplayColor' && $inobject) {
                 $objcolor = $this->garmin_to_color($xml->readString());
                 if (!$objcolor) {
                     unset($objcolor);
                 }
             } elseif ($xml->name == 'name' && $inobject) {
                 $objtext = $xml->readString();
             }
         } elseif ($xml->nodeType == XMLReader::END_ELEMENT) {
             if ($xml->name == $mode) {
                 if ($mode == 'wpt' || $mode == 'trkseg' || $mode == 'rte' || $mode == 'trk') {
                     if (isset($coords) && count($coords) > 0) {
                         $cnt = count($coords);
                         //if( count($coords) > 2 && $coords[0][0] == $coords[$cnt-1][0] && $coords[0][1] == $coords[$cnt-1][1] )
                         //	array_pop($coords);
                         $obj = array('coords' => $coords);
                         if (isset($objtext)) {
                             $obj['text'] = $objtext;
                         }
                         if (isset($objcolor)) {
                             $obj['params'] = array($objcolor);
                         }
                         $objs[] = $obj;
                     }
                     if (isset($coords)) {
                         unset($coords);
                     }
                     if (isset($objtext)) {
                         unset($objtext);
                     }
                     if (isset($objcolor)) {
                         unset($objcolor);
                     }
                     $inobject = false;
                 }
                 $mode = '';
             }
         }
     }
     $xml->close();
     // finalize a trace if gpx file suddenly ended
     if (($mode == 'wpt' || $mode == 'trkseg' || $mode == 'rte') && isset($coords) && count($coords) > 0) {
         $obj = array('coords' => $coords);
         if (isset($objtext)) {
             $obj['text'] = $objtext;
         }
         $objs[] = $obj;
     }
     $res = array('objs' => $objs);
     if (isset($title) && strlen($title) > 0) {
         $res['title'] = $title;
     }
     return $res;
 }
示例#27
0
<?php

$xml = new XMLReader();
$xml->open("../../xml_files_windows/standard.xml", $encoding = "UTF-8", $options = LIBXML_NOENT);
while ($xml->read()) {
    if ($xml->nodeType == XMLReader::ELEMENT && $xml->name == 'data') {
        print $xml->name;
        print $xml->readString();
    }
}
/*
while($xml->read()) {
	if ($xml->nodeType == XMLReader::ELEMENT) {
		print $xml->name;
		print $xml->readString();
	}
}
*/
?>
	
示例#28
0
 /**
  * Чтение элементов из \XMLReader
  * @param \XMLReader $xr
  */
 public function elementsFromXmlReader(\XMLReader &$xr)
 {
     switch ($xr->localName) {
         case "name":
             $this->setName($xr->readString());
             break;
         case "Area":
             $Area = \Adaptor_Bindings::create("\\Archive\\Port\\Adaptor\\Data\\Archive\\Documents\\Area");
             $this->setArea($Area->fromXmlReader($xr));
             break;
         case "Large":
             $Large = \Adaptor_Bindings::create("\\Archive\\Port\\Adaptor\\Data\\Archive\\Documents\\SideType\\Large");
             $this->setLarge($Large->fromXmlReader($xr));
             break;
         case "Thumb":
             $Thumb = \Adaptor_Bindings::create("\\Archive\\Port\\Adaptor\\Data\\Archive\\Documents\\SideType\\Thumb");
             $this->setThumb($Thumb->fromXmlReader($xr));
             break;
         default:
             parent::elementsFromXmlReader($xr);
     }
 }
 /**
  * Parses through xml and looks for the 'cookie' parameter
  * @param string $xml the xml to parse through
  * @return string $sessoin returns the session id
  */
 public function read_cookie_xml($xml = '')
 {
     global $CFG, $USER, $COURSE;
     if (empty($xml)) {
         if (is_siteadmin($USER->id)) {
             notice(get_string('adminemptyxml', 'adobeconnect'), $CFG->wwwroot . '/admin/settings.php?section=modsettingadobeconnect');
         } else {
             notice(get_string('emptyxml', 'adobeconnect'), '', $COURSE);
         }
     }
     $session = false;
     //            $accountid = false;
     $reader = new XMLReader();
     $reader->XML($xml, 'UTF-8');
     while ($reader->read()) {
         if (0 == strcmp($reader->name, 'cookie')) {
             if (1 == $reader->nodeType) {
                 $session = $reader->readString();
             }
         }
     }
     $reader->close();
     $this->_cookie = $session;
     return $session;
 }
示例#30
0
 /**
  * Чтение элементов из \XMLReader
  * @param \XMLReader $xr
  */
 public function elementsFromXmlReader(\XMLReader &$xr)
 {
     switch ($xr->localName) {
         case "autoid":
             $this->setAutoid($xr->readString());
             break;
         case "word":
             $this->setWord($xr->readString());
             break;
         case "trans":
             $this->setTrans($xr->readString());
             break;
         case "desc":
             $this->setDesc($xr->readString());
             break;
         case "lastmod":
             $this->setLastmod($xr->readString());
             break;
         case "Link":
             $Link = \Adaptor_Bindings::create("\\Lexicon\\Port\\Adaptor\\Data\\Lexicon\\Link");
             $this->setLink($Link->fromXmlReader($xr));
             break;
         default:
             parent::elementsFromXmlReader($xr);
     }
 }