root/c3crm/sugarcrm/trunk/index.php

Revision 1253 (by jianting, 05/14/06 16:05:31)

latest frameset layout

<?php
$GLOBALS['sugarEntry'] = true;
/*********************************************************************************
 * The contents of this file are subject to the SugarCRM Public License Version
 * 1.1.3 ("License"); You may not use this file except in compliance with the
 * License. You may obtain a copy of the License at http://www.sugarcrm.com/SPL
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * All copies of the Covered Code must include on each user interface screen:
 *    (i) the "Powered by SugarCRM" logo and
 *    (ii) the SugarCRM copyright notice
 * in the same form as they appear in the distribution.  See full license for
 * requirements.
 *
 * The Original Code is: SugarCRM Open Source
 * The Initial Developer of the Original Code is SugarCRM, Inc.
 * Portions created by SugarCRM are Copyright (C) 2004-2006 SugarCRM, Inc.;
 * All Rights Reserved.
 * Contributor(s): ______________________________________.
 ********************************************************************************/

require_once ('config.php'); // provides $sugar_config
if(is_file('config_override.php')) {
	require_once ('config_override.php');
}
///////////////////////////////////////////////////////////////////////////////
////	REDIRECT CONDITIONS TO INSTALL.PHP
if(!is_file('config.php')) {
	header('Location: install.php');
	exit ();
}
elseif(empty($sugar_config['dbconfig']['db_host_name'])) {
	header('Location: install.php');
	exit ();
}
////	end REDIRECT CONDITIONS TO INSTALL.PHP
///////////////////////////////////////////////////////////////////////////////

require_once ('sugar_version.php'); // provides $sugar_version, $sugar_db_version, $sugar_flavor
require_once ('include/utils.php');
require_once ('include/database/PearDatabase.php');
require_once ('include/database/DBManager.php');
require_once ('include/database/DBManagerFactory.php');
require_once ('include/javascript/jsAlerts.php');
require_once ('include/TimeDate.php');
require_once ('include/modules.php'); // provides $moduleList, $beanList, $beanFiles, $modInvisList, $adminOnlyList, $modInvisListActivities
require_once ('log4php/LoggerManager.php');
require_once ('modules/ACL/ACLController.php');
require_once ('modules/Administration/Administration.php');
include_once ('modules/Administration/updater_utils.php');
require_once ('modules/Users/User.php');


// load up the config_override.php file.  This is used to provide default user settings

// OFFLINE CLIENT
if(isset($sugar_config['disc_client']) && $sugar_config['disc_client']) {
	require_once ('modules/Sync/SyncController.php');
	$current_user->is_admin = 'off'; //No admins for disc client
}
global $currentModule;
global $moduleList;
global $system_config;

if($sugar_config['calculate_response_time']) { $startTime = microtime(); } // debug data

clean_special_arguments();
clean_incoming_data();


///////////////////////////////////////////////////////////////////////////////
////	SETTING DEFAULT VAR VALUES
// Track the number of SQL queiries
$sql_queries = 0;
$GLOBALS['log'] = LoggerManager :: getLogger('SugarCRM');
$error_notice = '';
$use_current_user_login = false;

// Allow for the session information to be passed via the URL for printing.
if(isset($_REQUEST['PHPSESSID'])) {
	session_id($_REQUEST['PHPSESSID']);
}
if(!empty($sugar_config['session_dir'])) {
	session_save_path($sugar_config['session_dir']);
}

$db = & PearDatabase :: getInstance();
$dbmann = DBManager :: getInstance();
$timedate = new TimeDate();

// Emails uses the REQUEST_URI later to construct dynamic URLs.  
// IIS does not pass this field to prevent an error, if it is not set, we will assign it to ''.
if (!isset ($_SERVER['REQUEST_URI'])) {
	$_SERVER['REQUEST_URI'] = '';
}
////	END SETTING DEFAULT VAR VALUES
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
////	REDIRECTION VARS
if(!empty($_REQUEST['cancel_redirect'])) {
	if(!empty($_REQUEST['return_action'])) {
		$_REQUEST['action'] = $_REQUEST['return_action'];
		$_POST['action'] = $_REQUEST['return_action'];
		$_GET['action'] = $_REQUEST['return_action'];
	}
	if(!empty($_REQUEST['return_module'])) {
		$_REQUEST['module'] = $_REQUEST['return_module'];
		$_POST['module'] = $_REQUEST['return_module'];
		$_GET['module'] = $_REQUEST['return_module'];
	}
	if(!empty($_REQUEST['return_id'])) {
		$_REQUEST['id'] = $_REQUEST['return_id'];
		$_POST['id'] = $_REQUEST['return_id'];
		$_GET['id'] = $_REQUEST['return_id'];
	}
}

