public static function validateSqlRemovedFields(&$sql, $alternativeDb, $reportTable) { require_once "modules/asol_Reports/include_basic/manageReportsFunctions.php"; global $sugar_config; $hasReferencesRemovesField = false; if ($alternativeDb === false) { $fieldsToBeRemoved = asol_ReportsManagementFunctions::getNonVisibleFields($reportTable); } else { //***********************// //***AlineaSol Premium***// //***********************// $extraParams = array('dbIndex' => $alternativeDb, 'dbName' => null, 'reportTable' => null); $returnedPremiumFields = asol_ReportsUtils::managePremiumFeature("externalDatabasesReports", "reportFunctions.php", "getNonVisibleExternalDbFields", $extraParams); $fieldsToBeRemoved = $returnedPremiumFields !== false ? $returnedPremiumFields : array(); //***********************// //***AlineaSol Premium***// //***********************// } foreach ($fieldsToBeRemoved as $fieldToBeRemoved) { if (strpos($sql, $fieldToBeRemoved) !== false) { $hasReferencesRemovesField = true; asol_Report::$reported_error = 'Forbidden field has been referenced at SQL query: ' . $fieldToBeRemoved; break; } } if ($hasReferencesRemovesField) { $sql = ''; } }
public static function getSelectionResults($query, $columnAsKey = null, $useAlternativeDb = true, $notCrmExternalDb = false, $detailColumn = null, $formatInfo = null, $avoidLogging = false) { global $sugar_config, $db, $current_user, $mod_strings; self::$reported_error = self::$reported_error === null ? null : self::$reported_error; $query = html_entity_decode($query); $retArray = array(); if (!$avoidLogging) { asol_ReportsUtils::reports_log('debug', 'ASOL_Reports query ----> [ ' . $query . ' ]', __FILE__, __METHOD__, __LINE__); } if ((!isset($sugar_config["asolReportsDbAddress"]) || !$useAlternativeDb) && $notCrmExternalDb === false) { $queryResults = $db->query($query); while ($queryRow = $db->fetchByAssoc($queryResults)) { if (isset($detailColumn)) { $theGroup = asol_ReportsGenerateQuery::formatDateSpecialsGroup($formatInfo['reportId'], $formatInfo['dashletId'], $queryRow['asol_grouping_field'], $detailColumn, $formatInfo['userDateFormat'], $formatInfo['userTZ'], $formatInfo['currencyId'], $formatInfo['gmtDates']); unset($queryRow['asol_grouping_field']); $theGroup = $theGroup === '' ? $mod_strings['LBL_REPORT_NAMELESS'] : $theGroup; $retArray[$theGroup][] = $queryRow; } else { if (isset($columnAsKey)) { $retArray[$queryRow[$columnAsKey]] = $queryRow; } else { $retArray[] = $queryRow; } } } } else { $mysqli = self::getMySqlConnection($notCrmExternalDb); if ($mysqli === false) { return; } $queryResults = $mysqli->query($query); if (!$queryResults) { if (!$avoidLogging) { self::$reported_error = mysqli_error($mysqli); asol_ReportsUtils::reports_log('fatal', 'ASOL_Reports ErrorQuery ----> [ ' . mysqli_error($mysqli) . ' ]', __FILE__, __METHOD__, __LINE__); } } else { while ($queryRow = $queryResults->fetch_assoc()) { if (isset($detailColumn)) { $theGroup = asol_ReportsGenerateQuery::formatDateSpecialsGroup($formatInfo['reportId'], $formatInfo['dashletId'], $queryRow['asol_grouping_field'], $detailColumn, $formatInfo['userDateFormat'], $formatInfo['userTZ'], $formatInfo['currencyId'], $formatInfo['gmtDates']); unset($queryRow['asol_grouping_field']); $theGroup = $theGroup === '' ? $mod_strings['LBL_REPORT_NAMELESS'] : $theGroup; $retArray[$theGroup][] = $queryRow; } else { if (isset($columnAsKey)) { $retArray[$queryRow[$columnAsKey]] = $queryRow; } else { $retArray[] = $queryRow; } } } } if ($queryResults) { $queryResults->close(); } mysqli_close($mysqli); } //checkReportsMaxExecutionTime(); if (isset($sugar_config['asolReportsMaxExecutionTime']) && $sugar_config['asolReportsMaxExecutionTime'] > 0 && isset($_REQUEST["reportRequestId"]) && isset($_REQUEST["initRequestDateTimeStamp"])) { $initGmtDateTimeStamp = $_REQUEST["initRequestDateTimeStamp"]; $currentGmtTimeStamp = time(); $runningTimeSeconds = $currentGmtTimeStamp - $initGmtDateTimeStamp; if (!$avoidLogging) { asol_ReportsUtils::reports_log('debug', 'ASOL_Reports checkReportsMaxExecutionTime ----> [ ' . $runningTimeSeconds . ' Seconds ]', __FILE__, __METHOD__, __LINE__); } if ($runningTimeSeconds > $sugar_config['asolReportsMaxExecutionTime']) { if (!$avoidLogging) { asol_ReportsUtils::reports_log('fatal', 'Report with Request_Id [' . $_REQUEST["reportRequestId"] . '] has TimedOut!!', __FILE__, __METHOD__, __LINE__); } $sqlExecutingStatus = "UPDATE asol_reports_dispatcher SET status = 'timeout' WHERE id='" . $_REQUEST["reportRequestId"] . "' LIMIT 1"; $db->query($sqlExecutingStatus); echo translate('LBL_REPORT_TIMEOUT', 'asol_Reports'); if (!$avoidLogging) { asol_ReportsUtils::reports_log('fatal', 'ASOL_Reports Execution TimedOut ----> [ ' . $sugar_config['asolReportsMaxExecutionTime'] . ' Seconds for asolReportsMaxExecutionTime]', __FILE__, __METHOD__, __LINE__); } exit; } } return $retArray; }