/** * Export a Base64 PDF Report * @param SugarBean report * @return file contents */ protected function exportBase64(ServiceBase $api, SugarBean $report) { global $beanList, $beanFiles; global $sugar_config, $current_language; require_once 'modules/Reports/templates/templates_pdf.php'; $contents = ''; $report_filename = false; if ($report->id != null) { //Translate pdf to correct language $reporter = new Report(html_entity_decode($report->content), '', ''); $reporter->layout_manager->setAttribute("no_sort", 1); $reporter->fromApi = true; //Translate pdf to correct language $mod_strings = return_module_language($current_language, 'Reports'); //Generate actual pdf $report_filename = template_handle_pdf($reporter, false); sugar_cache_put($report->id . '-' . $GLOBALS['current_user']->id, $report_filename, $this->cacheLength * 60); $dl = new DownloadFile(); $contents = $dl->getFileByFilename($report_filename); } if (empty($contents)) { throw new SugarApiException('File contents empty.'); } // Reply is raw just pass back the base64 encoded contents return base64_encode($contents); }
/** * 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; }
function LoadCachedArray($module_dir, $module, $key) { global $moduleDefs, $fileName; $cache_key = "load_cached_array.{$module_dir}.{$module}.{$key}"; $result = sugar_cache_retrieve($cache_key); if (!empty($result)) { // Use EXTERNAL_CACHE_NULL_VALUE to store null values in the cache. if ($result == EXTERNAL_CACHE_NULL_VALUE) { return null; } return $result; } if (file_exists('modules/' . $module_dir . '/' . $fileName)) { // If the data was not loaded, try loading again.... if (!isset($moduleDefs[$module])) { include 'modules/' . $module_dir . '/' . $fileName; $moduleDefs[$module] = $fields_array; } // Now that we have tried loading, make sure it was loaded if (empty($moduleDefs[$module]) || empty($moduleDefs[$module][$module][$key])) { // It was not loaded.... Fail. Cache null to prevent future repeats of this calculation sugar_cache_put($cache_key, EXTERNAL_CACHE_NULL_VALUE); return null; } // It has been loaded, cache the result. sugar_cache_put($cache_key, $moduleDefs[$module][$module][$key]); return $moduleDefs[$module][$module][$key]; } // It was not loaded.... Fail. Cache null to prevent future repeats of this calculation sugar_cache_put($cache_key, EXTERNAL_CACHE_NULL_VALUE); return null; }
/** * Load the view_<view>_config.php file which holds options used by the view. */ function _loadConfig(&$view, $type) { $view_config_custom = array(); $view_config_module = array(); $view_config_root_cstm = array(); $view_config_root = array(); $view_config_app = array(); $config_file_name = 'view.' . $type . '.config.php'; $view_config = sugar_cache_retrieve("VIEW_CONFIG_FILE_" . $view->module . "_TYPE_" . $type); if (!$view_config) { $view_config_all = array('actions' => array(), 'req_params' => array()); foreach (SugarAutoLoader::existingCustom('include/MVC/View/views/view.config.php', 'include/MVC/View/views/' . $config_file_name, 'modules/' . $view->module . '/views/' . $config_file_name) as $file) { $view_config = array(); require $file; if (!empty($view_config['actions'])) { $view_config_all['actions'] = array_merge($view_config_all['actions'], $view_config['actions']); } if (!empty($view_config['req_params'])) { $view_config_all['req_params'] = array_merge($view_config_all['req_params'], $view_config['req_params']); } } $view_config = $view_config_all; sugar_cache_put("VIEW_CONFIG_FILE_" . $view->module . "_TYPE_" . $type, $view_config); } $action = strtolower($view->action); $config = null; if (!empty($view_config['req_params'])) { //try the params first foreach ($view_config['req_params'] as $key => $value) { if (!empty($_REQUEST[$key]) && $_REQUEST[$key] == "false") { $_REQUEST[$key] = false; } if (!empty($_REQUEST[$key])) { if (!is_array($value['param_value'])) { if ($value['param_value'] == $_REQUEST[$key]) { $config = $value['config']; break; } } else { foreach ($value['param_value'] as $v) { if ($v == $_REQUEST[$key]) { $config = $value['config']; break; } } } } } } if ($config == null && !empty($view_config['actions']) && !empty($view_config['actions'][$action])) { $config = $view_config['actions'][$action]; } if ($config != null) { $view->options = $config; } }
function handleOverride() { global $sugar_config, $sugar_version; $sc = SugarConfig::getInstance(); list($oldConfig, $overrideArray) = $this->readOverride(); $this->previous_sugar_override_config_array = $overrideArray; $diffArray = deepArrayDiff($this->config, $sugar_config); $overrideArray = sugarArrayMergeRecursive($overrideArray, $diffArray); if (isset($overrideArray['authenticationClass']) && empty($overrideArray['authenticationClass'])) { unset($overrideArray['authenticationClass']); } $overideString = "<?php\n/***CONFIGURATOR***/\n"; sugar_cache_put('sugar_config', $this->config); $GLOBALS['sugar_config'] = $this->config; //print_r($overrideArray); //Bug#53013: Clean the tpl cache if action menu style has been changed. if (isset($overrideArray['enable_action_menu']) && (!isset($this->previous_sugar_override_config_array['enable_action_menu']) || $overrideArray['enable_action_menu'] != $this->previous_sugar_override_config_array['enable_action_menu'])) { require_once 'modules/Administration/QuickRepairAndRebuild.php'; $repair = new RepairAndClear(); $repair->module_list = array(); $repair->clearTpls(); } foreach ($overrideArray as $key => $val) { if (in_array($key, $this->allow_undefined) || isset($sugar_config[$key])) { if (is_string($val) && strcmp($val, 'true') == 0) { $val = true; $this->config[$key] = $val; } if (is_string($val) && strcmp($val, 'false') == 0) { $val = false; $this->config[$key] = false; } } $overideString .= override_value_to_string_recursive2('sugar_config', $key, $val, true, $oldConfig); } $overideString .= '/***CONFIGURATOR***/'; $this->saveOverride($overideString); if (isset($this->config['logger']['level']) && $this->logger) { $this->logger->setLevel($this->config['logger']['level']); } }
function handleOverride() { global $sugar_config, $sugar_version; $this->readOverride(); foreach ($this->config as $key => $value) { if (in_array($key, $this->allow_undefined) || isset($sugar_config[$key]) && strcmp("{$sugar_config[$key]}", "{$value}") != 0) { if (strcmp("{$value}", 'true') == 0) { $value = true; $this->config[$key] = $value; } if (strcmp("{$value}", 'false') == 0) { $value = false; $this->config[$key] = false; } $this->replaceOverride('sugar_config', $key, $value); } } sugar_cache_put('sugar_config', $this->config); $GLOBALS['sugar_config'] = $this->config; $this->saveOverride(); }
/** * wrapper for whatever currency system we implement */ function loadCurrencies() { // doing it dirty here global $db; global $sugar_config; if (empty($db)) { return array(); } $load = sugar_cache_retrieve('currency_list'); if (!is_array($load)) { // load default from config.php $this->currencies['-99'] = array('name' => $sugar_config['default_currency_name'], 'symbol' => $sugar_config['default_currency_symbol'], 'conversion_rate' => 1); $q = "SELECT id, name, symbol, conversion_rate FROM currencies WHERE status = 'Active' and deleted = 0"; $r = $db->query($q); while ($a = $db->fetchByAssoc($r)) { $load = array(); $load['name'] = $a['name']; $load['symbol'] = $a['symbol']; $load['conversion_rate'] = $a['conversion_rate']; $this->currencies[$a['id']] = $load; } sugar_cache_put('currency_list', $this->currencies); } else { $this->currencies = $load; } }
/** * Get user datetime format. * * @param User $user user object, current user if not specified * @return string */ public function get_date_time_format($user = null) { // BC fix - had (bool, user) signature before if (!$user instanceof User) { if (func_num_args() > 1) { $user = func_get_arg(1); if (!$user instanceof User) { $user = null; } } else { $user = null; } } $cacheKey = $this->get_date_time_format_cache_key($user); $cachedValue = sugar_cache_retrieve($cacheKey); if (!empty($cachedValue)) { return $cachedValue; } else { $value = $this->merge_date_time($this->get_date_format($user), $this->get_time_format($user)); sugar_cache_put($cacheKey, $value, 0); return $value; } }
function loadModuleLanguage($module, $lang, $refresh = false) { //here check if the cache file exists, if it does then load it, if it doesn't //then call refreshVardef //if either our session or the system is set to developerMode then refresh is set to true // Retrieve the vardefs from cache. $key = self::getLanguageCacheKey($module, $lang); if (!$refresh) { $return_result = sugar_cache_retrieve($key); if (!empty($return_result) && is_array($return_result)) { return $return_result; } } // Some of the vardefs do not correctly define dictionary as global. Declare it first. $cachedfile = sugar_cached('modules/') . $module . '/language/' . $lang . '.lang.php'; if ($refresh || !file_exists($cachedfile)) { LanguageManager::refreshLanguage($module, $lang); } //at this point we should have the cache/modules/... file //which was created from the refreshVardefs so let's try to load it. if (file_exists($cachedfile)) { global $mod_strings; require $cachedfile; // now that we hae loaded the data from disk, put it in the cache. if (!empty($mod_strings)) { sugar_cache_put($key, $mod_strings); } if (!empty($_SESSION['translation_mode'])) { $mod_strings = array_map('translated_prefix', $mod_strings); } return $mod_strings; } }
public function testBuildMergeLink() { $this->_lvd->seed = new stdClass(); $this->_lvd->seed->module_dir = 'foobarfoobar'; $GLOBALS['current_user']->setPreference('mailmerge_on', 'on'); $settings_cache = sugar_cache_retrieve('admin_settings_cache'); if (empty($settings_cache)) { $settings_cache = array(); } $settings_cache['system_mailmerge_on'] = true; sugar_cache_put('admin_settings_cache', $settings_cache); $output = $this->_lvd->buildMergeLink(array('foobarfoobar' => 'foobarfoobar')); $this->assertContains("index.php?action=index&module=MailMerge&entire=true", $output); sugar_cache_clear('admin_settings_cache'); }
/** * checkDatabaseVersion * Check the db version sugar_version.php and compare to what the version is stored in the config table. * Ensure that both are the same. */ function checkDatabaseVersion($dieOnFailure = true) { $row_count = sugar_cache_retrieve('checkDatabaseVersion_row_count'); if (empty($row_count)) { $version_query = "SELECT count(*) as the_count FROM config WHERE category='info' AND name='sugar_version' AND " . $GLOBALS['db']->convert('value', 'text2char') . " = " . $GLOBALS['db']->quoted($GLOBALS['sugar_db_version']); $result = $GLOBALS['db']->query($version_query); $row = $GLOBALS['db']->fetchByAssoc($result); $row_count = $row['the_count']; sugar_cache_put('checkDatabaseVersion_row_count', $row_count); } if ($row_count == 0 && empty($GLOBALS['sugar_config']['disc_client'])) { if ($dieOnFailure) { $replacementStrings = array(0 => $GLOBALS['sugar_version'], 1 => $GLOBALS['sugar_db_version']); sugar_die(string_format($GLOBALS['app_strings']['ERR_DB_VERSION'], $replacementStrings)); } else { return false; } } return true; }
public function testStoreAndRetrieveWithTTL() { sugar_cache_put($this->_cacheKey1, $this->_cacheValue1, 100); sugar_cache_put($this->_cacheKey2, $this->_cacheValue2, 100); sugar_cache_put($this->_cacheKey3, $this->_cacheValue3, 100); $this->assertEquals($this->_cacheValue1, sugar_cache_retrieve($this->_cacheKey1)); $this->assertEquals($this->_cacheValue2, sugar_cache_retrieve($this->_cacheKey2)); $this->assertEquals($this->_cacheValue3, sugar_cache_retrieve($this->_cacheKey3)); }
/** * Generic load method to load mapping arrays. */ private function loadMapping($var, $merge = false) { ${$var} = sugar_cache_retrieve("CONTROLLER_" . $var . "_" . $this->module); if (!${$var}) { if ($merge && !empty($this->{$var})) { ${$var} = $this->{$var}; } else { ${$var} = []; } if (file_exists($path = DOCROOT . "include/MVC/Controller/{$var}.php")) { require $path; } if (file_exists($path = DOCROOT . "modules/{$this->module}/{$var}'.php")) { require $path; } if (file_exists($path = DOCROOT . "custom/modules/{$this->module}/{$var}.php")) { require $path; } if (file_exists($path = DOCROOT . "custom/include/MVC/Controller/{$var}.php")) { require $path; } $varname = str_replace(" ", "", ucwords(str_replace("_", " ", $var))); if (file_exists($path = DOCROOT . "custom/application/Ext/{$varname}/{$var}.ext.php")) { require $path; } if (file_exists($path = DOCROOT . "custom/modules/{$this->module}/Ext/{$varname}/{$var}.ext.php")) { require $path; } sugar_cache_put("CONTROLLER_" . $var . "_" . $this->module, ${$var}); } $this->{$var} = ${$var}; }
static function getLinkTypes() { static $linkTypeList = null; // Fastest, already stored in the static variable if ($linkTypeList != null) { return $linkTypeList; } // Second fastest, stored in a cache somewhere $linkTypeList = sugar_cache_retrieve('SugarFeedLinkType'); if ($linkTypeList != null) { return $linkTypeList; } // Third fastest, already stored in a file if (file_exists($GLOBALS['sugar_config']['cache_dir'] . 'modules/SugarFeed/linkTypeCache.php')) { require_once $GLOBALS['sugar_config']['cache_dir'] . 'modules/SugarFeed/linkTypeCache.php'; sugar_cache_put('SugarFeedLinkType', $linkTypeList); return $linkTypeList; } // Slow, have to actually collect the data $baseDirs = array('custom/modules/SugarFeed/linkHandlers/', 'modules/SugarFeed/linkHandlers'); $linkTypeList = array(); foreach ($baseDirs as $dirName) { if (!file_exists($dirName)) { continue; } $d = dir($dirName); while ($file = $d->read()) { if ($file[0] == '.') { continue; } if (substr($file, -4) == '.php') { // We found one $typeName = substr($file, 0, -4); $linkTypeList[$typeName] = $typeName; } } } sugar_cache_put('SugarFeedLinkType', $linkTypeList); if (!file_exists($GLOBALS['sugar_config']['cache_dir'] . 'modules/SugarFeed')) { mkdir_recursive($GLOBALS['sugar_config']['cache_dir'] . 'modules/SugarFeed'); } $fd = fopen($GLOBALS['sugar_config']['cache_dir'] . 'modules/SugarFeed/linkTypeCache.php', 'w'); fwrite($fd, '<' . "?php\n\n" . '$linkTypeList = ' . var_export($linkTypeList, true) . ';'); fclose($fd); return $linkTypeList; }
function handleOverride() { global $sugar_config, $sugar_version; $sc = SugarConfig::getInstance(); $overrideArray = $this->readOverride(); $this->previous_sugar_override_config_array = $overrideArray; $diffArray = deepArrayDiff($this->config, $sugar_config); $overrideArray = sugarArrayMerge($overrideArray, $diffArray); $overideString = "<?php\n/***CONFIGURATOR***/\n"; sugar_cache_put('sugar_config', $this->config); $GLOBALS['sugar_config'] = $this->config; foreach ($overrideArray as $key => $val) { if (in_array($key, $this->allow_undefined) || isset($sugar_config[$key])) { if (strcmp("{$val}", 'true') == 0) { $val = true; $this->config[$key] = $val; } if (strcmp("{$val}", 'false') == 0) { $val = false; $this->config[$key] = false; } } $overideString .= override_value_to_string_recursive2('sugar_config', $key, $val); } $overideString .= '/***CONFIGURATOR***/'; $this->saveOverride($overideString); if (isset($this->config['logger']['level']) && $this->logger) { $this->logger->setLevel($this->config['logger']['level']); } }
/** * @ticket 33283 */ public function testCheckDatabaseVersion() { if (isset($GLOBALS['sugar_db_version'])) { $old_sugar_db_version = $GLOBALS['sugar_db_version']; } if (isset($GLOBALS['sugar_version'])) { $old_sugar_version = $GLOBALS['sugar_version']; } include 'sugar_version.php'; $GLOBALS['sugar_version'] = $sugar_version; // first test a valid value $GLOBALS['sugar_db_version'] = $sugar_db_version; $this->assertTrue($this->_app->checkDatabaseVersion(false)); $GLOBALS['sugar_db_version'] = '1.1.1'; // then test to see if we pull against the cache the valid value $this->assertTrue($this->_app->checkDatabaseVersion(false)); // now retest to be sure we actually do the check again sugar_cache_put('checkDatabaseVersion_row_count', 0); $this->assertFalse($this->_app->checkDatabaseVersion(false)); if (isset($old_sugar_db_version)) { $GLOBALS['sugar_db_version'] = $old_sugar_db_version; } if (isset($old_sugar_version)) { $GLOBALS['sugar_version'] = $old_sugar_version; } }
/** * checkDatabaseVersion * Check the db version sugar_version.php and compare to what the version is stored in the config table. * Ensure that both are the same. */ function checkDatabaseVersion($dieOnFailure = true) { $row_count = sugar_cache_retrieve('checkDatabaseVersion_row_count'); if (empty($row_count)) { global $sugar_db_version; $version_query = 'SELECT count(*) as the_count FROM config WHERE category=\'info\' AND name=\'sugar_version\''; if ($GLOBALS['db']->dbType == 'oci8') { } else { if ($GLOBALS['db']->dbType == 'mssql') { $version_query .= " AND CAST(value AS varchar(8000)) = '{$sugar_db_version}'"; } else { $version_query .= " AND value = '{$sugar_db_version}'"; } } $result = $GLOBALS['db']->query($version_query); $row = $GLOBALS['db']->fetchByAssoc($result, -1, true); $row_count = $row['the_count']; sugar_cache_put('checkDatabaseVersion_row_count', $row_count); } if ($row_count == 0 && empty($GLOBALS['sugar_config']['disc_client'])) { $sugar_version = $GLOBALS['sugar_version']; if ($dieOnFailure) { sugar_die("Sugar CRM {$sugar_version} Files May Only Be Used With A Sugar CRM {$sugar_db_version} Database."); } else { return false; } } return true; }
/** * load the vardefs for a given module and object * @param string $module the given module we want to load the vardefs for * @param string $object the given object we wish to load the vardefs for * @param bool $refresh whether or not we wish to refresh the cache file. */ static function loadVardef($module, $object, $refresh = false, $params = array()) { //here check if the cache file exists, if it does then load it, if it doesn't //then call refreshVardef //if either our session or the system is set to developerMode then refresh is set to true if (inDeveloperMode() || !empty($_SESSION['developerMode'])) { $refresh = true; } // Retrieve the vardefs from cache. $key = "VardefManager.{$module}.{$object}"; if (!$refresh) { $return_result = sugar_cache_retrieve($key); $return_result = self::applyGlobalAccountRequirements($return_result); if (!empty($return_result)) { $GLOBALS['dictionary'][$object] = $return_result; return; } } // Some of the vardefs do not correctly define dictionary as global. Declare it first. global $dictionary; if (empty($GLOBALS['dictionary'][$object]) || $refresh) { //if the consumer has demanded a refresh or the cache/modules... file //does not exist, then we should do out and try to reload things $cachedfile = sugar_cached('modules/') . $module . '/' . $object . 'vardefs.php'; if ($refresh || !file_exists($cachedfile)) { VardefManager::refreshVardefs($module, $object, null, true, $params); } //at this point we should have the cache/modules/... file //which was created from the refreshVardefs so let's try to load it. if (file_exists($cachedfile)) { if (is_readable($cachedfile)) { include $cachedfile; } // now that we hae loaded the data from disk, put it in the cache. if (!empty($GLOBALS['dictionary'][$object])) { $GLOBALS['dictionary'][$object] = self::applyGlobalAccountRequirements($GLOBALS['dictionary'][$object]); sugar_cache_put($key, $GLOBALS['dictionary'][$object]); } } } }
/** * Generic load method to load mapping arrays. */ private function loadMapping($var, $merge = false) { ${$var} = sugar_cache_retrieve("CONTROLLER_" . $var . "_" . $this->module); if (!${$var}) { if ($merge && !empty($this->{$var})) { ${$var} = $this->{$var}; } else { ${$var} = array(); } if (file_exists('include/MVC/Controller/' . $var . '.php')) { require 'include/MVC/Controller/' . $var . '.php'; } if (file_exists('modules/' . $this->module . '/' . $var . '.php')) { require 'modules/' . $this->module . '/' . $var . '.php'; } if (file_exists('custom/modules/' . $this->module . '/' . $var . '.php')) { require 'custom/modules/' . $this->module . '/' . $var . '.php'; } if (file_exists('custom/include/MVC/Controller/' . $var . '.php')) { require 'custom/include/MVC/Controller/' . $var . '.php'; } // entry_point_registry -> EntryPointRegistry $varname = str_replace(" ", "", ucwords(str_replace("_", " ", $var))); if (file_exists("custom/application/Ext/{$varname}/{$var}.ext.php")) { require "custom/application/Ext/{$varname}/{$var}.ext.php"; } if (file_exists("custom/modules/{$this->module}/Ext/{$varname}/{$var}.ext.php")) { require "custom/modules/{$this->module}/Ext/{$varname}/{$var}.ext.php"; } sugar_cache_put("CONTROLLER_" . $var . "_" . $this->module, ${$var}); } $this->{$var} = ${$var}; }
/** * Load the view_<view>_config.php file which holds options used by the view. */ function _loadConfig(&$view, $type) { $view_config_custom = array(); $view_config_module = array(); $view_config_root_cstm = array(); $view_config_root = array(); $view_config_app = array(); $config_file_name = 'view.' . $type . '.config.php'; $view_config = sugar_cache_retrieve("VIEW_CONFIG_FILE_" . $view->module . "_TYPE_" . $type); if (!$view_config) { if (file_exists('custom/modules/' . $view->module . '/views/' . $config_file_name)) { require_once 'custom/modules/' . $view->module . '/views/' . $config_file_name; $view_config_custom = $view_config; } if (file_exists('modules/' . $view->module . '/views/' . $config_file_name)) { require_once 'modules/' . $view->module . '/views/' . $config_file_name; $view_config_module = $view_config; } if (file_exists('custom/include/MVC/View/views/' . $config_file_name)) { require_once 'custom/include/MVC/View/views/' . $config_file_name; $view_config_root_cstm = $view_config; } if (file_exists('include/MVC/View/views/' . $config_file_name)) { require_once 'include/MVC/View/views/' . $config_file_name; $view_config_root = $view_config; } if (file_exists('include/MVC/View/views/view.config.php')) { require_once 'include/MVC/View/views/view.config.php'; $view_config_app = $view_config; } $view_config = array('actions' => array(), 'req_params' => array()); //actions if (!empty($view_config_app) && !empty($view_config_app['actions'])) { $view_config['actions'] = array_merge($view_config['actions'], $view_config_app['actions']); } if (!empty($view_config_root) && !empty($view_config_root['actions'])) { $view_config['actions'] = array_merge($view_config['actions'], $view_config_root['actions']); } if (!empty($view_config_root_cstm) && !empty($view_config_root_cstm['actions'])) { $view_config['actions'] = array_merge($view_config['actions'], $view_config_root_cstm['actions']); } if (!empty($view_config_module) && !empty($view_config_module['actions'])) { $view_config['actions'] = array_merge($view_config['actions'], $view_config_module['actions']); } if (!empty($view_config_custom) && !empty($view_config_custom['actions'])) { $view_config['actions'] = array_merge($view_config['actions'], $view_config_custom['actions']); } //req_params if (!empty($view_config_app) && !empty($view_config_app['req_params'])) { $view_config['req_params'] = array_merge($view_config['req_params'], $view_config_app['req_params']); } if (!empty($view_config_root) && !empty($view_config_root['req_params'])) { $view_config['req_params'] = array_merge($view_config['req_params'], $view_config_root['req_params']); } if (!empty($view_config_root_cstm) && !empty($view_config_root_cstm['req_params'])) { $view_config['req_params'] = array_merge($view_config['req_params'], $view_config_root_cstm['req_params']); } if (!empty($view_config_module) && !empty($view_config_module['req_params'])) { $view_config['req_params'] = array_merge($view_config['req_params'], $view_config_module['req_params']); } if (!empty($view_config_custom) && !empty($view_config_custom['req_params'])) { $view_config['req_params'] = array_merge($view_config['req_params'], $view_config_custom['req_params']); } sugar_cache_put("VIEW_CONFIG_FILE_" . $view->module . "_TYPE_" . $type, $view_config); } $action = strtolower($view->action); $config = null; if (!empty($view_config['req_params'])) { //try the params first foreach ($view_config['req_params'] as $key => $value) { if (!empty($_REQUEST[$key]) && $_REQUEST[$key] == "false") { $_REQUEST[$key] = false; } if (!empty($_REQUEST[$key])) { if (!is_array($value['param_value'])) { if ($value['param_value'] == $_REQUEST[$key]) { $config = $value['config']; break; } } else { foreach ($value['param_value'] as $v) { if ($v == $_REQUEST[$key]) { $config = $value['config']; break; } } } } } } if ($config == null && !empty($view_config['actions']) && !empty($view_config['actions'][$action])) { $config = $view_config['actions'][$action]; } if ($config != null) { $view->options = $config; } }
function retrieveSettings($category = FALSE, $clean = false) { // declare a cache for all settings $settings_cache = sugar_cache_retrieve('admin_settings_cache'); if ($clean) { $settings_cache = array(); } // Check for a cache hit if (!empty($settings_cache)) { $this->settings = $settings_cache; return $this; } $query = "SELECT category, name, value FROM {$this->table_name}"; $result = $this->db->query($query, true, "Unable to retrieve system settings"); if (empty($result)) { return NULL; } while ($row = $this->db->fetchByAssoc($result, -1, true)) { if ($row['category'] . "_" . $row['name'] == 'ldap_admin_password' || $row['category'] . "_" . $row['name'] == 'proxy_password') { $this->settings[$row['category'] . "_" . $row['name']] = $this->decrypt_after_retrieve($row['value']); } else { $this->settings[$row['category'] . "_" . $row['name']] = $row['value']; } } // outbound email settings $oe = new OutboundEmail(); $oe->getSystemMailerSettings(); foreach ($oe->field_defs as $def) { if (strpos($def, "mail_") !== false) { $this->settings[$def] = $oe->{$def}; } } // At this point, we have built a new array that should be cached. sugar_cache_put('admin_settings_cache', $this->settings); return $this; }
/** * Destructor * Here we'll write out the internal file path caches to an external cache of some sort. */ public function __destruct() { // Bug 28309 - Set the current directory to one which we expect it to be (i.e. the root directory of the install set_include_path(realpath(dirname(__FILE__) . '/../..') . PATH_SEPARATOR . get_include_path()); chdir(realpath(dirname(__FILE__) . '/../..')); // Bug 30807/30808 - Re-setup the external cache since the object isn't there when calling this method. $GLOBALS['external_cache_checked'] = false; check_cache(); // clear out the cache on destroy if we are asked to if ($this->_clearCacheOnDestroy) { if (is_file($GLOBALS['sugar_config']['cache_dir'] . $this->getFilePath() . '/pathCache.php')) { unlink($GLOBALS['sugar_config']['cache_dir'] . $this->getFilePath() . '/pathCache.php'); } if ($GLOBALS['external_cache_enabled'] && $GLOBALS['external_cache_type'] != 'base-in-memory') { sugar_cache_clear('theme_' . $this->dirName . '_jsCache'); sugar_cache_clear('theme_' . $this->dirName . '_cssCache'); sugar_cache_clear('theme_' . $this->dirName . '_imageCache'); sugar_cache_clear('theme_' . $this->dirName . '_templateCache'); } } elseif (!inDeveloperMode()) { // push our cache into the sugar cache if ($GLOBALS['external_cache_enabled'] && $GLOBALS['external_cache_type'] != 'base-in-memory') { // only update the caches if they have been changed in this request if (count($this->_jsCache) != $this->_initialCacheSize['jsCache']) { sugar_cache_put('theme_' . $this->dirName . '_jsCache', $this->_jsCache); } if (count($this->_cssCache) != $this->_initialCacheSize['cssCache']) { sugar_cache_put('theme_' . $this->dirName . '_cssCache', $this->_cssCache); } if (count($this->_imageCache) != $this->_initialCacheSize['imageCache']) { sugar_cache_put('theme_' . $this->dirName . '_imageCache', $this->_imageCache); } if (count($this->_templateCache) != $this->_initialCacheSize['templateCache']) { sugar_cache_put('theme_' . $this->dirName . '_templateCache', $this->_templateCache); } } elseif (count($this->_jsCache) != $this->_initialCacheSize['jsCache'] || count($this->_cssCache) != $this->_initialCacheSize['cssCache'] || count($this->_imageCache) != $this->_initialCacheSize['imageCache'] || count($this->_templateCache) != $this->_initialCacheSize['templateCache']) { sugar_file_put_contents(create_cache_directory($this->getFilePath() . '/pathCache.php'), serialize(array('jsCache' => $this->_jsCache, 'cssCache' => $this->_cssCache, 'imageCache' => $this->_imageCache, 'templateCache' => $this->_templateCache))); } } elseif ($GLOBALS['external_cache_enabled']) { sugar_cache_clear('theme_' . $this->dirName . '_jsCache'); sugar_cache_clear('theme_' . $this->dirName . '_cssCache'); sugar_cache_clear('theme_' . $this->dirName . '_imageCache'); sugar_cache_clear('theme_' . $this->dirName . '_templateCache'); } }
function getArrowImageSize() { // just get the non-sort image's size.. the up and down have be the same. $image = SugarThemeRegistry::current()->getImageURL("arrow.gif", false); $cache_key = 'arrow_size.' . $image; // Check the cache $result = sugar_cache_retrieve($cache_key); if (!empty($result)) { return $result; } // No cache hit. Calculate the value and return. $result = getimagesize($image); sugar_cache_put($cache_key, $result); return $result; }
/** * Saves the created strings * * Here, we cheat the system by storing our string overrides in the sugar_cache where * we normally stored the cached language strings. */ public function save() { $language = $GLOBALS['current_language']; if (isset($this->_strings['app_strings'])) { $cache_key = 'app_strings.' . $language; $app_strings = sugar_cache_retrieve($cache_key); if (empty($app_strings)) { $app_strings = return_application_language($language); } foreach ($this->_strings['app_strings'] as $key => $value) { $app_strings[$key] = $value; } sugar_cache_put($cache_key, $app_strings); $GLOBALS['app_strings'] = $app_strings; } if (isset($this->_strings['app_list_strings'])) { $cache_key = 'app_list_strings.' . $language; $app_list_strings = sugar_cache_retrieve($cache_key); if (empty($app_list_strings)) { $app_list_strings = return_app_list_strings_language($language); } foreach ($this->_strings['app_list_strings'] as $key => $value) { $app_list_strings[$key] = $value; } sugar_cache_put($cache_key, $app_list_strings); $GLOBALS['app_list_strings'] = $app_list_strings; } if (isset($this->_strings['mod_strings'])) { foreach ($this->_strings['mod_strings'] as $module => $strings) { $cache_key = LanguageManager::getLanguageCacheKey($module, $language); $mod_strings = sugar_cache_retrieve($cache_key); if (empty($mod_strings)) { $mod_strings = return_module_language($language, $module); } foreach ($strings as $key => $value) { $mod_strings[$key] = $value; } sugar_cache_put($cache_key, $mod_strings); $GLOBALS['mod_strings'] = $mod_strings; } } }
/** * Called from process(). This method will display the footer on the page. */ public function displayFooter() { if (empty($this->responseTime)) { $this->_calculateFooterMetrics(); } global $sugar_config; global $app_strings; global $mod_strings; $themeObject = SugarThemeRegistry::current(); //decide whether or not to show themepicker, default is to show $showThemePicker = true; if (isset($sugar_config['showThemePicker'])) { $showThemePicker = $sugar_config['showThemePicker']; } echo "<!-- crmprint -->"; $jsalerts = new jsAlerts(); if (!isset($_SESSION['isMobile'])) { echo $jsalerts->getScript(); } $ss = new Sugar_Smarty(); $ss->assign("AUTHENTICATED", isset($_SESSION["authenticated_user_id"])); $ss->assign('MOD', return_module_language($GLOBALS['current_language'], 'Users')); $bottomLinkList = array(); if (isset($this->action) && $this->action != "EditView") { $bottomLinkList['print'] = array($app_strings['LNK_PRINT'] => getPrintLink()); } $bottomLinkList['backtotop'] = array($app_strings['LNK_BACKTOTOP'] => 'javascript:SUGAR.util.top();'); $bottomLinksStr = ""; foreach ($bottomLinkList as $key => $value) { foreach ($value as $text => $link) { $href = $link; if (substr($link, 0, 11) == "javascript:") { $onclick = " onclick=\"" . substr($link, 11) . "\""; $href = "javascript:void(0)"; } else { $onclick = ""; } $imageURL = SugarThemeRegistry::current()->getImageURL($key . '.gif'); $bottomLinksStr .= "<a href=\"{$href}\""; $bottomLinksStr .= isset($onclick) ? $onclick : ""; $bottomLinksStr .= "><img src='{$imageURL}' alt=''>"; //keeping alt blank on purpose for 508 (text will be read instead) $bottomLinksStr .= " " . $text . "</a>"; } } $ss->assign("BOTTOMLINKS", $bottomLinksStr); if (SugarConfig::getInstance()->get('calculate_response_time', false)) { $ss->assign('STATISTICS', $this->_getStatistics()); } // Under the License referenced above, you are required to leave in all copyright statements in both // the code and end-user application. $copyright = '© 2004-2012 SugarCRM Inc. The Program is provided AS IS, without warranty. Licensed under <a href="LICENSE.txt" target="_blank" class="copyRightLink">AGPLv3</a>.<br>This program is free software; you can redistribute it and/or modify it under the terms of the <br><a href="LICENSE.txt" target="_blank" class="copyRightLink"> GNU Affero General Public License version 3</a> as published by the Free Software Foundation, including the additional permission set forth in the source code header.<br>'; // The interactive user interfaces in modified source and object code // versions of this program must display Appropriate Legal Notices, as // required under Section 5 of the GNU General Public License version // 3. In accordance with Section 7(b) of the GNU General Public License // version 3, these Appropriate Legal Notices must retain the display // of the "Powered by SugarCRM" logo. If the display of the logo is // not reasonably feasible for technical reasons, the Appropriate // Legal Notices must display the words "Powered by SugarCRM". $attribLinkImg = "<img style='margin-top: 2px' border='0' width='120' height='34' src='include/images/poweredby_sugarcrm_65.png' alt='Powered By SugarCRM'>\n"; // handle resizing of the company logo correctly on the fly $companyLogoURL = $themeObject->getImageURL('company_logo.png'); $companyLogoURL_arr = explode('?', $companyLogoURL); $companyLogoURL = $companyLogoURL_arr[0]; $company_logo_attributes = sugar_cache_retrieve('company_logo_attributes'); if (!empty($company_logo_attributes)) { $ss->assign("COMPANY_LOGO_MD5", $company_logo_attributes[0]); $ss->assign("COMPANY_LOGO_WIDTH", $company_logo_attributes[1]); $ss->assign("COMPANY_LOGO_HEIGHT", $company_logo_attributes[2]); } else { // Always need to md5 the file $ss->assign("COMPANY_LOGO_MD5", md5_file($companyLogoURL)); list($width, $height) = getimagesize($companyLogoURL); if ($width > 212 || $height > 40) { $resizePctWidth = ($width - 212) / 212; $resizePctHeight = ($height - 40) / 40; if ($resizePctWidth > $resizePctHeight) { $resizeAmount = $width / 212; } else { $resizeAmount = $height / 40; } $ss->assign("COMPANY_LOGO_WIDTH", round($width * (1 / $resizeAmount))); $ss->assign("COMPANY_LOGO_HEIGHT", round($height * (1 / $resizeAmount))); } else { $ss->assign("COMPANY_LOGO_WIDTH", $width); $ss->assign("COMPANY_LOGO_HEIGHT", $height); } // Let's cache the results sugar_cache_put('company_logo_attributes', array($ss->get_template_vars("COMPANY_LOGO_MD5"), $ss->get_template_vars("COMPANY_LOGO_WIDTH"), $ss->get_template_vars("COMPANY_LOGO_HEIGHT"))); } $ss->assign("COMPANY_LOGO_URL", getJSPath($companyLogoURL) . "&logo_md5=" . $ss->get_template_vars("COMPANY_LOGO_MD5")); // Bug 38594 - Add in Trademark wording $copyright .= 'SugarCRM is a trademark of SugarCRM, Inc. All other company and product names may be trademarks of the respective companies with which they are associated.<br />'; //rrs bug: 20923 - if this image does not exist as per the license, then the proper image will be displayed regardless, so no need //to display an empty image here. if (file_exists('include/images/poweredby_sugarcrm_65.png')) { $copyright .= $attribLinkImg; } // End Required Image $ss->assign('COPYRIGHT', $copyright); // here we allocate the help link data $help_actions_blacklist = array('Login'); // we don't want to show a context help link here if (!in_array($this->action, $help_actions_blacklist)) { $url = 'javascript:void(window.open(\'index.php?module=Administration&action=SupportPortal&view=documentation&version=' . $GLOBALS['sugar_version'] . '&edition=' . $GLOBALS['sugar_flavor'] . '&lang=' . $GLOBALS['current_language'] . '&help_module=' . $this->module . '&help_action=' . $this->action . '&key=' . $GLOBALS['server_unique_key'] . '\'))'; $label = (isset($GLOBALS['app_list_strings']['moduleList'][$this->module]) ? $GLOBALS['app_list_strings']['moduleList'][$this->module] : $this->module) . ' ' . $app_strings['LNK_HELP']; $ss->assign('HELP_LINK', SugarThemeRegistry::current()->getLink($url, $label, "id='help_link_two'", 'help-dashlet.png', 'class="icon"', null, null, '', 'left')); } // end $ss->display(SugarThemeRegistry::current()->getTemplate('footer.tpl')); }
function set_register_value($category, $name, $value) { return sugar_cache_put("{$category}:{$name}", $value); }
/** * static getUserRoleNames($user_id) * returns a list of Role names for a given user id * * @param GUID $user_id * * @return a list of ACLRole Names */ function getUserRoleNames($user_id) { $user_roles = sugar_cache_retrieve("RoleMembershipNames_" . $user_id); if (!$user_roles) { //if we don't have it loaded then lets check against the db $additional_where = ''; $query = "SELECT acl_roles.* " . "FROM acl_roles " . "INNER JOIN acl_roles_users ON acl_roles_users.user_id = '{$user_id}' " . "AND acl_roles_users.role_id = acl_roles.id AND acl_roles_users.deleted = 0 " . "WHERE acl_roles.deleted=0 "; $result = $GLOBALS['db']->query($query); $user_roles = []; while ($row = $GLOBALS['db']->fetchByAssoc($result)) { $user_roles[] = $row['name']; } sugar_cache_put("RoleMembershipNames_" . $user_id, $user_roles); } return $user_roles; }
/** This function retrieves an application language file and returns the array of strings included in the $mod_list_strings var. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. * If you are using the current language, do not call this function unless you are loading it for the first time */ function return_mod_list_strings_language($language, $module) { global $mod_list_strings; global $sugar_config; global $currentModule; $cache_key = "mod_list_str_lang." . $language . $module; // Check for cached value $cache_entry = sugar_cache_retrieve($cache_key); if (!empty($cache_entry)) { return $cache_entry; } $language_used = $language; $temp_mod_list_strings = $mod_list_strings; $default_language = $sugar_config['default_language']; if ($currentModule == $module && isset($mod_list_strings) && $mod_list_strings != null) { return $mod_list_strings; } // cn: bug 6351 - include en_us if file langpack not available // cn: bug 6048 - merge en_us with requested language include "modules/{$module}/language/en_us.lang.php"; $en_mod_list_strings = array(); if ($language_used != $default_language) { $en_mod_list_strings = $mod_list_strings; } if (file_exists("modules/{$module}/language/{$language}.lang.php")) { include "modules/{$module}/language/{$language}.lang.php"; } if (file_exists("modules/{$module}/language/{$language}.lang.override.php")) { include "modules/{$module}/language/{$language}.lang.override.php"; } if (file_exists("modules/{$module}/language/{$language}.lang.php.override")) { echo 'Please Change:<br>' . "modules/{$module}/language/{$language}.lang.php.override" . '<br>to<br>' . 'Please Change:<br>' . "modules/{$module}/language/{$language}.lang.override.php"; include "modules/{$module}/language/{$language}.lang.php.override"; } // cn: bug 6048 - merge en_us with requested language $mod_list_strings = sugarArrayMerge($en_mod_list_strings, $mod_list_strings); // if we still don't have a language pack, then log an error if (!isset($mod_list_strings)) { $GLOBALS['log']->fatal("Unable to load the application list language file for the selected language({$language}) or the default language({$default_language}) for module({$module})"); return null; } $return_value = $mod_list_strings; $mod_list_strings = $temp_mod_list_strings; sugar_cache_put($cache_key, $return_value); return $return_value; }
/** * @return boolean true if the user is a member of the role_name, false otherwise * @param string $role_name - Must be the exact name of the acl_role * @param string $user_id - The user id to check for the role membership, empty string if current user * @desc Determine whether or not a user is a member of an ACL Role. This function caches the * results in the session or to prevent running queries after the first time executed. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.. * All Rights Reserved.. * Contributor(s): ______________________________________.. */ function check_role_membership($role_name, $user_id = '') { global $current_user; if (empty($user_id)) { $user_id = $current_user->id; } // Check the Sugar External Cache to see if this users memberships were cached $role_array = sugar_cache_retrieve("RoleMemberships_" . $user_id); // If we are pulling the roles for the current user if ($user_id == $current_user->id) { // If the Session doesn't contain the values if (!isset($_SESSION['role_memberships'])) { // This means the external cache already had it loaded if (!empty($role_array)) { $_SESSION['role_memberships'] = $role_array; } else { $_SESSION['role_memberships'] = ACLRole::getUserRoleNames($user_id); $role_array = $_SESSION['role_memberships']; } } else { $role_array = $_SESSION['role_memberships']; } } else { // If the external cache didn't contain the values, we get them and put them in cache if (!$role_array) { $role_array = ACLRole::getUserRoleNames($user_id); sugar_cache_put("RoleMemberships_" . $user_id, $role_array); } } // If the role doesn't exist in the list of the user's roles if (!empty($role_array) && in_array($role_name, $role_array)) { return true; } else { return false; } }
function getMeetingsExternalApiDropDown($focus = null, $name = null, $value = null, $view = null) { global $dictionary, $app_list_strings; $cacheKeyName = 'meetings_type_drop_down'; $apiList = sugar_cache_retrieve($cacheKeyName); if ($apiList === null) { require_once 'include/externalAPI/ExternalAPIFactory.php'; $apiList = ExternalAPIFactory::getModuleDropDown('Meetings'); $apiList = array_merge(array('Sugar' => $GLOBALS['app_list_strings']['eapm_list']['Sugar']), $apiList); sugar_cache_put($cacheKeyName, $apiList); } if (!empty($value) && empty($apiList[$value])) { $apiList[$value] = $value; } //bug 46294: adding list of options to dropdown list (if it is not the default list) if ($dictionary['Meeting']['fields']['type']['options'] != "eapm_list") { $apiList = array_merge(getMeetingTypeOptions($dictionary, $app_list_strings), $apiList); } return $apiList; }