if(isset($_REQUEST['action'])) {
	$action = $_REQUEST['action'];
} else {
	$action = "";
}
if(isset($_REQUEST['module'])) {
	$module = $_REQUEST['module'];
} else {
	$module = "";
}
if(isset($_REQUEST['record'])) {
	$record = $_REQUEST['record'];
} else {
	$record = "";
}
////	REDIRECTION VARS
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
////	USER LOGIN AUTHENTICATION
//FIRST PLACE YOU CAN INSTANTIATE A SUGARBEAN;

// for Disconnected Client
if(isset($_REQUEST['MSID'])) {
	session_id($_REQUEST['MSID']);
	session_start();
	if(isset($_SESSION['user_id']) && isset($_SESSION['seamless_login'])) {
		unset ($_SESSION['seamless_login']);
		global $current_user;

		$current_user = new User();
		$current_user->retrieve($_SESSION['user_id']);
		$current_user->authenticated = true;
		$use_current_user_login = true;
		require_once ('modules/Users/Authenticate.php');
	}
} else {
	session_start();
}

$user_unique_key = (isset($_SESSION['unique_key'])) ? $_SESSION['unique_key'] : '';
$server_unique_key = (isset($sugar_config['unique_key'])) ? $sugar_config['unique_key'] : '';
$allowed_actions = array('Authenticate', 'Login'); // these are actions where the user/server keys aren't compared

// to preserve a timed-out user's click choice
if(($user_unique_key != $server_unique_key) && (!in_array($action, $allowed_actions)) && (!isset($_SESSION['login_error']))) {
	session_destroy();
	$post_login_nav = '';
		//changed by dingjianting for adding new login page
        if (!empty($record) && !empty($action) && !empty($module)) {
     	 //$post_login_nav="&login_module=".$module."&login_action=".$action."&login_record=".$record;
		 $post_login_nav="login_module=".$module."&login_action=".$action."&login_record=".$record;
        }



        //header("Location: index.php?action=Login&module=Users".$post_login_nav);
		header("Location: login.php?".$post_login_nav);
        exit();
}


$system_config = new Administration();
$system_config->retrieveSettings('system');


if(isset($_REQUEST['PHPSESSID']))
	$GLOBALS['log']->debug("****Starting Application for  session ".$_REQUEST['PHPSESSID']);
else
	$GLOBALS['log']->debug("****Starting Application for new session");

// We use the REQUEST_URI later to construct dynamic URLs.  IIS does not pass this field
// to prevent an error, if it is not set, we will assign it to ''
if(!isset($_SERVER['REQUEST_URI'])) {
	$_SERVER['REQUEST_URI'] = '';
}

// Check to see ifthere is an authenticated user in the session.
if(isset($_SESSION['authenticated_user_id'])) {
	$GLOBALS['log']->debug('We have an authenticated user id: '.$_SESSION['authenticated_user_id']);
	/**
	 * CN: Bug 4128: some users are getting redirected to
	 * action=Login&module=Users, even after they have been auth'd
	 * Setting it manually here
	 */
	if(isset($_REQUEST['action']) && isset($_REQUEST['module'])) {
		if($_REQUEST['action'] == 'Login' && $_REQUEST['module'] == 'Users') {
			$_REQUEST['action'] = 'index';
			$_REQUEST['module'] = 'Home';
			$action = 'index';
			$module = 'Home';
		}
	}
} elseif(isset($action) && isset($module) && ($action == 'Authenticate') && $module == 'Users') {
	$GLOBALS['log']->debug('We are authenticating user now');
} else {
	$GLOBALS['log']->debug('The current user does not have a session.  Going to the login page');
	$action = 'Login';
	$module = 'Users';
	$_REQUEST['action'] = $action;
	$_REQUEST['module'] = $module;
}

