コード例 #1
0
 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);
 }