%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/exports.php |
<?php /** * @package CSVI * @subpackage Export * * @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; /** * Export model. * * @package CSVI * @subpackage Export * @since 6.0 */ class CsviModelExports extends CsviModelDefault { /** * The export file handler * * @var object * @since 6.0 */ protected $exportclass = null; /** * The file handler for writing the export file * * @var resource * @since 6.0 */ private $handle = null; /** * Set the export format being used * * @var string * @since 6.0 */ protected $exportformat = null; /** * Set the array of export formats that use nodes * * @var array * @since 6.0 */ protected $nodeformats = array('xml', 'html'); /** * CSVI SEF processor * * @var CsviHelperSef * @since 6.0 */ protected $sef; /** * Contents to be exported * * @var array * @since 3.0 */ private $contents = array(); /** * Export fields helper * * @var CsviHelperExportFields * @since 6.0 */ protected $fields; /** * Constructor. * * @param array $config The configuration array. * * @since 6.0 */ public function __construct($config = array()) { parent::__construct($config = array()); $this->csvidb = new CsviHelperDb; // Load Joomla helpers jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); } /** * Initialise the needed classes, it all starts with the template ID * * @param int $template_id The ID of the template to load * * @return array The field option objects. * * @since 6.0 * * @throws Exception * @throws CsviException */ public function initialise($template_id) { // Check the temporary folder $this->checkTmpFolder(); // Load the language files $this->loadLanguageFiles(); // Load the template $this->loadTemplate($template_id); // Generate the filename to create $this->exportFilename(); // Initialise run $runId = $this->initialiseRun(); // Prepare for export $this->initialiseExport($runId); return true; } /** * Initialise the export. * * @param int $csvi_process_id The ID of the import run * * @return bool Always returns true. * * @since 6.0 * * @throws CsviException */ public function initialiseExport($csvi_process_id) { parent::initialiseExport($csvi_process_id); // Load the log $this->initialiseLog(); // Load the SEF helper $this->sef = new CsviHelperSef($this->settings, $this->template, $this->log); } /** * Set the log basics. * * @return bool Always returns true. * * @since 6.0 */ public function initialiseLog() { $this->log->setAction('export'); return parent::initialiseLog(); } /** * Load the export file handler. * * @return void. * * @since 6.0 */ protected function loadExportFile() { // Set the export format $this->exportformat = $this->template->get('export_file', 'csv'); // Get the export site switch ($this->exportformat) { case 'xml': case 'html': $exportsite = $this->template->get('export_site', 'csvimproved'); break; default: $exportsite = 'csvimproved'; break; } // Construct the class name $classname = 'CsviHelperFileExport' . ucfirst($this->exportformat) . ucfirst($exportsite); // Instantiate the new export class $this->exportclass = new $classname($this->template); } /** * Get the template ID. * * @param int $csvi_process_id The ID of the export run * * @return int The template ID. * * @since 6.0 * * @throws RuntimeException */ public function getTemplateId($csvi_process_id) { // Load the run details $query = $this->db->getQuery(true) ->select($this->db->quoteName('csvi_template_id')) ->from($this->db->quoteName('#__csvi_processes')) ->where($this->db->quoteName('csvi_process_id') . ' = ' . (int) $csvi_process_id); $this->db->setQuery($query); $templateId = $this->db->loadResult(); if ($templateId) { return $templateId; } else { return 0; } } /** * Returns a list of items * * @param boolean $overrideLimits Should I override set limits? * @param string $group The group by clause * * @return array of items * * @since 6.0 */ public function &getItemList($overrideLimits = false, $group = '') { $this->list = array(); return $this->list; } /** * Get the number of all items. * * This is always 0 as we don't have a traditional list. * * @return integer The number of records. * * @since 6.0 */ public function getTotal() { $this->total = 0; return $this->total; } /** * Prepare for export. * * @param string $addon The addon to run the export for * * @return bool True if all is OK | False if something is not OK. * * @since 3.0 * * @throws RuntimeException */ public function onBeforeExport($addon) { // Setup the addon $this->initialiseAddon($addon); // Load the fields to export $this->retrieveConfigFields(); if (!empty($this->fields)) { // Allow big SQL selects $this->db->setQuery('SET SQL_BIG_SELECTS=1')->execute(); // Get the filename for the export file $this->exportFilename(); } else { $this->log->addStats('incorrect', 'COM_CSVI_NO_EXPORT_FIELDS'); throw new RuntimeException(JText::_('COM_CSVI_NO_EXPORT_FIELDS'), 500); } // All is good return true; } /** * Run the export. * * @return bool True if export started | False if export cannot be started. * * @since 6.0 * * @throws \Exception * @throws \CsviException * @throws \RuntimeException * @throws \UnexpectedValueException */ final public function runExport() { // Set the system limits to the user settings if needed $this->systemLimits(); // Start export if ($this->startExport()) { // Set the last run time for the template $templateTable = FOFTable::getInstance('Templates'); $templateTable->load($this->template->getId()); $templateTable->set('lastrun', JFactory::getDate()->toSql()); $templateTable->store(); // Export header $this->exportHeader(); // Export body $this->exportBody(); // Export footer $this->exportFooter(); // Finalize export $this->endExport(); // Finish processing $this->finishProcess(true); return true; } else { $this->log->addStats('incorrect', 'COM_CSVI_CANNOT_START_EXPORT'); // Finish processing $this->finishProcess(true); return false; } } /** * Start the export. * * @return bool True if export started | False if export cannot be started. * * @since 6.0 */ protected function startExport() { // Write out some export settings if ($this->template->getLog()) { $this->exportDetails(); } // Create the temporary export file $error = false; // Check if the folder exists if (!JFolder::exists(dirname($this->processfile))) { if (!JFolder::create(dirname($this->processfile))) { $this->log->addStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_CREATE_FOLDER', dirname($this->processfile))); $error = true; } } // Open the file for writing $this->handle = fopen($this->processfile, 'w+'); if (!$this->handle) { $this->log->addStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_OPEN_FILE', $this->processfile)); $error = true; } else { // Let's make sure the file exists and is writable first. if (!is_writable($this->processfile)) { $this->log->addStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_WRITE_FILE', $this->processfile)); $error = true; } } // Start the export if ($error) { // Store the log results $this->finishProcess(true); return false; } else { // All good return true; } } /** * Export header. * * @return void. * * @since 6.0 */ protected function exportHeader() { // Add signature for Excel if ($this->template->get('signature')) { $this->contents['signature'] = "\xEF\xBB\xBF"; } // Add the header $exportfields = $this->fields->getFieldNames(); $headerline = $this->exportclass->headerText($exportfields); if (!empty($headerline)) { $this->contents[] = $headerline; } // Add header for XML if ($this->exportformat == 'xml') { } // Add header for HTML elseif ($this->exportformat == 'html') { $this->contents[] = $this->exportclass->bodyText(); } // Write out the data $this->writeOutput(); } /** * Export the body contents. * * @return bool True if body is exported | False if body is not exported. * * @since 6.0 * * @throws CsviException */ protected function exportBody() { $exportfields = $this->fields->getFields(); if (count($exportfields) == 0) { throw new CsviException(JText::_('COM_CSVI_NO_EXPORT_FIELDS_SET'), 517); } return true; } /** * Export the footer. * * @return void. * * @since 6.0 */ protected function exportFooter() { // Get the footer from the export class $footer = $this->exportclass->footerText(); // Write the footer if ($footer && !empty($footer)) { $this->contents[] = $footer; $this->writeOutput(); } } /** * Close the output. * * @return void. * * @since 6.0 * * @throws \Exception */ protected function endExport() { // Close the temporary file fclose($this->handle); // Only export the data if we are on the admin side of things, the front side controls this in the controller if (JFactory::getApplication()->isAdmin()) { // Get output destinations $destinations = $this->template->get('exportto', 'todownload'); $keep = false; if (!is_array($destinations)) { $destinations = array($destinations); } // Check output destinations foreach ($destinations as $destination) { switch ($destination) { case 'todownload': break; case 'tofile': $keep = $this->writeFile($this->processfile); break; case 'toftp': $this->ftpFile($this->processfile); break; case 'toemail': $this->emailFile($this->processfile); break; } } // Remove the temporary file if needed if (!$keep && !in_array('todownload', $destinations, true)) { JFile::delete($this->processfile); } } // Store the filename for the log $query = $this->db->getQuery(true); $query->update($this->db->quoteName('#__csvi_logs')) ->set($this->db->quoteName('file_name') . ' = ' . $this->db->quote(basename($this->processfile))) ->where($this->db->quoteName('csvi_log_id') . ' = ' . (int) $this->getLogId()); $this->db->setQuery($query)->execute(); } /** * Write the output to download or to file. * * @param bool $emptyLine Should the output be followed by an empty line. * * @return bool True if data is output | False if data is not output. * * @since 3.0 */ protected function writeOutput($emptyLine = false) { // Let's take the local contents if nothing is supplied $contents = $this->contents; // Clean the local contents $this->contents = array(); if (!empty($contents)) { if (!is_array($contents)) { $contents = (array) $contents; } // The content to write $writedata = ''; // Check if there is a signature if (isset($contents['signature'])) { $writedata = $contents['signature']; unset($contents['signature']); } // Prepare the data for writing $writedata .= $this->exportclass->prepareContent($contents); if ($emptyLine) { $writedata = "\r\n" . $writedata; } // Write the data to file if (fwrite($this->handle, $writedata . "\r\n") === false) { $this->log->addStats('incorrect', JText::sprintf('COM_CSVI_CANNOT_WRITE_FILE', $this->processfile)); return false; } } return true; } /** * Constructs a limit for a query. * * @return string The limit to apply to the query. * * @since 3.0 */ protected function getExportLimit() { $recordstart = $this->template->get('recordstart', 0, 'int'); $recordend = $this->template->get('recordend', 0, 'int'); $limits = array(); $limits['offset'] = 0; $limits['limit'] = 0; // Check if the user only wants to export some products if ($recordstart && $recordend) { // Check if both values are greater than 0 if (($recordstart > 0) && ($recordend > 0)) { // We have valid limiters, add the limit to the query // Recordend needs to have 1 deducted because MySQL starts from 0 $limits['offset'] = $recordstart - 1; $limits['limit'] = $recordend - $recordstart; } } return $limits; } /** * Process an array of data to add to the output. * * @param boolean $addXml Set if the XML tags need to be added. * * @return void. * * @since 5.0 */ protected function addExportFields($addXml = true) { // Fire the rules $this->fields->runRules(); // Create a clean row $row = array(); $nodestart = false; $linecount = 0; // Add the start node if ($addXml && in_array($this->exportformat, $this->nodeformats)) { $nodestart = $this->exportclass->NodeStart(); } // Add all fields to the export foreach ($this->fields->getData() as $data) { // Get the field details $field = reset($data); if ($field->enabled) { if (strlen($field->value) > 0) { $value = $field->value; } else { $value = $field->default_value; } if (strlen($value) > 0) { $linecount++; } // Format the contents $row[] = $this->exportclass->contentText($value, $field->column_header, $field->field_name, $field->cdata); } } if ($linecount > 0) { if ($addXml && $nodestart) { $this->contents[] = $nodestart; } // Add the content $this->contents = array_merge($this->contents, $row); if ($addXml) { // Add the end node if (in_array($this->exportformat, $this->nodeformats)) { $this->contents[] = $this->exportclass->NodeEnd(); } } } // All fields added for export, empty the fields $this->fields->reset(); } /** * Add data to the export content. * * @param string $content The content to export * * @return void. * * @since 3.0 */ protected function addExportContent($content) { $this->contents[] = $content; } /** * Setup the fields to export. * * @return void. * * @since 6.0 */ private function retrieveConfigFields() { $query = $this->db->getQuery(true) ->select( array( $this->db->quoteName('f.csvi_templatefield_id'), $this->db->quoteName('f.field_name'), $this->db->quoteName('f.column_header'), $this->db->quoteName('f.xml_node'), $this->db->quoteName('f.default_value'), $this->db->quoteName('f.enabled'), $this->db->quoteName('f.sort'), $this->db->quoteName('f.ordering'), $this->db->quoteName('f.cdata') ) ) ->from($this->db->quoteName('#__csvi_templatefields', 'f')) ->where($this->db->quoteName('f.csvi_template_id') . ' = ' . (int) $this->template->getId()) ->order($this->db->quoteName('f.ordering')); $this->db->setQuery($query); // Add the fields foreach ($this->db->loadAssocList() as $field) { /** * Setup the XML fields, we mimic them for none XML files */ if (empty($field['xml_node'])) { $field['xml_node'] = $field['field_name']; } // Load the associated rules for the field $query = $this->db->getQuery(true) ->select($this->db->quoteName('csvi_rule_id')) ->from($this->db->quoteName('#__csvi_templatefields_rules')) ->where($this->db->quoteName('csvi_templatefield_id') . ' = ' . (int) $field['csvi_templatefield_id']) ->order($this->db->quoteName('csvi_templatefields_rule_id')); $this->db->setQuery($query); $field['rules'] = $this->db->loadColumn(); // Convert to the field to an JObject $data = new JObject($field); // Add the field to the field helper $this->fields->add($data); } } /** * Create the export filename. * * @return string The name of the export file. * * @since 3.0 * * @throws UnexpectedValueException */ public function exportFilename() { // Check if the export is limited, if so add it to the filename if (($this->template->get('recordstart') > 0) && ($this->template->get('recordend') > 0)) { // We have valid limiters, add the limit to the filename $filelimit = '_' . $this->template->get('recordstart') . '_' . ($this->template->get('recordend')); } else { $filelimit = ''; } // Set the filename to use for export $export_filename = trim($this->template->get('export_filename')); // Format the filename $export_filename = $this->formatExportFilename($export_filename); if (!empty($export_filename)) { $localfile = $export_filename; } else { $localfile = 'CSVI_' . $this->template->getName() . '_' . date("j-m-Y_H.i") . $filelimit . '.' . $this->exportformat; } // Clean up $localfile = JPath::clean(JPATH_SITE . '/tmp/com_csvi/export/' . $localfile, '/'); // Set the process filename $this->processfile = $localfile; // Return the filename return $localfile; } /** * Format a given filename. * * @param string $exportFilename The filename to format. * * @return string The formatted filename. * * @since 6.5.7 */ private function formatExportFilename($exportFilename) { // Do some customizing // Replace year $exportFilename = str_replace('[Y]', date('Y', time()), $exportFilename); $exportFilename = str_replace('[y]', date('y', time()), $exportFilename); // Replace month $exportFilename = str_replace('[M]', date('M', time()), $exportFilename); $exportFilename = str_replace('[m]', date('m', time()), $exportFilename); $exportFilename = str_replace('[F]', date('F', time()), $exportFilename); $exportFilename = str_replace('[n]', date('n', time()), $exportFilename); // Replace day $exportFilename = str_replace('[d]', date('d', time()), $exportFilename); $exportFilename = str_replace('[D]', date('D', time()), $exportFilename); $exportFilename = str_replace('[j]', date('j', time()), $exportFilename); $exportFilename = str_replace('[l]', date('l', time()), $exportFilename); // Replace hour $exportFilename = str_replace('[g]', date('g', time()), $exportFilename); $exportFilename = str_replace('[G]', date('G', time()), $exportFilename); $exportFilename = str_replace('[h]', date('h', time()), $exportFilename); $exportFilename = str_replace('[H]', date('H', time()), $exportFilename); // Replace minute $exportFilename = str_replace('[i]', date('i', time()), $exportFilename); // Replace seconds $exportFilename = str_replace('[s]', date('s', time()), $exportFilename); return $exportFilename; } /** * Print out export details to the debug log. * * @return void. * * @since 3.0 */ private function exportDetails() { $this->log->add(JText::_('COM_CSVI_CSVI_VERSION_TEXT') . JText::_('COM_CSVI_CSVI_VERSION'), false); $this->log->add(JText::sprintf('COM_CSVI_JOOMLA_VERSION', JVERSION), false); if (function_exists('phpversion')) { $this->log->add(JText::sprintf('COM_CSVI_PHP_VERSION', phpversion()), false); } // Push out all settings $this->log->add(str_repeat('=', 25), false); $settings = $this->template->getSettings(); $this->processSettings($settings); $this->log->add(str_repeat('=', 25), false); // Push out all fields foreach ($this->fields->getFieldnames() as $fieldname) { $this->log->add('Export field: ' . $fieldname, false); } } /** * Add all the settings to the debug log. * * @param array $data An array of template settings to print * * @return void. * * @since 5.3 */ private function processSettings($data) { foreach ($data as $name => $value) { switch ($name) { default: if (is_object($value) || is_array($value)) { $this->processSettings($value); } else { switch ($name) { case 'ftpusername': case 'ftppass': case 'export_email_addresses': case 'export_email_addresses_cc': case 'export_email_addresses_bcc': break; default: switch ($value) { case '0': $value = JText::_('JNO'); break; case '1': $value = JText::_('JYES'); break; } $this->log->add($name . ': ' . $value, false); break; } } break; } } } /** * Handle the end of the import. * * @param bool $finished Set if the import is finished or not. * * @return void. * * @since 3.0 */ private function finishProcess($finished = false) { // Check if the import is finished or if we are going to reload if ($finished) { // Remove the running process $query = $this->db->getQuery(true) ->delete($this->db->quoteName('#__csvi_processes')) ->where($this->db->quoteName('csvi_process_id') . ' = ' . (int) $this->runId); $this->db->setQuery($query)->execute(); // Set the log end timestamp $date = new JDate(date('Y-m-d H:i:s', time())); $query = $this->db->getQuery(true) ->update($this->db->quoteName('#__csvi_logs')) ->set($this->db->quoteName('end') . ' = ' . $this->db->quote($date->toSql())) ->set($this->db->quoteName('records') . ' = ' . (int) $this->log->getLinenumber()) ->where($this->db->quoteName('csvi_log_id') . ' = ' . (int) $this->log->getLogId()); $this->db->setQuery($query)->execute(); // Trigger any plugins to run after import completes $options = array(); $options[] = $this->template->getSettings(); $dispatcher = new RantaiPluginDispatcher; $dispatcher->importPlugins('csvi', $this->db); $dispatcher->trigger('onExportComplete', $options); } } /** * Get the number of records exported. * * @return int The number of records exported. * * @since 6.0 */ public function getRecords() { return $this->log->getLinenumber(); } /** * Get the download URL if file needs to be downloaded. * * @return string The URL of the download file. * * @since 6.0 */ public function getDownloadUrl() { // Get output destinations $destinations = $this->template->get('exportto', 'todownload'); if (!is_array($destinations)) { $destinations = array($destinations); } // Remove the temporary file if needed if (in_array('todownload', $destinations)) { return JUri::root() . 'administrator/index.php?option=com_csvi&view=exports&task=downloadfile&tmpl=component&file=' . base64_encode($this->processfile); } else { return ''; } } /** * Download a generated file. * * @param string $downloadFile The name of the file to download * * @return void. * * @since 6.0 */ public function downloadFile($downloadFile) { // Load the file class jimport('joomla.filesystem.file'); // Check if the file exists if (JFile::exists($downloadFile)) { if (preg_match('/Opera(\/| )([0-9].[0-9]{1,2})/', $_SERVER['HTTP_USER_AGENT'])) { $UserBrowser = "Opera"; } elseif (preg_match('/MSIE ([0-9].[0-9]{1,2})/', $_SERVER['HTTP_USER_AGENT'])) { $UserBrowser = 'IE'; } else { $UserBrowser = ''; } $mime_type = ($UserBrowser === 'IE' || $UserBrowser === 'Opera') ? 'application/octetstream' : 'application/octet-stream'; // Clean the buffer ob_end_clean(); header('Content-Type: ' . $mime_type); header('Content-Encoding: UTF-8'); header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Content-Length: ' . filesize($downloadFile)); if ($UserBrowser === 'IE') { header('Content-Disposition: inline; filename="' . basename($downloadFile) . '"'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); } else { header('Content-Disposition: attachment; filename="' . basename($downloadFile) . '"'); } // Output the file readfile($downloadFile); // Delete the file @unlink($downloadFile); } } /** * Display a generated file. * * @param string $downloadFile The name of the file to download * * @return void. * * @since 6.0 */ public function displayFile($downloadFile) { // Load the file class jimport('joomla.filesystem.file'); // Check if the file exists if (JFile::exists($downloadFile)) { // Clean the buffer ob_end_clean(); // Output the file readfile($downloadFile); } } /** * Write a file to the server. * * @param string $downloadFile The full path and name of the file to email. * * @return bool True if the file needs to be kept | False if file can be deleted. * * @since 6.5.6 */ public function writeFile($downloadFile) { $keep = false; // Copy the file to the correct location $destinationFile = $this->template->get('localpath', JPATH_SITE) . '/' . basename($downloadFile); if ($this->processfile === $destinationFile) { $keep = true; } if ($this->processfile === $destinationFile || JFile::copy($this->processfile, $destinationFile)) { $this->log->setFilename($destinationFile); $this->log->addStats('information', JText::sprintf('COM_CSVI_EXPORTFILE_CREATED', $destinationFile)); } else { $this->log->addStats('error', JText::sprintf('COM_CSVI_EXPORTFILE_NOT_CREATED', $destinationFile)); } return $keep; } /** * Email a generated file. * * @param string $downloadFile The full path and name of the file to email. * * @return void. * * @since 6.5.0 * * @throws \Exception */ public function emailFile($downloadFile) { // Load the mailer $app = JFactory::getApplication(); jimport('joomla.mail.helper'); // Get the mailer $mailer = JFactory::getMailer(); $mailer->isHtml(true); $mailer->From = $app->get('mailfrom'); $mailer->FromName = $app->get('sitename'); try { $mailer->addReplyTo($app->get('mailfrom'), $app->get('sitename')); } catch (Exception $e) { $this->log->add($e->getMessage()); } // Add the email address $addresses = explode(',', $this->template->get('export_email_addresses')); // Addresses foreach ($addresses as $address) { try { $mailer->addAddress($address); } catch (Exception $e) { $this->log->add($e->getMessage()); } } // Carbon copy addresses $addresses_cc = explode(',', $this->template->get('export_email_addresses_cc')); if ($addresses_cc) { foreach ($addresses_cc as $address) { try { $mailer->addCc($address); } catch (Exception $e) { $this->log->add($e->getMessage()); } } } // Blind carbon copy addresses $addresses_bcc = explode(',', $this->template->get('export_email_addresses_bcc')); if ($addresses_bcc) { foreach ($addresses_bcc as $address) { try { $mailer->addBcc($address); } catch (Exception $e) { $this->log->add($e->getMessage()); } } } // Set the body text $htmlmsg = '<html><body>' . $this->template->get('export_email_body') . '</body></html>'; $mailer->setBody($htmlmsg); // Set the subject $mailer->setSubject($this->template->get('export_email_subject')); // Add the attachment try { $mailer->addAttachment($downloadFile); } catch (Exception $e) { $this->log->add($e->getMessage()); } // Send the mail try { $sendmail = $mailer->Send(); if (is_a($sendmail, 'JException')) { $this->log->addStats('incorrect', JText::sprintf('COM_CSVI_NO_MAIL_SEND', $sendmail->getMessage())); } else { $this->log->addStats('information', 'COM_CSVI_MAIL_SEND'); } } catch (Exception $e) { $this->log->addStats('incorrect', $e->getMessage()); } // Clear the mail details $mailer->clearAddresses(); } /** * FTP a generated file. * * @param string $downloadFile The full path and name of the file to email. * * @return void. * * @since 3.5.0 */ public function ftpFile($downloadFile) { if (JFile::exists($downloadFile)) { // Generate the FTP file $ftpFile = $this->formatExportFilename($this->template->get('ftpfile', basename($downloadFile), 'string')); // Start the FTP jimport('joomla.client.ftp'); $ftp = JClientFtp::getInstance( $this->template->get('ftphost', '', 'string'), $this->template->get('ftpport', 21, 'int'), array(), $this->template->get('ftpusername', '', 'string'), $this->template->get('ftppass', '', 'string') ); $ftp->chdir($this->template->get('ftproot', '/', 'string')); $ftp->store($downloadFile, $ftpFile); $ftp->quit(); $this->log->addStats('information', JText::sprintf('COM_CSVI_FTP_EXPORTFILE_CREATED', $downloadFile)); } else { $this->log->addStats('information', JText::sprintf('COM_CSVI_FTP_EXPORTFILE_NOT_CREATED', $downloadFile)); } } /** * Set the cancel status. * * @param int $csvi_process_id The ID of the import process * * @return void. * * @since 6.0 */ public function setEndTimestamp($csvi_process_id) { if ($csvi_process_id > 0) { $query = $this->db->getQuery(true) ->select($this->db->quoteName('csvi_log_id')) ->from($this->db->quoteName('#__csvi_processes')) ->where($this->db->quoteName('csvi_process_id') . ' = ' . (int) $csvi_process_id); $this->db->setQuery($query); $csvi_log_id = $this->db->loadResult(); $query = $this->db->getQuery(true) ->update($this->db->quoteName('#__csvi_logs')) ->set($this->db->quoteName('end') . ' = ' . $this->db->quote(JFactory::getDate()->toSql())) ->set($this->db->quoteName('run_cancelled') . ' = 1') ->where($this->db->quoteName('csvi_log_id') . ' = ' . (int) $csvi_log_id); $this->db->setQuery($query); $this->db->execute(); $query = $this->db->getQuery(true) ->delete($this->db->quoteName('#__csvi_processes')) ->where($this->db->quoteName('csvi_process_id') . ' = ' . (int) $csvi_process_id); $this->db->setQuery($query); $this->db->execute(); } } /** * Get a list of XML or HTML sites. * * @param string $type The type of files to find (XML or HTML). * * @return array List of available sites. * * @since 4.0 */ public function getExportSites($type) { $path = JPATH_ADMINISTRATOR . '/components/com_csvi/helper/file/export/' . $type; $options = array(); if (JFolder::exists($path)) { $files = JFolder::files($path, '.php', false, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'orderadvanced.php')); if (!empty($files)) { foreach ($files as $file) { $file = basename($file, '.php'); $options[$file] = JText::_('COM_CSVI_' . $file); } ksort($options); } } return $options; } }