// grab client ip address
$clientIP = query_client_ip();
$classCheck = 0;

// check to see if config entry is present, if not, verify client ip
if(!isset($sugar_config['verify_client_ip']) || $sugar_config['verify_client_ip'] == true) {
	// check to see ifwe've got a current ip address in $_SESSION
	// and check to see ifthe session has been hijacked by a foreign ip
	if(isset($_SESSION['ipaddress'])) {
		$session_parts = explode('.', $_SESSION['ipaddress']);
		$client_parts = explode('.', $clientIP);

		// match class C IP addresses
		for($i = 0; $i < 3; $i ++) {
			if($session_parts[$i] == $client_parts[$i]) {
				$classCheck = 1;
				continue;
			} else {
				$classCheck = 0;
				break;
			}
		}
		// we have a different IP address
		if($_SESSION['ipaddress'] != $clientIP && empty($classCheck)) {
			$GLOBALS['log']->fatal('IP Address mismatch: SESSION IP: '.$_SESSION['ipaddress'].' CLIENT IP: '.$clientIP);
			session_destroy();
			die('Your session was terminated due to a significant change in your IP address.  <a href=\''.$sugar_config['site_url'].'\'>Return to Home</a>');
		}
	} else {
		$_SESSION['ipaddress'] = $clientIP;
	}
}

if(!$use_current_user_login) {  // disconnected client's flag
	$current_user = new User();
	if(isset($_SESSION['authenticated_user_id'])) { // set in modules/Users/Authenticate.php
		$result = $current_user->retrieve($_SESSION['authenticated_user_id']);
		if($result == null) { // if the object we get back is null for some reason, this will break - like user prefs are corrupted
			$GLOBALS['log']->fatal('User retrieval for ID: ('.$_SESSION['authenticated_user_id'].') does not exist in database or retrieval failed catastrophically.  Calling session_destroy() and sending user to Login page.');
			session_destroy();
			header('Location: login.php');
		}
		$GLOBALS['log']->debug('Current user is: '.$current_user->user_name);
	}
}
////	END USER LOGIN AUTHENTICATION
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
////	USER TIMEZONE SETTING 
// ut=0 => upgrade script set users's timezone
if(isset($_SESSION['authenticated_user_id']) && !empty($_SESSION['authenticated_user_id'])) {
	$ut = $current_user->getPreference('ut');
	if(empty($ut) && isset($_REQUEST['action']) && $_REQUEST['action'] != 'SaveTimezone') {
		$module = 'Users';
		$action = 'SetTimezone';
		$record = $current_user->id;
	}
}
////	END USER TIMEZONE SETTING
///////////////////////////////////////////////////////////////////////////////


$GLOBALS['log']->debug($_REQUEST);

$skipHeaders = false;
$skipFooters = false;

// Set the current module to be the module that was passed in
if(!empty($module)) {
	$currentModule = $module;
}


///////////////////////////////////////////////////////////////////////////////
////	RENDER PAGE REQUEST BASED ON $module - $action - (and/or) $record

