public static function getCrmTableRelatedFields($reportModule, $bean, $fieldsToBeRemoved, $translateFieldLabels, &$relateField, $mainRelatedKey)
 {
     global $current_user, $app_list_strings;
     $primaryKey = "id";
     $rsFields = self::getModuleResultSetFields($reportModule, $bean->table_name, $relateField, $fieldsToBeRemoved);
     $allowedModules = asol_ReportsUtils::getCurrentUserAvailableModules(false);
     $value = $rsFields[0];
     $keys = array();
     $fields_relationship = array();
     $fields_relationship_labels = array();
     $fields = array();
     $fields_labels = array();
     $fields_type = array();
     $fields_enum_operators = array();
     $fields_enum_references = array();
     $has_index = array();
     $has_related = array();
     $explodedField = explode(".", $value['Field']);
     $currentField = count($explodedField) == 2 ? $explodedField[1] : $value['Field'];
     $fieldInfo = asol_Report::getFieldInfoFromVardefs($reportModule, $currentField);
     if ($currentField == $primaryKey) {
         // CRM RelationShips
         $k = $j = 0;
         $rshr = self::getModuleRelationShips($reportModule, $currentField);
         if (count($rshr) > 0) {
             while ($j < count($rshr)) {
                 $relatedModule = $rshr[$j]['lhs_module'];
                 if (isset($allowedModules[$relatedModule]) && $allowedModules[$relatedModule] || $current_user->is_admin) {
                     $relatedObject = BeanFactory::newBean($relatedModule);
                     $relatedTable = $rshr[$j]['lhs_table'];
                     $rsrf = self::getModuleResultSetFields($relatedModule, $relatedTable, null, $fieldsToBeRemoved);
                     foreach ($rsrf as $val) {
                         $explodedRelatedField = explode(".", $val['Field']);
                         $currentRelatedField = count($explodedRelatedField) == 2 ? $explodedRelatedField[1] : $val['Field'];
                         $fieldInfo = asol_Report::getFieldInfoFromVardefs($rshr[$j]['lhs_module'], $currentRelatedField);
                         $fields[$k] = count(explode(".", $val['Field'])) == 1 ? $relatedTable . "." . $val['Field'] : $val['Field'];
                         $fields_labels[$k] = $translateFieldLabels ? self::getTranslatedRelatedField($relatedModule, $relatedTable, $currentRelatedField, $fieldInfo['fieldLabel']) : $fields[$k];
                         $fields_relationship[$k] = $rshr[$j]['relationship_name'];
                         $fields_relationship_labels[$k] = $translateFieldLabels ? asol_Report::getRelationShipLabelFromVardefs($rshr[$j]['main_module'], $fields_relationship[$k]) : $fields_relationship[$k];
                         $fields_enum_operators[$k] = $fieldInfo['enumOperator'];
                         $fields_enum_references[$k] = $fieldInfo['enumReference'];
                         $fields_type[$k] = self::getFieldType($val['Type'], $fieldInfo['values'], $fieldInfo['fieldType']);
                         $info = asol_Report::getReportsRelatedFields($relatedObject, $currentRelatedField);
                         $infoIdName = !empty($info['id_name']) ? $info['id_name'] : "";
                         if ($currentRelatedField == $primaryKey) {
                             $rsrhr = self::getModuleRelationShips($relatedModule, $val['Field']);
                             $has_related[$k] = count($rsrhr) > 0 || $val['Type'] == "relate" ? "true" : "false";
                         } else {
                             if ($infoIdName == $currentRelatedField) {
                                 $fields_type[$k] = "relate";
                                 $has_related[$k] = isset($allowedModules[$info['module']]) && $allowedModules[$info['module']] || $current_user->is_admin ? "true" : "false";
                             } else {
                                 $has_related[$k] = "false";
                             }
                         }
                         $has_index[$k] = false;
                         $keys[$k] = $primaryKey . " " . $fields_relationship[$k];
                         $keys[$k] = !empty($mainRelatedKey) ? $mainRelatedKey . ';' . $keys[$k] : $keys[$k];
                         $k++;
                     }
                 }
                 $j++;
             }
             $relateField = $keys;
         } else {
             $relatedTable = BeanFactory::newBean(BeanFactory::getObjectName($value['RelateModule']))->table_name;
             $relatedTable = empty($relatedTable) ? strtolower($value['RelateModule']) : $relatedTable;
             $rsrf = self::getModuleResultSetFields($value['RelateModule'], $relatedTable, null, $fieldsToBeRemoved);
             foreach ($rsrf as $val) {
                 $fields[$k] = $relatedTable . "." . $val['Field'];
                 $fields_labels[$k] = $relatedTable . "." . $val['Field'];
                 $fieldInfo = asol_Report::getFieldInfoFromVardefs($value['RelateModule'], $val['Field']);
                 $fields_enum_operators[$k] = $fieldInfo['enumOperator'];
                 $fields_enum_references[$k] = $fieldInfo['enumReference'];
                 $fields_type[$k] = self::getFieldType($val['Type'], $fieldInfo['values'], $fieldInfo['fieldType']);
                 $has_related[$k] = "false";
                 $has_index[$k] = false;
                 $k++;
             }
             $j++;
         }
     } else {
         // CRM Relate Fields
         //***********************//
         //***AlineaSol Premium***//
         //***********************//
         $extraParams = array('database' => '-1', 'restricted' => true);
         $definedAvailableRelates = asol_ReportsUtils::managePremiumFeature("reportRelatesManagement", "reportFunctions.php", "getReportDefinedAvailableRelates", $extraParams);
         $isVirtualLink = $definedAvailableRelates !== false ? isset($definedAvailableRelates[$reportModule][$currentField]) ? true : false : false;
         //***********************//
         //***AlineaSol Premium***//
         //***********************//
         if ($isVirtualLink) {
             $relatedModule = $definedAvailableRelates[$reportModule][$currentField]['relationModule'];
         } else {
             $relatedInfo = asol_Report::getReportsRelatedFields($bean, $currentField);
             $relatedModule = $relatedInfo['module'];
         }
         if (isset($allowedModules[$relatedModule]) && $allowedModules[$relatedModule] || $current_user->is_admin) {
             $relatedObject = BeanFactory::newBean($relatedModule);
             $relatedTable = is_object($relatedObject) ? $relatedObject->table_name : strtolower($relatedModule);
             $relateField = !empty($mainRelatedKey) ? $mainRelatedKey . ';' . $relateField : $relateField;
             $rsrf = self::getModuleResultSetFields($relatedModule, $relatedTable, null, $fieldsToBeRemoved);
             $k = 0;
             foreach ($rsrf as $val) {
                 $explodedRelatedField = explode(".", $val['Field']);
                 $currentRelatedField = count($explodedRelatedField) == 2 ? $explodedRelatedField[1] : $val['Field'];
                 $fieldInfo = asol_Report::getFieldInfoFromVardefs($relatedModule, $currentRelatedField);
                 $fields[$k] = count(explode(".", $val['Field'])) == 1 ? $relatedTable . "." . $val['Field'] : $val['Field'];
                 $fields_labels[$k] = $translateFieldLabels ? self::getTranslatedRelatedField($relatedModule, $relatedTable, $currentRelatedField, $fieldInfo['fieldLabel']) : $fields[$k];
                 $fields_relationship[$k] = $relatedModule;
                 $fields_relationship_labels[$k] = !empty($app_list_strings['moduleList'][$relatedModule]) ? $app_list_strings['moduleList'][$relatedModule] : $relatedTable;
                 $fields_enum_operators[$k] = $fieldInfo['enumOperator'];
                 $fields_enum_references[$k] = $fieldInfo['enumReference'];
                 $fields_type[$k] = self::getFieldType($val['Type'], $fieldInfo['values'], $fieldInfo['fieldType']);
                 $info = asol_Report::getReportsRelatedFields($relatedObject, $currentRelatedField);
                 $infoIdName = !empty($info['id_name']) ? $info['id_name'] : "";
                 if ($currentRelatedField == $primaryKey) {
                     $rsrhr = self::getModuleRelationShips($relatedModule, $val['Field']);
                     $has_related[$k] = count($rsrhr) > 0 || $val['Type'] == "relate" ? "true" : "false";
                 } else {
                     //***********************//
                     //***AlineaSol Premium***//
                     //***********************//
                     $isVirtualLink = $definedAvailableRelates !== false ? isset($definedAvailableRelates[$relatedModule][$currentRelatedField]) ? true : false : false;
                     //***********************//
                     //***AlineaSol Premium***//
                     //***********************//
                     if ($infoIdName == $currentRelatedField || $isVirtualLink) {
                         $fields_type[$k] = "relate";
                         $has_related[$k] = isset($allowedModules[$info['module']]) && $allowedModules[$info['module']] || $current_user->is_admin ? "true" : "false";
                     } else {
                         $has_related[$k] = "false";
                     }
                 }
                 $has_index[$k] = false;
                 $k++;
             }
         }
     }
     return array('fields' => $fields, 'fields_labels' => $fields_labels, 'fields_relationship' => $fields_relationship, 'fields_relationship_labels' => $fields_relationship_labels, 'fields_type' => $fields_type, 'fields_enum_operators' => $fields_enum_operators, 'fields_enum_references' => $fields_enum_references, 'has_index' => $has_index, 'has_related' => $has_related);
 }
