decode(html_entity_decode(rawurldecode($list_value), ENT_QUOTES) ); $dropdown = array () ; // dropdown is received as an array of (name,value) pairs - now extract to name=>value format preserving order // we rely here on PHP to preserve the order of the received name=>value pairs - associative arrays in PHP are ordered if(is_array($temp)) { foreach ( $temp as $item ) { $dropdown[ SugarCleaner::stripTags(from_html($item [ 0 ]), false) ] = SugarCleaner::stripTags(from_html($item [ 1 ]), false) ; } } if(array_key_exists($emptyMarker, $dropdown)){ $output=array(); foreach($dropdown as $key => $value){ if($emptyMarker===$key) $output['']=''; else $output[$key]=$value; } $dropdown=$output; } if($type != 'studio'){ $mb = new ModuleBuilder(); $module = $mb->getPackageModule($params['view_package'], $params['view_module']); $this->synchMBDropDown($dropdown_name, $dropdown, $selected_lang, $module); //Can't use synch on selected lang as we want to overwrite values, not just keys $module->mblanguage->appListStrings[$selected_lang.'.lang.php'][$dropdown_name] = $dropdown; $module->mblanguage->save($module->key_name); // tyoung - key is required parameter as of }else{ $contents = return_custom_app_list_strings_file_contents($selected_lang); $my_list_strings = return_app_list_strings_language($selected_lang); if($selected_lang == $GLOBALS['current_language']){ $GLOBALS['app_list_strings'][$dropdown_name] = $dropdown; } //write to contents $contents = str_replace("?>", '', $contents); if(empty($contents))$contents = "$value){ //only if the value has changed or does not exist do we want to add it this way if(!isset($my_list_strings[$dropdown_name][$key]) || strcmp($my_list_strings[$dropdown_name][$key], $value) != 0 ){ //clear out the old value $pattern_match = '/\s*\$app_list_strings\s*\[\s*\''.$dropdown_name.'\'\s*\]\[\s*\''.$key.'\'\s*\]\s*=\s*[\'\"]{1}.*?[\'\"]{1};\s*/ism'; $contents = preg_replace($pattern_match, "\n", $contents); //add the new ones $contents .= "\n\$GLOBALS['app_list_strings']['$dropdown_name']['$key']=" . var_export_helper($value) . ";"; } } }else{ //Now synch up the keys in other langauges to ensure that removed/added Drop down values work properly under all langs. $this->synchDropDown($dropdown_name, $dropdown, $selected_lang, $dir); $contents = $this->getNewCustomContents($dropdown_name, $dropdown, $selected_lang); } if(!empty($dir) && !is_dir($dir)) { $continue = mkdir_recursive($dir); } save_custom_app_list_strings_contents($contents, $selected_lang, $dir); } sugar_cache_reset(); clearAllJsAndJsLangFilesWithoutOutput(); } /** * function synchDropDown * Ensures that the set of dropdown keys is consistant accross all languages. * * @param $dropdown_name The name of the dropdown to be synched * @param $dropdown array The dropdown currently being saved * @param $selected_lang String the language currently selected in Studio/MB * @param $saveLov String the path to the directory to save the new lang file in. */ function synchDropDown($dropdown_name, $dropdown, $selected_lang, $saveLoc) { $allLanguages = get_languages(); foreach ($allLanguages as $lang => $langName) { if ($lang != $selected_lang) { $listStrings = return_app_list_strings_language($lang); $langDropDown = array(); if (isset($listStrings[$dropdown_name]) && is_array($listStrings[$dropdown_name])) { $langDropDown = $this->synchDDKeys($dropdown, $listStrings[$dropdown_name]); } else { //if the dropdown does not exist in the language, justt use what we have. $langDropDown = $dropdown; } $contents = $this->getNewCustomContents($dropdown_name, $langDropDown, $lang); save_custom_app_list_strings_contents($contents, $lang, $saveLoc); } } } /** * function synchMBDropDown * Ensures that the set of dropdown keys is consistant accross all languages in a ModuleBuilder Module * * @param $dropdown_name The name of the dropdown to be synched * @param $dropdown array The dropdown currently being saved * @param $selected_lang String the language currently selected in Studio/MB * @param $module MBModule the module to update the languages in */ function synchMBDropDown($dropdown_name, $dropdown, $selected_lang, $module) { $selected_lang = $selected_lang . '.lang.php'; foreach($module->mblanguage->appListStrings as $lang => $listStrings) { if ($lang != $selected_lang) { $langDropDown = array(); if (isset($listStrings[$dropdown_name]) && is_array($listStrings[$dropdown_name])) { $langDropDown = $this->synchDDKeys($dropdown, $listStrings[$dropdown_name]); } else { $langDropDown = $dropdown; } $module->mblanguage->appListStrings[$lang][$dropdown_name] = $langDropDown; $module->mblanguage->save($module->key_name); } } } private function synchDDKeys($dom, $sub) { //check for extra keys foreach($sub as $key=>$value) { if (!isset($dom[$key])) { unset ($sub[$key]); } } //check for missing keys foreach($dom as $key=>$value) { if (!isset($sub[$key])) { $sub[$key] = $value; } } return $sub; } function getPatternMatch($dropdown_name) { return '/\s*\$GLOBALS\s*\[\s*\'app_list_strings\s*\'\s*\]\[\s*\'' . $dropdown_name.'\'\s*\]\s*=\s*array\s*\([^\)]*\)\s*;\s*/ism'; } function getNewCustomContents($dropdown_name, $dropdown, $lang) { $contents = return_custom_app_list_strings_file_contents($lang); $contents = str_replace("?>", '', $contents); if(empty($contents))$contents = "getPatternMatch($dropdown_name), "\n", $contents); $contents .= "\n\$GLOBALS['app_list_strings']['$dropdown_name']=" . var_export_helper($dropdown) . ";"; return $contents; } } ?>