// if we have an action and a module, set that action as the current.
if(!empty($action) && !empty($module)) {
	$GLOBALS['log']->info('In module: '.$module.' -- About to take action '.$action);
	$GLOBALS['log']->debug('in module '.$module.' -- in '.$action);
	$GLOBALS['log']->debug('----------------------------------------------------------------------------------------------------------------------------------------------');
	if(ereg('^Save', $action) || ereg('^Delete', $action) || ereg('^Popup', $action) || ereg('^ChangePassword', $action) || ereg('^Authenticate', $action) || ereg('^Logout', $action) || ereg('^Export', $action) || ereg('^backup', $action)) {
		$skipHeaders = true;
		if(ereg('^Popup', $action) || ereg('^ChangePassword', $action) || ereg('^Export', $action) || ereg('^backup', $action))
			$skipFooters = true;
	}
	if((isset($_REQUEST['sugar_body_only']) && $_REQUEST['sugar_body_only'])) {
		$skipHeaders = true;
		$skipFooters = true;
	}
	if((isset($_REQUEST['from']) && $_REQUEST['from'] == 'ImportVCard') || !empty($_REQUEST['to_pdf']) || !empty($_REQUEST['to_csv'])) {
		$skipHeaders = true;
		$skipFooters = true;
	}
	if($action == 'BusinessCard' || $action == 'ConvertLead' || $action == 'Save') {
		header('Expires: Mon, 20 Dec 1998 01:00:00 GMT');
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
		header('Cache-Control: no-cache, must-revalidate');
		header('Pragma: no-cache');
	}
	if($action == 'Import' && isset($_REQUEST['step']) && $_REQUEST['step'] == '4') {
		$skipHeaders = true;
		$skipFooters = true;
	}
	if($action == 'Save2') {
		$currentModuleFile = 'include/generic/Save2.php';
	} elseif($action == 'SubPanelViewer') {
		$currentModuleFile = 'include/SubPanel/SubPanelViewer.php';
	} elseif($action == 'DeleteRelationship') {
		$currentModuleFile = 'include/generic/DeleteRelationship.php';
	} elseif($action == 'Login' && isset($_SESSION['authenticated_user_id'])) {
		header('Location: index.php?action=Logout&module=Users');
	} else {
		
		$currentModuleFile = 'modules/'.$module.'/'.$action.'.php';
		
	}
} elseif(!empty($module)) { // ifwe do not have an action, but we have a module, make the index.php file the action
	$currentModuleFile = 'modules/'.$currentModule.'/index.php';
} else { // Use the system default action and module
	// use $sugar_config['default_module'] and $sugar_config['default_action'] as set in config.php
	// Redirect to the correct module with the correct action.  We need the URI to include these fields.
	header('Location: index.php?action='.$sugar_config['default_action'].'&module='.$sugar_config['default_module']);
}
////	END RENDER PAGE REQUEST BASED ON $module - $action - (and/or) $record
///////////////////////////////////////////////////////////////////////////////




$export_module = $currentModule;

$GLOBALS['log']->info('current page is '.$currentModuleFile);
$GLOBALS['log']->info('current module is '.$currentModule);
$GLOBALS['request_string'] = ''; // for printing

foreach ($_GET as $key => $val) {
	if(is_array($val)) {
		foreach ($val as $k => $v) {
			$GLOBALS['request_string'] .= $key[$k].'='.urlencode($v).'&';
		}
	} else {
		$GLOBALS['request_string'] .= $key.'='.urlencode($val).'&';
	}
}

$GLOBALS['request_string'] .= '&print=true';
// end printing


/*
if(isset($_SESSION['authenticated_user_id']))
{
	$result = $current_user->retrieve($_SESSION['authenticated_user_id']);
	if($result == null)
	{
		session_destroy();
	    //header("Location: index.php?action=Login&module=Users");
		header("Location: login.php");
	}

*/






$version_query = 'SELECT count(*) as the_count FROM config WHERE category=\'info\' AND name=\'sugar_version\'';
if($current_user->db->dbType == 'oci8') {



} else {
	$version_query .= " AND value = '$sugar_db_version'";
}

$result = $current_user->db->query($version_query);
$row = $current_user->db->fetchByAssoc($result, -1, true);
$row_count = $row['the_count'];



if($row_count == 0){
    sugar_die("Sugar CRM $sugar_version Files May Only Be Used With A Sugar CRM $sugar_db_version Database.");
}





///////////////////////////////////////////////////////////////////////////////
////	THEME PATH SETUP AND THEME CHANGES
if(isset($_SESSION['authenticated_user_theme']) && $_SESSION['authenticated_user_theme'] != '') {
	$theme = $_SESSION['authenticated_user_theme'];
} else {
	$theme = $sugar_config['default_theme'];
}

$_SESSION['theme_changed'] = false;
if(isset($_REQUEST['usertheme'])) {
	$_SESSION['theme_changed'] = true;
	$_SESSION['authenticated_user_theme'] = clean_string($_REQUEST['usertheme']);
	$theme = clean_string($_REQUEST['usertheme']);
}

