protected function getSubpanelDefs($module_dir) { if (!isset(self::$defs[$module_dir])) { $defs = SugarAutoLoader::loadWithMetafiles($module_dir, 'subpaneldefs'); if ($defs) { require $defs; } $defs = SugarAutoLoader::loadExtension("layoutdefs", $module_dir); if ($defs) { require $defs; } if (!isset($layout_defs)) { return null; } self::$defs[$module_dir] = $layout_defs; } return self::$defs[$module_dir]; }
/** * get_subpanel_defs * * @param String $module The name of the module to get the subpanel definition for * @param String $type The type of subpanel definition ('wireless' or 'default') * @return array Array of the subpanel definition; empty array if no matching definition found */ function get_subpanel_defs($module, $type) { global $beanList, $beanFiles; $results = array(); switch ($type) { case 'wireless': $defs = SugarAutoLoader::existingCustomOne('modules/' . $module . '/metadata/wireless.subpaneldefs.php'); if ($defs) { require $defs; } //If an Ext/WirelessLayoutdefs/wireless.subpaneldefs.ext.php file exists, then also load it as well $defs = SugarAutoLoader::loadExtension("wireless_subpanels", $module); if ($defs) { require $defs; } break; case 'default': default: $defs = SugarAutoLoader::loadWithMetafiles($module, 'subpaneldefs'); if ($defs) { require $defs; } $defs = SugarAutoLoader::loadExtension("layoutdefs", $module); if ($defs) { require $defs; } } //Filter results for permissions foreach ($layout_defs[$module]['subpanel_setup'] as $subpanel => $subpaneldefs) { $moduleToCheck = $subpaneldefs['module']; $bean = BeanFactory::getBean($moduleToCheck); if (empty($bean)) { continue; } if ($bean->ACLAccess('list')) { $results[$subpanel] = $subpaneldefs; } } return $results; }
include "metadata/users_holidaysMetaData.php"; include "metadata/dataset_layoutsMetaData.php"; include "metadata/dataset_attributesMetaData.php"; //ACL RELATIONSHIPS include "metadata/acl_roles_actionsMetaData.php"; include "metadata/acl_roles_usersMetaData.php"; // INBOUND EMAIL include "metadata/inboundEmail_autoreplyMetaData.php"; include "metadata/inboundEmail_cacheTimestampMetaData.php"; include "metadata/email_cacheMetaData.php"; include "metadata/email_marketing_prospect_listsMetaData.php"; //linked documents. include "metadata/linked_documentsMetaData.php"; include "metadata/sessionHistoryMetaData.php"; // Documents, so we can start replacing Notes as the primary way to attach something to something else. include "metadata/documents_accountsMetaData.php"; include "metadata/documents_contactsMetaData.php"; include "metadata/documents_opportunitiesMetaData.php"; include "metadata/documents_casesMetaData.php"; include "metadata/documents_bugsMetaData.php"; include "metadata/documents_productsMetaData.php"; include "metadata/documents_revenuelineitemsMetaData.php"; include "metadata/documents_quotesMetaData.php"; include "metadata/forecast_treeMetaData.php"; include "metadata/oauth_nonce.php"; include "metadata/activities_usersMetaData.php"; include "metadata/metadata_cacheMetaData.php"; $defs = SugarAutoLoader::loadExtension('tabledictionary'); if ($defs) { require $defs; }
public function loadHooks($module_dir) { $hook_array = array(); if (!empty($module_dir)) { $custom = "custom/modules/{$module_dir}"; } else { $custom = "custom/modules"; } foreach (SugarAutoLoader::existing("{$custom}/logic_hooks.php", SugarAutoLoader::loadExtension("logichooks", empty($module_dir) ? "application" : $module_dir)) as $file) { if (isset($GLOBALS['log'])) { $GLOBALS['log']->debug('Including hook file: ' . $file); } include $file; } return $hook_array; }
/** * Get the content of the given files to build metadata. * * @param array $fileList A list of files to retrieve for building metadata. * @param string $type The type of file to retrieve for building metadata. * @param string $module The module to retrieve for building metadata. * * @return array */ public static function getClientFileContents($fileList, $type, $module = '', $bean = null) { $results = array(); foreach ($fileList as $fileInfo) { $extension = substr($fileInfo['path'], -3); switch ($extension) { case '.js': $subpath = $fileInfo['subPath']; if (strpos($fileInfo['path'], "custom/") === 0) { $subpath = "custom" . ucfirst($subpath); } if (isset($results[$subpath]['controller'][$fileInfo['platform']])) { continue; } $controller = self::trimLicense(file_get_contents($fileInfo['path'], "js")); $results[$subpath]['controller'][$fileInfo['platform']] = $controller; break; case 'hbs': $layoutName = substr($fileInfo['file'], 0, -4); if (isset($results[$fileInfo['subPath']]['templates'][$layoutName])) { continue; } $results[$fileInfo['subPath']]['templates'][$layoutName] = self::trimLicense(file_get_contents($fileInfo['path'])); break; case 'php': $viewdefs = array(); if (isset($results[$fileInfo['subPath']]['meta']) && !strstr($fileInfo['path'], '.ext.php')) { continue; } //When an extension file is found and NO corresponding metadata has been found so far if (!empty($module) && strstr($fileInfo['path'], '.ext.php') && !isset($results[$fileInfo['subPath']]['meta'])) { //need to check the global files for metadata $results[$fileInfo['subPath']]['meta'] = self::getGlobalFileContent($fileInfo['platform'], $type, $fileInfo['subPath']); } //Viewdefs must be maintained between files to allow for extension files that append to out of box meta. if (!empty($results[$fileInfo['subPath']]['meta'])) { if (empty($module)) { $viewdefs[$fileInfo['platform']][$type][$fileInfo['subPath']] = $results[$fileInfo['subPath']]['meta']; } else { $viewdefs[$module][$fileInfo['platform']][$type][$fileInfo['subPath']] = $results[$fileInfo['subPath']]['meta']; } } if ($fileInfo['template']) { // This is a template file, not a real one. require $fileInfo['path']; if (!$bean) { $bean = BeanFactory::getBean($module); } if (!is_a($bean, 'SugarBean')) { // I'm not sure what this is, but it's not something we can template continue; } $viewdefs = self::getModuleMetaDataDefsWithReplacements($bean, $viewdefs); if (!isset($viewdefs[$module][$fileInfo['platform']][$type][$fileInfo['subPath']])) { $GLOBALS['log']->error('Could not generate a metadata file for module ' . $module . ', platform: ' . $fileInfo['platform'] . ', type: ' . $type); continue; } $results[$fileInfo['subPath']]['meta'] = $viewdefs[$module][$fileInfo['platform']][$type][$fileInfo['subPath']]; } else { require $fileInfo['path']; if ($fileInfo['subPath'] != 'subpanels') { $extensionName = "sidecar{$type}{$fileInfo['platform']}{$fileInfo['subPath']}"; $extFile = SugarAutoLoader::loadExtension($extensionName, $module); if ($extFile) { include $extFile; } } if (empty($module)) { if (!isset($viewdefs[$fileInfo['platform']][$type][$fileInfo['subPath']])) { $GLOBALS['log']->error('No viewdefs for type: ' . $type . ' viewdefs @ ' . $fileInfo['path']); } else { $results[$fileInfo['subPath']]['meta'] = $viewdefs[$fileInfo['platform']][$type][$fileInfo['subPath']]; } } else { if (!isset($viewdefs[$module][$fileInfo['platform']][$type][$fileInfo['subPath']])) { $GLOBALS['log']->error('No viewdefs for module: ' . $module . ' viewdefs @ ' . $fileInfo['path']); } else { if (isset($results[$fileInfo['subPath']]['meta']) && $fileInfo['subPath'] == 'subpanels') { $results[$fileInfo['subPath']]['meta'] = self::mergeSubpanels($viewdefs[$module][$fileInfo['platform']][$type][$fileInfo['subPath']], $results[$fileInfo['subPath']]['meta']); } else { // For custom modules or if there is no subpanel // layout defined and edits are made, we // need to capture the changes that all live // in one file for subpanels if ($fileInfo['subPath'] == 'subpanels') { $results[$fileInfo['subPath']]['meta'] = self::mergeSubpanels($viewdefs[$module][$fileInfo['platform']][$type][$fileInfo['subPath']], array('components' => array())); } else { $results[$fileInfo['subPath']]['meta'] = $viewdefs[$module][$fileInfo['platform']][$type][$fileInfo['subPath']]; } } } } break; } } } $results['_hash'] = md5(serialize($results)); return $results; }
/** * This method saves a subpanels override defintion * * @param object $panel the subpanel * @param var $subsection * @param string $override the override string */ function saveSubPanelDefOverride($panel, $subsection, $override) { $layoutPath = "custom/Extension/modules/{$panel->parent_bean->module_dir}/Ext/Layoutdefs/"; $layoutDefsName = "layout_defs['{$panel->parent_bean->module_dir}']['subpanel_setup']['" . strtolower($panel->name) . "']"; $layoutDefsExtName = "layoutdefs"; $moduleInstallerMethod = "rebuild_layoutdefs"; //bug 42262 (filename with $panel->_instance_properties['get_subpanel_data'] can create problem if had word "function" in it) $overrideValue = $filename = $panel->parent_bean->object_name . "_subpanel_" . $panel->name; $overrideName = 'override_subpanel_name'; //save the new subpanel $name = "subpanel_layout['list_fields']"; //bugfix: load looks for moduleName/metadata/subpanels, not moduleName/subpanels $path = 'custom/modules/' . $panel->_instance_properties['module'] . '/metadata/subpanels'; //bug# 40171: "Custom subpanels not working as expected" //each custom subpanel needs to have a unique custom def file $oldName1 = '_override' . $panel->parent_bean->object_name . $panel->_instance_properties['module'] . $panel->_instance_properties['subpanel_name']; $oldName2 = '_override' . $panel->parent_bean->object_name . $panel->_instance_properties['get_subpanel_data']; if (file_exists("{$layoutPath}/{$oldName1}.php")) { @unlink("{$layoutPath}/{$oldName1}.php"); } if (file_exists("{$layoutPath}/{$oldName2}.php")) { @unlink("{$layoutPath}/{$oldName2}.php"); } $extname = '_override' . $filename; //end of bug# 40171 mkdir_recursive($path, true); write_array_to_file($name, $override, $path . '/' . $filename . '.php'); //save the override for the layoutdef //tyoung 10.12.07 pushed panel->name to lowercase to match case in subpaneldefs.php files - //gave error on bad index 'module' as this override key didn't match the key in the subpaneldefs $newValue = override_value_to_string($layoutDefsName, $overrideName, $overrideValue); mkdir_recursive($layoutPath, true); $fp = sugar_fopen("{$layoutPath}/{$extname}.php", 'w'); fwrite($fp, "<?php\n//auto-generated file DO NOT EDIT\n{$newValue}\n?>"); fclose($fp); require_once 'ModuleInstall/ModuleInstaller.php'; $moduleInstaller = new ModuleInstaller(); $moduleInstaller->silent = true; // make sure that the ModuleInstaller->log() function doesn't echo while rebuilding the layoutdefs $moduleInstaller->{$moduleInstallerMethod}(); SugarAutoLoader::buildCache(); foreach (SugarAutoLoader::existing('modules/' . $panel->parent_bean->module_dir . '/layout_defs.php', SugarAutoLoader::loadExtension($layoutDefsExtName, $panel->parent_bean->module_dir)) as $file) { include $file; } }
function preDisplay() { global $current_user, $app_strings, $sugar_config; if (!isset($this->bean->id)) { // No reason to set everything up just to have it fail in the display() call return; } if (!$current_user->isAdminForModule('Users') && !$current_user->isDeveloperForModule('Users') && $this->bean->id != $current_user->id) { ACLController::displayNoAccess(true); sugar_cleanup(true); } parent::preDisplay(); $viewHelper = UserViewHelper::create($this->ss, $this->bean, 'DetailView'); $viewHelper->setupAdditionalFields(); $errors = ""; $msgGood = false; if (isset($_REQUEST['pwd_set']) && $_REQUEST['pwd_set'] != 0) { if ($_REQUEST['pwd_set'] == '4') { require_once 'modules/Users/password_utils.php'; $errors .= canSendPassword(); } else { $errors .= translate('LBL_NEW_USER_PASSWORD_' . $_REQUEST['pwd_set'], 'Users'); $msgGood = true; } } else { //IF BEAN USER IS LOCKOUT if ($this->bean->getPreference('lockout') == '1') { $errors .= translate('ERR_USER_IS_LOCKED_OUT', 'Users'); } } $this->ss->assign("ERRORS", $errors); $this->ss->assign("ERROR_MESSAGE", $msgGood ? translate('LBL_PASSWORD_SENT', 'Users') : translate('LBL_CANNOT_SEND_PASSWORD', 'Users')); $buttons = array(); if ((is_admin($current_user) || $_REQUEST['record'] == $current_user->id) && !empty($sugar_config['default_user_name']) && $sugar_config['default_user_name'] == $this->bean->user_name && isset($sugar_config['lock_default_user_name']) && $sugar_config['lock_default_user_name']) { $buttons[] = "<input id='edit_button' accessKey='" . $app_strings['LBL_EDIT_BUTTON_KEY'] . "' name='Edit' title='" . $app_strings['LBL_EDIT_BUTTON_TITLE'] . "' value='" . $app_strings['LBL_EDIT_BUTTON_LABEL'] . "' onclick=\"this.form.return_module.value='Users'; this.form.return_action.value='DetailView'; this.form.return_id.value='" . $this->bean->id . "'; this.form.action.value='EditView'\" type='submit' value='" . $app_strings['LBL_EDIT_BUTTON_LABEL'] . "'>"; } elseif (is_admin($current_user) || $GLOBALS['current_user']->isAdminForModule('Users') && !$this->bean->is_admin || $_REQUEST['record'] == $current_user->id) { $buttons[] = "<input title='" . $app_strings['LBL_EDIT_BUTTON_TITLE'] . "' accessKey='" . $app_strings['LBL_EDIT_BUTTON_KEY'] . "' name='Edit' id='edit_button' value='" . $app_strings['LBL_EDIT_BUTTON_LABEL'] . "' onclick=\"this.form.return_module.value='Users'; this.form.return_action.value='DetailView'; this.form.return_id.value='" . $this->bean->id . "'; this.form.action.value='EditView'\" type='submit' value='" . $app_strings['LBL_EDIT_BUTTON_LABEL'] . "'>"; if (is_admin($current_user) || $GLOBALS['current_user']->isAdminForModule('Users')) { if (!$current_user->is_group) { $buttons[] = "<input id='duplicate_button' title='" . $app_strings['LBL_DUPLICATE_BUTTON_TITLE'] . "' accessKey='" . $app_strings['LBL_DUPLICATE_BUTTON_KEY'] . "' class='button' onclick=\"this.form.return_module.value='Users'; this.form.return_action.value='DetailView'; this.form.isDuplicate.value=true; this.form.action.value='EditView'\" type='submit' name='Duplicate' value='" . $app_strings['LBL_DUPLICATE_BUTTON_LABEL'] . "'>"; if ($this->bean->id != $current_user->id) { $buttons[] = "<input id='delete_button' type='button' class='button' onclick='confirmDelete();' value='" . $app_strings['LBL_DELETE_BUTTON_LABEL'] . "' />"; } if (!$this->bean->portal_only && !$this->bean->is_group && !$this->bean->external_auth_only && isset($sugar_config['passwordsetting']['SystemGeneratedPasswordON']) && $sugar_config['passwordsetting']['SystemGeneratedPasswordON']) { $buttons[] = "<input title='" . translate('LBL_GENERATE_PASSWORD_BUTTON_TITLE', 'Users') . "' class='button' LANGUAGE=javascript onclick='generatepwd(\"" . $this->bean->id . "\");' type='button' name='password' value='" . translate('LBL_GENERATE_PASSWORD_BUTTON_LABEL', 'Users') . "'>"; } } } } $buttons = array_merge($buttons, $this->ss->get_template_vars('BUTTONS_HEADER')); $this->ss->assign('EDITBUTTONS', $buttons); $show_roles = !($this->bean->is_group == '1' || $this->bean->portal_only == '1'); $this->ss->assign('SHOW_ROLES', $show_roles); //Mark whether or not the user is a group or portal user $this->ss->assign('IS_GROUP_OR_PORTAL', $this->bean->is_group == '1' || $this->bean->portal_only == '1' ? true : false); if ($show_roles) { ob_start(); echo "<div>"; require_once 'modules/ACLRoles/DetailUserRole.php'; echo "</div></div>"; $file = SugarAutoLoader::loadExtension("userpage"); if ($file) { include $file; } $role_html = ob_get_contents(); ob_end_clean(); $this->ss->assign('ROLE_HTML', $role_html); } // Tell the template to render the javascript that requests new metadata // after a user preference change $this->ss->assign('refreshMetadata', !empty($_REQUEST['refreshMetadata'])); }
global $app_strings, $current_user; global $sugar_config, $sugar_version, $sugar_flavor, $server_unique_key, $current_language, $action; if (!isset($global_control_links)) { $global_control_links = array(); $sub_menu = array(); } if (isset($sugar_config['disc_client']) && $sugar_config['disc_client']) { require_once 'modules/Sync/headermenu.php'; } if (SugarThemeRegistry::current()->name != 'Classic') { $global_control_links['profile'] = array('linkinfo' => array($app_strings['LBL_PROFILE'] => 'index.php?module=Users&action=EditView&record=' . $GLOBALS['current_user']->id), 'submenu' => ''); } $global_control_links['employees'] = array('linkinfo' => array($app_strings['LBL_EMPLOYEES'] => 'index.php?module=Employees&action=index&query=true'), 'submenu' => ''); if (is_admin($current_user) || $current_user->isDeveloperForAnyModule()) { $global_control_links['admin'] = array('linkinfo' => array($app_strings['LBL_ADMIN'] => 'index.php?module=Administration&action=index'), 'submenu' => ''); } /* no longer goes in the menubar - now implemented in the bottom bar. $global_control_links['training'] = array( 'linkinfo' => array($app_strings['LBL_TRAINING'] => 'javascript:void(window.open(\'http://support.sugarcrm.com\'))'), 'submenu' => '' ); $global_control_links['help'] = array( 'linkinfo' => array($app_strings['LNK_HELP'] => ' javascript:void window.open(\'index.php?module=Administration&action=SupportPortal&view=documentation&version='.$sugar_version.'&edition='.$sugar_flavor.'&lang='.$current_language.'&help_module='.$GLOBALS['module'].'&help_action='.$action.'&key='.$server_unique_key.'\')'), 'submenu' => '' ); */ $global_control_links['users'] = array('linkinfo' => array($app_strings['LBL_LOGOUT'] => 'index.php?module=Users&action=Logout'), 'submenu' => ''); $global_control_links['about'] = array('linkinfo' => array($app_strings['LNK_ABOUT'] => 'index.php?module=Home&action=About'), 'submenu' => ''); foreach (SugarAutoLoader::existing('custom/include/globalControlLinks.php', SugarAutoLoader::loadExtension("links")) as $file) { include $file; }
/** * Loads the module shortcuts menu * * @param $module string optional, can specify module to retrieve menu for if not the current one * @return array module menu */ public function getMenu($module = null, $mod_strings_override = false) { global $current_language, $current_user, $app_strings, $module_menu, $mod_strings; if (empty($module)) { $module = $this->module; } //Need to make sure the mod_strings match the requested module or Menus may fail $curr_mod_strings = $mod_strings; if ($mod_strings_override !== false) { $mod_strings = $mod_strings_override; } else { $mod_strings = return_module_language($current_language, $module); } $module_menu = array(); $menus = SugarAutoLoader::existing('modules/' . $module . '/Menu.php', SugarAutoLoader::loadExtension("menus", $module)); foreach ($menus as $file) { require $file; } if (empty($menus) && !empty($GLOBALS['mod_strings']['LNK_NEW_RECORD'])) { $module_menu[] = array("index.php?module={$module}&action=EditView&return_module={$module}&return_action=DetailView", $GLOBALS['mod_strings']['LNK_NEW_RECORD'], "{$GLOBALS['app_strings']['LBL_CREATE_BUTTON_LABEL']}{$module}", $module); $module_menu[] = array("index.php?module={$module}&action=index", $GLOBALS['mod_strings']['LNK_LIST'], $module, $module); if ($this->bean instanceof SugarBean && !empty($this->bean->importable)) { if (!empty($mod_strings['LNK_IMPORT_' . strtoupper($module)])) { $module_menu[] = array("index.php?module=Import&action=Step1&import_module={$module}&return_module={$module}&return_action=index", $mod_strings['LNK_IMPORT_' . strtoupper($module)], "Import", $module); } else { $module_menu[] = array("index.php?module=Import&action=Step1&import_module={$module}&return_module={$module}&return_action=index", $app_strings['LBL_IMPORT'], "Import", $module); } } } if ($this->base_menu) { require $this->base_menu; } $mod_strings = $curr_mod_strings; $builtModuleMenu = $module_menu; unset($module_menu); return $builtModuleMenu; }
/** * Load the layout def file and associate the definition with a variable in the file. */ function open_layout_defs($reload = false, $layout_def_key = '', $original_only = false) { require_once 'include/MetaDataManager/MetaDataManager.php'; $mm = MetaDataManager::getManager(); $layout_defs[$this->_focus->module_dir] = array(); $layout_defs[$layout_def_key] = array(); $def_path = array(); if (empty($this->layout_defs) || $reload || !empty($layout_def_key) && !isset($layout_defs[$layout_def_key])) { if (!$original_only) { if (isModuleBWC($this->_focus->module_dir)) { $def_path = array('modules/' . $this->_focus->module_dir . '/metadata/' . ($this->platform == 'mobile' ? 'wireless.' : '') . 'subpaneldefs.php'); $def_path[] = SugarAutoLoader::loadExtension($this->platform == 'mobile' ? 'wireless_subpanels' : 'layoutdefs', $this->_focus->module_dir); foreach (SugarAutoLoader::existing($def_path) as $file) { require $file; } } else { $viewdefs = $mm->getModuleLayouts($this->_focus->module_dir); $viewdefs = !empty($viewdefs['subpanels']['meta']['components']) ? $viewdefs['subpanels']['meta']['components'] : array(); } } $layoutDefsKey = !empty($layout_def_key) ? $layout_def_key : $this->_focus->module_dir; // convert sidecar subpanels to the array the SubpanelDefinitions are looking for if ($this->_focus instanceof SugarBean && !isModuleBWC($this->_focus->module_dir) && isset($viewdefs)) { require_once 'include/MetaDataManager/MetaDataConverter.php'; $metaDataConverter = new MetaDataConverter(); $layout_defs[$layoutDefsKey] = $metaDataConverter->toLegacySubpanelLayoutDefs($viewdefs, $this->_focus); } $this->layout_defs = $layout_defs[$layoutDefsKey]; } }
} function cleanJobQueue($job) { $td = TimeDate::getInstance(); // soft delete all jobs that are older than cutoff $soft_cutoff = 7; if (isset($GLOBALS['sugar_config']['jobs']['soft_lifetime'])) { $soft_cutoff = $GLOBALS['sugar_config']['jobs']['soft_lifetime']; } $soft_cutoff_date = $job->db->quoted($td->getNow()->modify("- {$soft_cutoff} days")->asDb()); $job->db->query("UPDATE {$job->table_name} SET deleted=1 WHERE status='done' AND date_modified < " . $job->db->convert($soft_cutoff_date, 'datetime')); // hard delete all jobs that are older than hard cutoff $hard_cutoff = 21; if (isset($GLOBALS['sugar_config']['jobs']['hard_lifetime'])) { $hard_cutoff = $GLOBALS['sugar_config']['jobs']['hard_lifetime']; } $hard_cutoff_date = $job->db->quoted($td->getNow()->modify("- {$hard_cutoff} days")->asDb()); $job->db->query("DELETE FROM {$job->table_name} WHERE status='done' AND date_modified < " . $job->db->convert($hard_cutoff_date, 'datetime')); return true; } if (SugarAutoLoader::existing('custom/modules/Schedulers/_AddJobsHere.php')) { require 'custom/modules/Schedulers/_AddJobsHere.php'; } $extfile = SugarAutoLoader::loadExtension('schedulers'); if ($extfile) { require $extfile; } $extfile = SugarAutoLoader::loadExtension('app_schedulers'); if ($extfile) { require $extfile; }
/** * Reload the default tinyMCE config * */ private function overloadDefaultConfigs() { if (SugarAutoLoader::existing($this->customDefaultConfigFile)) { require_once $this->customDefaultConfigFile; } $defs = SugarAutoLoader::loadExtension('tinymce'); if ($defs) { require $defs; } if (!isset($defaultConfig)) { return; } foreach ($defaultConfig as $k => $v) { if ($k == "extended_valid_elements") { $this->defaultConfig[$k] .= "," . $v; } else { $this->defaultConfig[$k] = $v; } } }
protected function _displaySubPanels() { if (!empty($this->bean->id) && (SugarAutoLoader::existingCustom('modules/' . $this->module . '/metadata/subpaneldefs.php') || SugarAutoLoader::loadExtension("layoutdefs", $this->module))) { $GLOBALS['focus'] = $this->bean; require_once 'include/SubPanel/SubPanelTiles.php'; $subpanel = new SubPanelTiles($this->bean, $this->module); echo $subpanel->display(); } }
//// DATA SECURITY MEASURES require_once 'include/clean.php'; clean_special_arguments(); clean_incoming_data(); //// END DATA SECURITY MEASURES /////////////////////////////////////////////////////////////////////////////// // cn: set php.ini settings at entry points setPhpIniSettings(); require_once 'sugar_version.php'; // provides $sugar_version, $sugar_db_version, $sugar_flavor require_once 'include/utils/sugar_file_utils.php'; require_once 'include/utils/autoloader.php'; SugarAutoLoader::init(); //check to see if custom utils exist and load them too // not doing it in utils since autoloader is not loaded there yet foreach (SugarAutoLoader::existing('include/custom_utils.php', 'custom/include/custom_utils.php', SugarAutoLoader::loadExtension('utils')) as $file) { require_once $file; } require_once 'include/database/DBManagerFactory.php'; require_once 'include/dir_inc.php'; require_once 'include/Localization/Localization.php'; require_once 'include/TimeDate.php'; require_once 'include/modules.php'; // provides $moduleList, $beanList, $beanFiles, $modInvisList, $adminOnlyList, $modInvisListActivities require_once 'data/SugarBean.php'; require_once 'include/utils/mvc_utils.php'; require_once 'include/SugarObjects/LanguageManager.php'; require_once 'include/SugarObjects/VardefManager.php'; require_once 'include/utils/file_utils.php'; require_once 'include/SugarLogger/LoggerManager.php'; require_once 'modules/Trackers/BreadCrumbStack.php';
switch ($subGroup) { case 'bootstrap': return array('include/javascript/twitterbootstrap/transition.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-button.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-tooltip.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-dropdown.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-popover.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-modal.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-alert.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-datepicker.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-tab.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-collapse.js' => $target, 'include/javascript/twitterbootstrap/bootstrap-colorpicker.js' => $target); break; case 'bootstrap_core': return array('include/javascript/jquery/bootstrap/bootstrap.min.js' => $target, 'include/javascript/jquery/jquery.popoverext.js' => $target); break; case 'jquery_core': return array('include/javascript/jquery/jquery-min.js' => $target, 'include/javascript/jquery/jquery-ui-min.js' => $target, 'include/javascript/jquery/jquery.json-2.3.js' => $target); break; case 'jquery_menus': return array('include/javascript/jquery/jquery.hoverIntent.js' => $target, 'include/javascript/jquery/jquery.hoverscroll.js' => $target, 'include/javascript/jquery/jquery.hotkeys.js' => $target, 'include/javascript/jquery/jquery.tipTip.js' => $target, 'include/javascript/jquery/jquery.sugarMenu.js' => $target, 'include/javascript/jquery/jquery.highLight.js' => $target, 'include/javascript/jquery/jquery.showLoading.js' => $target, 'include/javascript/jquery/jquery.jstree.js' => $target, 'include/javascript/jquery/jquery.dataTables.min.js' => $target, 'include/javascript/jquery/jquery.dataTables.customSort.js' => $target, 'include/javascript/jquery/jquery.jeditable.js' => $target, 'include/javascript/jquery/jquery.effects.custombounce.js' => $target); break; default: break; } } } $calendarJSFileName = SugarAutoLoader::fileExists('custom/include/javascript/calendar.js') ? 'custom/include/javascript/calendar.js' : 'include/javascript/calendar.js'; $js_groupings = array($sugar_grp1 = array("sidecar/lib/backbone/underscore.js" => "include/javascript/sugar_grp1.js", 'include/javascript/sugar_3.js' => 'include/javascript/sugar_grp1.js', 'include/javascript/ajaxUI.js' => 'include/javascript/sugar_grp1.js', 'include/javascript/cookie.js' => 'include/javascript/sugar_grp1.js', 'include/javascript/menu.js' => 'include/javascript/sugar_grp1.js', $calendarJSFileName => 'include/javascript/sugar_grp1.js', 'include/javascript/quickCompose.js' => 'include/javascript/sugar_grp1.js', 'include/javascript/yui/build/yuiloader/yuiloader-min.js' => 'include/javascript/sugar_grp1.js', 'include/javascript/phpjs/license.js' => 'include/javascript/sugar_grp1.js', 'include/javascript/phpjs/get_html_translation_table.js' => 'include/javascript/sugar_grp1.js', 'include/javascript/phpjs/html_entity_decode.js' => 'include/javascript/sugar_grp1.js', 'include/javascript/phpjs/htmlentities.js' => 'include/javascript/sugar_grp1.js', 'sidecar/lib/sugarlogic/expressions.js' => 'include/javascript/sugar_grp1.js', 'include/Expressions/javascript/dependency.js' => 'include/javascript/sugar_grp1.js', 'include/EditView/Panels.js' => 'include/javascript/sugar_grp1.js'), $sugar_grp_jquery_core = getSubgroupForTarget('jquery_core', 'include/javascript/sugar_grp1_jquery_core.js'), $sugar_grp_bootstrap = getSubgroupForTarget('bootstrap_core', 'include/javascript/sugar_grp1_bootstrap.js'), $sugar_grp_jquery_menus = getSubgroupForTarget('jquery_menus', 'include/javascript/sugar_grp1_jquery_menus.js'), $sugar_grp_jquery = array_merge(getSubgroupForTarget('jquery_core', 'include/javascript/sugar_grp1_jquery.js'), getSubgroupForTarget('bootstrap_core', 'include/javascript/sugar_grp1_jquery.js'), getSubgroupForTarget('jquery_menus', 'include/javascript/sugar_grp1_jquery.js')), $sugar_field_grp = array('include/SugarFields/Fields/Collection/SugarFieldCollection.js' => 'include/javascript/sugar_field_grp.js', 'include/SugarFields/Fields/Teamset/Teamset.js' => 'include/javascript/sugar_field_grp.js', 'include/SugarFields/Fields/Datetimecombo/Datetimecombo.js' => 'include/javascript/sugar_field_grp.js'), $sugar_grp1_yui = array('include/javascript/yui3/build/yui/yui-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui3/build/loader/loader-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/yahoo/yahoo-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/dom/dom-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/yahoo-dom-event/yahoo-dom-event.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/event/event-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/logger/logger-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/animation/animation-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/connection/connection-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/dragdrop/dragdrop-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/container/container-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/element/element-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/tabview/tabview-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/selector/selector.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/ygDDList.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/datasource/datasource-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/json/json-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/autocomplete/autocomplete-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/quicksearch.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/menu/menu-min.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/sugar_connection_event_listener.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/calendar/calendar.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/history/history.js' => 'include/javascript/sugar_grp1_yui.js', 'include/javascript/yui/build/resize/resize-min.js' => 'include/javascript/sugar_grp1_yui.js'), $sugar_grp_yui_widgets = array('include/javascript/yui/build/datatable/datatable-min.js' => 'include/javascript/sugar_grp_yui_widgets.js', 'include/javascript/yui/build/treeview/treeview-min.js' => 'include/javascript/sugar_grp_yui_widgets.js', 'include/javascript/yui/build/button/button-min.js' => 'include/javascript/sugar_grp_yui_widgets.js', 'include/javascript/yui/build/calendar/calendar-min.js' => 'include/javascript/sugar_grp_yui_widgets.js', 'include/javascript/sugarwidgets/SugarYUIWidgets.js' => 'include/javascript/sugar_grp_yui_widgets.js', 'include/javascript/sugar_yui_overrides.js' => 'include/javascript/sugar_grp_yui_widgets.js'), $sugar_grp_yui_widgets_css = array("include/javascript/yui/build/fonts/fonts-min.css" => 'include/javascript/sugar_grp_yui_widgets.css', "include/javascript/yui/build/treeview/assets/skins/sam/treeview.css" => 'include/javascript/sugar_grp_yui_widgets.css', "include/javascript/yui/build/datatable/assets/skins/sam/datatable.css" => 'include/javascript/sugar_grp_yui_widgets.css', "include/javascript/yui/build/container/assets/skins/sam/container.css" => 'include/javascript/sugar_grp_yui_widgets.css', "include/javascript/yui/build/button/assets/skins/sam/button.css" => 'include/javascript/sugar_grp_yui_widgets.css', "include/javascript/yui/build/calendar/assets/skins/sam/calendar.css" => 'include/javascript/sugar_grp_yui_widgets.css'), $sugar_grp_yui2 = array('include/javascript/yui/build/dragdrop/dragdrop-min.js' => 'include/javascript/sugar_grp_yui2.js', 'include/javascript/yui/build/container/container-min.js' => 'include/javascript/sugar_grp_yui2.js'), $sugar_grp_emails = array('include/javascript/yui/ygDDList.js' => 'include/javascript/sugar_grp_emails.js', 'include/SugarEmailAddress/SugarEmailAddress.js' => 'include/javascript/sugar_grp_emails.js', 'include/SugarFields/Fields/Collection/SugarFieldCollection.js' => 'include/javascript/sugar_grp_emails.js', 'include/SugarRouting/javascript/SugarRouting.js' => 'include/javascript/sugar_grp_emails.js', 'include/SugarDependentDropdown/javascript/SugarDependentDropdown.js' => 'include/javascript/sugar_grp_emails.js', 'modules/InboundEmail/InboundEmail.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/EmailUIShared.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/EmailUI.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/EmailUICompose.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/ajax.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/grid.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/init.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/complexLayout.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/composeEmailTemplate.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/displayOneEmailTemplate.js' => 'include/javascript/sugar_grp_emails.js', 'modules/Emails/javascript/viewPrintable.js' => 'include/javascript/sugar_grp_emails.js', 'include/javascript/quicksearch.js' => 'include/javascript/sugar_grp_emails.js'), $sugar_grp_quick_compose = array('include/javascript/jsclass_base.js' => 'include/javascript/sugar_grp_quickcomp.js', 'include/javascript/jsclass_async.js' => 'include/javascript/sugar_grp_quickcomp.js', 'modules/Emails/javascript/vars.js' => 'include/javascript/sugar_grp_quickcomp.js', 'include/SugarFields/Fields/Collection/SugarFieldCollection.js' => 'include/javascript/sugar_grp_quickcomp.js', 'modules/Emails/javascript/EmailUIShared.js' => 'include/javascript/sugar_grp_quickcomp.js', 'modules/Emails/javascript/ajax.js' => 'include/javascript/sugar_grp_quickcomp.js', 'modules/Emails/javascript/grid.js' => 'include/javascript/sugar_grp_quickcomp.js', 'modules/Emails/javascript/EmailUICompose.js' => 'include/javascript/sugar_grp_quickcomp.js', 'modules/Emails/javascript/composeEmailTemplate.js' => 'include/javascript/sugar_grp_quickcomp.js', 'modules/Emails/javascript/complexLayout.js' => 'include/javascript/sugar_grp_quickcomp.js'), $sugar_grp_jsolait = array('include/javascript/jsclass_base.js' => 'include/javascript/sugar_grp_jsolait.js', 'include/javascript/jsclass_async.js' => 'include/javascript/sugar_grp_jsolait.js', 'modules/Meetings/jsclass_scheduler.js' => 'include/javascript/sugar_grp_jsolait.js'), $sugar_grp_sidecar = array_merge(array('include/javascript/phpjs/base64_encode.js' => 'include/javascript/sugar_sidecar.min.js', 'sidecar/lib/jquery-placeholder/jquery.placeholder.js' => 'include/javascript/sugar_sidecar.min.js'), getSubgroupForTarget('bootstrap', 'include/javascript/sugar_sidecar.min.js'), array('include/javascript/nvd3/lib/d3.min.js' => 'include/javascript/sugar_sidecar.min.js', 'include/SugarCharts/nvd3/js/sugarCharts.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/nvd3/nv.d3.min.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/error.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/touch.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/select2/select2.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Select2.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/jquery/jquery.timepicker.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/jquery/jquery.jstree.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/jquery/jquery.popoverext.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/jquery/jquery.effects.custombounce.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/jquery/jquery.nouislider.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/nprogress/nprogress.js' => 'include/javascript/sugar_sidecar.min.js', 'sidecar/lib/momentjs/min/langs.min.js' => 'include/javascript/sugar_sidecar.min.js', 'sidecar/lib/sugarlogic/expressions.js' => 'include/javascript/sugar_sidecar.min.js', 'sidecar/lib/sugarlogic/sidecarExpressionContext.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/FieldErrorCollection.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Dashlet.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Connector.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Tooltip.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Audit.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/FindDuplicates.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/MergeDuplicates.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/DragdropAttachments.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/FileDragoff.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Dropdown.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/EllipsisInline.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ListColumnEllipsis.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ReorderableColumns.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/jquery/sugar.resizableColumns.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ResizableColumns.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ToggleMoreLess.js' => 'include/javascript/sugar_sidecar.min.js', 'modules/Contacts/clients/base/plugins/ContactsPortalMetadataFilter.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/HistoricalSummary.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/MetadataEventDriven.js' => 'include/javascript/sugar_sidecar.min.js', 'modules/Forecasts/clients/base/plugins/DisableDelete.js' => 'include/javascript/sugar_sidecar.min.js', 'modules/Forecasts/clients/base/plugins/DisableMassDelete.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/MassQuote.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Taggable.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/RelativeTime.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ErrorDecoration.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/QuickSearchFilter.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ClickToEdit.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/GridBuilder.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ListDisableSort.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Editable.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ListEditable.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ListRemoveLinks.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/File.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/FieldDuplicate.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/LinkedModel.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ToggleVisibility.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Pagination.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/ShortcutSession.js' => 'include/javascript/sugar_sidecar.min.js', 'modules/Contacts/clients/base/lib/bean.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/DirtyCollection.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Prettify.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/Chart.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/EmailClientLaunch.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/VirtualCollection.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/SearchForMore.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/EditAllRecurrences.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/sugar7/plugins/AddAsInvitee.js' => 'include/javascript/sugar_sidecar.min.js', 'include/javascript/fuse/fuse.js' => 'include/javascript/sugar_sidecar.min.js')), $sugar_grp_portal2 = array_merge(array('sidecar/lib/jquery-placeholder/jquery.placeholder.js' => 'portal2/portal.min.js'), array('portal2/error.js' => 'portal2/portal.min.js', 'portal2/user.js' => 'portal2/portal.min.js', 'portal2/portal.js' => 'portal2/portal.min.js')), $sugar_grp_sugar7 = array('include/javascript/sugar7.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/bwc.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/utils.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/utils-filters.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/field.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/hacks.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/alert.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/language.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/help.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/hbs-helpers.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/underscore-mixins.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/filter-analytics.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/metadata-manager.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/sweetspot.js' => 'include/javascript/sugar_grp7.min.js', 'include/javascript/sugar7/import-export-warnings.js' => 'include/javascript/sugar_grp7.min.js'), $sugar_grp_sugar7_portal2 = array('include/javascript/sugar7/bwc.js' => 'portal2/sugar_portal.min.js', 'include/javascript/sugar7/utils.js' => 'portal2/sugar_portal.min.js', 'include/javascript/sugar7/utils-filters.js' => 'portal2/sugar_portal.min.js', 'include/javascript/sugar7/field.js' => 'portal2/sugar_portal.min.js', 'include/javascript/sugar7/hacks.js' => 'portal2/sugar_portal.min.js', 'include/javascript/sugar7/alert.js' => 'portal2/sugar_portal.min.js', 'include/javascript/sugar7/hbs-helpers.js' => 'portal2/sugar_portal.min.js', 'include/javascript/sugar7/language.js' => 'portal2/portal.min.js', 'custom/include/javascript/voodoo.js' => 'portal2/sugar_portal.min.js'), $pmse_br = array('include/javascript/pmse/ui/utils.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/style.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/arraylist.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/base.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/proxy.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/element.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/sugar_proxy.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/expression_container.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/decision_table.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/data_item.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/single_item.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/list_item.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/close_list_item.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/item_container_control.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/field_panel_item.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/field_panel_button.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/field_panel_button_group.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/collapsible_panel.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/form_panel.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/list_panel.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/multiple_collapsible_panel.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/field_panel_item_factory.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/field_panel.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/dropdown_selector.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/ui/expression_builder2.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/utils.js' => 'include/javascript/pmse.br.min.js', 'include/javascript/pmse/business_rules.js' => 'include/javascript/pmse.br.min.js'), $pmse_designer = array('include/javascript/pmse/tree.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/drag_behavior.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/drop_behavior.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/shapes.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/flow.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/command.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/command_annotation_resize.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/command_single_property.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/container_behavior.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/resize_behavior.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/project.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/canvas.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/marker.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/event.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/gateway.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/activity.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/artifact.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/properties_grid.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/artifact_resize_behavior.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/command_default_flow.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/command_connection_condition.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/command_reconnect.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/pmtree.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/progrid.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/ErrorMessageItem.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/ListContainer.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/ErrorListItem.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/ErrorListPanel.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/utils.js' => 'include/javascript/pmse.designer.min.js', 'include/javascript/pmse/designer.js' => 'include/javascript/pmse.designer.min.js'), $pmse_et = array('include/javascript/pmse/email_template.js' => 'include/javascript/pmse.et.min.js'), $pmse_libraries = array('include/javascript/pmse/lib/jquery.layout-latest.js' => 'include/javascript/pmse.libraries.min.js'), $pmse_jcore = array('include/javascript/pmse/lib/jcore.js' => 'include/javascript/pmse.jcore.min.js'), $pmse_utils = array('include/javascript/pmse/utils.js' => 'include/javascript/pmse.utils.min.js'), $pmse_ui = array('include/javascript/pmse/ui/utils.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/style.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/arraylist.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/base.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/modal.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/proxy.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/element.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/container.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/window.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/action.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/menu.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/item.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/checkbox_item.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/separator_item.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/menu_item.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/layout.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/tooltip.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/form.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/field.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/validator.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/validator_types.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/field_types.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/button.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/rest_proxy.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/sugar_proxy.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/item_matrix.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/item_updater.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/html_panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/store.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/grid.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/history_panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/log_field.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/message_panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/updater_field.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/note_panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/reassign_field.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/reassign_form.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/data_item.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/single_item.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/list_item.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/item_container_control.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/field_panel_item.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/field_panel_button.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/field_panel_button_group.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/collapsible_panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/form_panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/list_panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/multiple_collapsible_panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/field_panel_item_factory.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/field_panel.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/multiple_item.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/email_picker.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/expression_builder2.js' => 'include/javascript/pmse.ui.min.js', 'include/javascript/pmse/ui/criteria_field.js' => 'include/javascript/pmse.ui.min.js')); /** * Check for custom additions to this code */ if (!class_exists('SugarAutoLoader')) { // This block is required because this file could be called from a non-entrypoint (such as jssource/minify.php). require_once 'include/utils/autoloader.php'; SugarAutoLoader::init(); } foreach (SugarAutoLoader::existing("custom/jssource/JSGroupings.php", SugarAutoLoader::loadExtension("jsgroupings")) as $file) { require $file; }
$beanFiles['Subscription'] = 'modules/ActivityStream/Subscriptions/Subscription.php'; $modInvisList[] = 'Subscriptions'; $beanList['Filters'] = 'Filters'; $beanFiles['Filters'] = 'modules/Filters/Filters.php'; $modInvisList[] = 'Filters'; $beanList['Dashboards'] = 'Dashboard'; $beanFiles['Dashboard'] = 'modules/Dashboards/Dashboard.php'; $modInvisList[] = 'Dashboards'; //Object list is only here to correct for modules that break //the bean class name == dictionary entry/object name convention //No future module should need an entry here. $objectList = array(); $objectList['Cases'] = 'Case'; $objectList['Groups'] = 'User'; $objectList['Users'] = 'User'; $objectList['ActivityStream/Activities'] = 'Activities'; $objectList['TrackerSessions'] = 'tracker_sessions'; $objectList['TrackerPerfs'] = 'tracker_perf'; $objectList['TrackerQueries'] = 'tracker_queries'; $objectList['TeamNotices'] = 'TeamNotices'; $beanList['PdfManager'] = 'PdfManager'; $beanFiles['PdfManager'] = 'modules/PdfManager/PdfManager.php'; $modInvisList[] = 'PdfManager'; $adminOnlyList['PdfManager'] = array('all' => 1); // TODO: this definition should be grouped with all the others definitions like $beanList, $beanFiles and so on $bwcModules = array('ACLFields', 'ACLRoles', 'ACLActions', 'Administration', 'Audit', 'Calendar', 'CampaignLog', 'Campaigns', 'CampaignTrackers', 'Charts', 'Configurator', 'Contracts', 'ContractTypes', 'Connectors', 'Currencies', 'CustomQueries', 'DataSets', 'DocumentRevisions', 'Documents', 'EAPM', 'EmailAddresses', 'EmailMarketing', 'EmailMan', 'Emails', 'EmailTemplates', 'Employees', 'Exports', 'Expressions', 'Groups', 'History', 'Holidays', 'iCals', 'Import', 'InboundEmail', 'KBContents', 'KBDocuments', 'KBDocumentRevisions', 'KBTags', 'KBDocumentKBTags', 'KBContents', 'Manufacturers', 'MergeRecords', 'ModuleBuilder', 'MySettings', 'OAuthKeys', 'OAuthTokens', 'OptimisticLock', 'OutboundEmailConfiguration', 'PdfManager', 'ProductBundleNotes', 'ProductBundles', 'ProductTypes', 'Project', 'ProjectResources', 'ProjectTask', 'Quotas', 'Quotes', 'QueryBuilder', 'Relationships', 'Releases', 'ReportMaker', 'Reports', 'Roles', 'SavedSearch', 'Schedulers', 'SchedulersJobs', 'Shippers', 'SNIP', 'Studio', 'SugarFavorites', 'TaxRates', 'Teams', 'TeamMemberships', 'TeamSets', 'TeamSetModules', 'TeamNotices', 'TimePeriods', 'Trackers', 'TrackerSessions', 'TrackerPerfs', 'TrackerQueries', 'UserPreferences', 'UserSignatures', 'Users', 'vCals', 'vCards', 'Versions', 'WorkFlow', 'WorkFlowActions', 'WorkFlowActionShells', 'WorkFlowAlerts', 'WorkFlowAlertShells', 'WorkFlowTriggerShells'); // this module doesn't need a Bean $modInvisList[] = 'Feedbacks'; foreach (SugarAutoLoader::existing('include/modules_override.php', SugarAutoLoader::loadExtension("modules")) as $modExtFile) { include $modExtFile; }
/** * Retrieve the subpanel definitions for a given SugarBean object. Unforunately we can't reuse * any of the SubPanelDefinion.php functions. * * @param SugarBean $bean * @return array The subpanel definitions. */ private function getSubpanelDefs($bean) { if (empty($bean->module_dir)) { return array(); } $layout_defs = array(); // Handle things differently for BWC modules if (isModuleBWC($bean->module_dir)) { foreach (SugarAutoLoader::existingCustom('modules/' . $bean->module_dir . '/metadata/subpaneldefs.php') as $file) { require $file; } $defs = SugarAutoLoader::loadExtension('layoutdefs', $bean->module_dir); if ($defs) { require $defs; } } else { // Handle things the new way foreach (SugarAutoLoader::existingCustom('modules/' . $bean->module_dir . '/clients/base/layouts/subpanels/subpanels.php') as $file) { require $file; } // Add in any studio customizations $ext = 'custom/modules/' . $bean->module_dir . '/Ext/clients/base/layouts/subpanels/subpanels.ext.php'; if (SugarAutoLoader::fileExists($ext)) { require $ext; } // Massage defs to look like old style for use in the rename process if (isset($viewdefs[$bean->module_dir]['base']['layout']['subpanels']['components'])) { $layout_defs = $this->getSidecarSubpanelDefsAsLegacy($viewdefs[$bean->module_dir]['base']['layout']['subpanels']['components'], $bean); } } return isset($layout_defs[$bean->module_dir]['subpanel_setup']) ? $layout_defs[$bean->module_dir]['subpanel_setup'] : $layout_defs; }
private static function getModuleDependencyMetadata($module) { /* //Disable caching for now $cacheLoc = create_cache_directory("modules/$module/dependencies.php"); //If the cache file exists, use it. if(inDeveloperMode() && empty($_SESSION['developerMode']) && is_file($cacheLoc)) { include($cacheLoc); } //Otherwise load all the def locations and create the cache file. else { */ $dependencies = array($module => array()); foreach (SugarAutoLoader::existingCustom("modules/{$module}/metadata/dependencydefs.php") as $loc) { require $loc; } $defs = SugarAutoLoader::loadExtension("dependencies", $module); if ($defs) { require $defs; } /* //More disabled cache code $out = "<?php\n // created: " . date('Y-m-d H:i:s') . "\n" . override_value_to_string('dependencies', $module, $dependencies[$module]); file_put_contents($cacheLoc, $out); }*/ return $dependencies[$module]; }
/** * Search for bwc modules which are not related to core bwc modules * * @return array */ protected function getNotCoreBwcModules() { // Because of 6_ScanModules.php we should find core BWC modules in some specific way. $bwcModules = array(); include 'include/modules.php'; $coreBwcModules = $bwcModules; foreach (SugarAutoLoader::existing('include/modules_override.php', SugarAutoLoader::loadExtension("modules")) as $modExtFile) { $bwcModules = array(); include $modExtFile; foreach ($bwcModules as $module) { $key = array_search($module, $coreBwcModules); if ($key !== false) { unset($coreBwcModules[$key]); } } } return array_diff($GLOBALS['bwcModules'], $coreBwcModules); }
/** * Given a module, search all of the specified locations, and any others as specified * in order to refresh the cache file * * @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 array $additional_search_paths an array which allows a consumer to pass in additional vardef locations to search */ static function refreshVardefs($module, $object, $additional_search_paths = null, $cacheCustom = true, $params = array()) { // Some of the vardefs do not correctly define dictionary as global. Declare it first. global $dictionary, $beanList; // some tests do new SugarBean(), we can't do much with it here. if (empty($module)) { return; } $guard_name = "{$module}:{$object}"; if (isset(self::$inReload[$guard_name])) { self::$inReload[$guard_name]++; if (self::$inReload[$guard_name] > 2) { return; } } else { self::$inReload[$guard_name] = 1; } $vardef_paths = array('modules/' . $module . '/vardefs.php', SugarAutoLoader::loadExtension("vardefs", $module), 'custom/Extension/modules/' . $module . '/Ext/Vardefs/vardefs.php'); // Add in additional search paths if they were provided. if (!empty($additional_search_paths) && is_array($additional_search_paths)) { $vardef_paths = array_merge($vardef_paths, $additional_search_paths); } $found = false; //search a predefined set of locations for the vardef files foreach (SugarAutoLoader::existing($vardef_paths) as $path) { require $path; $found = true; } if (!empty($params['bean'])) { $bean = $params['bean']; } else { if (!empty($dictionary[$object])) { // to avoid extra refresh - we'll fill it in later if (!isset($GLOBALS['dictionary'][$object]['related_calc_fields'])) { $GLOBALS['dictionary'][$object]['related_calc_fields'] = array(); } } // we will instantiate here even though dictionary may not be there, // since in case somebody calls us with wrong module name we need bean // to get $module_dir. This may cause a loop but since the second call will // have the right module name the loop should be short. $bean = BeanFactory::newBean($module); } //Some modules have multiple beans, we need to see if this object has a module_dir that is different from its module_name if (!$found) { if ($bean instanceof SugarBean) { $object_name = BeanFactory::getObjectName($bean->module_dir); if ($bean->module_dir != $bean->module_name && !empty($object_name)) { unset($params["bean"]); // don't pass this bean down - it may be wrong bean for that module self::refreshVardefs($bean->module_dir, $object_name, $additional_search_paths, $cacheCustom, $params); } } } //Some modules like cases have a bean name that doesn't match the object name if (empty($dictionary[$object])) { $newName = BeanFactory::getObjectName($module); if (!empty($newName)) { $object = $newName; } } //load custom fields into the vardef cache if ($cacheCustom && !empty($GLOBALS['dictionary'][$object]['fields'])) { require_once "modules/DynamicFields/DynamicField.php"; $df = new DynamicField($module); $df->buildCache($module, false); } // if we are currently rebuilding the relationships, we don't want `updateRelCFModules` to be called // as it will fail when trying to look up relationships as they my have not been loaded into the // cache yet $rebuildingRelationships = isset($GLOBALS['buildingRelCache']) && $GLOBALS['buildingRelCache'] === true; if (empty($params['ignore_rel_calc_fields']) && $rebuildingRelationships === false) { self::updateRelCFModules($module, $object); } // Put ACLStatic into vardefs for beans supporting ACLs if (!empty($bean) && $bean instanceof SugarBean && !empty($dictionary[$object]) && !isset($dictionary[$object]['acls']['SugarACLStatic']) && $bean->bean_implements('ACL')) { $dictionary[$object]['acls']['SugarACLStatic'] = true; } //great! now that we have loaded all of our vardefs. //let's go save them to the cache file if (!empty($dictionary[$object])) { VardefManager::saveCache($module, $object); SugarBean::clearLoadedDef($object); } if (isset(self::$inReload[$guard_name])) { if (self::$inReload[$guard_name] > 1) { self::$inReload[$guard_name]--; } else { unset(self::$inReload[$guard_name]); } } }