PageRenderTime 49ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/exchange/code/trunk/administrator/components/com_exchange/models/transforms/maptable.php

https://bitbucket.org/eddieajau/the-art-of-joomla-archive
PHP | 193 lines | 147 code | 21 blank | 25 comment | 25 complexity | a2f4afde05583e125b8d699358536aef MD5 | raw file
  1. <?php
  2. /**
  3. * @version $Id: maptable.php 280 2010-09-18 02:14:15Z eddieajau $
  4. * @package NewLifeInIT
  5. * @subpackage com_exchange
  6. * @copyright Copyright 2005 - 2010 New Life in IT Pty Ltd. All rights reserved.
  7. * @license GNU General Public License version 2 or later.
  8. * @link http://www.theartofjoomla.com
  9. */
  10. // no direct access
  11. defined('_JEXEC') or die;
  12. /**
  13. * @package NewLifeInIT
  14. * @subpackage com_exchange
  15. */
  16. class XMLTransformMapTable extends XMLIterator
  17. {
  18. public $src = null;
  19. public $dest = null;
  20. private $order = null;
  21. /**
  22. * Evaluates an expression
  23. * @param object The tag node
  24. */
  25. function iterate(&$node)
  26. {
  27. $model = &$this->getModel();
  28. $debug = $model->getOption('debug_mode');
  29. $this->src = $model->getState('srcPrefix').(string) $node['from'];
  30. $this->dest = (string) $node['name'];
  31. if ($order = $model->getState('order')) {
  32. $this->order = $order;
  33. }
  34. else {
  35. $this->order = (string) $node['order'];
  36. }
  37. $truncate = XMLHelper::isBool((string) $node['truncate']);
  38. $enabled = XMLHelper::isBool((string) $node['enabled']);
  39. if ($debug) {
  40. ExchangeLog::add(200, sprintf('MAPTABLE name=%s from=%s order=%s', $this->dest, $this->src, $this->order));
  41. }
  42. if (!$enabled) {
  43. return;
  44. }
  45. //temp truncate:
  46. if ($truncate) {
  47. $this->truncate();
  48. }
  49. parent::iterate($node);
  50. }
  51. /**
  52. * Truncate the destination table
  53. * @access private
  54. */
  55. private function truncate()
  56. {
  57. if ($this->dest)
  58. {
  59. $model = &$this->getModel();
  60. $test = $model->getOption('test_mode');
  61. $db = &JFactory::getDBO();
  62. $query = 'TRUNCATE #__'.$this->dest;
  63. $db->setQuery($query);
  64. ExchangeLog::add(0, $db->getQuery());
  65. if (!$test) {
  66. if (!$db->query()) {
  67. ExchangeLog::add(500, ' '.$this->_db->getErrorMsg());
  68. }
  69. }
  70. }
  71. }
  72. public function getSourceData()
  73. {
  74. static $instances = null;
  75. if ($instances == null) {
  76. $instances = array();
  77. }
  78. $model = &$this->getModel();
  79. $debug = $model->getOption('debug_mode');
  80. $limit = $model->getOption('limit', 0);
  81. $files = $model->getState('srcFiles');
  82. $showData = $model->getOption('show_data');
  83. // if $files, import from csv file/s
  84. if ($files)
  85. {
  86. if (!isset($instances[$files['tmp_name'][0]])) {
  87. $delimiter = $model->getOption('delimiter', ',');
  88. $enclosure = $model->getOption('enclosure', '');
  89. $handle = fopen($files['tmp_name'][0], "r");
  90. // Get first line in the file (which contains the column names) as an array.
  91. if ($enclosure) {
  92. $fields = fgetcsv($handle, 0, $delimiter, $enclosure);
  93. }
  94. else {
  95. $fields = fgetcsv($handle, 0, $delimiter);
  96. }
  97. cleanFieldNames($fields);
  98. $instances[$files['tmp_name'][0]] = array();
  99. $data = &$instances[$files['tmp_name'][0]];
  100. $count = 0;
  101. while (($values = ($enclosure ? fgetcsv($handle, 0, $delimiter, $enclosure) : fgetcsv($handle, 0, $delimiter))) !== FALSE)
  102. {
  103. $temp = array_combine($fields, $values);
  104. $data[] = $temp;
  105. if ($limit && ++$count >= $limit) {
  106. break;
  107. }
  108. }
  109. fclose($handle);
  110. }
  111. else {
  112. $showData = false;
  113. $data =& $instances[$files['tmp_name'][0]];
  114. }
  115. }
  116. else
  117. {
  118. $hash = md5($this->src.'.'.$this->order);
  119. if (!isset($instances[$hash])) {
  120. $db = $model->getSourceDBO();
  121. $query = 'SELECT * FROM '.$this->src;
  122. if ($this->order) {
  123. $query .= ' ORDER BY '.$db->getEscaped($this->order);
  124. }
  125. $db->setQuery($query, 0, $limit);
  126. if ($debug) {
  127. ExchangeLog::add(200, $db->getQuery());
  128. ExchangeLog::add(200, 'New data');
  129. }
  130. $data = $db->loadAssocList();
  131. $fields = array();
  132. if (!empty($data)) {
  133. $fields = array_keys($data[0]);
  134. cleanFieldNames($fields);
  135. }
  136. $instances[$hash] = array(
  137. 'data' => $data,
  138. 'fields' => $fields
  139. );
  140. }
  141. else {
  142. if ($debug) {
  143. ExchangeLog::add(200, 'Cached data');
  144. }
  145. $data = &$instances[$hash]['data'];
  146. $fields = &$instances[$hash]['fields'];
  147. }
  148. }
  149. // Display the input data
  150. if ($showData) {
  151. $html = '<fieldset class="log">';
  152. $html .= '<legend>'.JText::_('Source Data').'</legend>';
  153. $html .= '<table border="1" cellspacing="0">' .
  154. ' <tr>';
  155. foreach ($fields as $v) {
  156. $html .= '<th>'.$v.'</th>';
  157. }
  158. $html .= '</tr>';
  159. foreach ($data as $temp) {
  160. $html .= '<tr>';
  161. foreach ($temp as $v) {
  162. $html .= '<td>'.($v ? $v : '&nbsp;').'</td>';
  163. }
  164. $html .= '</tr>';
  165. }
  166. $html .= '</table>';
  167. $html .= '</fieldset>';
  168. echo $html;
  169. }
  170. return $data;
  171. }
  172. }