$GLOBALS['log']->debug('Current theme is: '.$theme);
ACLController :: filterModuleList($moduleList);
////	END THEME PATH SETUP AND THEME CHANGES
///////////////////////////////////////////////////////////////////////////////


//Used for current record focus
$focus = null;



///////////////////////////////////////////////////////////////////////////////
////	LANGUAGE PACK STRING EXTRACTION
// ifthe language is not set yet, then set it to the default language.
if(isset($_SESSION['authenticated_user_language']) && $_SESSION['authenticated_user_language'] != '') {
	$current_language = $_SESSION['authenticated_user_language'];
} else {
	$current_language = $sugar_config['default_language'];
}
$GLOBALS['log']->debug('current_language is: '.$current_language);

//set module and application string arrays based upon selected language
$app_strings = return_application_language($current_language);
$app_list_strings = return_app_list_strings_language($current_language);
$mod_strings = return_module_language($current_language, $currentModule);
insert_charset_header();
//TODO: Clint - this key map needs to be moved out of $app_list_strings since it never gets translated.
//              best to just have an upgrade script that changes the parent_type column from Account to Accounts, etc.
$app_list_strings['record_type_module'] = array(
	'Contact' => 'Contacts', 
	'Account' => 'Accounts', 
	'Opportunity' => 'Opportunities', 
	'Case' => 'Cases', 
	'Note' => 'Notes', 
	'Call' => 'Calls', 
	'Email' => 'Emails', 
	'Meeting' => 'Meetings', 
	'Task' => 'Tasks', 
	'Lead' => 'Leads', 
	'Bug' => 'Bugs',



);
////	END LANGUAGE PACK STRING EXTRACTION
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
////	ADMIN ONLY VIEWS SECURITY
if(!is_admin($current_user) && !empty($adminOnlyList[$module]) && (!empty($adminOnlyList[$module]['all']) || !empty($adminOnlyList[$module][$action])))
	sugar_die("Unauthorized access to $module:$action.");
////	ADMIN ONLY VIEWS SECURITY
///////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////
////	DETAIL VIEW-SPECIFIC RENDER CODE
//ifDetailView, set focus to record passed in
if($action == "DetailView") {
	if(!isset($_REQUEST['record']))
		die("A record number must be specified to view details.");

	// ifwe are going to a detail form, load up the record now.
	// Use the record to track the viewing.
	// todo - Have a record of modules and thier primary object names.
	$entity = $beanList[$currentModule];
	require_once ($beanFiles[$entity]);
	$focus = new $entity ();
	$result = $focus->retrieve($_REQUEST['record']);
	if($result) {
		// Only track a viewing ifthe record was retrieved.
		$focus->track_view($current_user->id, $currentModule);
	}
}
////	END DETAIL-VIEW SPECIFIC RENDER CODE
///////////////////////////////////////////////////////////////////////////////



// set user, theme and language cookies so that login screen defaults to last values
if(isset($_SESSION['authenticated_user_id'])) {
	$GLOBALS['log']->debug("setting cookie ck_login_id_20 to ".$_SESSION['authenticated_user_id']);
	setcookie('ck_login_id_20', $_SESSION['authenticated_user_id'], time() + 86400 * 90);
}
if(isset($_SESSION['authenticated_user_theme'])) {
	$GLOBALS['log']->debug("setting cookie ck_login_theme_20 to ".$_SESSION['authenticated_user_theme']);
	setcookie('ck_login_theme_20', $_SESSION['authenticated_user_theme'], time() + 86400 * 90);
}
if(isset($_SESSION['authenticated_user_language'])) {
	$GLOBALS['log']->debug("setting cookie ck_login_language_20 to ".$_SESSION['authenticated_user_language']);
	setcookie('ck_login_language_20', $_SESSION['authenticated_user_language'], time() + 86400 * 90);
}



///////////////////////////////////////////////////////////////////////////////
////	START OUTPUT BUFFERING STUFF
ob_start();
////	END DETAIL-VIEW SPECIFIC RENDER CODE
///////////////////////////////////////////////////////////////////////////////

