function constructSmarty($parser) { global $mod_strings; $smarty = new Sugar_Smarty(); $smarty->assign('translate', true); $smarty->assign('language', $parser->getLanguage()); $smarty->assign('view', $this->editLayout); $smarty->assign('module', "ModuleBuilder"); $smarty->assign('field_defs', $parser->getFieldDefs()); $smarty->assign('action', 'listViewSave'); $smarty->assign('view_module', $this->editModule); if (!empty($this->subpanel)) { $smarty->assign('subpanel', $this->subpanel); $smarty->assign('subpanelLabel', $this->subpanelLabel); if (!$this->fromModuleBuilder) { $subList = SubPanel::getModuleSubpanels($this->editModule); $subRef = $subList[strtolower($this->subpanel)]; $subTitleKey = !empty($subRef) ? $subRef : "LBL_" . strtoupper($this->subpanel) . "_SUBPANEL_TITLE"; $subTitle = !empty($subRef) ? translate($subTitleKey, $this->editModule) : UCfirst($this->subpanel); $smarty->assign('subpanel_label', $subTitleKey); $smarty->assign('subpanel_title', $subTitle); } } $helpName = $this->subpanel ? 'subPanelEditor' : 'listViewEditor'; $smarty->assign('helpName', $helpName); $smarty->assign('helpDefault', 'modify'); $smarty->assign('title', $this->_constructTitle()); $groups = array(); foreach ($parser->columns as $column => $function) { // update this so that each field has a properties set // properties are name, value, title (optional) $groups[$GLOBALS['mod_strings'][$column]] = $parser->{$function}(); // call the parser functions to populate the list view columns, by default 'default', 'available' and 'hidden' } foreach ($groups as $groupKey => $group) { foreach ($group as $fieldKey => $field) { if (isset($field['width'])) { if (substr($field['width'], -1, 1) == '%') { $groups[$groupKey][$fieldKey]['width'] = substr($field['width'], 0, strlen($field['width']) - 1); } } } } $smarty->assign('groups', $groups); $smarty->assign('from_mb', $this->fromModuleBuilder); global $image_path; $imageSave = SugarThemeRegistry::current()->getImage('studio_save', '', null, null, '.gif', $mod_strings['LBL_BTN_SAVE']); // $imageHelp = SugarThemeRegistry::current()->getImage('help') ; $history = $parser->getHistory(); $histaction = "ModuleBuilder.history.browse(\"{$this->editModule}\", \"{$this->editLayout}\")"; if ($this->subpanel) { $histaction = "ModuleBuilder.history.browse(\"{$this->editModule}\", \"{$this->editLayout}\", \"{$this->subpanel}\")"; } $restoreAction = "onclick='ModuleBuilder.history.revert(\"{$this->editModule}\", \"{$this->editLayout}\", \"{$history->getLast()}\", \"\")'"; if ($this->subpanel) { $restoreAction = "onclick='ModuleBuilder.history.revert(\"{$this->editModule}\", \"{$this->editLayout}\", \"{$history->getLast()}\", \"{$this->subpanel}\")'"; } $buttons = array(); $buttons[] = array('id' => 'savebtn', 'name' => 'savebtn', 'image' => $imageSave, 'text' => !$this->fromModuleBuilder ? $GLOBALS['mod_strings']['LBL_BTN_SAVEPUBLISH'] : $GLOBALS['mod_strings']['LBL_BTN_SAVE'], 'actionScript' => "onclick='studiotabs.generateGroupForm(\"edittabs\");if (countListFields()==0) ModuleBuilder.layoutValidation.popup() ; else ModuleBuilder.handleSave(\"edittabs\" )'"); $buttons[] = array('id' => 'spacer', 'width' => '50px'); $buttons[] = array('id' => 'historyBtn', 'name' => 'historyBtn', 'text' => translate('LBL_HISTORY'), 'actionScript' => "onclick='{$histaction}'"); $buttons[] = array('id' => 'historyDefault', 'name' => 'historyDefault', 'text' => translate('LBL_RESTORE_DEFAULT'), 'actionScript' => $restoreAction); $smarty->assign('buttons', $this->_buildImageButtons($buttons)); $editImage = SugarThemeRegistry::current()->getImage('edit_inline', '', null, null, '.gif', $mod_strings['LBL_EDIT']); $smarty->assign('editImage', $editImage); $deleteImage = SugarThemeRegistry::current()->getImage('delete_inline', '', null, null, '.gif', $mod_strings['LBL_MB_DELETE']); $smarty->assign('deleteImage', $deleteImage); $smarty->assign('MOD', $GLOBALS['mod_strings']); if ($this->fromModuleBuilder) { $smarty->assign('MB', true); $smarty->assign('view_package', $_REQUEST['view_package']); $mb = new ModuleBuilder(); $module =& $mb->getPackageModule($_REQUEST['view_package'], $this->editModule); $smarty->assign('current_mod_strings', $module->getModStrings()); if ($this->subpanel) { if (isset($_REQUEST['local'])) { $smarty->assign('local', '1'); } $smarty->assign("subpanel", $this->subpanel); } else { $smarty->assign('description', $GLOBALS['mod_strings']['LBL_LISTVIEW_DESCRIPTION']); } } else { if ($this->subpanel) { $smarty->assign("subpanel", "{$this->subpanel}"); } else { $smarty->assign('description', $GLOBALS['mod_strings']['LBL_LISTVIEW_DESCRIPTION']); } } return $smarty; }
function display() { $editModule = $_REQUEST['view_module']; if (!isset($_REQUEST['MB'])) { global $app_list_strings; $moduleNames = array_change_key_case($app_list_strings['moduleList']); $translatedEditModule = $moduleNames[strtolower($editModule)]; } $selected_lang = !empty($_REQUEST['selected_lang']) ? $_REQUEST['selected_lang'] : $_SESSION['authenticated_user_language']; if (empty($selected_lang)) { $selected_lang = $GLOBALS['sugar_config']['default_language']; } $smarty = new Sugar_Smarty(); global $mod_strings; $smarty->assign('mod_strings', $mod_strings); $smarty->assign('available_languages', get_languages()); global $beanList; $objectName = $beanList[$editModule]; if ($objectName == 'aCase') { $objectName = 'Case'; } VardefManager::loadVardef($editModule, $objectName); global $dictionary; $vnames = array(); //jchi 24557 . We should list all the lables in viewdefs(list,detail,edit,quickcreate) that the user can edit them. require_once 'modules/ModuleBuilder/parsers/views/ListLayoutMetaDataParser.php'; $parser = new ListLayoutMetaDataParser(MB_LISTVIEW, $editModule); foreach ($parser->getLayout() as $key => $def) { if (isset($def['label'])) { $vnames[$def['label']] = $def['label']; } } require_once 'modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php'; $variableMap = array(MB_EDITVIEW => 'EditView', MB_DETAILVIEW => 'DetailView', MB_QUICKCREATE => 'QuickCreate'); if ($editModule == 'KBDocuments') { $variableMap = array(); } foreach ($variableMap as $key => $value) { $gridLayoutMetaDataParserTemp = new GridLayoutMetaDataParser($value, $editModule); foreach ($gridLayoutMetaDataParserTemp->getLayout() as $panel) { foreach ($panel as $row) { foreach ($row as $fieldArray) { // fieldArray is an array('name'=>name,'label'=>label) if (isset($fieldArray['label'])) { $vnames[$fieldArray['label']] = $fieldArray['label']; } } } } } //end //Get Subpanel Labels: require_once 'include/SubPanel/SubPanel.php'; $subList = SubPanel::getModuleSubpanels($editModule); foreach ($subList as $subpanel => $titleLabel) { $vnames[$titleLabel] = $titleLabel; } foreach ($dictionary[$objectName]['fields'] as $name => $def) { if (isset($def['vname'])) { $vnames[$def['vname']] = $def['vname']; } } $formatted_mod_strings = array(); //we shouldn't set the $refresh=true here, or will lost template language mod_strings. //return_module_language($selected_lang, $editModule,false) : the mod_strings will be included from cache files here. foreach (return_module_language($selected_lang, $editModule, false) as $name => $label) { //#25294 if (isset($vnames[$name]) || preg_match('/lbl_city|lbl_country|lbl_billing_address|lbl_alt_address|lbl_shipping_address|lbl_postal_code|lbl_state$/si', $name)) { $formatted_mod_strings[$name] = htmlentities($label, ENT_QUOTES, 'UTF-8'); } } //Grab everything from the custom files $mod_bak = $mod_strings; $files = array("custom/modules/{$editModule}/language/{$selected_lang}.lang.php", "custom/modules/{$editModule}/Ext/Language/{$selected_lang}.lang.ext.php"); foreach ($files as $langfile) { $mod_strings = array(); if (is_file($langfile)) { include $langfile; foreach ($mod_strings as $key => $label) { $formatted_mod_strings[$key] = htmlentities($label, ENT_QUOTES, 'UTF-8'); } } } $mod_strings = $mod_bak; ksort($formatted_mod_strings); $smarty->assign('MOD', $formatted_mod_strings); $smarty->assign('view_module', $editModule); $smarty->assign('APP', $GLOBALS['app_strings']); $smarty->assign('selected_lang', $selected_lang); $smarty->assign('defaultHelp', 'labelsBtn'); $smarty->assign('assistant', array('key' => 'labels', 'group' => 'module')); $ajax = new AjaxCompose(); $ajax->addCrumb($mod_strings['LBL_STUDIO'], 'ModuleBuilder.getContent("module=ModuleBuilder&action=wizard")'); $ajax->addCrumb($translatedEditModule, 'ModuleBuilder.getContent("module=ModuleBuilder&action=wizard&view_module=' . $editModule . '")'); $ajax->addCrumb($mod_strings['LBL_LABELS'], ''); $html = $smarty->fetch('modules/ModuleBuilder/tpls/labels.tpl'); $ajax->addSection('center', $GLOBALS['mod_strings']['LBL_SECTION_EDLABELS'], $html); echo $ajax->getJavascript(); }
/** * Gets a list of subpanels used by the current module */ function getSubpanels() { if (!empty($GLOBALS['current_user']) && empty($GLOBALS['modListHeader'])) { $GLOBALS['modListHeader'] = query_module_access_list($GLOBALS['current_user']); } require_once 'include/SubPanel/SubPanel.php'; $nodes = array(); $GLOBALS['log']->debug("StudioModule->getSubpanels(): getting subpanels for " . $this->module); // counter to add a unique key to assoc array below $ct = 0; foreach (SubPanel::getModuleSubpanels($this->module) as $name => $label) { if ($name == 'users') { continue; } $subname = sugar_ucfirst(!empty($label) ? translate($label, $this->module) : $name); $action = "module=ModuleBuilder&action=editLayout&view=ListView&view_module={$this->module}&subpanel={$name}&subpanelLabel=" . urlencode($subname); // bug47452 - adding a unique number to the $nodes[ key ] so if you have 2+ panels // with the same subname they will not cancel each other out $nodes[$subname . $ct++] = array('name' => $name, 'label' => $subname, 'action' => $action, 'imageTitle' => $subname, 'imageName' => 'icon_' . ucfirst($name) . '_32', 'altImageName' => 'Subpanels', 'size' => '48'); } return $nodes; }
/** * Gets a list of subpanels used by the current module */ function getSubpanels() { if (!empty($GLOBALS['current_user']) && empty($GLOBALS['modListHeader'])) { $GLOBALS['modListHeader'] = query_module_access_list($GLOBALS['current_user']); } require_once 'include/SubPanel/SubPanel.php'; $nodes = array(); $GLOBALS['log']->debug("StudioModule->getSubpanels(): getting subpanels for " . $this->module); foreach (SubPanel::getModuleSubpanels($this->module) as $name => $label) { if ($name == 'users') { continue; } $subname = sugar_ucfirst(!empty($label) ? translate($label, $this->module) : $name); $nodes[$subname] = array('name' => $name, 'label' => $subname, 'action' => "module=ModuleBuilder&action=editLayout&view=ListView&view_module={$this->module}&subpanel={$name}&subpanelLabel={$subname}", 'imageTitle' => $subname, 'imageName' => 'icon_' . ucfirst($name) . '_32', 'altImageName' => 'Subpanels', 'size' => '48'); } return $nodes; }
function display() { global $locale; $editModule = $_REQUEST['view_module']; $allLabels = !empty($_REQUEST['labels']) && $_REQUEST['labels'] == 'all'; if (!isset($_REQUEST['MB'])) { global $app_list_strings; $moduleNames = array_change_key_case($app_list_strings['moduleList']); $translatedEditModule = $moduleNames[strtolower($editModule)]; } $selected_lang = null; if (!empty($_REQUEST['selected_lang'])) { $selected_lang = $_REQUEST['selected_lang']; } else { $selected_lang = $locale->getAuthenticatedUserLanguage(); } $smarty = new Sugar_Smarty(); global $mod_strings; $smarty->assign('mod_strings', $mod_strings); $smarty->assign('available_languages', get_languages()); $objectName = BeanFactory::getObjectName($editModule); VardefManager::loadVardef($editModule, $objectName); global $dictionary; $vnames = array(); //jchi 24557 . We should list all the lables in viewdefs(list,detail,edit,quickcreate) that the user can edit them. $parser = ParserFactory::getParser(MB_LISTVIEW, $editModule); foreach ($parser->getLayout() as $key => $def) { if (isset($def['label'])) { $vnames[$def['label']] = $def['label']; } } require_once 'modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php'; $variableMap = $this->getVariableMap($editModule); foreach ($variableMap as $key => $value) { $gridLayoutMetaDataParserTemp = ParserFactory::getParser($key, $editModule); foreach ($gridLayoutMetaDataParserTemp->getLayout() as $panel) { foreach ($panel as $row) { foreach ($row as $fieldArray) { // fieldArray is an array('name'=>name,'label'=>label) if (isset($fieldArray['label'])) { $vnames[$fieldArray['label']] = $fieldArray['label']; } } } } } //end //Get Subpanel Labels: require_once 'include/SubPanel/SubPanel.php'; $subList = SubPanel::getModuleSubpanels($editModule); foreach ($subList as $subpanel => $titleLabel) { $vnames[$titleLabel] = $titleLabel; } foreach ($dictionary[$objectName]['fields'] as $name => $def) { if (isset($def['vname'])) { $vnames[$def['vname']] = $def['vname']; } } $formatted_mod_strings = array(); // we shouldn't set the $refresh=true here, or will lost template language // mod_strings. // return_module_language($selected_lang, $editModule,false) : // the mod_strings will be included from cache files here. foreach (return_module_language($selected_lang, $editModule, false) as $name => $label) { //#25294 if ($allLabels || isset($vnames[$name]) || preg_match('/lbl_city|lbl_country|lbl_billing_address|lbl_alt_address|lbl_shipping_address|lbl_postal_code|lbl_state$/si', $name)) { // Bug 58174 - Escaped labels are sent to the client escaped // even in the label editor in studio $formatted_mod_strings[$name] = html_entity_decode($label, null, 'UTF-8'); } } //Grab everything from the custom files $mod_bak = $mod_strings; $files = array("custom/modules/{$editModule}/language/{$selected_lang}.lang.php", "custom/modules/{$editModule}/Ext/Language/{$selected_lang}.lang.ext.php"); foreach ($files as $langfile) { $mod_strings = array(); if (is_file($langfile)) { include $langfile; foreach ($mod_strings as $key => $label) { // Bug 58174 - Escaped labels are sent to the client escaped // even in the label editor in studio $formatted_mod_strings[$key] = html_entity_decode($label, null, 'UTF-8'); } } } $mod_strings = $mod_bak; ksort($formatted_mod_strings); $smarty->assign('MOD', $formatted_mod_strings); $smarty->assign('view_module', $editModule); $smarty->assign('APP', $GLOBALS['app_strings']); $smarty->assign('selected_lang', $selected_lang); $smarty->assign('defaultHelp', 'labelsBtn'); $smarty->assign('assistant', array('key' => 'labels', 'group' => 'module')); $smarty->assign('labels_choice', $mod_strings['labelTypes']); $smarty->assign('labels_current', $allLabels ? "all" : ""); $ajax = new AjaxCompose(); $ajax->addCrumb($mod_strings['LBL_STUDIO'], 'ModuleBuilder.getContent("module=ModuleBuilder&action=wizard")'); $ajax->addCrumb($translatedEditModule, 'ModuleBuilder.getContent("module=ModuleBuilder&action=wizard&view_module=' . $editModule . '")'); $ajax->addCrumb($mod_strings['LBL_LABELS'], ''); $html = $smarty->fetch('modules/ModuleBuilder/tpls/labels.tpl'); $ajax->addSection('center', $GLOBALS['mod_strings']['LBL_SECTION_EDLABELS'], $html); echo $ajax->getJavascript(); }
\treturn true; } </script> <form method='post' action='index.php' onsubmit="return get_subpanel_value()"> <input type='hidden' name='action' value='index'> <input type='hidden' name='module' value='DynamicLayout'> <input type='hidden' name='edit_subpanel_MSI' value='1'> <input type='hidden' name='subpanel' id='subpanel' value = ''> <select id= 'select_subpanel_module' name='select_subpanel_module' onChange='swap_subpanels()'> EOQ; echo get_select_options_with_id($subpanelmodules, ''); echo '</select>'; foreach ($subpanelmodules as $mod) { echo "<div style='display:none' id='{$mod}'><select id='{$mod}subpanel' name='{$mod}subpanel'>"; $layout_def = SubPanel::getModuleSubpanels($mod); foreach ($layout_def as $sub) { echo "<option value='{$sub}'>{$sub}</option>"; } echo '</select></div>'; } echo '<input type="submit" class="button" name="Submit" value="' . $mod_strings['LBL_SELECT_SUBPANEL'] . '" ></form>'; echo <<<EOQ <form name='edit' method='post' action='index.php'> <input type='hidden' name='action' value='index'> <input type='hidden' name='module' value='DynamicLayout'> </form> EOQ; echo '<script>swap_subpanels();</script><BR><BR>'; // How To Use Layout Text Block Instructions
require_once 'include/SubPanel/SubPanel.php'; require_once 'modules/Studio/parsers/StudioParser.php'; $moduleFiles = StudioParser::getFiles($the_module); echo '<table width="100%" class="tabForm" cellpadding="0" cellspacing="0"><tr><td align="right"><b>Layouts:</b></td><td class="dataLabel" align="left">'; $count = 0; foreach ($moduleFiles as $id => $attr) { $label = translate($id, $the_module); if ($count > 0) { echo ' | '; } echo " <a href='index.php?module=Studio&action=wizard&wizard=SelectModuleLayout&option={$id}' class='tabFormAdvLink'>{$label}</a> "; $count++; } echo '</td></tr>'; echo '<tr><td align="right"><b>Subpanels:</b></td><td align="left">'; $layout_def = SubPanel::getModuleSubpanels($the_module); $count = 0; foreach ($layout_def as $key => $sub) { if ($sub == 'users') { unset($layout_def[$key]); } } $totalCount = count($layout_def); foreach ($layout_def as $sub) { if ($count > 0) { echo ' | '; } $subname = !empty($GLOBALS['layout_defs'][$the_module]['subpanel_setup'][$sub]['title_key']) ? translate($GLOBALS['layout_defs'][$the_module]['subpanel_setup'][$sub]['title_key'], $the_module) : $sub; echo " <a href='index.php?module=Studio&action=index&subpanel={$sub}' class='tabFormAdvLink'>{$subname}</a> "; $count++; }