/exchange/code/trunk/administrator/components/com_exchange/models/transforms/maptable.php
PHP | 193 lines | 147 code | 21 blank | 25 comment | 25 complexity | a2f4afde05583e125b8d699358536aef MD5 | raw file
- <?php
- /**
- * @version $Id: maptable.php 280 2010-09-18 02:14:15Z eddieajau $
- * @package NewLifeInIT
- * @subpackage com_exchange
- * @copyright Copyright 2005 - 2010 New Life in IT Pty Ltd. All rights reserved.
- * @license GNU General Public License version 2 or later.
- * @link http://www.theartofjoomla.com
- */
- // no direct access
- defined('_JEXEC') or die;
- /**
- * @package NewLifeInIT
- * @subpackage com_exchange
- */
- class XMLTransformMapTable extends XMLIterator
- {
- public $src = null;
- public $dest = null;
- private $order = null;
- /**
- * Evaluates an expression
- * @param object The tag node
- */
- function iterate(&$node)
- {
- $model = &$this->getModel();
- $debug = $model->getOption('debug_mode');
- $this->src = $model->getState('srcPrefix').(string) $node['from'];
- $this->dest = (string) $node['name'];
- if ($order = $model->getState('order')) {
- $this->order = $order;
- }
- else {
- $this->order = (string) $node['order'];
- }
- $truncate = XMLHelper::isBool((string) $node['truncate']);
- $enabled = XMLHelper::isBool((string) $node['enabled']);
- if ($debug) {
- ExchangeLog::add(200, sprintf('MAPTABLE name=%s from=%s order=%s', $this->dest, $this->src, $this->order));
- }
- if (!$enabled) {
- return;
- }
- //temp truncate:
- if ($truncate) {
- $this->truncate();
- }
- parent::iterate($node);
- }
- /**
- * Truncate the destination table
- * @access private
- */
- private function truncate()
- {
- if ($this->dest)
- {
- $model = &$this->getModel();
- $test = $model->getOption('test_mode');
- $db = &JFactory::getDBO();
- $query = 'TRUNCATE #__'.$this->dest;
- $db->setQuery($query);
- ExchangeLog::add(0, $db->getQuery());
- if (!$test) {
- if (!$db->query()) {
- ExchangeLog::add(500, ' '.$this->_db->getErrorMsg());
- }
- }
- }
- }
- public function getSourceData()
- {
- static $instances = null;
- if ($instances == null) {
- $instances = array();
- }
- $model = &$this->getModel();
- $debug = $model->getOption('debug_mode');
- $limit = $model->getOption('limit', 0);
- $files = $model->getState('srcFiles');
- $showData = $model->getOption('show_data');
- // if $files, import from csv file/s
- if ($files)
- {
- if (!isset($instances[$files['tmp_name'][0]])) {
- $delimiter = $model->getOption('delimiter', ',');
- $enclosure = $model->getOption('enclosure', '');
- $handle = fopen($files['tmp_name'][0], "r");
- // Get first line in the file (which contains the column names) as an array.
- if ($enclosure) {
- $fields = fgetcsv($handle, 0, $delimiter, $enclosure);
- }
- else {
- $fields = fgetcsv($handle, 0, $delimiter);
- }
- cleanFieldNames($fields);
- $instances[$files['tmp_name'][0]] = array();
- $data = &$instances[$files['tmp_name'][0]];
- $count = 0;
- while (($values = ($enclosure ? fgetcsv($handle, 0, $delimiter, $enclosure) : fgetcsv($handle, 0, $delimiter))) !== FALSE)
- {
- $temp = array_combine($fields, $values);
- $data[] = $temp;
- if ($limit && ++$count >= $limit) {
- break;
- }
- }
- fclose($handle);
- }
- else {
- $showData = false;
- $data =& $instances[$files['tmp_name'][0]];
- }
- }
- else
- {
- $hash = md5($this->src.'.'.$this->order);
- if (!isset($instances[$hash])) {
- $db = $model->getSourceDBO();
- $query = 'SELECT * FROM '.$this->src;
- if ($this->order) {
- $query .= ' ORDER BY '.$db->getEscaped($this->order);
- }
- $db->setQuery($query, 0, $limit);
- if ($debug) {
- ExchangeLog::add(200, $db->getQuery());
- ExchangeLog::add(200, 'New data');
- }
- $data = $db->loadAssocList();
- $fields = array();
- if (!empty($data)) {
- $fields = array_keys($data[0]);
- cleanFieldNames($fields);
- }
- $instances[$hash] = array(
- 'data' => $data,
- 'fields' => $fields
- );
- }
- else {
- if ($debug) {
- ExchangeLog::add(200, 'Cached data');
- }
- $data = &$instances[$hash]['data'];
- $fields = &$instances[$hash]['fields'];
- }
- }
- // Display the input data
- if ($showData) {
- $html = '<fieldset class="log">';
- $html .= '<legend>'.JText::_('Source Data').'</legend>';
- $html .= '<table border="1" cellspacing="0">' .
- ' <tr>';
- foreach ($fields as $v) {
- $html .= '<th>'.$v.'</th>';
- }
- $html .= '</tr>';
- foreach ($data as $temp) {
- $html .= '<tr>';
- foreach ($temp as $v) {
- $html .= '<td>'.($v ? $v : ' ').'</td>';
- }
- $html .= '</tr>';
- }
- $html .= '</table>';
- $html .= '</fieldset>';
- echo $html;
- }
- return $data;
- }
- }