378 lines
12 KiB
PHP
378 lines
12 KiB
PHP
|
|
<?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_COMPONENT.DS.'helpers'.DS.'excel_writer.php' );
|
||
|
|
require_once( JPATH_COMPONENT.DS.'controllers'.DS.'download.php' );
|
||
|
|
require_once( JPATH_COMPONENT.DS.'helpers'.DS.'parms.php' );
|
||
|
|
|
||
|
|
class Sql2excelCommon
|
||
|
|
{
|
||
|
|
|
||
|
|
function getWorksheets($wb_id)
|
||
|
|
{
|
||
|
|
|
||
|
|
$db =& JFactory::getDBO();
|
||
|
|
$user =& JFactory::getUser();
|
||
|
|
$aid = $user->get('aid', 0);
|
||
|
|
|
||
|
|
|
||
|
|
$wheres[] = " a.id = " . (int) $wb_id;
|
||
|
|
$wheres[] = " a.id = b.wb_id ";
|
||
|
|
$wheres[] = " b.ws_id = c.id ";
|
||
|
|
$wheres[] = " a.published=1 ";
|
||
|
|
$wheres[] = " c.published=1 ";
|
||
|
|
$wheres[] = " a.section=d.id ";
|
||
|
|
$wheres[] = " a.category=e.id ";
|
||
|
|
$wheres[] = " e.published=1 ";
|
||
|
|
|
||
|
|
|
||
|
|
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, c.sheetname, a.link_title as wbtitle, a.dlformat, a.preview_dl_btn " .
|
||
|
|
" FROM #__sql2excel_workbooks AS a, #__sql2excel_worksheet2book AS b, #__sql2excel_worksheets AS c, #__sql2excel_sections AS d, #__sql2excel_categories AS e " .
|
||
|
|
" WHERE " . implode( " AND ", $wheres ) .
|
||
|
|
" ORDER BY b.ordering";
|
||
|
|
|
||
|
|
$db->setQuery( $query );
|
||
|
|
$worksheets = $db->loadObjectList();
|
||
|
|
|
||
|
|
return $worksheets;
|
||
|
|
}
|
||
|
|
|
||
|
|
function getWorkbookParms($wb_id)
|
||
|
|
{
|
||
|
|
global $mainframe;
|
||
|
|
|
||
|
|
$db =& JFactory::getDBO();
|
||
|
|
$user =& JFactory::getUser();
|
||
|
|
$aid = $user->get('aid', 0);
|
||
|
|
|
||
|
|
|
||
|
|
$wheres[] = " a.id = " . (int) $wb_id;
|
||
|
|
$wheres[] = " a.id = b.wb_id ";
|
||
|
|
$wheres[] = " b.ws_id = c.id ";
|
||
|
|
//$wheres[] = " a.published=1 ";
|
||
|
|
$wheres[] = " c.published=1 ";
|
||
|
|
$wheres[] = " a.section=d.id ";
|
||
|
|
$wheres[] = " a.category=e.id ";
|
||
|
|
$wheres[] = " e.published=1 ";
|
||
|
|
|
||
|
|
|
||
|
|
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.parms, a.parms_prompt, a.parms_length " .
|
||
|
|
" FROM #__sql2excel_workbooks a, #__sql2excel_worksheet2book b, #__sql2excel_worksheets c, #__sql2excel_sections d, #__sql2excel_categories e " .
|
||
|
|
" WHERE " . implode( " AND ", $wheres );
|
||
|
|
|
||
|
|
$db->setQuery( $query );
|
||
|
|
//$wbParms = $db->loadResult();
|
||
|
|
$parmInfo = $db->loadObjectList();
|
||
|
|
if ( count($parmInfo) ) {
|
||
|
|
$parmInfo = $parmInfo[0];
|
||
|
|
$wbParms = $parmInfo->parms;
|
||
|
|
$wbParmsPrompt = $parmInfo->parms_prompt;
|
||
|
|
$wbParmsLength = $parmInfo->parms_length;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( $wbParms == '' ) {
|
||
|
|
return '';
|
||
|
|
} else {
|
||
|
|
|
||
|
|
// Component Configuration Parameters
|
||
|
|
$cmpParms = Sql2excelParms::getParms();
|
||
|
|
|
||
|
|
//$substWBParms = $cmpParms->get( 'subst_wbparms', '1' );
|
||
|
|
$substWBParms = Sql2excelParms::get($cmpParms,'subst_wbparms', '1');
|
||
|
|
|
||
|
|
$wbParmVars = '';
|
||
|
|
$wbParmVarsAdd = '';
|
||
|
|
$wbParmvalidate = '';
|
||
|
|
$wbHiddenParms = '';
|
||
|
|
$wbValidate = '';
|
||
|
|
$wbMultiTicks = '';
|
||
|
|
$nrWbParms = 0;
|
||
|
|
$extraParms = array();
|
||
|
|
|
||
|
|
// Workbook Parameters defined
|
||
|
|
$wbParmsHTML = '<div style="margin-bottom: 20px;">';
|
||
|
|
$wbParmsHTML .= '<fieldset>';
|
||
|
|
$wbParmsHTML .= '<legend>' . JText::_( 'Parameters') . '</legend>';
|
||
|
|
$wbParmsHTML .= '<table>';
|
||
|
|
|
||
|
|
// Get common substitution variables (for default value substitution)
|
||
|
|
$substParms = Sql2excelControllerDownload::getSubstParms();
|
||
|
|
|
||
|
|
$i=1;
|
||
|
|
$parmsArr = explode('~@~',$wbParms);
|
||
|
|
foreach ($parmsArr as $parm) {
|
||
|
|
$parmTokens = explode(',', $parm);
|
||
|
|
$parmTokens[0] = str_replace('~COMMA~', ',', $parmTokens[0]);
|
||
|
|
$parmTokens[1] = str_replace('~COMMA~', ',', $parmTokens[1]);
|
||
|
|
$parmVis = 1;
|
||
|
|
if ( isset($parmTokens[5]) ) { $parmVis = $parmTokens[5]; }
|
||
|
|
|
||
|
|
if ( $parmVis ) {
|
||
|
|
$wbParmsHTML .= '<tr>';
|
||
|
|
$wbParmsHTML .= '<td valign=top><b>' . Sql2excelCommon::encodeHTML($parmTokens[0]) . '</b></td>';
|
||
|
|
$wbParmsHTML .= '<td valign=top> : </td>';
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( strpos($parmTokens[2],'SQL') > 0 ) {
|
||
|
|
$parmTokens[3] = str_replace('~COMMA~',',',$parmTokens[3]);
|
||
|
|
$parmTokens[3] = str_replace('~NL~',"\n",$parmTokens[3]);
|
||
|
|
$parmTokens[3] = Sql2excelCommon::utf8_strrev($parmTokens[3]);
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( $substWBParms ) {
|
||
|
|
$defaultValue = writeExcel::replace_vars($parmTokens[3], $substParms, $extraParms);
|
||
|
|
} else {
|
||
|
|
$defaultValue = $parmTokens[3];
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( $parmTokens[2] == 'ListMultiStr' || $parmTokens[2] == 'ListSQLMultiStr' ) {
|
||
|
|
$wbMultiTicks .= ',' . $i;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( $parmTokens[2] == 'List' || $parmTokens[2] == 'ListMultiNum' || $parmTokens[2] == 'ListMultiStr' ) {
|
||
|
|
if ( $parmVis ) {
|
||
|
|
if ( strpos($parmTokens[2],'Multi') > 0 ) {
|
||
|
|
if ( $wbParmsLength > 0 ) {
|
||
|
|
$multi = ' SIZE=' . $wbParmsLength . ' MULTIPLE';
|
||
|
|
} else {
|
||
|
|
$multi = ' MULTIPLE';
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$multi = '';
|
||
|
|
}
|
||
|
|
$wbParmsHTML .= '<td><select id="parm' . $i . '"' . $multi . ">\n";
|
||
|
|
}
|
||
|
|
|
||
|
|
$tokens = explode('~NL~',$parmTokens[3]);
|
||
|
|
if ( is_array($tokens) ) {
|
||
|
|
$defaultValue = $tokens[0];
|
||
|
|
$defaultValue = explode('~COMMA~',$defaultValue);
|
||
|
|
$defaultValue = $defaultValue[0];
|
||
|
|
if ( strpos($parmTokens[2],'Multi') > 0 ) {
|
||
|
|
$defaultValue = '';
|
||
|
|
foreach ( $tokens as $option ) {
|
||
|
|
$opt = explode('~COMMA~',$option);
|
||
|
|
if ( sizeof($opt) > 2 ) {
|
||
|
|
$dVal = $opt[0];
|
||
|
|
if ( $parmTokens[2] == 'ListMultiStr' ) {
|
||
|
|
$dVal = "'" . $dVal . "'";
|
||
|
|
}
|
||
|
|
if ( $defaultValue == '' ) {
|
||
|
|
$defaultValue .= $dVal;
|
||
|
|
} else {
|
||
|
|
$defaultValue .= ',' . $dVal;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( $parmVis ) {
|
||
|
|
foreach ( $tokens as $option ) {
|
||
|
|
$opt = explode('~COMMA~',$option);
|
||
|
|
$selected = '';
|
||
|
|
if ( sizeof($opt) > 2 ) {
|
||
|
|
$selected = ' selected="selected"';
|
||
|
|
$defaultValue = $opt[0];
|
||
|
|
}
|
||
|
|
$optLbl = $opt[0];
|
||
|
|
if ( sizeof($opt) > 1 ) {
|
||
|
|
$optLbl = $opt[1];
|
||
|
|
}
|
||
|
|
$wbParmsHTML .= '<option value="' . Sql2excelCommon::encodeHTML($opt[0]) . '"' . $selected . '>' . Sql2excelCommon::encodeHTML($optLbl) . "\n";
|
||
|
|
}
|
||
|
|
|
||
|
|
$wbParmsHTML .= "</select></td>\n";
|
||
|
|
} else {
|
||
|
|
$wbParmsHTML .= '<td><input type="hidden" id="parm' . $i . '" value="'. Sql2excelCommon::encodeHTML($defaultValue) . '"></td>';
|
||
|
|
}
|
||
|
|
|
||
|
|
} elseif ( $parmTokens[2] == 'ListSQL' || $parmTokens[2] == 'ListSQLMultiNum' || $parmTokens[2] == 'ListSQLMultiStr' ) {
|
||
|
|
|
||
|
|
if ( $parmVis ) {
|
||
|
|
if ( strpos($parmTokens[2],'Multi') > 0 ) {
|
||
|
|
if ( $wbParmsLength > 0 ) {
|
||
|
|
$multi = ' SIZE=' . $wbParmsLength . ' MULTIPLE';
|
||
|
|
} else {
|
||
|
|
$multi = ' MULTIPLE';
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$multi = '';
|
||
|
|
}
|
||
|
|
$wbParmsHTML .= '<td><select id="parm' . $i . '"' . $multi . ">\n";
|
||
|
|
}
|
||
|
|
|
||
|
|
// Get database connection
|
||
|
|
$db = null;
|
||
|
|
$parmDB = 1;
|
||
|
|
$dbType = 1;
|
||
|
|
if ( isset($parmTokens[4]) ) { $parmDB = $parmTokens[4]; }
|
||
|
|
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 ) {
|
||
|
|
$query = $defaultValue;
|
||
|
|
$rows = writeExcel::getResults($db, $query, $cmpParms, $dbType);
|
||
|
|
|
||
|
|
$defaultValue = '';
|
||
|
|
if ( is_array($rows) ) {
|
||
|
|
$colNames = writeExcel::getColumnNames($rows);
|
||
|
|
$firstRow = $rows[0];
|
||
|
|
|
||
|
|
if ( count($colNames) > 2 ) {
|
||
|
|
$defaultValue = $firstRow->$colNames[2];
|
||
|
|
} else {
|
||
|
|
$defaultValue = $firstRow->$colNames[0];
|
||
|
|
}
|
||
|
|
if ( $parmVis ) {
|
||
|
|
foreach ($rows as $option ) {
|
||
|
|
$selected = '';
|
||
|
|
if ( $option->$colNames[0] == $defaultValue ) { $selected = ' selected="selected"'; }
|
||
|
|
if ( count($colNames) > 1 && isset($option->$colNames[1]) ) {
|
||
|
|
$wbParmsHTML .= '<option value="' . Sql2excelCommon::encodeHTML($option->$colNames[0]) . '"' . $selected . '>' . Sql2excelCommon::encodeHTML($option->$colNames[1]) . "\n";
|
||
|
|
} else {
|
||
|
|
$wbParmsHTML .= '<option value="' . Sql2excelCommon::encodeHTML($option->$colNames[0]) . '"' . $selected . '>' . Sql2excelCommon::encodeHTML($option->$colNames[0]) . "\n";
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( !$parmVis ) {
|
||
|
|
$wbParmsHTML .= '<td><input type="hidden" id="parm' . $i . '" value="'. Sql2excelCommon::encodeHTML($defaultValue) . '"></td>';
|
||
|
|
}
|
||
|
|
|
||
|
|
} else {
|
||
|
|
$wbParmsHTML = JText::_('ERROR') . ' : ' . JText::_('Database Connection Error!');
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( $parmVis ) {
|
||
|
|
$wbParmsHTML .= "</select></td>\n";
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
if ( $parmVis ) {
|
||
|
|
$wbParmsHTML .= '<td><input type="text" id="parm' . $i . '" value="'. Sql2excelCommon::encodeHTML($defaultValue) . '"></td>';
|
||
|
|
} else {
|
||
|
|
$wbParmsHTML .= '<td><input type="hidden" id="parm' . $i . '" value="'. Sql2excelCommon::encodeHTML($defaultValue) . '"></td>';
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$wbParmsHTML .= '</tr>';
|
||
|
|
|
||
|
|
$wbParmVars .= "var parm" . $i . "H=document.getElementById('parm" . $i . "');\n";
|
||
|
|
if ( strpos($parmTokens[2],'Multi') > 0 ) {
|
||
|
|
if ( strpos($parmTokens[2],'Str') > 0 ) {
|
||
|
|
$wbParmVars .= "var parm" . $i . "=formatSelected(getSelected(parm" . $i . "H),1);\n";
|
||
|
|
} else {
|
||
|
|
$wbParmVars .= "var parm" . $i . "=formatSelected(getSelected(parm" . $i . "H),0);\n";
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$wbParmVars .= "var parm" . $i . "=parm" . $i . "H.value;\n";
|
||
|
|
}
|
||
|
|
$wbParmVarsAdd .= '&parm' . $i . '=\' + urlencode(parm' . $i . ") + '";
|
||
|
|
$encodedval = Sql2excelCommon::encodeHTML($defaultValue);
|
||
|
|
$wbHiddenParms .= "<input type=\"hidden\" name=\"wbparm" . $i . "\" id=\"wbparm" . $i . "\" value=\"" . $encodedval . "\">\n";
|
||
|
|
$wbValidate .= '~@~parm' . $i . ',' . $parmTokens[0] . ',' . $parmTokens[2];
|
||
|
|
|
||
|
|
// Save parameter value for future substitutions
|
||
|
|
$extraParms[$parmTokens[1]]=$defaultValue;
|
||
|
|
|
||
|
|
$i++;
|
||
|
|
}
|
||
|
|
|
||
|
|
$nrWbParms = $i-1;
|
||
|
|
|
||
|
|
$wbParmsHTML .= '</table>';
|
||
|
|
$wbParmsHTML .= '</fieldset>';
|
||
|
|
$wbParmsHTML .= '</div>';
|
||
|
|
|
||
|
|
if ( $wbValidate != '' ) {
|
||
|
|
$wbValidate = substr($wbValidate,3);
|
||
|
|
$wbValidate = "if ( !validateParms(\"" . $wbValidate . "\",checkMulti) ) {\n";
|
||
|
|
$wbValidate .= " return false;\n";
|
||
|
|
$wbValidate .= "}\n";
|
||
|
|
}
|
||
|
|
|
||
|
|
$wbRefresh = "<input type=\"button\" value=\" " . JText::_( 'Refresh') . " \" onClick=\"UpdateTab(currTabH,currWS,1);\"> ";
|
||
|
|
|
||
|
|
// Add Preview hidden parameter
|
||
|
|
$wbHiddenParms .= "<input type=\"hidden\" name=\"preview\" value=\"1\">\n";
|
||
|
|
|
||
|
|
// Create Javascript snippet for Multi-Ticks check
|
||
|
|
$wbMultiTicks = Sql2excelCommon::multiTicksJS($wbMultiTicks);
|
||
|
|
|
||
|
|
if ( $wbParmsPrompt ) {
|
||
|
|
return array($wbParmsHTML, $wbParmVars, $wbParmVarsAdd, $wbHiddenParms, $nrWbParms, $wbRefresh, $wbValidate, $wbMultiTicks);
|
||
|
|
} else {
|
||
|
|
return array('', '', '', $wbHiddenParms, 0, '', '','');
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function multiTicksJS($str) {
|
||
|
|
$str = substr($str,1);
|
||
|
|
$retStr = '';
|
||
|
|
$checkStr = '';
|
||
|
|
$ticksTokens = explode(',',$str);
|
||
|
|
foreach ($ticksTokens as $i) {
|
||
|
|
if ( $i > 0 ) {
|
||
|
|
if ( $checkStr == '' ) {
|
||
|
|
$checkStr = 'i==' . $i;
|
||
|
|
} else {
|
||
|
|
$checkStr .= ' || i==' . $i;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if ( $checkStr != '' ) {
|
||
|
|
$retStr = 'if (' . $checkStr . ') { ticks=1; }';
|
||
|
|
}
|
||
|
|
return $retStr;
|
||
|
|
}
|
||
|
|
|
||
|
|
function encodeHTML($str) {
|
||
|
|
return htmlspecialchars($str,ENT_COMPAT,'UTF-8');
|
||
|
|
}
|
||
|
|
|
||
|
|
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]));
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
?>
|