FundacionLQDVI_WebCongresos/www/administrator/components/com_sql2excel/helpers/common.php

360 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_SITE.DS.'components'.DS.'com_sql2excel'.DS.'helpers'.DS.'excel_writer.php');
require_once(JPATH_SITE.DS.'administrator'.DS.'components'.DS.'com_sql2excel'.DS.'controllers'.DS.'download.php' );
require_once(JPATH_SITE.DS.'components'.DS.'com_sql2excel'.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 c.id, c.sheetname, a.link_title as wbtitle " .
" FROM #__sql2excel_workbooks a, #__sql2excel_worksheet2book b, #__sql2excel_worksheets c, #__sql2excel_sections d, #__sql2excel_categories 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 ( $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=\"&nbsp;&nbsp;" . JText::_( 'Refresh') . "&nbsp;&nbsp;\" onClick=\"UpdateTab(currTabH,currWS,1);\">&nbsp;&nbsp;&nbsp;";
// 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]));
}
}
?>