//TODO move this code into $theme/header.php so that we can be within the <DOCTYPE xxx> and <HTML> tags.
if(empty($_REQUEST['to_pdf']) && empty($_REQUEST['to_csv']) && empty($_REQUEST['to_sql'])) {
	echo '<script type="text/javascript" src="include/javascript/sugar_3.js"></script>';
	echo '<script type="text/javascript" src="include/javascript/cookie.js"></script>';
	echo '<link rel="stylesheet" type="text/css" media="all" href="themes/'.$theme.'/calendar-win2k-cold-1.css">';
	echo '<script type="text/javascript" src="jscalendar/calendar.js"></script>';
	//changed by dingjianting on 2006-1-3 for bug#0000053
	echo '<script type="text/javascript" src="jscalendar/lang/calendar-'.$app_strings['CALENDAR_LANG'].'.js"></script>';
	//echo '<script type="text/javascript" src="jscalendar/lang/calendar-en.js"></script>';
	echo '<script type="text/javascript" src="jscalendar/calendar-setup_3.js"></script>';
	echo $timedate->get_javascript_validation();
	$jsalerts = new jsAlerts();
}


//skip headers for popups, deleting, saving, importing and other actions
if(!$skipHeaders) {
	$GLOBALS['log']->debug("including headers");
	if(!is_file('themes/'.$theme.'/header.php')) {
		$theme = $sugar_config['default_theme'];
	}
	if(!is_file('themes/'.$theme.'/header.php')) {
		sugar_die("Invalid theme specified");
	}
	// Only print the errors for admin users.
	if(!empty($_SESSION['HomeOnly'])) {
		$moduleList = array ('Home');
	}

	include ('themes/'.$theme.'/header.php');
    /*changed by dingjianting on 2006-5-5 for recycle function
	if(is_admin($current_user)) {
		if(isset($_REQUEST['show_deleted'])) {
			if($_REQUEST['show_deleted']) {
				$_SESSION['show_deleted'] = true;
			} else {
				unset ($_SESSION['show_deleted']);
			}

		}
	}
	*/

	include_once ('modules/Administration/DisplayWarnings.php');

	echo "<!-- crmprint -->";
} else {
	$GLOBALS['log']->debug("skipping headers");
}


//loadLicense();




// added a check for security of tabs to see ifa user has access to them
// this prevents passing an "unseen" tab to the query string and pulling up its contents
if(!isset($modListHeader)) {
	if(isset($current_user)) {
		$modListHeader = query_module_access_list($current_user);
	}
}

if(	array_key_exists($currentModule, $modListHeader) 
	|| in_array($currentModule, $modInvisList) 
	|| ((array_key_exists("Activities", $modListHeader) 
	|| array_key_exists("Calendar", $modListHeader)) 
	&& in_array($currentModule, $modInvisListActivities)) 
	|| ($currentModule == "iFrames" 
	&& isset($_REQUEST['record']))) {


	// Only include the file ifthere is a file.  User login does not have a filename but does have a module.
	if(!empty($currentModuleFile)) {
		///////////////////////////////////////////////////////////////////////
		////	DISPLAY REQUESTED PAGE
			include($currentModuleFile);
			//check whether goting to home.php
			if(!$skipHeaders) {
				echo '<script language="javascript">var homepage = parent.document.location.href; if(homepage == null || homepage == "" || homepage.indexOf("home.php") < 1) { document.location.href = "home.php";}</script>';
			}
		////	END DISPLAY REQUESTED PAGE
		///////////////////////////////////////////////////////////////////////

	}
	if(isset($focus) && is_subclass_of($focus, 'SugarBean') && $focus->bean_implements('ACL')) {
		ACLController :: addJavascript($focus->module_dir, '', $focus->isOwner($current_user->id));
	}
} else { // avoid js error when set_focus is not defined
	echo '<script>function set_focus(){return;}</script><p class="error">Warning: You do not have permission to access this module.</p>';
}

