/**
  * Takes in the request params from a save request and processes 
  * them for the save.
  *
  * @param REQUEST params  $params
  */
 function saveTabGroups($params)
 {
     $tabGroups = array();
     $selected_lang = !empty($params['dropdown_lang']) ? $params['dropdown_lang'] : $_SESSION['authenticated_user_language'];
     for ($count = 0; isset($params['slot_' . $count]); $count++) {
         if ($params['delete_' . $count] == 1) {
             continue;
         }
         $index = $params['slot_' . $count];
         $labelID = !empty($params['tablabelid_' . $index]) ? $params['tablabelid_' . $index] : 'LBL_GROUPTAB' . $count . '_' . time();
         $labelValue = $params['tablabel_' . $index];
         if (empty($GLOBALS['app_strings'][$labelID]) || $GLOBALS['app_strings'][$labelID] != $labelValue) {
             $contents = return_custom_app_list_strings_file_contents($selected_lang);
             $new_contents = replace_or_add_app_string($labelID, $labelValue, $contents);
             save_custom_app_list_strings_contents($new_contents, $selected_lang);
             $app_strings[$labelID] = $labelValue;
         }
         $tabGroups[$labelID] = array('label' => $labelID);
         $tabGroups[$labelID]['modules'] = array();
         for ($subcount = 0; isset($params[$index . '_' . $subcount]); $subcount++) {
             $tabGroups[$labelID]['modules'][] = $params[$index . '_' . $subcount];
         }
     }
     sugar_cache_put('app_strings', $GLOBALS['app_strings']);
     $newFile = create_custom_directory('include/tabConfig.php');
     write_array_to_file("GLOBALS['tabStructure']", $tabGroups, $newFile);
     $GLOBALS['tabStructure'] = $tabGroups;
 }
 /**
  * Takes in the request params from a save request and processes 
  * them for the save.
  *
  * @param REQUEST params  $params
  */
 function saveDropDown($params)
 {
     $count = 0;
     $dropdown = array();
     $dropdown_name = $params['dropdown_name'];
     $selected_lang = !empty($params['dropdown_lang']) ? $params['dropdown_lang'] : $_SESSION['authenticated_user_language'];
     $my_list_strings = return_app_list_strings_language($selected_lang);
     while (isset($params['slot_' . $count])) {
         $index = $params['slot_' . $count];
         $key = isset($params['key_' . $index]) ? $params['key_' . $index] : 'BLANK';
         $value = isset($params['value_' . $index]) ? $params['value_' . $index] : '';
         if ($key == 'BLANK') {
             $key = '';
         }
         $key = trim($key);
         $value = trim($value);
         if (empty($params['delete_' . $index])) {
             $dropdown[$key] = $value;
         }
         $count++;
     }
     if ($selected_lang == $GLOBALS['current_language']) {
         $GLOBALS['app_list_strings'][$dropdown_name] = $dropdown;
     }
     $contents = return_custom_app_list_strings_file_contents($selected_lang);
     $new_contents = replace_or_add_dropdown_type($dropdown_name, $dropdown, $contents);
     save_custom_app_list_strings_contents($new_contents, $selected_lang);
     sugar_cache_reset();
 }
 /**
  * Get the list of available APIs
  * @param bool $forceRebuild
  * @param bool $ignoreDisabled Should we ignore disabled status?
  * @return array
  */
 public static function loadFullAPIList($forceRebuild = false, $ignoreDisabled = false)
 {
     if (inDeveloperMode()) {
         static $beenHereBefore = false;
         if (!$beenHereBefore) {
             $forceRebuild = true;
             $beenHereBefore = true;
         }
     }
     $cached = sugar_cached('include/externalAPI.cache.php');
     if (!$forceRebuild && file_exists($cached)) {
         // Already have a cache file built, no need to rebuild
         require $cached;
         return $ignoreDisabled ? $fullAPIList : self::filterAPIList($fullAPIList);
     }
     $apiFullList = array();
     $meetingPasswordList = array();
     $needUrlList = array();
     $baseDirList = array('include/externalAPI/', 'custom/include/externalAPI/');
     foreach ($baseDirList as $baseDir) {
         $dirList = glob($baseDir . '*', GLOB_ONLYDIR);
         foreach ($dirList as $dir) {
             if ($dir == $baseDir . '.' || $dir == $baseDir . '..' || $dir == $baseDir . 'Base') {
                 continue;
             }
             $apiName = str_replace($baseDir, '', $dir);
             if (file_exists($dir . '/ExtAPI' . $apiName . '.php')) {
                 $apiFullList[$apiName]['className'] = 'ExtAPI' . $apiName;
                 $apiFullList[$apiName]['file'] = $dir . '/' . $apiFullList[$apiName]['className'] . '.php';
             }
             if (file_exists($dir . '/ExtAPI' . $apiName . '_cstm.php')) {
                 $apiFullList[$apiName]['className'] = 'ExtAPI' . $apiName . '_cstm';
                 $apiFullList[$apiName]['file_cstm'] = $dir . '/' . $apiFullList[$apiName]['className'] . '.php';
             }
         }
     }
     $optionList = array('supportedModules', 'useAuth', 'requireAuth', 'supportMeetingPassword', 'docSearch', 'authMethod', 'oauthFixed', 'needsUrl', 'canInvite', 'sendsInvites', 'sharingOptions', 'connector', 'oauthParams', 'restrictUploadsByExtension');
     foreach ($apiFullList as $apiName => $apiOpts) {
         require_once $apiOpts['file'];
         if (!empty($apiOpts['file_cstm'])) {
             require_once $apiOpts['file_cstm'];
         }
         $className = $apiOpts['className'];
         $apiClass = new $className();
         foreach ($optionList as $opt) {
             if (isset($apiClass->{$opt})) {
                 $apiFullList[$apiName][$opt] = $apiClass->{$opt};
             }
         }
         // Special handling for the show/hide of the Meeting Password field, we need to create a dropdown for the Sugar Logic code.
         if (isset($apiClass->supportMeetingPassword) && $apiClass->supportMeetingPassword == true) {
             $meetingPasswordList[$apiName] = $apiName;
         }
     }
     create_cache_directory('/include/');
     $cached_tmp = sugar_cached('include/externalAPI.cache-tmp.php');
     $fd = fopen($cached_tmp, 'w');
     fwrite($fd, "<" . "?php\n//This file is auto generated by " . basename(__FILE__) . "\n\$fullAPIList = " . var_export($apiFullList, true) . ";\n\n");
     fclose($fd);
     rename($cached_tmp, $cached);
     $fd = fopen(sugar_cached('include/externalAPI.cache-tmp.js'), 'w');
     fwrite($fd, "//This file is auto generated by " . basename(__FILE__) . "\nSUGAR.eapm = " . json_encode($apiFullList) . ";\n\n");
     fclose($fd);
     rename(sugar_cached('include/externalAPI.cache-tmp.js'), sugar_cached('include/externalAPI.cache.js'));
     if (!isset($GLOBALS['app_list_strings']['extapi_meeting_password']) || is_array($GLOBALS['app_list_strings']['extapi_meeting_password']) && count(array_diff($meetingPasswordList, $GLOBALS['app_list_strings']['extapi_meeting_password'])) != 0) {
         // Our meeting password list is different... we need to do something about this.
         require_once 'modules/Administration/Common.php';
         $languages = get_languages();
         foreach ($languages as $lang => $langLabel) {
             $contents = return_custom_app_list_strings_file_contents($lang);
             $new_contents = replace_or_add_dropdown_type('extapi_meeting_password', $meetingPasswordList, $contents);
             save_custom_app_list_strings_contents($new_contents, $lang);
         }
     }
     return $ignoreDisabled ? $apiFullList : self::filterAPIList($apiFullList);
 }
 /**
  * Takes in the request params from a save request and processes 
  * them for the save.
  *
  * @param REQUEST params  $params
  */
 function saveTabGroups($params)
 {
     //#30205
     global $sugar_config;
     //Get the selected tab group language
     $grouptab_lang = !empty($params['grouptab_lang']) ? $params['grouptab_lang'] : $_SESSION['authenticated_user_language'];
     $tabGroups = array();
     $selected_lang = !empty($params['dropdown_lang']) ? $params['dropdown_lang'] : $_SESSION['authenticated_user_language'];
     $slot_count = $params['slot_count'];
     $completedIndexes = array();
     for ($count = 0; $count < $slot_count; $count++) {
         if ($params['delete_' . $count] == 1 || !isset($params['slot_' . $count])) {
             continue;
         }
         $index = $params['slot_' . $count];
         if (isset($completedIndexes[$index])) {
             continue;
         }
         $labelID = !empty($params['tablabelid_' . $index]) ? $params['tablabelid_' . $index] : 'LBL_GROUPTAB' . $count . '_' . time();
         $labelValue = $params['tablabel_' . $index];
         $app_strings = return_application_language($grouptab_lang);
         if (empty($app_strings[$labelID]) || $app_strings[$labelID] != $labelValue) {
             $contents = return_custom_app_list_strings_file_contents($grouptab_lang);
             $new_contents = replace_or_add_app_string($labelID, $labelValue, $contents);
             save_custom_app_list_strings_contents($new_contents, $grouptab_lang);
             $languages = get_languages();
             foreach ($languages as $language => $langlabel) {
                 if ($grouptab_lang == $language) {
                     continue;
                 }
                 $app_strings = return_application_language($language);
                 if (!isset($app_strings[$labelID])) {
                     $contents = return_custom_app_list_strings_file_contents($language);
                     $new_contents = replace_or_add_app_string($labelID, $labelValue, $contents);
                     save_custom_app_list_strings_contents($new_contents, $language);
                 }
             }
             $app_strings[$labelID] = $labelValue;
         }
         $tabGroups[$labelID] = array('label' => $labelID);
         $tabGroups[$labelID]['modules'] = array();
         for ($subcount = 0; isset($params[$index . '_' . $subcount]); $subcount++) {
             $tabGroups[$labelID]['modules'][] = $params[$index . '_' . $subcount];
         }
         $completedIndexes[$index] = true;
     }
     // Force a rebuild of the app language
     sugar_cache_clear('app_strings.' . $grouptab_lang);
     $newFile = create_custom_directory('include/tabConfig.php');
     write_array_to_file("GLOBALS['tabStructure']", $tabGroups, $newFile);
     $GLOBALS['tabStructure'] = $tabGroups;
 }
 /**
  * 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);
         }
     }
 }
Exemple #6
0
function dropdown_item_edit($dropdown_type, $language, $key, $value)
{
    $app_list_strings_to_edit = return_app_list_strings_language($language);
    $dropdown_array = $app_list_strings_to_edit[$dropdown_type];
    $dropdown_array[$key] = $value;
    $contents = return_custom_app_list_strings_file_contents($language);
    // get the contents of the custom app list strings file
    $new_contents = replace_or_add_dropdown_type($dropdown_type, $dropdown_array, $contents);
    save_custom_app_list_strings_contents($new_contents, $language);
}
 /**
  * Takes in the request params from a save request and processes
  * them for the save.
  *
  * @param REQUEST params  $params
  */
 function saveDropDown($params)
 {
     $count = 0;
     $dropdown = array();
     $dropdown_name = $params['dropdown_name'];
     $selected_lang = !empty($params['dropdown_lang']) ? $params['dropdown_lang'] : $_SESSION['authenticated_user_language'];
     $my_list_strings = return_app_list_strings_language($selected_lang);
     while (isset($params['slot_' . $count])) {
         $index = $params['slot_' . $count];
         $key = isset($params['key_' . $index]) ? SugarCleaner::stripTags($params['key_' . $index]) : 'BLANK';
         $value = isset($params['value_' . $index]) ? SugarCleaner::stripTags($params['value_' . $index]) : '';
         if ($key == 'BLANK') {
             $key = '';
         }
         $key = trim($key);
         $value = trim($value);
         if (empty($params['delete_' . $index])) {
             $dropdown[$key] = $value;
         }
         $count++;
     }
     if ($selected_lang == $GLOBALS['current_language']) {
         $GLOBALS['app_list_strings'][$dropdown_name] = $dropdown;
     }
     $contents = return_custom_app_list_strings_file_contents($selected_lang);
     //get rid of closing tags they are not needed and are just trouble
     $contents = str_replace("?>", '', $contents);
     if (empty($contents)) {
         $contents = "<?php";
     }
     //add new drop down to the bottom
     if (!empty($params['use_push'])) {
         //this is for handling moduleList and such where nothing should be deleted or anything but they can be renamed
         foreach ($dropdown as $key => $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\$app_list_strings['{$dropdown_name}']['{$key}']=" . var_export_helper($value) . ";";
             }
         }
     } else {
         //clear out the old value
         $pattern_match = '/\\s*\\$app_list_strings\\s*\\[\\s*\'' . $dropdown_name . '\'\\s*\\]\\s*=\\s*array\\s*\\([^\\)]*\\)\\s*;\\s*/ism';
         $contents = preg_replace($pattern_match, "\n", $contents);
         //add the new ones
         $contents .= "\n\$app_list_strings['{$dropdown_name}']=" . var_export_helper($dropdown) . ";";
     }
     // Bug 40234 - If we have no contents, we don't write the file. Checking for "<?php" because above it's set to that if empty
     if ($contents != "<?php") {
         save_custom_app_list_strings_contents($contents, $selected_lang);
         sugar_cache_reset();
     }
     // Bug38011
     $repairAndClear = new RepairAndClear();
     $repairAndClear->module_list = array(translate('LBL_ALL_MODULES'));
     $repairAndClear->show_output = false;
     $repairAndClear->clearJsLangFiles();
     // ~~~~~~~~
 }
 /**
  * Takes in the request params from a save request and processes 
  * them for the save.
  *
  * @param REQUEST params  $params
  */
 function saveTabGroups($params)
 {
     //#30205
     global $sugar_config;
     if (strcmp($params['other_group_tab_displayed'], '1') == 0) {
         $value = true;
     } else {
         $value = false;
     }
     if (!isset($sugar_config['other_group_tab_displayed']) || $sugar_config['other_group_tab_displayed'] != $value) {
         require_once 'modules/Configurator/Configurator.php';
         $cfg = new Configurator();
         $cfg->config['other_group_tab_displayed'] = $value;
         $cfg->handleOverride();
     }
     //Get the selected tab group language
     $grouptab_lang = !empty($params['grouptab_lang']) ? $params['grouptab_lang'] : $_SESSION['authenticated_user_language'];
     $tabGroups = array();
     $selected_lang = !empty($params['dropdown_lang']) ? $params['dropdown_lang'] : $_SESSION['authenticated_user_language'];
     $slot_count = $params['slot_count'];
     $completedIndexes = array();
     for ($count = 0; $count < $slot_count; $count++) {
         if ($params['delete_' . $count] == 1 || !isset($params['slot_' . $count])) {
             continue;
         }
         $index = $params['slot_' . $count];
         if (isset($completedIndexes[$index])) {
             continue;
         }
         $labelID = !empty($params['tablabelid_' . $index]) ? $params['tablabelid_' . $index] : 'LBL_GROUPTAB' . $count . '_' . time();
         $labelValue = $params['tablabel_' . $index];
         $appStirngs = return_application_language($grouptab_lang);
         if (empty($appStirngs[$labelID]) || $appStirngs[$labelID] != $labelValue) {
             $contents = return_custom_app_list_strings_file_contents($grouptab_lang);
             $new_contents = replace_or_add_app_string($labelID, $labelValue, $contents);
             save_custom_app_list_strings_contents($new_contents, $grouptab_lang);
             $languages = get_languages();
             foreach ($languages as $language => $langlabel) {
                 if ($grouptab_lang == $language) {
                     continue;
                 }
                 $appStirngs = return_application_language($language);
                 if (!isset($appStirngs[$labelID])) {
                     $contents = return_custom_app_list_strings_file_contents($language);
                     $new_contents = replace_or_add_app_string($labelID, $labelValue, $contents);
                     save_custom_app_list_strings_contents($new_contents, $language);
                 }
             }
             $app_strings[$labelID] = $labelValue;
         }
         $tabGroups[$labelID] = array('label' => $labelID);
         $tabGroups[$labelID]['modules'] = array();
         for ($subcount = 0; isset($params[$index . '_' . $subcount]); $subcount++) {
             $tabGroups[$labelID]['modules'][] = $params[$index . '_' . $subcount];
         }
         $completedIndexes[$index] = true;
     }
     sugar_cache_put('app_strings', $GLOBALS['app_strings']);
     $newFile = create_custom_directory('include/tabConfig.php');
     write_array_to_file("GLOBALS['tabStructure']", $tabGroups, $newFile);
     $GLOBALS['tabStructure'] = $tabGroups;
 }