Exemple #2
0
 private static function getJoinsFromSqlVariables($textWithVars, $currentDoJoin, $currentDoCountJoin, $alternativeDb, $reportModule, $reportTable, &$joinVariables, &$reportTableCustomJoin, &$processedJoinsFromSqlKeys)
 {
     $sqlFormulaJoins = "";
     $isNonCrmDatabase = $alternativeDb !== false ? true : false;
     $beanItems = asol_ReportsUtils::getItemVariables($textWithVars);
     foreach ($beanItems as $beanItem) {
         if ($beanItem['item'] == '${this}') {
             continue;
         }
         $beanField = null;
         $tmpBeanItem = substr(substr($beanItem['item'], 2), 0, -1);
         $beanValues = explode("->", $tmpBeanItem);
         $beanValues = count($beanValues) == 1 ? explode("-&gt;", $tmpBeanItem) : $beanValues;
         if (count($beanValues) == 2) {
             if ($beanValues[0] == "bean_cstm") {
                 $reportTableCustomJoin = true;
             }
         } else {
             if (count($beanValues) == 3) {
                 $usedModules = explode("::", $beanValues[0]);
                 $usedKeys = explode("::", $beanValues[1]);
                 $mainFieldKey = $usedKeys[0];
                 foreach ($usedModules as $usedIndex => $usedModule) {
                     if ($isNonCrmDatabase) {
                         if (isset($processedJoinsFromSqlKeys[$usedModule])) {
                             $relatedLinkKey = $processedJoinsFromSqlKeys[$usedModule];
                         } else {
                             $mainPK = asol_Report::getSelectionResults("SHOW KEYS FROM " . $usedModule . " WHERE Key_name = 'PRIMARY'", null, true, $alternativeDb);
                             $relatedLinkKey = $processedJoinsFromSqlKeys[$usedModule] = $mainPK[0]['Column_name'];
                         }
                         $mainTable = $usedIndex >= 1 ? $usedModules[$usedIndex - 1] : $reportTable;
                         $mainKey = $usedKeys[$usedIndex];
                         $relatedTable = $usedModule;
                         $relatedKey = $relatedLinkKey;
                         $parentKey = $usedIndex >= 1 ? $usedKeys[$usedIndex - 1] : null;
                         $joinTable = null;
                         $isMainCustom = false;
                         $isRelatedCustom = false;
                     } else {
                         $bean = BeanFactory::newBean($usedModule);
                         $relatedInfo = asol_Report::getReportsRelatedFields($bean, $usedKeys[$usedIndex]);
                         if (isset($processedJoinsFromSqlKeys[$usedModules[$usedIndex - 1]])) {
                             $previousTable = $processedJoinsFromSqlKeys[$usedModules[$usedIndex - 1]];
                         } else {
                             $previousTable = $processedJoinsFromSqlKeys[$usedModules[$usedIndex - 1]] = BeanFactory::newBean(BeanFactory::getObjectName($usedModules[$usedIndex - 1]))->table_name;
                         }
                         if (isset($processedJoinsFromSqlKeys[$usedModule])) {
                             $currentTable = $processedJoinsFromSqlKeys[$usedModule];
                         } else {
                             $currentTable = $processedJoinsFromSqlKeys[$usedModule] = BeanFactory::newBean($usedModule)->table_name;
                         }
                         $mainTable = $usedIndex >= 1 ? $previousTable : $reportTable;
                         $mainKey = $usedKeys[$usedIndex];
                         $relatedTable = $currentTable;
                         $relatedKey = 'id';
                         $parentKey = $usedIndex >= 1 ? $usedKeys[$usedIndex - 1] : null;
                         $joinTable = null;
                         $isMainCustom = isset($relatedInfo['custom_module']);
                         $isRelatedCustom = $isCustomTable;
                     }
                     $storedKey = $mainKey . '.' . $relatedTable;
                     $hasRelatedCustom = $joinVariables[$mainFieldKey][$usedIndex][$storedKey]['isRelatedCustom'];
                     if (!empty($mainKey) && $hasRelatedCustom !== true) {
                         $currentDoJoin = $currentDoJoin || $joinVariables[$mainFieldKey][$usedIndex][$storedKey]['doJoin'];
                         $currentDoCountJoin = $currentDoCountJoin || $joinVariables[$mainFieldKey][$usedIndex][$storedKey]['doCountJoin'];
                         $joinVariables[$mainFieldKey][$usedIndex][$storedKey] = array('mainTable' => $mainTable, 'mainKey' => $mainKey, 'relatedTable' => $relatedTable, 'relatedKey' => $relatedKey, 'parentKey' => $parentKey, 'joinTable' => $joinTable, 'isMainCustom' => $isMainCustom, 'isRelatedCustom' => $isRelatedCustom, 'avoidAlias' => false, 'doJoin' => $currentDoJoin, 'doCountJoin' => $currentDoCountJoin);
                     }
                 }
             }
         }
     }
 }