if(!$skipFooters) {
	echo "<!-- crmprint -->";
	echo $jsalerts->getScript();
	//changed by dingjianting on 2006-5-2 for frameset layout
	//include ('themes/'.$theme.'/footer.php');
	
    echo '<br/><br/><br/><hr width="60%" size="1" class="footerHR">';
	echo "<table cellpadding='0' cellspacing='0' width='100%' border='0'>";
	/*
	if(!isset($_SESSION['avail_themes']))
		$_SESSION['avail_themes'] = get_themes();
	$user_mod_strings = return_module_language($current_language, 'Users');
	

	if($_REQUEST['action'] != 'Login') {
		echo "<tr><td align='center'>{$user_mod_strings['LBL_THEME']}&nbsp;";
		echo "<select OnChange='location.href=\"index.php?module=". (isset($_REQUEST['module']) ? $_REQUEST['module'] : '').'&action='. (isset($_REQUEST['action']) ? $_REQUEST['action'] : '').'&record='. (isset($_REQUEST['record']) ? $_REQUEST['record'] : '').'&offset='. (isset($_REQUEST['offset']) ? $_REQUEST['offset'] : '').'&stamp='. (isset($_REQUEST['stamp']) ? $_REQUEST['stamp'] : '').'&return_module='. (isset($_REQUEST['return_module']) ? $_REQUEST['return_module'] : '').'&return_action='. (isset($_REQUEST['return_action']) ? $_REQUEST['return_action'] : '')."&usertheme=\"+this.value' style='width: 120px; font-size: 10px' name='usertheme'>";
		if(isset($_SESSION['authenticated_user_theme']) && !empty($_SESSION['authenticated_user_theme'])) {
			$authenticated_user_theme = $_SESSION['authenticated_user_theme'];
		} else {
			$authenticated_user_theme = 'sugar';
		}

		echo get_select_options_with_id($_SESSION['avail_themes'], $authenticated_user_theme);
		echo '</select></td></tr>';
	}
	*/
	// Under the Sugar Public License referenced above, you are required to leave in all copyright statements in both
	// the code and end-user application.
	echo "<tr><td align='center' class='copyRight'>";
	if($sugar_config['calculate_response_time']) {
		$endTime = microtime();
		$deltaTime = microtime_diff($startTime, $endTime);
		$response_time_string = $app_strings['LBL_SERVER_RESPONSE_TIME']." $deltaTime ".$app_strings['LBL_SERVER_RESPONSE_TIME_SECONDS'].'<br />';
		echo ($response_time_string);








		if(!empty($sugar_config['show_page_resources'])) {
			// Print out the resources used in constructing the page.
			$included_files = get_included_files();
			echo ($app_strings['LBL_SERVER_RESPONSE_RESOURCES'].'('.$sql_queries.','.sizeof($included_files).')<BR />');
		}









	}
	//Under the C3CRM License you can not change code below.
	echo ('&copy; 2004-2006 <a href="http://www.c3crm.com" target="_blank" class="copyRightLink">C3CRM</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.sugarcrm.com" target="_blank" class="copyRightLink">SugarCRM Inc.</a> All Rights Reserved.<br />');




// Under the Sugar Public License referenced above, you are required to leave in all copyright statements in both
// the code and end-user application as well as the the powered by image. You can not change the url or the image below  .




	echo "<A href='http://www.sugarforge.org' target='_blank'><img style='margin-top: 2px' border='0' width='106' height='23' src='include/images/poweredby_sugarcrm.png' alt='Powered By SugarCRM'></a>\n";
	








	// End Required Image
	echo "</td></tr></table>\n";

	echo "</body></html>";
}

if(!function_exists("ob_get_clean")) {
	function ob_get_clean() {
		$ob_contents = ob_get_contents();
		ob_end_clean();
		return $ob_contents;
	}
}

if(isset($_GET['print'])) {
	$page_str = ob_get_clean();
	$page_arr = explode("<!-- crmprint -->", $page_str);
	include ("phprint.php");
}

if(isset($sugar_config['log_memory_usage']) && $sugar_config['log_memory_usage'] && function_exists('memory_get_usage')) {
	$fp = @ fopen("memory_usage.log", "ab");
	@ fwrite($fp, "Usage: ".memory_get_usage()." - module: ". (isset($module) ? $module : "<none>")." - action: ". (isset($action) ? $action : "<none>")."\n");
	@ fclose($fp);
}
session_write_close(); // submitted by Tim Scott in SugarCRM forums
sugar_cleanup();
?>
Note: See TracBrowser for help on using the browser.