FundacionLQDVI_WebCongresos/www/components/com_sql2excel/controllers/download.php

452 lines
15 KiB
PHP
Raw Normal View History

<?php
/*
* @component SQL 2 Excel Component
* @copyright Copyright (C) Joomla-R-Us, joomla-r-us.com
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3
*/
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
require_once( JPATH_SITE.DS.'components'.DS.'com_sql2excel'.DS.'helpers'.DS.'excel_writer.php' );
require_once ( JPATH_SITE.DS.'components'.DS.'com_sql2excel'.DS.'helpers'.DS.'parms.php');
class Sql2excelControllerDownload extends Sql2excelController
{
/**
* constructor (registers additional tasks to methods)
* @return void
*/
function __construct()
{
parent::__construct();
// Register Extra tasks
$this->registerTask( 'dl' , 'download' );
$this->registerTask( 'download' , 'download' );
}
function download()
{
$useCache = 1;
global $mainframe;
$id = Sql2excelParms::get_parm_value('id', 'int', 0);
$wb_id = (int) $id;
$preview = Sql2excelParms::get_parm_value('preview', 'int', '-1');
$wbParms = $this->getWorkbookParms($wb_id);
if ( count($wbParms) ) {
//$cmpParms = &$mainframe->getParams();
$cmpParms = Sql2excelParms::getParms();
$substParms = $this->getSubstParms();
$wsParms = $this->getWorksSheetParms($wb_id);
$extraParms = array();
$substWBParms = Sql2excelParms::get($cmpParms,'subst_wbparms', '1');
// User Parameters ?
if ( $wbParms[0]->parms != '' ) {
$extraParms = $this->parse_wb_parms($wbParms[0]->parms, $wbParms[0]->parms_prompt,$preview, $substWBParms, $cmpParms, $substParms);
if ( count($extraParms) > 0 ) {
$substParms = array_merge($substParms,$extraParms);
// Don't use cache for Workbooks with Workbook Parameters
$useCache = 0;
}
} // end User Parameters
// Output XLS, CSV or HTM
$dlformat = 1;
if ( isset($wbParms[0]->dlformat) ) {
$dlformat = $wbParms[0]->dlformat;
}
$sheet = Sql2excelParms::get_parm_value('sheet', 'int', 0);
// Is the format specified through the URL?
$format = Sql2excelParms::get_parm_value('format', 'int', 0);
if ( $format < 1 ) {
// No - auto-select format based on settings
if ( $dlformat == 3 || ( $dlformat == 1 && Sql2excelParms::get($cmpParms,'dlformat', '2') == 3 ) ) {
$format = 3;
} elseif ( $dlformat == 4 || ( $dlformat == 1 && Sql2excelParms::get($cmpParms,'dlformat', '2') == 4 ) ) {
$format = 4;
} else {
//writeExcel::writeFile($wbParms,$wsParms,$cmpParms,$substParms,$useCache,0);
$format = 2;
}
}
// Finally, output in the selected download format
if ( $format == 3 ) {
require_once( JPATH_COMPONENT.DS.'helpers'.DS.'csv_writer.php' );
writeCSV::writeFile($wbParms,$wsParms,$sheet,$cmpParms,$substParms,$useCache,0);
} elseif ( $format == 4 ) {
require_once( JPATH_COMPONENT.DS.'helpers'.DS.'htm_writer.php' );
writeHTM::writeFile($wbParms,$wsParms,$sheet,$cmpParms,$substParms,$useCache,0);
} else {
writeExcel::writeFile($wbParms,$wsParms,$cmpParms,$substParms,$useCache,0);
$format = 2;
}
} else {
JError::raiseError(500, JText::_( 'ERROR : Excel Workbook Not Found!' ) );
}
exit;
}
function utf8_strrev($str, $reverse_numbers = true){
$pattern = $reverse_numbers ? '/./us' : '/(\d+)?./us';
preg_match_all($pattern, $str, $ar);
return join('',array_reverse($ar[0]));
}
/**
* Returns the Workbook Parameters
* @return object with parms
*/
function getWorkbookParms($id, $preview=0)
{
$db = & JFactory::getDBO();
$user =& JFactory::getUser();
$aid = $user->get('aid', 0);
$wheres[] = " a.id = " . (int) $id;
$wheres[] = " a.section = b.id ";
$wheres[] = " a.category = c.id ";
$wheres[] = " a.published=1 ";
$wheres[] = " b.published=1 ";
$wheres[] = " c.published=1 ";
if ($aid !== null) {
$wheres[] = "a.access <= " . (int) $aid;
$wheres[] = "b.access <= " . (int) $aid;
$wheres[] = "c.access <= " . (int) $aid;
}
$query = " SELECT a.* " .
" FROM #__sql2excel_workbooks AS a, #__sql2excel_sections AS b, #__sql2excel_categories AS c " .
" WHERE " . implode( " AND ", $wheres );
$db->setQuery( $query );
$rows = $db->loadObjectList();
// Update Workbook Download count
if ( count($rows) >= 1 && $preview==0 ) {
$query = ' UPDATE #__sql2excel_workbooks ' .
' SET count=count+1 ' .
' WHERE ID=' . (int) $id;
$db->setQuery( $query );
$db->query();
}
return $rows;
}
/**
* Returns worksheet info
*/
function getWorksSheetParms($id, $ws_id=0)
{
$db = & JFactory::getDBO();
$user =& JFactory::getUser();
$aid = $user->get('aid', 0);
$wheres[] = ' a.id=b.ws_id ';
$wheres[] = ' b.wb_id=' . $id . ' ';
if ( $ws_id > 0 ) {
$wheres[] = ' a.id=' . $ws_id . ' ';
}
$wheres[] = " a.published=1 ";
$wheres[] = " b.wb_id=c.id ";
$wheres[] = " c.published=1 ";
$wheres[] = " c.section=d.id ";
$wheres[] = " c.category=e.id ";
$wheres[] = " d.published=1 ";
$wheres[] = " e.published=1 ";
$wheres[] = " f.id = a.database ";
if ($aid !== null) {
$wheres[] = "a.access <= " . (int) $aid;
$wheres[] = "c.access <= " . (int) $aid;
$wheres[] = "d.access <= " . (int) $aid;
$wheres[] = "e.access <= " . (int) $aid;
}
$query = ' SELECT a.id as key1, c.id as key2, a.*, b.*, f.db_host, f.db_username, f.db_password, f.db_database, f.db_type, f.db_prefix ' .
' FROM #__sql2excel_worksheets AS a, #__sql2excel_worksheet2book AS b, #__sql2excel_workbooks AS c, #__sql2excel_sections AS d, #__sql2excel_categories AS e, #__sql2excel_databases AS f' .
' WHERE ' . implode(' AND ', $wheres ) .
' ORDER BY b.ordering';
$db->setQuery( $query );
$rows = $db->loadObjectList();
// Update Worksheet Download counts
if ( count($rows) >= 1 && $ws_id == 0 ) {
$wsIDs = array();
foreach ( $rows as $row ) {
$wsIDs[] = $row->ws_id;
}
$wsIDs = implode(',', $wsIDs);
$updateSQL = ' UPDATE #__sql2excel_worksheets c ' .
' SET c.count=c.count+1 ' .
' WHERE c.ID IN ( ' . $wsIDs . ')';
$db->setQuery( $updateSQL );
$db->query();
}
return $rows;
}
/**
* Returns Substitution Parameters
* @return array with parms/values
*/
function getSubstParms()
{
$sparms = array();
// User Variables
$user =& JFactory::getUser();
$sparms{'USER_ID'} = $user->id;
$sparms{'USERNAME'} = $user->username;
$sparms{'USER_NAME'} = $user->name;
$sparms{'USER_EMAIL'} = $user->email;
$sparms{'USER_TYPE'} = $user->usertype;
$sparms{'USER_SEMAIL'} = $user->sendEmail;
$sparms{'USER_GID'} = $user->gid;
$sparms{'USER_RDATE'} = $user->registerDate;
$sparms{'USER_LDATE'} = $user->lastvisitDate;
$sparms{'USER_ACTIVATION'} = $user->activation;
$sparms{'USER_AID'} = $user->aid;
$userParams = $user->params;
$userParams = explode("\n",$userParams);
foreach ( $userParams as $p ) {
$p = explode('=',$p);
if ( count($p) == 2 && $p[0] == 'timezone' ) {
$sparms{'USER_TZ'} = $p[1];
} elseif ( count($p) == 2 && $p[0] == 'language' ) {
$sparms{'USER_LANG'} = $p[1];
}
}
if ( isset($_SERVER['REMOTE_ADDR']) ) { $sparms{'USER_IP'} = $_SERVER['REMOTE_ADDR']; }
if ( isset($_SERVER['USER_AGENT']) ) { $sparms{'USER_AGENT'} = $_SERVER['HTTP_USER_AGENT']; }
// Server Variables
$sparms{'SERVER_URL'} = JURI::root();
if ( isset($_SERVER['HTTP_HOST']) ) { $sparms{'SERVER_HOST'} = $_SERVER['HTTP_HOST']; }
if ( isset($_SERVER['SERVER_ADDR']) ) { $sparms{'SERVER_SERVERIP'} = $_SERVER['SERVER_ADDR']; }
if ( isset($_SERVER['SERVER_SOFTWARE']) ) { $sparms{'SERVER_SOFTWARE'} = $_SERVER['SERVER_SOFTWARE']; }
if ( isset($_SERVER['HTTP_REFERER']) ) {
$referer = $_SERVER['HTTP_REFERER'];
$sparms{'SERVER_REFERER'} = $referer;
$referer_queryString = parse_url($referer);
if ( isset($referer_queryString['query']) ) {
$referer_queryString = $referer_queryString['query'];
parse_str($referer_queryString, $matches);
$urlParms = array_keys($matches);
foreach ( $urlParms as $parmName ) {
if ( !is_array($matches{$parmName}) ) {
$parmVal = explode(':', $matches{$parmName});
$sparms{'JOOMLA_PARM_' . strtoupper($parmName) } = $parmVal[0];
}
}
}
}
// Joomla Variables
$version = new JVersion();
$sparms{'JOOMLA_VER_LONG'} = $version->getLongVersion();
$sparms{'JOOMLA_VER'} = $version->getShortVersion();
// SQL 2 Excel Variables
if ( isset($_SERVER['REQUEST_URI']) ) { $sparms{'SQL2EXCEL_DLURL'} = JURI::root() . substr($_SERVER['REQUEST_URI'],1); }
return $sparms;
}
function parse_wb_parms($parms, $parms_prompt=0, $preview=0, $substWBParms=1, $cmpParms = array(), $substParms = array()) {
$extraParms = array();
$i=1;
$parmsArr = explode('~@~',$parms);
foreach ($parmsArr as $parm) {
$parmTokens = explode(',', $parm);
if ( count($parmTokens) >= 4 ) {
$parmID = 'wbparm' . $i;
$parmName = $parmTokens[0];
$parmVar = $parmTokens[1];
$parmType = $parmTokens[2];
$parmValue = $parmTokens[3];
$parmDB = 1;
if ( isset($parmTokens[4]) ) { $parmDB = $parmTokens[4]; }
if ( $parmType == "Integer" || $parmType == "UnsignedInteger" ) {
$parmValue = Sql2excelParms::get_parm_value($parmID, 'int', $parmValue);
} elseif ( $parmType == "Real" || $parmType == "UnsignedRealReal") {
$parmValue = Sql2excelParms::get_parm_value($parmID, 'float', $parmValue);
} elseif ( $parmType == "AlphaNum" ) {
$parmValue = Sql2excelParms::get_parm_value($parmID, 'alnum', $parmValue);
} elseif ( $parmType == "Username" ) {
$parmValue = Sql2excelParms::get_parm_value($parmID, 'username', $parmValue);
} elseif ( $parmType == "List" || $parmType == "ListMultiNum" || $parmType == "ListMultiStr" ) {
$parmList = Sql2excelParms::get_parm_value($parmID, 'string', $parmValue);
if ( $parms_prompt == 0 ) {
if ( $parmList != '' ) {
$parmList = str_replace('~COMMA~',',',$parmList);
$parmList = explode('~NL~',$parmList);
$defaultValue = explode(',',$parmList[0]);
$defaultValue = $defaultValue[0];
$multiStr = '';
foreach ( $parmList as $lisval ) {
$tokens = explode(',',$lisval);
if ( sizeof($tokens) > 2 ) {
if ( strpos($parmType,'Multi') > 0 ) {
if ( $parmType == "ListMultiNum" ) {
$pVal = $tokens[0];
} else {
$pVal = "'" . $tokens[0] . "'";
}
if ( $multiStr == '' ) {
$multiStr = $pVal;
} else {
$multiStr .= ',' . $pVal;
}
} else {
$defaultValue = $tokens[0];
}
}
}
if ( strpos($parmType,'Multi') > 0 && $multiStr) {
$parmValue = $multiStr;
} else {
$parmValue = $defaultValue;
}
//$parmValue = $defaultValue;
} else {
$parmValue = '';
}
} else {
// Parameter was prompted => getting value directly
$parmValue = $parmList;
}
} elseif ( $parmType == "ListSQL" || $parmType == 'ListSQLMultiNum' || $parmType == 'ListSQLMultiStr' ) {
$query = Sql2excelParms::get_parm_value($parmID, 'string', $parmValue);
if ( $parms_prompt == 0 && !$preview ) {
// Parameter not prompted => getting SQL query passed
$query = str_replace('~COMMA~',',',$query);
$query = str_replace('~NL~',"\n",$query);
$query = str_replace('~NL~',"\n",$query);
$query = $this->utf8_strrev($query);
if ( $substWBParms ) {
$query = writeExcel::replace_vars($query, $substParms,$extraParms);
}
// Get Database Connection
$db = null;
$dbType = 1;
if ( $parmDB == 1 ) {
$db = & JFactory::getDBO();
} else {
$jdb = & JFactory::getDBO();
$jdb->setQuery( 'SELECT * FROM #__sql2excel_databases WHERE ID=' . $parmDB );
$dbInfo = $jdb->loadObject();
if ( $dbInfo ) {
$db = writeExcel::getDB($dbInfo);
$dbType=$dbInfo->db_type;
}
}
if ( $db ) {
$rows = writeExcel::getResults($db, $query, $cmpParms, $dbType);
if ( is_Array($rows) ) {
$colNames = writeExcel::getColumnNames($rows);
$firstRow = $rows[0];
if ( strpos($parmType,'Multi') > 0 ) {
if ( count($colNames) > 2 ) {
$multiStr = '';
foreach ( $rows as $row ) {
if ( $row->$colNames[2] != '' ) {
if ( $parmType == 'ListSQLMultiStr' ) {
$pVal = "'" . $row->$colNames[2] . "'";
} else {
$pVal = $row->$colNames[2];
}
if ( $multiStr == '' ) {
$multiStr = $pVal;
} else {
$multiStr .= ',' . $pVal;
}
}
}
if ( $multiStr != '' ) {
$parmValue = $multiStr;
} else {
$parmValue = $firstRow->$colNames[0];
if ( $parmType == 'ListSQLMultiStr' ) {
$parmValue = "'" . $parmValue . "'";
}
}
} else {
$parmValue = $firstRow->$colNames[0];
if ( $parmType == 'ListSQLMultiStr' ) {
$parmValue = "'" . $parmValue . "'";
}
}
} else {
if ( count($colNames) > 2 ) {
//$parmValue = $firstRow[2];
$parmValue = $firstRow->$colNames[2];
} else {
//$parmValue = $firstRow[0];
$parmValue = $firstRow->$colNames[0];
}
}
} else {
$parmValue = '';
}
} else {
$parmValue = JText::_('ERROR: Workbook Parameter') . ' ' . $parmVar . ' - ' . JText::_('Database Connection Error!');
}
// Save this parameter for further substitutions
$extraParms[$parmVar]=$parmValue;
} else {
// Parameter was prompted or No Prompt Preview => getting value directly
$parmValue = $query;
}
} else {
$parmValue = Sql2excelParms::get_parm_value($parmID, 'string', $parmValue);
}
if ( is_string($parmValue) && $substWBParms ) {
$parmValue = writeExcel::replace_vars($parmValue, $substParms,$extraParms);
}
$wbP[$parmVar]=$parmValue;
// Save this parameter for further substitutions
$extraParms[$parmVar]=$parmValue;
$i++;
}
}
return $extraParms;
}
}