grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 true,
'show_title' => true,
'show_subpanels' => false,
'show_search' => true,
'show_footer' => true,
'show_javascript' => true,
'view_print' => false,
);
/**
* @var string $type
* Represents which view to use for loading metadata definitions eg 'edit', 'detail' or list etc.
*/
public $type;
/**
* @var float $responseTime
* Measure time it takes to process view
*/
public $responseTime;
/**
* @var integer $fileResources
* Print out the resources used in constructing the page.
*/
public $fileResources;
/**
*
* @var array
*/
private $settings = [];
/**
* SugarView constructor.
* @deprecated since version 7.11
*/
public function __construct()
{
LoggerManager::getLogger()->deprecated();
}
/**
* @deprecated deprecated since version 7.6, PHP4 Style Constructors are deprecated and will be remove in 8.0
* please update your code, use __construct instead
*/
public function SugarView()
{
$deprecatedMessage =
'PHP4 Style Constructors are deprecated and will be remove in 7.8, please update your code';
if (isset($GLOBALS['log'])) {
$GLOBALS['log']->deprecated($deprecatedMessage);
} else {
trigger_error($deprecatedMessage, E_USER_DEPRECATED);
}
self::__construct();
}
/**
* @param SugarBean $bean
* @param array $view_object_map
*/
public function init(
$bean = null,
$view_object_map = array()
) {
$this->bean = $bean;
$this->view_object_map = $view_object_map;
$this->action = isset($GLOBALS['action']) ? $GLOBALS['action'] : null;
$this->module = isset($GLOBALS['module']) ? $GLOBALS['module'] : null;
$this->_initSmarty();
}
/**
* Set up smarty template
*/
protected function _initSmarty()
{
$this->ss = new Sugar_Smarty();
if (!isset($GLOBALS['mod_strings'])) {
$GLOBALS['log']->warn('Undefined index: mod_strings');
$GLOBALS['mod_strings'] = array();
}
if (!isset($GLOBALS['app_strings'])) {
$GLOBALS['log']->warn('Undefined index: app_strings');
$GLOBALS['app_strings'] = array();
}
$this->ss->assign('MOD', $GLOBALS['mod_strings']);
$this->ss->assign('APP', $GLOBALS['app_strings']);
}
/**
* This method will be called from the controller and is not meant to be overridden.
*/
public function process()
{
LogicHook::initialize();
$this->_checkModule();
//trackView has to be here in order to track for breadcrumbs
$this->_trackView();
//For the ajaxUI, we need to use output buffering to return the page in an ajax friendly format
if ($this->_getOption('json_output')) {
ob_start();
if (!empty($_REQUEST['ajax_load']) && !empty($_REQUEST['loadLanguageJS'])) {
echo $this->_getModLanguageJS();
}
}
if ($this->_getOption('show_header')) {
$this->displayHeader();
} else {
$this->renderJavascript();
}
$this->_buildModuleList();
$this->preDisplay();
$this->displayErrors();
$this->display();
if (!empty($this->module)) {
$GLOBALS['logic_hook']->call_custom_logic($this->module, 'after_ui_frame');
} else {
$GLOBALS['logic_hook']->call_custom_logic('', 'after_ui_frame');
}
// We have to update jsAlerts as soon as possible
if (!isset($_SESSION['isMobile']) &&
($this instanceof ViewList || $this instanceof ViewDetail || $this instanceof ViewEdit)
) {
if (isset($_SESSION['alerts_output']) && isset($_SESSION['alerts_output_timestamp']) &&
$_SESSION['alerts_output_timestamp'] >= (date('U')-60)
) {
echo $_SESSION['alerts_output'];
} else {
$jsAlerts = new jsAlerts();
ob_start();
echo $jsAlerts->getScript();
$jsAlertsOutput = ob_get_clean();
//save to session so we dont have to load this every time
$_SESSION['alerts_output'] = $jsAlertsOutput;
$_SESSION['alerts_output_timestamp'] = date('U');
echo $jsAlertsOutput;
}
}
if ($this->_getOption('show_subpanels') && !empty($_REQUEST['record'])) {
$this->_displaySubPanels();
}
if ($this->action === 'Login') {
//this is needed for a faster loading login page ie won't render unless the tables are closed
ob_flush();
}
if ($this->_getOption('show_footer')) {
$this->displayFooter();
}
$GLOBALS['logic_hook']->call_custom_logic('', 'after_ui_footer');
if ($this->_getOption('json_output')) {
$content = ob_get_clean();
$module = $this->module;
$ajax_ret = array(
'content' => mb_detect_encoding($content) == "UTF-8" ? $content : utf8_encode($content),
'menu' => array(
'module' => $module,
'label' => translate($module),
$this->getMenu($module),
),
'title' => $this->getBrowserTitle(),
'action' => isset($_REQUEST['action']) ? $_REQUEST['action'] : "",
'record' => isset($_REQUEST['record']) ? $_REQUEST['record'] : "",
'favicon' => $this->getFavicon(),
);
if (SugarThemeRegistry::current()->name == 'Classic' || SugarThemeRegistry::current()->classic) {
$ajax_ret['moduleList'] = $this->displayHeader(true);
}
if (empty($this->responseTime)) {
$this->_calculateFooterMetrics();
}
$ajax_ret['responseTime'] = $this->responseTime;
$json = getJSONobj();
echo $json->encode($ajax_ret);
$GLOBALS['app']->headerDisplayed = false;
ob_flush();
}
//Do not track if there is no module or if module is not a String
$this->_track();
}
/**
* This method will display the errors on the page.
*/
public function displayErrors()
{
$errors = '';
foreach ($this->errors as $error) {
$errors .= '' . $error . '
';
}
if (!$this->suppressDisplayErrors) {
echo $errors;
return '';
}
return $errors;
}
/**
* [OVERRIDE] - This method is meant to overridden in a subclass. The purpose of this method is
* to allow a view to do some preprocessing before the display method is called. This becomes
* useful when you have a view defined at the application level and then within a module
* have a sub-view that extends from this application level view. The application level
* view can do the setup in preDisplay() that is common to itself and any subviews
* and then the subview can just override display(). If it so desires, can also override
* preDisplay().
*/
public function preDisplay()
{
}
/**
* [OVERRIDE] - This method is meant to overridden in a subclass. This method
* will handle the actual display logic of the view.
*/
public function display()
{
}
/**
* trackView
*/
protected function _trackView()
{
$action = strtolower($this->action);
//Skip save, tracked in SugarBean instead
if ($action == 'save') {
return;
}
$trackerManager = TrackerManager::getInstance();
$timeStamp = TimeDate::getInstance()->nowDb();
if ($monitor = $trackerManager->getMonitor('tracker')) {
$monitor->setValue('action', $action);
$monitor->setValue('user_id', $GLOBALS['current_user']->id);
$monitor->setValue('module_name', $this->module);
$monitor->setValue('date_modified', $timeStamp);
$monitor->setValue(
'visible',
(($monitor->action == 'detailview') || ($monitor->action == 'editview')) ? 1 : 0
);
if (!empty($this->bean->id)) {
$monitor->setValue('item_id', $this->bean->id);
$monitor->setValue('item_summary', $this->bean->get_summary_text());
}
//If visible is true, but there is no bean, do not track (invalid/unauthorized reference)
//Also, do not track save actions where there is no bean id
if ($monitor->visible && empty($this->bean->id)) {
$trackerManager->unsetMonitor($monitor);
return;
}
$trackerManager->saveMonitor($monitor, true, true);
}
}
/**
* Displays the header on section of the page; basically everything before the content
*
* @param bool $retModTabs
*
* @return string
*/
public function displayHeader($retModTabs = false)
{
global $theme;
global $max_tabs;
global $app_strings;
global $current_user;
global $sugar_config;
global $app_list_strings;
global $mod_strings;
global $current_language;
$GLOBALS['app']->headerDisplayed = true;
$themeObject = SugarThemeRegistry::current();
$theme = $themeObject->__toString();
$ss = new Sugar_Smarty();
$ss->assign("APP", $app_strings);
$ss->assign("THEME", $theme);
$ss->assign("THEME_CONFIG", $themeObject->getConfig());
$ss->assign("THEME_IE6COMPAT", $themeObject->ie6compat ? 'true' : 'false');
$ss->assign("MODULE_NAME", $this->module);
$ss->assign("langHeader", get_language_header());
// set ab testing if exists
$testing = (isset($_REQUEST["testing"]) ? $_REQUEST['testing'] : "a");
$ss->assign("ABTESTING", $testing);
// get browser title
$ss->assign("SYSTEM_NAME", $this->getBrowserTitle());
// get css
$css = $themeObject->getCSS();
if ($this->_getOption('view_print')) {
$css .= '';
}
$ss->assign("SUGAR_CSS", $css);
// get javascript
ob_start();
$this->renderJavascript();
$ss->assign("SUGAR_JS", ob_get_contents() . $themeObject->getJS());
ob_end_clean();
// get favicon
if (isset($GLOBALS['sugar_config']['default_module_favicon'])) {
$module_favicon = $GLOBALS['sugar_config']['default_module_favicon'];
} else {
$module_favicon = false;
}
$favicon = $this->getFavicon();
$ss->assign('FAVICON_URL', $favicon['url']);
// build the shortcut menu
$shortcut_menu = array();
foreach ($this->getMenu() as $key => $menu_item) {
$shortcut_menu[$key] = array(
"URL" => ajaxLink($menu_item[0]),
"LABEL" => $menu_item[1],
"MODULE_NAME" => $menu_item[2],
);
}
$ss->assign("SHORTCUT_MENU", $shortcut_menu);
// handle rtl text direction
if (isset($_REQUEST['RTL']) && $_REQUEST['RTL'] == 'RTL') {
$_SESSION['RTL'] = true;
}
if (isset($_REQUEST['LTR']) && $_REQUEST['LTR'] == 'LTR') {
unset($_SESSION['RTL']);
}
if (isset($_SESSION['RTL']) && $_SESSION['RTL']) {
$ss->assign("DIR", 'dir="RTL"');
}
// 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")
);
// get the global links
$gcls = array();
$global_control_links = array();
require("include/globalControlLinks.php");
foreach ($global_control_links as $key => $value) {
if ($key == 'users') { //represents logout link.
$ss->assign("LOGOUT_LINK", $value['linkinfo'][key($value['linkinfo'])]);
$ss->assign("LOGOUT_LABEL", key($value['linkinfo']));//key value for first element.
continue;
}
foreach ($value as $linkattribute => $attributevalue) {
// get the main link info
if ($linkattribute == 'linkinfo') {
$gcls[$key] = array(
"LABEL" => key($attributevalue),
"URL" => current($attributevalue),
"SUBMENU" => array(),
);
if (substr($gcls[$key]["URL"], 0, 11) == "javascript:") {
$gcls[$key]["ONCLICK"] = substr($gcls[$key]["URL"], 11);
$gcls[$key]["URL"] = "javascript:void(0)";
}
}
// and now the sublinks
if ($linkattribute === 'submenu' && is_array($attributevalue)) {
foreach ($attributevalue as $submenulinkkey => $submenulinkinfo) {
$gcls[$key]['SUBMENU'][$submenulinkkey] = array(
"LABEL" => key($submenulinkinfo),
"URL" => current($submenulinkinfo),
);
}
if (substr($gcls[$key]['SUBMENU'][$submenulinkkey]["URL"], 0, 11) === "javascript:") {
$gcls[$key]['SUBMENU'][$submenulinkkey]["ONCLICK"] =
substr($gcls[$key]['SUBMENU'][$submenulinkkey]["URL"], 11);
$gcls[$key]['SUBMENU'][$submenulinkkey]["URL"] = "javascript:void(0)";
}
}
}
}
$ss->assign("GCLS", $gcls);
$ss->assign("SEARCH", isset($_REQUEST['query_string']) ? $_REQUEST['query_string'] : '');
if ($this->action == "EditView" || $this->action == "Login") {
$ss->assign("ONLOAD", 'onload="set_focus()"');
}
$ss->assign("AUTHENTICATED", isset($_SESSION["authenticated_user_id"]));
// get other things needed for page style popup
if (isset($_SESSION["authenticated_user_id"])) {
// get the current user name and id
$ss->assign(
"CURRENT_USER",
$current_user->full_name == '' || !showFullName() ? $current_user->user_name : $current_user->full_name
);
$ss->assign("CURRENT_USER_ID", $current_user->id);
// get the last viewed records
$favorites = BeanFactory::getBean('Favorites');
$favorite_records = $favorites->getCurrentUserSidebarFavorites();
$ss->assign("favoriteRecords", $favorite_records);
$tracker = BeanFactory::getBean('Trackers');
$history = $tracker->get_recently_viewed($current_user->id);
$ss->assign("recentRecords", $this->processRecentRecords($history));
}
$bakModStrings = $mod_strings;
if (isset($_SESSION["authenticated_user_id"])) {
// get the module list
$moduleTopMenu = array();
$max_tabs = $current_user->getPreference('max_tabs');
// Attempt to correct if max tabs count is extremely high.
if (!isset($max_tabs) || $max_tabs <= 0 || $max_tabs > 10) {
$max_tabs = $GLOBALS['sugar_config']['default_max_tabs'];
$current_user->setPreference('max_tabs', $max_tabs, 0, 'global');
}
$moduleTab = $this->_getModuleTab();
$ss->assign('MODULE_TAB', $moduleTab);
// See if they are using grouped tabs or not (removed in 6.0, returned in 6.1)
$user_navigation_paradigm = $current_user->getPreference('navigation_paradigm');
if (!isset($user_navigation_paradigm)) {
$user_navigation_paradigm = $GLOBALS['sugar_config']['default_navigation_paradigm'];
}
// Get the full module list for later use
foreach (query_module_access_list($current_user) as $module) {
// Bug 25948 - Check for the module being in the moduleList
if (isset($app_list_strings['moduleList'][$module])) {
$fullModuleList[$module] = $app_list_strings['moduleList'][$module];
}
}
if (!should_hide_iframes()) {
$iFrame = new iFrame();
$frames = $iFrame->lookup_frames('tab');
foreach ($frames as $key => $values) {
$fullModuleList[$key] = $values;
}
} elseif (isset($fullModuleList['iFrames'])) {
unset($fullModuleList['iFrames']);
}
if ($user_navigation_paradigm == 'gm' && isset($themeObject->group_tabs) && $themeObject->group_tabs) {
// We are using grouped tabs
require_once('include/GroupedTabs/GroupedTabStructure.php');
$groupedTabsClass = new GroupedTabStructure();
$modules = query_module_access_list($current_user);
//handle with submoremodules
$max_tabs = $current_user->getPreference('max_tabs');
// If the max_tabs isn't set incorrectly, set it within the range, to the default max sub tabs size
if (!isset($max_tabs) || $max_tabs <= 0 || $max_tabs > 10) {
// We have a default value. Use it
if (isset($GLOBALS['sugar_config']['default_max_tabs'])) {
$max_tabs = $GLOBALS['sugar_config']['default_max_tabs'];
} else {
$max_tabs = 8;
}
}
$subMoreModules = false;
$groupTabs = $groupedTabsClass->get_tab_structure(get_val_array($modules));
// We need to put this here, so the "All" group is valid for the user's preference.
$groupTabs[$app_strings['LBL_TABGROUP_ALL']]['modules'] = $fullModuleList;
// Setup the default group tab.
$allGroup = $app_strings['LBL_TABGROUP_ALL'];
$ss->assign('currentGroupTab', $allGroup);
$currentGroupTab = $allGroup;
$usersGroup = $current_user->getPreference('theme_current_group');
// Figure out which tab they currently have selected (stored as a user preference)
if (!empty($usersGroup) && isset($groupTabs[$usersGroup])) {
$currentGroupTab = $usersGroup;
} else {
$current_user->setPreference('theme_current_group', $currentGroupTab);
}
$ss->assign('currentGroupTab', $currentGroupTab);
$usingGroupTabs = true;
} else {
// Setup the default group tab.
$ss->assign('currentGroupTab', $app_strings['LBL_TABGROUP_ALL']);
$usingGroupTabs = false;
$groupTabs[$app_strings['LBL_TABGROUP_ALL']]['modules'] = $fullModuleList;
}
$topTabList = array();
// Now time to go through each of the tab sets and fix them up.
foreach ($groupTabs as $tabIdx => $tabData) {
$topTabs = $tabData['modules'];
// Sort the list of modules alphabetically
if ($current_user->getPreference('sort_modules_by_name')) {
asort($topTabs);
}
// put the current module at the top of the list
if (!empty($moduleTab) && isset($tabData['modules'][$moduleTab])) {
unset($topTabs[$moduleTab]);
$topTabs = array_merge(
array($moduleTab => $tabData['modules'][$moduleTab]),
$topTabs
);
}
if (!is_array($topTabs)) {
$topTabs = array();
}
$extraTabs = array();
// Split it in to the tabs that go across the top, and the ones that are on the extra menu.
if (count($topTabs) > $max_tabs) {
$extraTabs = array_splice($topTabs, $max_tabs);
}
// Make sure the current module is accessable through one of the top tabs
if (!isset($topTabs[$moduleTab])) {
// Nope, we need to add it.
// First, take it out of the extra menu, if it's there
if (isset($extraTabs[$moduleTab])) {
unset($extraTabs[$moduleTab]);
}
if (count($topTabs) >= $max_tabs - 1) {
// We already have the maximum number of tabs, so we need to shuffle the last one
// from the top to the first one of the extras
$lastElem = array_splice($topTabs, $max_tabs - 1);
$extraTabs = $lastElem + $extraTabs;
}
if (!empty($moduleTab)) {
$topTabs[$moduleTab] = $app_list_strings['moduleList'][$moduleTab];
if (count($topTabs) >= $max_tabs - 1) {
$extraTabs[$moduleTab] = $app_list_strings['moduleList'][$moduleTab];
}
}
}
// Get a unique list of the top tabs so we can build the popup menus for them
foreach ($topTabs as $moduleKey => $module) {
$topTabList[$moduleKey] = $module;
}
$groupTabs[$tabIdx]['modules'] = $topTabs;
$groupTabs[$tabIdx]['extra'] = $extraTabs;
}
foreach ($groupTabs as $key => $tabGroup) {
if (count($topTabs) >= $max_tabs - 1 && $key !== $app_strings['LBL_TABGROUP_ALL'] && in_array(
$tabGroup['modules'][$moduleTab],
$tabGroup['extra']
)
) {
unset($groupTabs[$key]['modules'][$moduleTab]);
}
}
}
if (isset($topTabList) && is_array($topTabList)) {
// Adding shortcuts array to menu array for displaying shortcuts associated with each module
$shortcutTopMenu = array();
foreach ($topTabList as $module_key => $label) {
global $mod_strings;
$mod_strings = return_module_language($current_language, $module_key);
foreach ($this->getMenu($module_key) as $key => $menu_item) {
$shortcutTopMenu[$module_key][$key] = array(
"URL" => ajaxLink($menu_item[0]),
"LABEL" => $menu_item[1],
"MODULE_NAME" => $menu_item[2],
"ID" => $menu_item[2] . "_link",
);
}
}
if (!empty($sugar_config['lock_homepage']) && $sugar_config['lock_homepage'] == true) {
$ss->assign('lock_homepage', true);
}
$ss->assign("groupTabs", $groupTabs);
$ss->assign("shortcutTopMenu", $shortcutTopMenu);
$ss->assign('USE_GROUP_TABS', $usingGroupTabs);
// This is here for backwards compatibility, someday, somewhere, it will be able to be removed
$ss->assign("moduleTopMenu", $groupTabs[$app_strings['LBL_TABGROUP_ALL']]['modules']);
$ss->assign("moduleExtraMenu", $groupTabs[$app_strings['LBL_TABGROUP_ALL']]['extra']);
}
if (isset($extraTabs) && is_array($extraTabs)) {
// Adding shortcuts array to extra menu array for displaying shortcuts associated with each module
$shortcutExtraMenu = array();
foreach ($extraTabs as $module_key => $label) {
global $mod_strings;
$mod_strings = return_module_language($current_language, $module_key);
foreach ($this->getMenu($module_key) as $key => $menu_item) {
$shortcutExtraMenu[$module_key][$key] = array(
"URL" => ajaxLink($menu_item[0]),
"LABEL" => $menu_item[1],
"MODULE_NAME" => $menu_item[2],
"ID" => $menu_item[2] . "_link",
);
}
}
$ss->assign("shortcutExtraMenu", $shortcutExtraMenu);
}
if (!empty($current_user)) {
$ss->assign("max_tabs", $current_user->getPreference("max_tabs"));
}
global $mod_strings;
$mod_strings = $bakModStrings;
$headerTpl = $themeObject->getTemplate('header.tpl');
if (inDeveloperMode()) {
$ss->clear_compiled_tpl($headerTpl);
}
if ($retModTabs) {
return $ss->fetch($themeObject->getTemplate('_headerModuleList.tpl'));
} else {
$ss->display($headerTpl);
$this->includeClassicFile('modules/Administration/DisplayWarnings.php');
$messages = SugarApplication::getErrorMessages();
if (!empty($messages)) {
foreach ($messages as $message) {
echo '
' . $message . '
'; } } $messages = SugarApplication::getSuccessMessages(); if (!empty($messages)) { foreach ($messages as $message) { echo '' . $message . '
'; } } } } public function getModuleMenuHTML() { } /** * If the view is classic then this method will include the file and * setup any global variables. * * @param string $file */ public function includeClassicFile( $file ) { global $sugar_config, $theme, $current_user, $sugar_version, $sugar_flavor, $mod_strings, $app_strings, $app_list_strings, $action; global $gridline, $request_string, $modListHeader, $dashletData, $authController, $locale, $currentModule, $import_bean_map, $image_path, $license; global $user_unique_key, $server_unique_key, $barChartColors, $modules_exempt_from_availability_check, $dictionary, $current_language, $beanList, $beanFiles, $sugar_build, $sugar_codename; global $timedate, $login_error; // cn: bug 13855 - timedate not available to classic views. if (!empty($this->module)) { $currentModule = $this->module; } include_once($file); } protected function _displayLoginJS() { global $sugar_config, $timedate; $template = new Sugar_Smarty(); if (isset($this->bean->module_dir)) { $template->assign('MODULE_SUGAR_GRP1', $this->bean->module_dir); } if (isset($_REQUEST['action'])) { $template->assign('ACTION_SUGAR_GRP1', $_REQUEST['action']); } echo ''; if (!is_file(sugar_cached("include/javascript/sugar_grp1.js"))) { $_REQUEST['root_directory'] = "."; require_once("jssource/minify_utils.php"); ConcatenateFiles("."); } $template->assign('SUGAR_GRP1_JQUERY', getVersionedPath('cache/include/javascript/sugar_grp1_jquery.js')); $template->assign('SUGAR_GRP1_YUI', getVersionedPath('cache/include/javascript/sugar_grp1_yui.js')); $template->assign('SUGAR_GRP1', getVersionedPath('cache/include/javascript/sugar_grp1.js')); $template->assign('CALENDAR', getVersionedPath('include/javascript/calendar.js')); echo $template->fetch('include/MVC/View/tpls/displayLoginJS.tpl'); } /** * Get JS validation code for views */ public static function getJavascriptValidation() { global $timedate; $cal_date_format = $timedate->get_cal_date_format(); $timereg = $timedate->get_regular_expression($timedate->get_time_format()); $datereg = $timedate->get_regular_expression($timedate->get_date_format()); $date_pos = ''; foreach ($datereg['positions'] as $type => $pos) { if (empty($date_pos)) { $date_pos .= "'$type': $pos"; } else { $date_pos .= ",'$type': $pos"; } } $time_separator = $timedate->timeSeparator(); $hour_offset = $timedate->getUserUTCOffset() * 60; // Add in the number formatting styles here as well, we have been handling this with individual modules. require_once('modules/Currencies/Currency.php'); list($num_grp_sep, $dec_sep) = get_number_seperators(); $the_script = ""; return $the_script; } /** * Called from process(). This method will display the correct javascript. */ protected function _displayJavascript() { global $locale, $sugar_config, $timedate; if ($this->_getOption('show_javascript')) { if (!$this->_getOption('show_header')) { $langHeader = get_language_header(); echo <<