public static function getRelatedFieldsSelectHtml($database, $currentModule, $mainRelatedModule, $mainRelatedKey, $rhsKey, $getRelateLinks, $linkColor, $auditedReport = 0, $treeMode = false, $subQueryMode = false) { global $current_user, $db, $sugar_config, $timedate, $mod_strings; $modulesTables = $database === '-1' ? asol_ReportsUtils::getModuleTablesAssociation($current_user->id) : null; $usedModules = explode('::', $mainRelatedModule); $selectedModule = $database === '-1' && !empty($mainRelatedModule) ? array_search(end($usedModules), $modulesTables) : $currentModule; $selectedModule = empty($selectedModule) ? $currentModule : $selectedModule; if ($database === '-1') { foreach ($usedModules as &$usedModule) { $usedModule = isset($modulesTables[$usedModule]) ? $modulesTables[$usedModule] : $usedModule; } $mainRelatedTable = implode('::', $usedModules); } else { $mainRelatedTable = $mainRelatedModule; } $translateFieldLabels = !isset($sugar_config['asolReportsTranslateLabels']) || $sugar_config['asolReportsTranslateLabels'] ? true : false; $currentTableFields = array(); if (empty($rhsKey)) { return array('html' => '<select id="related_fields" name="related_fields" size=10 onDblClick="" multiple></select>', 'javascript' => ''); } if ($database >= 0 && $selectedModule != '') { //***********************// //***AlineaSol Premium***// //***********************// $extraParams = array('alternative_database' => $database, 'sel_altDbTable' => $selectedModule, 'mainRelatedKey' => $mainRelatedKey, 'rhs_key' => $rhsKey); $currentTableFields = asol_ReportsUtils::managePremiumFeature("externalDatabasesReports", "reportFunctions.php", "getExternalTableFields", $extraParams); if ($currentTableFields !== false) { $rhsKey = $currentTableFields['rhs_key']; } //***********************// //***AlineaSol Premium***// //***********************// } else { if ($selectedModule != '') { $fieldsToBeRemoved = self::getNonVisibleFields($selectedModule); $bean = BeanFactory::newBean($selectedModule); if ($auditedReport == 1) { $currentTableFields = asol_ReportsManagementFunctions::getAuditTableFields($bean, $fieldsToBeRemoved, $rhsKey, $mainRelatedKey); } else { $currentTableFields = asol_ReportsManagementFunctions::getCrmTableRelatedFields($selectedModule, $bean, $fieldsToBeRemoved, $translateFieldLabels, $rhsKey, $mainRelatedKey); } } } $fields_relationship = isset($currentTableFields['fields_relationship']) ? $currentTableFields['fields_relationship'] : null; $fields_relationship_labels = isset($currentTableFields['fields_relationship_labels']) ? $currentTableFields['fields_relationship_labels'] : null; $fields = isset($currentTableFields['fields']) ? $currentTableFields['fields'] : null; $fields_labels = isset($currentTableFields['fields_labels']) ? $currentTableFields['fields_labels'] : null; $fields_type = isset($currentTableFields['fields_type']) ? $currentTableFields['fields_type'] : null; $fields_enum_operators = isset($currentTableFields['fields_enum_operators']) ? $currentTableFields['fields_enum_operators'] : null; $fields_enum_references = isset($currentTableFields['fields_enum_references']) ? $currentTableFields['fields_enum_references'] : null; $has_index = isset($currentTableFields['has_index']) ? $currentTableFields['has_index'] : null; $has_related = isset($currentTableFields['has_related']) ? $currentTableFields['has_related'] : null; $fields_labels_lowercase = array_map(array("self", "addRelationShipNameToLowerCase"), !empty($fields_labels) ? $fields_labels : array(), !empty($fields_relationship_labels) ? $fields_relationship_labels : array()); if (!empty($fields_labels_lowercase)) { if (is_array($rhsKey)) { array_multisort($fields_labels_lowercase, $fields_labels, $fields, $fields_relationship_labels, $fields_relationship, $fields_type, $has_index, $has_related, $fields_enum_operators, $fields_enum_references, $rhsKey); } else { array_multisort($fields_labels_lowercase, $fields_labels, $fields, $fields_relationship_labels, $fields_relationship, $fields_type, $has_index, $has_related, $fields_enum_operators, $fields_enum_references); } } $fields = !empty($fields) ? $fields : array(); $fields_labels = !empty($fields_labels) ? $fields_labels : array(); $fields_relationship = !empty($fields_relationship) ? $fields_relationship : array(); $fields_relationship_labels = !empty($fields_relationship_labels) ? $fields_relationship_labels : array(); $has_index = !empty($has_index) ? $has_index : array(); $has_related = !empty($has_related) ? $has_related : array(); if ($treeMode) { //***********************// //***AlineaSol Premium***// //***********************// $extraParams = array('database' => $database, 'getRelateLinks' => $getRelateLinks, 'auditedReport' => $auditedReport, 'reportModule' => null, 'mainRelatedModule' => $mainRelatedModule, 'mainRelatedTable' => $mainRelatedTable, 'rhsKey' => $rhsKey, 'fields' => $fields, 'fields_labels' => $fields_labels, 'fields_type' => $fields_type, 'fields_enum_operators' => $fields_enum_operators, 'fields_enum_references' => $fields_enum_references, 'fields_relationship' => $fields_relationship, 'fields_relationship_labels' => $fields_relationship_labels, 'has_index' => $has_index, 'has_related' => $has_related, 'linkColor' => $linkColor, 'subQueryMode' => $subQueryMode); $returnedTreeSelectorHtml = asol_ReportsUtils::managePremiumFeature("reportFieldsTreeSelector", "reportFunctions.php", "getTreeSelectorHtml", $extraParams); $returnedHtml = $returnedTreeSelectorHtml !== false ? $returnedTreeSelectorHtml : ''; //***********************// //***AlineaSol Premium***// //***********************// } else { $returnedHtml = '<select id="related_fields" name="related_fields" size=10 onClick="setShowRelatedButtonVisibility(true)" onDblClick="getRelatedFields(true, null, null, null)" multiple>'; $aux_counter = 0; $currentModule = null; $previousModule = null; foreach ($fields as $index => $field) { $currentModule = explode(".", $field); $currentModule = substr($currentModule[0], -strlen('_cstm')) === '_cstm' ? substr($currentModule[0], 0, -strlen('_cstm')) : $currentModule[0]; $currentModule = $fields_relationship[$index] . $currentModule; if ($currentModule != $previousModule) { if ($aux_counter != 0) { $returnedHtml .= '</optgroup>'; } if ($aux_counter + 1 != count($fields)) { $fields_label_array = explode(".", $fields_labels[$index]); $aux_current_module_label = $fields_label_array[0]; if ($aux_current_module_label == $fields_relationship_labels[$index] || $fields_relationship_labels[$index] == "") { $returnedHtml .= '<optgroup title="' . $aux_current_module_label . '" label="' . $aux_current_module_label . '">'; } else { $returnedHtml .= '<optgroup title="' . $aux_current_module_label . ' (' . $fields_relationship_labels[$index] . ')" label="' . $aux_current_module_label . ' (' . $fields_relationship_labels[$index] . ')">'; } } } $fieldLabelExploded = explode(".", $fields_labels[$index]); $field = !empty($mainRelatedTable) ? $mainRelatedTable . '::' . $field : $field; $fieldExploded = explode(".", $field); $fieldTable = substr($fieldExploded[0], -strlen('_cstm')) === '_cstm' ? substr($fieldExploded[0], 0, -strlen('_cstm')) : $fieldExploded[0]; $fieldTables = explode('::', $fieldTable); $fieldModule = $database === '-1' ? (!empty($mainRelatedModule) ? $mainRelatedModule . '::' : '') . array_search(end($fieldTables), $modulesTables) : $fieldTable; $fieldKey = is_array($rhsKey) ? $rhsKey[$index] : $rhsKey; $isRelated = $has_related[$index] != "false" && $getRelateLinks; $returnedHtml .= '<option ' . ($isRelated ? 'style="color: ' . $linkColor . ';"' : '') . ' onContextMenu="getReportVariableHover(\'' . $field . '\', \'' . $fieldModule . '\', \'' . $fieldKey . '\', this); return false;" title="' . $field . '" value="' . $field . '" fieldValue="' . $field . '" fieldIndex="' . $index . '" fieldType="' . $fields_type[$index] . '" fieldEnumOp="' . $fields_enum_operators[$index] . '" fieldEnumRef="' . $fields_enum_references[$index] . '" fieldLabel="' . $fields_labels[$index] . '" fieldModule="' . $fieldModule . '" fieldKey="' . $fieldKey . '">' . $fieldLabelExploded[1] . ($isRelated ? ' +' : '') . '</option>'; $previousModule = $currentModule; $aux_counter++; } $returnedHtml .= '</optgroup>'; $returnedHtml .= '</select>'; } $returnedJavascript = 'InsertFields(\'fields_Table\', null, true, \'' . $auditedReport . '\');'; return array('html' => $returnedHtml, 'javascript' => $returnedJavascript, 'rhsKey' => $rhsKey, 'relatedModule' => $currentModule); }