예제 #1
0
 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 = '';
     }
 }
예제 #2
0
 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;
 }