/engineer/code/trunk/administrator/components/com_engineer/helpers/xml.php
PHP | 504 lines | 345 code | 78 blank | 81 comment | 56 complexity | a8c003389fddcd06236e59bd4a7ebfc0 MD5 | raw file
- <?php
- /**
- * @version $Id: xml.php 71 2009-05-30 10:16:47Z eddieajau $
- * @copyright Copyright (C) 2009 New Life in IT Pty Ltd. All rights reserved.
- * @license GNU General Public License <http://www.gnu.org/copyleft/gpl.html>
- * @link http://www.theartofjoomla.com
- */
- /**
- * XML File Handling
- *
- * @package TAOJ.Engineer
- * @subpackage com_engineer
- */
- class iFileXML
- {
- /**
- * @return array Common meta tags in an xml setup file
- */
- function getCommonTags()
- {
- return array('name', 'version', 'creationdate', 'author', 'authoremail', 'authorurl', 'copyright', 'license', 'description');
- }
- function isValidTag($tagName)
- {
- switch ($tagName)
- {
- case 'mosinstall':
- case 'install';
- return true;
- break;
- default:
- return false;
- }
- }
- /**
- * @param array
- * @param string The version for the mosinstall tag
- * @return DOMIT_Lite_Document
- */
- function &arrayToXML($vars, $version='')
- {
- varsStripSlashes($vars);
- if ($version == '') {
- global $_VERSION;
- $version = $_VERSION->RELEASE . '.' . $_VERSION->DEV_LEVEL;
- }
- require_once(JPATH_SITE.'/includes/domit/xml_domit_lite_include.php');
- $xmlDoc = new DOMIT_Lite_Document();
- $elem = new DOMIT_Lite_Element('install');
- $elem->setAttribute('version', $version);
- if ($client = JArrayHelper::getValue($vars, 'client')) {
- $elem->setAttribute('client', $client);
- }
- $xmlDoc->setDocumentElement($elem);
- $root =& $xmlDoc->documentElement;
- $strip = get_magic_quotes_gpc();
- // meta tags for the setup file
- // contained in $vars['meta']
- $meta = JArrayHelper::getValue($vars, 'meta', array());
- foreach (iFileXML::getCommonTags() as $elemName) {
- $e =& $xmlDoc->createElement($elemName);
- if (isset($meta[$elemName]))
- {
- $e->setText($meta[$elemName]);
- $root->appendChild($e);
- }
- }
- // site files
- // contained in $vars['siteFiles']
- $eFiles =& $xmlDoc->createElement('files');
- $site_files = JArrayHelper::getValue($vars, 'siteFiles', array());
- if (count($site_files)) {
- $module = JArrayHelper::getValue($vars, 'module', null);
- $mambot = JArrayHelper::getValue($vars, 'mambot', null);
- foreach ($site_files as $i => $file) {
- $e =& $xmlDoc->createElement('filename');
- if ($strip) {
- $site_files[$i] = stripslashes($site_files[$i]);
- }
- if ($site_files[$i] === $module) {
- $e->setAttribute('module', JFile::stripExt($site_files[$i]));
- }
- if ($site_files[$i] === $mambot) {
- $e->setAttribute('mambot', JFile::stripExt($site_files[$i]));
- }
- //$site_files[$i] = JPath::clean($site_files[$i], false, true);
- $e->setText($site_files[$i]);
- $eFiles->appendChild($e);
- }
- $root->appendChild($eFiles);
- }
- // administrator files
- // contained in $vars['adminFiles']
- $eAdmin =& $xmlDoc->createElement('administration');
- $eFiles =& $xmlDoc->createElement('files');
- $eFiles->setAttribute('folder', 'admin');
- $admin_files = JArrayHelper::getValue($vars, 'adminFiles', array());
- if (count($admin_files)) {
- foreach ($admin_files as $i => $file) {
- if ($strip) {
- $admin_files[$i] = stripslashes($admin_files[$i]);
- }
- //$admin_files[$i] = JPath::clean($admin_files[$i], false, true);
- $e =& $xmlDoc->createElement('filename');
- $e->setText($admin_files[$i]);
- $eFiles->appendChild($e);
- }
- $eAdmin->appendChild($eFiles);
- }
- // administrator menus
- // contained in $vars['adminMenus'] and $vars['adminSubMenus']
- $admin_menus = JArrayHelper::getValue($vars, 'adminMenus', array());
- foreach ($admin_menus as $k=>$v) {
- $menu =& $admin_menus[$k];
- if (isset($menu['id'])) {
- $e =& $xmlDoc->createElement('menu');
- $e->setText($menu['name']);
- if (isset($menu['admin_menu_link'])) {
- $menu['admin_menu_link'] = ampReplace($menu['admin_menu_link']);
- $e->setAttribute('link', $menu['admin_menu_link']);
- }
- $eAdmin->appendChild($e);
- }
- }
- $admin_menus = JArrayHelper::getValue($vars, 'adminSubMenus', array());
- foreach ($admin_menus as $k => $v) {
- $menu =& $admin_menus[$k];
- if (isset($menu['id'])) {
- $e =& $xmlDoc->createElement('submenu');
- $e->setText($menu['name']);
- if (isset($menu['admin_menu_link'])) {
- $menu['admin_menu_link'] = ampReplace($menu['admin_menu_link']);
- $e->setAttribute('link', $menu['admin_menu_link']);
- }
- $eAdmin->appendChild($e);
- }
- }
- // install/uninstall queries
- if (isset($vars['installQueries'])) {
- $eQueries =& $xmlDoc->createElement('queries');
- $i = 1;
- foreach ($vars['installQueries'] as $query) {
- if (isset($query['id'])) {
- $eQuery =& $xmlDoc->createElement('query');
- $eQuery->setAttribute('id', $i++);
- $eQuery->setAttribute('table', $query['table']);
- $eQuery->setText($query['query']);
- $eQueries->appendChild($eQuery);
- }
- }
- $eInstall =& $xmlDoc->createElement('install');
- $eInstall->appendChild($eQueries);
- $root->appendChild($eInstall);
- }
- if (isset($vars['uninstallQueries'])) {
- $eQueries =& $xmlDoc->createElement('queries');
- $i = 1;
- foreach ($vars['uninstallQueries'] as $query) {
- if (isset($query['id'])) {
- $eQuery =& $xmlDoc->createElement('query');
- $eQuery->setAttribute('id', $i++);
- $eQuery->setAttribute('table', $query['table']);
- $eQuery->setText($query['query']);
- $eQueries->appendChild($eQuery);
- }
- }
- $eInstall =& $xmlDoc->createElement('uninstall');
- $eInstall->appendChild($eQueries);
- $root->appendChild($eInstall);
- }
- // install/uninstall files
- $installFile = JArrayHelper::getValue($vars, 'installFile', '');
- if ($installFile) {
- $e =& $xmlDoc->createElement('installfile');
- $e->setText($installFile);
- $root->appendChild($e);
- }
- $uninstallFile = JArrayHelper::getValue($vars, 'uninstallFile', '');
- if ($uninstallFile) {
- $e =& $xmlDoc->createElement('uninstallfile');
- $e->setText($uninstallFile);
- $root->appendChild($e);
- }
- if ($eAdmin->hasChildNodes()) {
- $root->appendChild($eAdmin);
- }
- if (isset($vars['params']) && $vars['params']) {
- $temp = new DOMIT_Lite_Document();
- $temp->parseXML($vars['params']);
- $root->appendChild($temp->documentElement);
- } else {
- $e =& $xmlDoc->createElement('params');
- $root->appendChild($e);
- }
- return $xmlDoc;
- }
- /**
- * @param string The xml file to parse
- * @param string The setup file type to check for
- * @param array A complex array of file variables
- * @return boolean True on success
- */
- function read($path, $type, &$vars)
- {
- JPath::check($path);
- $dom = new DOMDocument;
- $dom->load($path);
- return $dom;
- $parser = JFactory::getXMLParser('Simple');
- if ($parser->loadFile($path))
- {
- if (isset($parser->document)) {
- $root =& $parser->document;
- } else {
- return JError::raiseWarning(500, 'No XML document');
- }
- }
- else {
- return JError::raiseWarning(500, 'Error loading file');
- }
- $rootTagName = $root->name();
- if (!iFileXML::isValidTag($rootTagName)) {
- return JError::raiseWarning(500, 'Not valid install file');
- }
- if ($root->attributes('type') != $type) {
- return false;
- }
- $vars = array(
- 'client' => $root->attributes('client'),
- 'meta' => array()
- );
- foreach (iFileXML::getCommonTags() as $elemName)
- {
- if ($e = &$root->getElementByPath($elemName))
- {
- $data = $e->data();
- if ($elemName=='authorurl' && strcasecmp(substr($data, 0, 4), 'http')) {
- $vars['meta'][$elemName] = 'http://' . $data;
- } else {
- $vars['meta'][$elemName] = $data;
- }
- }
- else {
- $vars['meta'][$elemName] = '';
- }
- }
- if ($type == 'mambot') {
- $vars['meta']['group'] = $root->attributes('group');
- }
- // site files
- if ($e = &$root->getElementByPath('files'))
- {
- $c = &$e->children();
- $n = count($c);
- for ($i = 0; $i < $n; $i++) {
- $e =& $c[$i];
- $file = array(
- 'file' => str_replace('\\', '/', $e->data())
- );
- if ($e->attributes('module')) {
- $file['special'] = 1;
- }
- if ($e->attributes('plugin') || $e->attributes('mambot')) {
- $file['special'] = 1;
- }
- $vars['siteFiles'][] = $file;
- }
- }
- // legacy support
- if ($e = &$root->getElementByPath('images'))
- {
- $c = &$e->children();
- $n = count($c);
- for ($i = 0; $i < $n; $i++) {
- $e =& $c[$i];
- $vars['siteFiles'][] = array(
- 'file' => $e->data()
- );
- }
- }
- // legacy support
- if ($e = &$root->getElementByPath('css'))
- {
- $c = &$e->children();
- $n = count($c);
- for ($i = 0; $i < $n; $i++) {
- $e =& $c[$i];
- $vars['siteFiles'][] = array(
- 'file' => $e->data()
- );
- }
- }
- // check admin section
- if ($e = &$root->getElementByPath('administration/files'))
- {
- $c = &$e->children();
- $n = count($c);
- for ($i = 0; $i < $n; $i++) {
- $e =& $c[$i];
- $vars['adminFiles'][] = array('file' => str_replace('\\', '/', $e->data()));
- }
- }
- // administrator menus
- /*
- $nodeList = &$root->getElementsByPath('administration/menu');
- $n = $nodeList->getLength();
- for ($i = 0; $i < $n; $i++) {
- $e =& $nodeList->item($i);
- $vars['adminMenus'][] = array(
- 'id' => $i,
- 'name' => $e->getText(),
- 'admin_menu_link' => $e->getAttribute('link')
- );
- }
- $nodeList = &$root->getElementsByPath('administration/submenu');
- $n = $nodeList->getLength();
- for ($i = 0; $i < $n; $i++) {
- $e =& $nodeList->item($i);
- $vars['adminSubMenus'][] = array(
- 'id' => $i,
- 'name' => $e->getText(),
- 'admin_menu_link' => $e->getAttribute('link')
- );
- }
- */
- // install queries
- if ($e = &$root->getElementByPath('install/queries'))
- {
- $c = &$e->children();
- $n = count($c);
- for ($i = 0; $i < $n; $i++) {
- $e =& $c[$i];
- $vars['installQueries'][] = array(
- 'id' => count(@$vars['installQueries']),
- 'query' => $e->data(),
- 'table' => $e->attributes('table')
- );
- }
- }
- // uninstall queries
- if ($e = &$root->getElementByPath('uninstall/queries'))
- {
- $c = &$e->children();
- $n = count($c);
- for ($i = 0; $i < $n; $i++) {
- $e =& $c[$i];
- $vars['uninstallQueries'][] = array(
- 'id' => count(@$vars['uninstallQueries']),
- 'query' => $e->data(),
- );
- }
- }
- // installer files
- if ($e = &$root->getElementByPath('installfile')) {
- $vars['installFile'] = $e->data();
- }
- if ($e = &$root->getElementByPath('uninstallfile')) {
- $vars['uninstallFile'] = $e->data();
- }
- // parameters
- if ($e = &$root->getElementByPath('params')) {
- $vars['params'] = $e->toString();
- } else {
- $vars['params'] = '<params/>';
- }
- unset($parser);
- return $vars;
- }
- /**
- * Saves the xml steup file
- * @param string The name of the element
- * @param array
- * @param string The path path to save in
- * @return boolean True if successful
- */
- function write($element, $vars, $filePath)
- {
- $xmlDoc =& iFileXML::arrayToXML($vars);
- $root =& $xmlDoc->documentElement;
- $root->setAttribute('type', $element);
- if ($element == 'mambot' && isset($vars['meta']['group'])) {
- $root->setAttribute('group', $vars['meta']['group']);
- }
- $xmlDoc->setXMLDeclaration('<?xml version="1.0" encoding="iso-8859-1"?>');
- JPath::check($filePath);
- //echo $xmlDoc->toNormalizedString(1);die;
- $ret = $xmlDoc->saveXML($filePath, true);
- unset($xmlDoc);
- return $ret;
- }
- }
- /**
- * A function to strip slashes in critical string elements
- * @param array The vars array
- */
- function varsStripSlashes(&$vars)
- {
- if (!get_magic_quotes_gpc()) {
- return;
- }
- if (isset($vars['installQueries'])) {
- foreach ($vars['installQueries'] as $k => $v) {
- $v['query'] = stripslashes($v['query']);
- $vars['installQueries'][$k] = $v;
- }
- }
- if (isset($vars['uninstallQueries'])) {
- foreach ($vars['uninstallQueries'] as $k => $v) {
- $v['query'] = stripslashes($v['query']);
- $vars['uninstallQueries'][$k] = $v;
- }
- }
- if (isset($vars['params'])) {
- $vars['params'] = stripslashes($vars['params']);
- }
- }