Skip to content

Commit

Permalink
Renamed XmlElement changes to ElggXMLElement. Fixed plugin manifest p…
Browse files Browse the repository at this point in the history
…arsing.
  • Loading branch information
brettp committed Dec 5, 2012
1 parent 00b2501 commit 6676577
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 104 deletions.
2 changes: 1 addition & 1 deletion engine/classes/ElggPluginManifest.php
Expand Up @@ -130,7 +130,7 @@ public function __construct($manifest, $plugin_id = null) {
}

// see if we need to construct the xml object.
if ($manifest instanceof XmlElement) {
if ($manifest instanceof ElggXMLElement) {
$manifest_obj = $manifest;
} else {
if (substr(trim($manifest), 0, 1) == '<') {
Expand Down
115 changes: 115 additions & 0 deletions engine/classes/ElggXMLElement.php
@@ -0,0 +1,115 @@
<?php
/**
* A parser for XML that uses SimpleXMLElement
*
* @package Elgg.Core
* @subpackage XML
*/
class ElggXMLElement {
/**
* @var SimpleXMLElement
*/
private $_element;

/**
* Creates an ElggXMLParser from a string or existing SimpleXMLElement
*
* @param string|SimpleXMLElement $xml The XML to parse
*/
public function __construct($xml) {
if ($xml instanceof SimpleXMLElement) {
$this->_element = $xml;
} else {
$this->_element = new SimpleXMLElement($xml);
}
}

/**
* @return string The name of the element
*/
public function getName() {
return $this->_element->getName();
}

/**
* @return array:string The attributes
*/
public function getAttributes() {
//include namespace declarations as attributes
$xmlnsRaw = $this->_element->getNamespaces();
$xmlns = array();
foreach ($xmlnsRaw as $key => $val) {
$label = 'xmlns' . ($key ? ":$key" : $key);
$xmlns[$label] = $val;
}
//get attributes and merge with namespaces
$attrRaw = $this->_element->attributes();
$attr = array();
foreach ($attrRaw as $key => $val) {
$attr[$key] = $val;
}
$attr = array_merge((array) $xmlns, (array) $attr);
$result = array();
foreach ($attr as $key => $val) {
$result[$key] = (string) $val;
}
return $result;
}

/**
* @return string CData
*/
public function getContent() {
return (string) $this->_element;
}

/**
* @return array:ElggXMLElement Child elements
*/
public function getChildren() {
$children = $this->_element->children();
$result = array();
foreach ($children as $val) {
$result[] = new ElggXMLElement($val);
}

return $result;
}

function __get($name) {
switch ($name) {
case 'name':
return $this->getName();
break;
case 'attributes':
return $this->getAttributes();
break;
case 'content':
return $this->getContent();
break;
case 'children':
return $this->getChildren();
break;
}
return null;
}

function __isset($name) {
switch ($name) {
case 'name':
return $this->getName() !== null;
break;
case 'attributes':
return $this->getAttributes() !== null;
break;
case 'content':
return $this->getContent() !== null;
break;
case 'children':
return $this->getChildren() !== null;
break;
}
return false;
}

}
112 changes: 10 additions & 102 deletions engine/classes/XmlElement.php
Expand Up @@ -6,107 +6,15 @@
* @subpackage XML
*/
class XmlElement {
/**
* @var SimpleXMLElement
*/
private $_element;

/**
* Creates XmlElement from string or existing SimpleXMLElement
* @param string|SimpleXMLElement $xml
*/
public function __construct($xml) {
if ($xml instanceof SimpleXMLElement) {
$this->_element = $xml;
} else {
$this->_element = new SimpleXMLElement($xml);
}
}

/**
* @return string The name of the element
*/
public function getName() {
return $this->_element->getName();
}

/**
* @return array:string The attributes
*/
public function getAttributes() {
//include namespace declarations as attributes
$xmlnsRaw = $this->_element->getNamespaces();
$xmlns = array();
foreach ($xmlnsRaw as $key => $val) {
$label = 'xmlns'.($key?":$key":$key);
$xmlns[$label] = $val;
}
//get attributes and merge with namespaces
$attrRaw = $this->_element->attributes();
$attr = array();
foreach ($attrRaw as $key => $val) {
$attr[$key] = $val;
}
$attr = array_merge((array)$xmlns, (array)$attr);
$result = array();
foreach ($attr as $key => $val) {
$result[$key] = (string)$val;
}
return $result;
}

/**
* @return string CData
*/
public function getContent() {
return (string)$this->_element;
}

/**
* @return array:XmlElement Child elements
*/
public function getChildren() {
$children = $this->_element->children();
$result = array();
foreach ($children as $val) {
$result[] = new XmlElement($val);
}
return $result;
}
/** The name of the element */
public $name;

function __get($name) {
switch ($name) {
case 'name':
return $this->getName();
break;
case 'attributes':
return $this->getAttributes();
break;
case 'content':
return $this->getContent();
break;
case 'children':
return $this->getChildren();
break;
}
return null;
}

function __isset($name) {
switch ($name) {
case 'name':
return $this->getName()!==null;
break;
case 'attributes':
return $this->getAttributes()!==null;
break;
case 'content':
return $this->getContent()!==null;
break;
case 'children':
return $this->getChildren()!==null;
break;
}
return false;
}
/** The attributes */
public $attributes;

/** CData */
public $content;

/** Child elements */
public $children;
};
2 changes: 1 addition & 1 deletion engine/lib/xml.php
Expand Up @@ -107,5 +107,5 @@ function serialise_array_to_xml(array $data, $n = 0) {
* @return object
*/
function xml_to_object($xml) {
return new XmlElement($xml);
return new ElggXMLElement($xml);
}

1 comment on commit 6676577

@RiverVanRain
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Found issue in class ElggPluginManifestParser
Commit: RiverVanRain@2a32394

Please sign in to comment.