%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_csvi/models/
Upload File :
Create Path :
Current File : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_csvi/models/maps.php

<?php
/**
 * @package     CSVI
 * @subpackage  Fieldmapper
 *
 * @author      Roland Dalmulder <contact@csvimproved.com>
 * @copyright   Copyright (C) 2006 - 2016 RolandD Cyber Produksi. All rights reserved.
 * @license     GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 * @link        http://www.csvimproved.com
 */

defined('_JEXEC') or die;

/**
 * Field mapper model.
 *
 * @package     CSVI
 * @subpackage  Fieldmapper
 * @since       6.0
 */
class CsviModelMaps extends JModelList
{
	/**
	 * Holds the database driver
	 *
	 * @var    JDatabase
	 * @since  6.0
	 */
	private $db;

	/**
	 * Construct the class.
	 *
	 * @since   6.0
	 */
	public function __construct($config = array())
	{
		if (empty($config['filter_fields']))
		{
			$config['filter_fields'] = array(
				'component', 'm.component',
				'csvi_map_id', 'm.csvi_map_id',
				'action', 'm.action',
				'operation', 'm.operation',
				'title', 'm.title',
				'csvi_map_id', 'm.csvi_map_id',
			);
		}

		// Initialise some values
		$this->db = JFactory::getDbo();

		parent::__construct($config);
	}

	/**
	 * Build an SQL query to load the list data.
	 *
	 * @return  JDatabaseQuery  The query to execute.
	 *
	 * @since   4.0
	 *
	 * @throws  RuntimeException
	 */
	protected function getListQuery()
	{
		$query = $this->db->getQuery(true);
		$query->select(
			array(
			'csvi_map_id',
			'title',
			'mapfile',
			'component',
			'action',
			'operation',
			'auto_detect_delimiters',
			'field_delimiter',
			'text_enclosure',
			'locked_by',
			'locked_on'
		)
		);
		$query->from($this->db->quoteName('#__csvi_maps', 'm'));
		$query->select($this->db->quoteName('u.name', 'editor'));

		// Join the user table to get the editor
		$query->leftJoin(
			$this->db->quoteName('#__users', 'u')
			. ' ON ' . $this->db->quoteName('u.id') . ' = ' . $this->db->quoteName('m.locked_by')
		);

		// Filter by search field
		$search = $this->getState('filter.search');

		if ($search)
		{
			$query->where(
				$this->db->quoteName('m.title') . ' LIKE ' . $this->db->quote('%' . $search . '%')
			);
		}

		// Filter by action field
		$action = $this->getState('filter.action');

		if ($action)
		{
			$query->where($this->db->quoteName('m.action') . ' = ' . $this->db->quote($action));
		}

		// Filter by component field
		$component = $this->getState('filter.component');

		if ($component)
		{
			$query->where($this->db->quoteName('m.component') . ' = ' . $this->db->quote($component));
		}

		// Add the list ordering clause.
		$query->order(
			$this->db->quoteName(
				$this->db->escape(
					$this->getState('list.ordering', 'm.title')
				)
			)
			. ' ' . $this->db->escape($this->getState('list.direction', 'ASC'))
		);

		return $query;
	}

	/**
	 * Method to auto-populate the model state.
	 *
	 * Note. Calling getState in this method will result in recursion.
	 *
	 * @param   string  $ordering   An optional ordering field.
	 * @param   string  $direction  An optional direction (asc|desc).
	 *
	 * @return  void
	 *
	 * @since   6.6.0
	 */
	protected function populateState($ordering = 'm.title', $direction = 'ASC')
	{
		// List state information.
		parent::populateState($ordering, $direction);
	}

