Current Directory: /home/astoriaah/www/old15/administrator/components/com_sh404sef/adapters
Viewing File: /home/astoriaah/www/old15/administrator/components/com_sh404sef/adapters/exportview404.php
<?php
/**
* sh404SEF - SEO extension for Joomla!
*
* @author Yannick Gaultier
* @copyright (c) Yannick Gaultier 2014
* @package sh404SEF
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @version 4.4.4.1791
* @date 2014-07-01
*/
// Security check to ensure this file is being included by a parent file.
if (!defined('_JEXEC')) die('Direct Access to this location is not allowed.');
/**
* Implement wizard based exportation of page title and metas data
*
* @author shumisha
*
*/
class Sh404sefAdapterExportview404 extends JObject {
/**
* An array holding each step details
* A step is defined as a task, a view and a layout
* By default, task can be 'display', but still need
* to be defined in array
* @var array
*/
public $_stepsMap = array(
-2 => array( 'task' => 'doTerminate', 'view' => 'wizard', 'layout' => 'default')
,-1 => array( 'task' => 'doCancel', 'view' => 'wizard', 'layout' => 'default')
, 0 => array( 'task' => 'doStart', 'view' => 'wizard', 'layout' => 'default')
, 1 => array( 'task' => 'doExport', 'view' => 'wizard', 'layout' => 'default')
, 2 => array( 'task' => 'doDownload', 'view' => 'wizard', 'layout' => 'default')
);
public $_stepsCount = 0;
public $_steps = array( 'next' => 0, 'previous' => 0, 'cancel' => -1, 'terminate' => -2);
public $_button = '';
public $_buttonsList = array ('next', 'previous', 'terminate', 'cancel');
// visible buttons are displayed as toolbar pressbutton
// buttons not on that list are passed as 'hidden' post data
public $_visibleButtonsList = array ( 'previous', 'next', 'terminate', 'cancel');
protected $_context = 'view404';
protected $_total = 0;
protected $_parentController = null;
protected $_filename = '';
const MAX_PAGEIDS_PER_STEP = 100;
/**
* Constructor, keep reference to controller
* which called the adapter
* @param unknown_type $parentController
*/
public function __construct( $parentController) {
$this->_parentController = $parentController;
}
/**
* Parameters for current adapter, to be used by parent controller
*
*/
public function setup() {
$this->_stepsCount = count( $this->_stepsMap);
// prepare data for controller
$properties = array();
$properties['_defaultController'] = 'wizard';
$properties['_defaultTask'] = '';
$properties['_defaultModel'] = '';
$properties['_defaultView'] = 'wizard';
$properties['_defaultLayout'] = 'default';
$properties['_returnController'] = 'urls';
$properties['_returnTask'] = '';
$properties['_returnView'] = 'urls';
$properties['_returnLayout'] = 'view404';
$properties['_pageTitle'] = JText::_('COM_SH404SEF_EXPORTING_TITLE');
return $properties;
}
/**
* First step, by default a message
* and a Terminate button
*
*/
public function doStart() {
// which button should be displayed ?
$this->_visibleButtonsList = array ('next', 'cancel');
// A customiser :
$this->_steps = array( 'next' => 1, 'previous' => 0, 'cancel' => -1, 'terminate' => -2);
// return results
$result = array();
$result['mainText'] = JText::_('COM_SH404SEF_EXPORT_VIEW404_START');
return $result;
}
/**
* Second step, export data
*
*/
public function doExport() {
// which button should be displayed ?
$this->_visibleButtonsList = array ();
// next steps definition
$this->_steps = array( 'next' => 1, 'previous' => 0, 'cancel' => -1, 'terminate' => -2);
// return results
$result = array();
// exporting a limited set of pageids at a time
$nextStart = JRequest::getInt( 'nextstart', 0);
// are we adding to an existing data file ?
$this->_filename = Sh404sefHelperFiles::createFileName( $this->_filename, 'sh404sef_export_' . $this->_context);
// calculate number of items to export
$model = ShlMvcModel_Base::getInstance( 'urls', 'Sh404sefModel');
$model->setContext( 'urls.view404');
$options = (object) array('layout' => 'view404');
$this->_total = $model->getTotal( $options);
// do we have anything to export ?
if (empty( $this->_total)) {
$result['mainText'] = JText::_('COM_SH404SEF_NOTHING_TO_EXPORT');
// which button should be displayed ?
$this->_visibleButtonsList = array ('terminate');
// next step so to trigger download, as file is ready now
$this->_steps = array( 'next' => -2, 'previous' => 0, 'cancel' => -1, 'terminate' => -2);
return $result;
}
// get new start item
if (empty( $nextStart)) {
// this is first pass, starting from 0
$start = 0;
$nextStart = $start + self::MAX_PAGEIDS_PER_STEP;
if ($nextStart >= $this->_total) {
// reached the end
$nextStart = $this->_total;
}
} else {
$start = $nextStart;
$nextStart = $start + self::MAX_PAGEIDS_PER_STEP;
}
// are we done ? if so, move to next step
$result['hiddenText'] = '';
if ($start >= $this->_total) {
$result['mainText'] = JText::sprintf('COM_SH404SEF_EXPORT_DONE', $this->_total);
$result['mainText'] .= $this->_getTerminateOptions();
// which button should be displayed ?
$this->_visibleButtonsList = array ('terminate');
// next step so to trigger download, as file is ready now
$this->_steps = array( 'next' => 2, 'previous' => 0, 'cancel' => -1, 'terminate' => -2);
} else {
// actually export items
$this->_export( $start);
// continuing for another round
$result['mainText'] = JText::sprintf('COM_SH404SEF_EXPORT_EXPORTING', $start + 1, $this->_total);
$result['hiddenText'] = '<input type="hidden" name="nextstart" value="'.$nextStart.'" />';
$result['nextStart'] = $nextStart;
}
$result['continue'] = array( 'task' => 'next', 'nextstart' => $nextStart, 'filename' => base64_encode($this->_filename));
$result['continue'] = array_merge( $result['continue'], $this->_steps);
$result['hiddenText'] .= '<input type="hidden" name="filename" value="'.$this->_filename.'" />';
return $result;
}
/**
* Last step, send results as download
*
*/
public function doDownload() {
// fake content
$data = '';
// get the current filename with path
$this->_filename = Sh404sefHelperFiles::createFileName( $this->_filename, 'sh404sef_export_' . $this->_context);
// get a more readable filename
$displayName = date('Y-m-d') . '_' . $this->_context . '_export.txt';
Sh404sefHelperFiles::triggerDownload( $this->_filename, $displayName);
}
/**
* Close the wizard window and redirect to default page
*
*/
public function doTerminate() {
// are we set to purge temporary files ?
$purgeTempFiles = JRequest::getInt( 'purge_temp_files', 0);
if (!empty($purgeTempFiles)) {
Sh404sefHelperFiles::purgeTempFiles( 'sh404sef_export_' . $this->_context);
}
// now go back to main page
$result = array( 'redirectTo' => true);
return $result;
}
/**
* Close the wizard window and redirect to default page
*
*/
public function doCancel() {
$result = array();
$result['redirectTo'] = true;
$result['redirectOptions'] = array( 'sh404sefMsg' => 'COM_SH404SEF_WIZARD_CANCELLED');
return $result;
}
protected function _export( $start) {
// do we have a valid filename
$this->_filename = Sh404sefHelperFiles::createFileName( $this->_filename, 'sh404sef_export_' . $this->_context);
// put some data in the file
$end = $start + self::MAX_PAGEIDS_PER_STEP + 1;
$end = $end > $this->_total ? $this->_total : $end;
// fetch pageIds record from model
$model = ShlMvcModel_Base::getInstance( 'urls', 'Sh404sefModel');
$model->setContext( 'urls.view404');
$options = (object) array('layout' => 'view404');
$records = $model->getList( $options, $returnZeroElement = false, $start, $forcedLimit = self::MAX_PAGEIDS_PER_STEP);
// do we need a header written to the file, for first record
$header = $start == 0 ? Sh404sefHelperGeneral::getExportHeaders( $this->_context) . "\n" : '';
// format them for text file output
$data = '';
$counter = $start;
$glue = Sh404sefHelperFiles::$stringDelimiter . Sh404sefHelperFiles::$fieldDelimiter . Sh404sefHelperFiles::$stringDelimiter;
if (!empty( $records)) {
foreach( $records as $record) {
$counter++;
$textRecord = $record->oldurl . $glue . $record->newurl
. $glue . $record->cpt
. $glue . $record->rank
. $glue . $record->dateadd
. $glue . ''//Sh404sefHelperFiles::csvQuote( $record->metatitle)
. $glue . ''//Sh404sefHelperFiles::csvQuote( $record->metadesc)
. $glue . ''//Sh404sefHelperFiles::csvQuote( $record->metakey)
. $glue . ''//Sh404sefHelperFiles::csvQuote( $record->metalang)
. $glue . ''//Sh404sefHelperFiles::csvQuote( $record->metarobots)
. Sh404sefHelperFiles::$stringDelimiter;
$line = Sh404sefHelperFiles::$stringDelimiter . $counter . $glue . $textRecord;
$data .= $line . "\n";
}
}
// prepare data for storage
if (!empty( $header)) {
// first record written to file, prepend header
$data = $header . $data;
}
// store in file
$status = Sh404sefHelperFiles::appendToFile( $this->_filename, $data);
// return any error
return $status;
}
protected function _getTerminateOptions() {
$options = '<br /><br />';
$options .= '<input type="checkbox" name="purge_temp_files" value="1" checked="checked" >';
$options .= JText::_('COM_SH404SEF_PURGE_TEMP_FILES');
$options .= '<br />';
return $options;
}
}