%PDF- %PDF-
Direktori : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_csvi/models/ |
Current File : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_csvi/models/template.php |
<?php /** * @package CSVI * @subpackage Template * * @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 */ use Joomla\Registry\Registry; defined('_JEXEC') or die; /** * Template model. * * @package CSVI * @subpackage Template * @since 6.0 */ class CsviModelTemplate extends JModelAdmin { /** * Holds the database driver * * @var JDatabaseDriver * @since 6.0 */ protected $db; /** * Holds the input class * * @var JInput * @since 6.6.0 */ protected $input; /** * Holds the template settings * * @var array * @since 6.0 */ protected $options; /** * Construct the class. * * @since 6.0 * * @throws Exception */ public function __construct() { parent::__construct(); // Load the basics $this->db = $this->getDbo(); $this->input = JFactory::getApplication()->input; } /** * Get the form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success | False on failure. * * @since 4.0 */ public function getForm($data = array(), $loadData = true) { // Add our own form path JForm::addFormPath(JPATH_ADMINISTRATOR . '/components/com_csvi/views/template/tmpl/'); // Get the form. $form = $this->loadForm('com_csvi.template', 'operations', array('control' => 'jform', 'load_data' => $loadData)); if (0 === count($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return array The data for the form.. * * @since 4.0 * * @throws Exception */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_csvi.edit.template.data', array()); if (0 === count($data)) { $data = $this->getItem(); } return $data; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. * * @since 6.6.0 * * @throws Exception */ public function getItem($pk = null) { $item = parent::getItem($pk); // Get the payment information $item->options = new Registry(json_decode($item->settings, true)); return $item; } /** * Method to save the form data. * * @param array $data The filtered form data. * * @return boolean True on success, False on error. * * @since 3.0 * * @throws Exception * @throws RuntimeException * @throws InvalidArgumentException * @throws UnexpectedValueException */ public function save($data) { // Get the complete posted data $fullData = $this->input->post->getArray( array( 'template_name' => 'string', 'enabled' => 'int', 'ordering' => 'int', 'log' => 'int', 'frontend' => 'int', 'csvi_template_id' => 'int', 'secret' => 'raw', 'advanced' => 'int', ) ); // Set the filtered data $fullData['jform'] = $data; // Load the table $table = $this->getTable('Template'); $table->load($fullData['csvi_template_id']); $query = $this->db->getQuery(true); // Prepare the settings if (array_key_exists('jform', $fullData)) { // Check if we are in the wizard, if so, we must preload the already stored settings if ($this->input->getInt('step', 0)) { $query->clear() ->select( $this->db->quoteName( array( 'settings', 'action', ) ) ) ->from($this->db->quoteName('#__csvi_templates')) ->where($this->db->quoteName('csvi_template_id') . ' = ' . (int) $table->get('csvi_template_id')); $this->db->setQuery($query); $templateSettings = $this->db->loadObject(); $fullData['jform'] = array_merge((array) json_decode($templateSettings->settings), $fullData['jform']); $fullData['action'] = $templateSettings->action; } // Clear the FTP details if it is not set as location if ((array_key_exists('source', $fullData['jform']) && $fullData['jform']['source'] !== 'fromftp') || (array_key_exists('exportto', $fullData['jform']) && !in_array('toftp', $fullData['jform']['exportto'], true))) { $fullData['jform']['ftpusername'] = ''; $fullData['jform']['ftppass'] = ''; } // Clear the URL details if it is not set as location if (array_key_exists('source', $fullData['jform']) && $fullData['jform']['source'] !== 'fromurl') { $fullData['jform']['urlusername'] = ''; $fullData['jform']['urlpass'] = ''; } $fullData['settings'] = json_encode($fullData['jform']); $fullData['action'] = $fullData['jform']['action']; } // Store the table to the custom available fields if needed if (array_key_exists('custom_table', $fullData['jform'])) { // Check if the table is already listed $query->clear() ->select($this->db->quoteName('csvi_availabletable_id')) ->from($this->db->quoteName('#__csvi_availabletables')) ->where($this->db->quoteName('template_table') . ' = ' . $this->db->quote($fullData['jform']['custom_table'])) ->where($this->db->quoteName('component') . ' = ' . $this->db->quote('com_csvi')) ->where($this->db->quoteName('action') . ' = ' . $this->db->quote($fullData['action'])); $this->db->setQuery($query); $csvi_availabletable_id = $this->db->loadResult(); // Add the table to the available fields table if needed if (!$csvi_availabletable_id) { $query->clear() ->insert($this->db->quoteName('#__csvi_availabletables')) ->columns( $this->db->quoteName('task_name') . ',' . $this->db->quoteName('template_table') . ',' . $this->db->quoteName('component') . ',' . $this->db->quoteName('action') . ',' . $this->db->quoteName('enabled') ) ->values( $this->db->quote('custom') . ',' . $this->db->quote($fullData['jform']['custom_table']) . ',' . $this->db->quote('com_csvi') . ',' . $this->db->quote($fullData['action']) . ',' . $this->db->quote('1') ); $this->db->setQuery($query); $this->db->execute(); // Load the helpers $csvihelper = new CsviHelperCsvi; $settings = new CsviHelperSettings($this->db); $log = new CsviHelperLog($settings, $this->db); // Index the table require_once JPATH_ADMINISTRATOR . '/components/com_csvi/addon/com_csvi/model/maintenance.php'; $maintenanceModel = new Com_CsviMaintenance($this->db, $log, $csvihelper); $customTable = new stdClass; $customTable->template_table = $fullData['jform']['custom_table']; $customTable->component = 'com_csvi'; $customTable->action = $fullData['action']; $maintenanceModel->indexTable($customTable); } } // Check if the chosen table is the same as the one already stored, if not, we need to remove the template fields $settings = json_decode($table->get('settings')); if (isset($settings->custom_table, $fullData['jform']['custom_table']) && $settings->custom_table !== $fullData['jform']['custom_table']) { // Remove all associated fields $query->clear() ->delete($this->db->quoteName('#__csvi_templatefields')) ->where($this->db->quoteName('csvi_template_id') . ' = ' . (int) $table->get('csvi_template_id')); $this->db->setQuery($query)->execute(); } return parent::save($fullData); } /** * Method to validate the form data. * * @param JForm $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * * @return mixed Array of filtered data if valid, false otherwise. * * @see JFormRule * @see JFilterInput * @since 12.2 */ public function validate($form, $data, $group = null) { return $data; // Filter and validate the form data. $data = $form->filter($data); $return = $form->validate($data, $group); // Check for an error. if ($return instanceof Exception) { $this->setError($return->getMessage()); return false; } // Check the validation results. if ($return === false) { // Get the validation messages from the form. foreach ($form->getErrors() as $message) { $this->setError($message); } return false; } // Tags B/C break at 3.1.2 if (isset($data['metadata']['tags']) && !isset($data['tags'])) { $data['tags'] = $data['metadata']['tags']; } return $data; } /** * This method runs after a record with key value $id is deleted * * @param array &$pks An array of record primary keys. * * @return boolean Return false to raise an error, true otherwise * * @throws RuntimeException */ public function delete(&$pks) { if (parent::delete($pks)) { foreach ($pks as $pk) { // Delete the template field rules $query = $this->db->getQuery(true) ->select($this->db->quoteName('csvi_templatefield_id')) ->from($this->db->quoteName('#__csvi_templatefields')) ->where($this->db->quoteName('csvi_template_id') . ' = ' . (int) $pk); $this->db->setQuery($query); $fieldIds = $this->db->loadColumn(); if ($fieldIds) { // Delete the rules $query->clear() ->delete($this->db->quoteName('#__csvi_templatefields_rules')) ->where($this->db->quoteName('csvi_templatefield_id') . ' IN (' . implode(',', $fieldIds) . ')'); $this->db->setQuery($query)->execute(); } // Delete the template fields $query->clear() ->delete($this->db->quoteName('#__csvi_templatefields')) ->where($this->db->quoteName('csvi_template_id') . ' = ' . (int) $pk); $this->db->setQuery($query)->execute(); } } return true; } /** * Test the FTP details. * * @return bool True if connection works | Fails if connection fails. * * @since 4.3.2 * * @throws CsviException * @throws InvalidArgumentException */ public function testFtp() { $ftphost = $this->input->get('ftphost', '', 'string'); $ftpport = $this->input->get('ftpport'); $ftpusername = $this->input->get('ftpusername', '', 'string'); $ftppass = $this->input->get('ftppass', '', 'string'); $ftproot = $this->input->get('ftproot', '', 'string'); $ftpfile = $this->input->get('ftpfile', '', 'string'); $action = $this->input->get('action'); // Set up the ftp connection jimport('joomla.client.ftp'); $ftp = JClientFtp::getInstance($ftphost, $ftpport, array(), $ftpusername, $ftppass); try { // Try to login again because Joomla! doesn't let us know when the username and/or password is wrong if ($ftp->isConnected()) { // See if we can change folder if ($ftp->chdir($ftproot)) { $result = true; if ($action === 'import') { // Check if the file exists $files = $ftp->listNames(); if (!is_array($files)) { throw new CsviException(JText::sprintf('COM_CSVI_FTP_NO_FILES_FOUND', $ftp->pwd())); } if (!in_array($ftpfile, $files, true)) { throw new CsviException(JText::sprintf('COM_CSVI_FTP_FILE_NOT_FOUND', $ftpfile, $ftp->pwd())); } } } else { throw new CsviException(JText::sprintf('COM_CSVI_FTP_FOLDER_NOT_FOUND', $ftproot)); } } else { throw new InvalidArgumentException(JText::_('COM_CSVI_FTP_CREDENTIALS_INVALID')); } // Close up $ftp->quit(); } catch (Exception $e) { // Close up $ftp->quit(); throw new CsviException($e->getMessage(), $e->getCode()); } return $result; } /** * Test if the URL exists. * * @return bool True if URL exists | Fails otherwise. * * @since 6.5.0 * * @throws CsviException */ public function testURL() { $testurl = $this->input->get('testurl', '', 'string'); $testuser = $this->input->get('testuser', '', 'string'); $testuserfield = $this->input->get('testuserfield', '', 'string'); $testpass = $this->input->get('testpass', '', 'string'); $testpassfield = $this->input->get('testpassfield', '', 'string'); $testmethod = $this->input->get('testmethod', '', 'string'); $csvihelper = new CsviHelperCsvi; if (!$csvihelper->fileExistsRemote($testurl, $testuser, $testpass, $testmethod, $testuserfield, $testpassfield)) { throw new CsviException(JText::_('COM_CSVI_URL_TEST_NO_SUCCESS')); } return true; } /** * Test if the server path is valid. * * @return bool True if URL exists | Fails otherwise. * * @since 6.5.0 * * @throws CsviException * @throws UnexpectedValueException */ public function testPath() { $testPath = $this->input->get('testpath', '', 'string'); $file = JPath::clean($testPath, '/'); if (!JFile::exists($file)) { throw new CsviException(JText::_('COM_CSVI_PATH_TEST_NO_SUCCESS')); } return true; } /** * Copy one ore more templates to a new one. * * @param array $templateIds The IDs of the template(s) to copy. * * @return bool True on success | False on failure. * * @throws CsviException * @throws RuntimeException * * @since 6.0 */ public function createCopy($templateIds) { if (!is_array($templateIds)) { $templateIds = (array) $templateIds; } $table = $this->getTable(); foreach ($templateIds as $templateId) { $table->load($templateId); $table->set('csvi_template_id', 0); $table->set('lastrun', $this->db->getNullDate()); $table->set('template_name', $table->get('template_name') . ' copy'); if ($table->store()) { // Copy also the template fields $query = $this->db->getQuery(true) ->select($this->db->quoteName('csvi_templatefield_id')) ->from($this->db->quoteName('#__csvi_templatefields')) ->where($this->db->quoteName('csvi_template_id') . ' = ' . (int) $templateId); $this->db->setQuery($query); $fieldIds = $this->db->loadColumn(); $ftable = $this->getTable('Templatefield'); foreach ($fieldIds as $fieldId) { $ftable->load($fieldId); $ftable->set('csvi_templatefield_id', 0); $ftable->set('csvi_template_id', $table->get('csvi_template_id')); $ftable->store(); // Copy the template field rules $query->clear() ->select($ftable->get('csvi_templatefield_id')) ->select($this->db->quoteName('csvi_rule_id')) ->from($this->db->quoteName('#__csvi_templatefields_rules')) ->where($this->db->quoteName('csvi_templatefield_id') . ' = ' . (int) $fieldId); $this->db->setQuery($query); $templatefieldruleIds = $this->db->loadAssocList(); if (count($templatefieldruleIds) > 0) { $query->clear() ->insert($this->db->quoteName('#__csvi_templatefields_rules')) ->columns( $this->db->quoteName( array( 'csvi_templatefield_id', 'csvi_rule_id' ) ) ); foreach ($templatefieldruleIds as $rule) { $query->values(implode(',', $rule)); } $this->db->setQuery($query)->execute(); } } } else { throw new CsviException(JText::sprintf('COM_CSVI_CANNOT_COPY_TEMPLATE', $table->getError())); } } return true; } }