Ejemplo n.º 1
0
 function action_SaveModifyDisplay()
 {
     if (empty($_REQUEST['display_sources'])) {
         return;
     }
     require_once 'include/connectors/utils/ConnectorUtils.php';
     require_once 'include/connectors/sources/SourceFactory.php';
     $connectors = ConnectorUtils::getConnectors();
     $connector_keys = array_keys($connectors);
     $modules_sources = ConnectorUtils::getDisplayConfig();
     if (!is_array($modules_sources)) {
         $modules_sources = (array) $modules_sources;
     }
     $sources = array();
     $values = array();
     $new_modules_sources = array();
     if (!empty($_REQUEST['display_values'])) {
         $display_values = explode(',', $_REQUEST['display_values']);
         foreach ($display_values as $value) {
             $entry = explode(':', $value);
             $new_modules_sources[$entry[1]][$entry[0]] = $entry[0];
         }
     }
     //These are the sources that were modified.
     //We only update entries for these sources that have been changed
     $display_sources = explode(',', $_REQUEST['display_sources']);
     foreach ($display_sources as $source) {
         $sources[$source] = $source;
     }
     //foreach
     $removedModules = array();
     //Unset entries that have all sources removed
     foreach ($modules_sources as $module => $source_entries) {
         foreach ($source_entries as $source_id) {
             if (!empty($sources[$source_id]) && empty($new_modules_sources[$module][$source_id])) {
                 unset($modules_sources[$module][$source_id]);
                 $removedModules[$module] = true;
             }
         }
     }
     $removedModules = array_keys($removedModules);
     foreach ($removedModules as $key) {
         if (empty($new_modules_sources[$key])) {
             ConnectorUtils::cleanMetaDataFile($key);
         }
     }
     //Update based on new_modules_sources
     foreach ($new_modules_sources as $module => $enabled_sources) {
         //If the module is not in $modules_sources add it there
         if (empty($modules_sources[$module])) {
             $modules_sources[$module] = $enabled_sources;
         } else {
             foreach ($enabled_sources as $source_id) {
                 if (empty($modules_sources[$module][$source_id])) {
                     $modules_sources[$module][$source_id] = $source_id;
                 }
             }
             //foreach
         }
     }
     //foreach
     //Should we just remove entries where all sources are disabled?
     $unset_modules = array();
     foreach ($modules_sources as $module => $mapping) {
         if (empty($mapping)) {
             $unset_modules[] = $module;
         }
     }
     foreach ($unset_modules as $mod) {
         unset($modules_sources[$mod]);
     }
     if (!write_array_to_file('modules_sources', $modules_sources, CONNECTOR_DISPLAY_CONFIG_FILE)) {
         //Log error and return empty array
         $GLOBALS['log']->fatal("Cannot write \$modules_sources to " . CONNECTOR_DISPLAY_CONFIG_FILE);
     }
     $sources_modules = array();
     foreach ($modules_sources as $module => $source_entries) {
         foreach ($source_entries as $id) {
             $sources_modules[$id][$module] = $module;
         }
     }
     //Now update the searchdefs and field mapping entries accordingly
     require 'modules/Connectors/metadata/searchdefs.php';
     $originalSearchDefs = $searchdefs;
     $connectorSearchDefs = ConnectorUtils::getSearchDefs();
     $searchdefs = array();
     foreach ($sources_modules as $source_id => $modules) {
         foreach ($modules as $module) {
             $searchdefs[$source_id][$module] = !empty($connectorSearchDefs[$source_id][$module]) ? $connectorSearchDefs[$source_id][$module] : (!empty($originalSearchDefs[$source_id][$module]) ? $originalSearchDefs[$source_id][$module] : array());
         }
     }
     //Write the new searchdefs out
     if (!write_array_to_file('searchdefs', $searchdefs, 'custom/modules/Connectors/metadata/searchdefs.php')) {
         $GLOBALS['log']->fatal("Cannot write file custom/modules/Connectors/metadata/searchdefs.php");
     }
     //Unset the $_SESSION['searchDefs'] variable
     if (isset($_SESSION['searchDefs'])) {
         unset($_SESSION['searchDefs']);
     }
     //Clear mapping file if needed (this happens when all modules are removed from a source
     foreach ($sources as $id) {
         if (empty($sources_modules[$source])) {
             //Now write the new mapping entry to the custom folder
             $dir = $connectors[$id]['directory'];
             if (!preg_match('/^custom\\//', $dir)) {
                 $dir = 'custom/' . $dir;
             }
             if (!file_exists("{$dir}")) {
                 mkdir_recursive("{$dir}");
             }
             $fakeMapping = array('beans' => array());
             if (!write_array_to_file('mapping', $fakeMapping, "{$dir}/mapping.php")) {
                 $GLOBALS['log']->fatal("Cannot write file {$dir}/mapping.php");
             }
             $s = SourceFactory::getSource($id);
             $s->saveMappingHook($fakeMapping);
         }
         //if
     }
     //foreach
     //Now update the field mapping entries
     foreach ($sources_modules as $id => $modules) {
         $source = SourceFactory::getSource($id);
         $mapping = $source->getMapping();
         $mapped_modules = array_keys($mapping['beans']);
         foreach ($mapped_modules as $module) {
             if (empty($sources_modules[$id][$module])) {
                 unset($mapping['beans'][$module]);
             }
         }
         //Remove modules from the mapping entries
         foreach ($modules as $module) {
             if (empty($mapping['beans'][$module])) {
                 $originalMapping = $source->getOriginalMapping();
                 if (empty($originalMapping['beans'][$module])) {
                     $defs = $source->getFieldDefs();
                     $keys = array_keys($defs);
                     $new_mapping_entry = array();
                     foreach ($keys as $key) {
                         $new_mapping_entry[$key] = '';
                     }
                     $mapping['beans'][$module] = $new_mapping_entry;
                 } else {
                     $mapping['beans'][$module] = $originalMapping['beans'][$module];
                 }
             }
             //if
         }
         //foreach
         //Now write the new mapping entry to the custom folder
         $dir = $connectors[$id]['directory'];
         if (!preg_match('/^custom\\//', $dir)) {
             $dir = 'custom/' . $dir;
         }
         if (!file_exists("{$dir}")) {
             mkdir_recursive("{$dir}");
         }
         if (!write_array_to_file('mapping', $mapping, "{$dir}/mapping.php")) {
             $GLOBALS['log']->fatal("Cannot write file {$dir}/mapping.php");
         }
         $source->saveMappingHook($mapping);
     }
     //foreach
     // save eapm configs
     foreach ($connectors as $connector_name => $data) {
         if (isset($sources[$connector_name]) && !empty($data["eapm"])) {
             // if we touched it AND it has EAPM data
             $connectors[$connector_name]["eapm"]["enabled"] = !empty($_REQUEST[$connector_name . "_external"]);
         }
     }
     ConnectorUtils::saveConnectors($connectors);
     ConnectorUtils::updateMetaDataFiles();
     // BEGIN SUGAR INT
     if (empty($_REQUEST['from_unit_test'])) {
         // END SUGAR INT
         header("Location: index.php?action=ConnectorSettings&module=Connectors");
         // BEGIN SUGAR INT
     }
     // END SUGAR INT
 }