	/**
	 * Method to get a store id based on the model configuration state.
	 *
	 * This is necessary because the model is used by the component and
	 * different modules that might need different sets of data or different
	 * ordering requirements.
	 *
	 * @param   string  $id  An identifier string to generate the store id.
	 *
	 * @return  string  A store id.
	 *
	 * @since   12.2
	 */
	protected function getStoreId($id = '')
	{
		// Add the list state to the store id.
		$id .= ':' . $this->getState('list.start');
		$id .= ':' . $this->getState('list.limit');
		$id .= ':' . $this->getState('list.ordering');
		$id .= ':' . $this->getState('list.direction');
		$id .= ':' . $this->getState('filter.search');
		$id .= ':' . $this->getState('filter.action');

		return md5($this->context . ':' . $id);
	}

	/**
	 * Create a template from mapped settings.
	 *
	 * @param   int     $mapId  The ID of the field map.
	 * @param   string  $title  The name of the template to create.
	 *
	 * @return  bool  True if table has been created | False if template has not been created.
	 *
	 * @since   5.8
	 *          
	 * @throws  RuntimeException
	 */
	public function createTemplate($mapId, $title)
	{
		// Get the models
		$template = JTable::getInstance('Template', 'Table', array('dbo' => $this->db));
		$templateFields = JTable::getInstance('Templatefield', 'Table', array('dbo' => $this->db));

		// Collect the data
		$templateData = $this->getTemplateData($mapId);

		$data = array(
			'settings'      => json_encode($templateData),
			'action'        => $templateData['action'],
			'template_name' => $title,
			'enabled'       => 1,
		);

		if ($data)
		{
			if ($template->save($data))
			{
				$fields = $this->getTemplateFields($mapId);

				foreach ($fields as $order => $field)
				{
					$saveField                        = new stdClass;
					$saveField->csvi_templatefield_id = 0;
					$saveField->csvi_template_id      = $template->get('csvi_template_id');
					$saveField->field_name            = $field;
					$saveField->enabled               = 1;
					$saveField->ordering              = $order + 1;

					$templateFields->save($saveField);
					$templateFields->reset();
				}

				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			return false;
		}
	}

	/**
	 * Get the data to create a new template.
	 *
	 * @param   int  $mapId  The ID of the field map.
	 *
	 * @return  array  The template data.
	 *
	 * @since   5.8
	 *
	 * @throws  RuntimeException
	 */
	private function getTemplateData($mapId)
	{
		$data = array();

		// Get the map details
		$query = $this->db->getQuery(true)
			->select(
				array(
					$this->db->quoteName('m.action'),
					$this->db->quoteName('m.component'),
					$this->db->quoteName('m.operation'),
					$this->db->quoteName('m.auto_detect_delimiters'),
					$this->db->quoteName('m.field_delimiter'),
					$this->db->quoteName('m.text_enclosure')
				)
			)
			->from($this->db->quoteName('#__csvi_maps', 'm'))
			->where($this->db->quoteName('m.csvi_map_id') . ' = ' . (int) $mapId);
		$this->db->setQuery($query);
		$map = $this->db->loadObject();

		// Get the options if we have a result
		if ($map)
		{
			$data['action'] = $map->action;
			$data['component'] = $map->component;
			$data['operation'] = $map->operation;
			$data['auto_detect_delimiters'] = $map->auto_detect_delimiters;
			$data['field_delimiter'] = $map->field_delimiter;
			$data['text_enclosure'] = $map->text_enclosure;
			$data['use_column_headers'] = 0;
			$data['source'] = 'fromupload';
		}

		// Return the data
		return $data;
	}

	/**
	 * Get the fields to create template fields.
	 *
	 * @param   int  $mapId  The ID of the field map.
	 *
	 * @return  array  The template fields.
	 *
	 * @since   5.8
	 *
	 * @throws  RuntimeException
	 */
	private function getTemplateFields($mapId)
	{
		$data = array();

		if ($mapId)
		{
			// Get the map details
			$query = $this->db->getQuery(true)
				->select($this->db->quoteName('templateheader'))
				->from($this->db->quoteName('#__csvi_mapheaders'))
				->where($this->db->quoteName('map_id') . ' = ' . (int) $mapId);
			$this->db->setQuery($query);
			$data = $this->db->loadColumn();
		}

		// Return the data
		return $data;
	}
}

Zerion Mini Shell 1.0