/** * Builds up module client cache files * * @param array $platforms A list of platforms to build for. Uses the first * platform in the list as the platform. * @param string $type The type of file to create the cache for. * @param array $modules The module to create the cache for. * @param MetaDataContextInterface|null $context Metadata context */ public static function buildModuleClientCache($platforms, $type, $modules = array(), MetaDataContextInterface $context = null, $noCache = false) { if (is_string($modules)) { // They just want one module $modules = array($modules); } elseif (count($modules) == 0) { // They want all of the modules $modules = array_keys($GLOBALS['app_list_strings']['moduleList']); } if (!$context) { $context = new MetaDataContextDefault(); } foreach ($modules as $module) { $seed = BeanFactory::getBean($module); $fileList = self::getClientFiles($platforms, $type, $module, $context, $seed); $moduleResults = self::getClientFileContents($fileList, $type, $module, $seed); if ($type == "view") { foreach ($moduleResults as $view => $defs) { if (!is_array($defs) || empty($seed) || empty($seed->field_defs)) { continue; } $meta = !empty($defs['meta']) ? $defs['meta'] : array(); $deps = array_merge(DependencyManager::getDependenciesForFields($seed->field_defs, ucfirst($view) . "View"), DependencyManager::getDependenciesForView($meta, ucfirst($view) . "View", $module)); if (!empty($deps)) { if (!isset($meta['dependencies']) || !is_array($meta['dependencies'])) { $moduleResults[$view]['meta']['dependencies'] = array(); } foreach ($deps as $dep) { $moduleResults[$view]['meta']['dependencies'][] = $dep->getDefinition(); } } } } if ($noCache) { return $moduleResults; } else { $basePath = sugar_cached('modules/' . $module . '/clients/' . $platforms[0]); sugar_mkdir($basePath, null, true); $output = "<?php\n\$clientCache['" . $module . "']['" . $platforms[0] . "']['" . $type . "'] = " . var_export($moduleResults, true) . ";\n\n"; sugar_file_put_contents_atomic($basePath . '/' . $type . '.php', $output); } } }
/** * createDependencyJavascript * Builds the javascript required to execute calculated/dependent fields * and module-view dependences. * * @param array $fieldDefs The fields defs for the current module. * @param array $viewDefs the viewdefs for the current view. * @param string $view the current view type. */ function createDependencyJavascript($fieldDefs, $viewDefs, $view, $module = null) { //Use a doWhen to wait for the page to be fulled loaded (!SUGAR.util.ajaxCallInProgress()) // TODO check if this isn't broken... $js = "<script type=text/javascript>\n" . "SUGAR.util.doWhen('!SUGAR.util.ajaxCallInProgress()', function(){\n" . "SUGAR.forms.AssignmentHandler.registerView('{$view}');\n"; if ($view == 'ConvertLead') { $fieldDefs = $this->prepareCalculationFields($fieldDefs, $module); } $js .= DependencyManager::getLinkFields($fieldDefs, $view); $dependencies = array_merge(DependencyManager::getDependenciesForFields($fieldDefs, $view), DependencyManager::getDependenciesForView($viewDefs, $view, $module)); foreach ($dependencies as $dep) { $js .= $dep->getJavascript($view); } //Detail views do not use the view name as the input ID. $viewId = $view == "DetailView" ? "{$module}_detailview_tabs" : $view; $js .= "\nYAHOO.util.Event.onContentReady('{$viewId}', SUGAR.forms.AssignmentHandler.loadComplete);"; $js .= "});</script>"; return $js; }