public function testSubpanelOverride() { // Create Subpanel 1 $subpanel_1 = array('order' => 100, 'module' => 'Cases', 'subpanel_name' => 'default', 'sort_order' => 'asc', 'sort_by' => 'id', 'title_key' => 'LBL_CONTACTS_CASES_1_FROM_CASES_TITLE', 'get_subpanel_data' => 'contacts_cases_1', 'top_buttons' => array(0 => array('widget_class' => 'SubPanelTopButtonQuickCreate'), 1 => array('widget_class' => 'SubPanelTopSelectButton', 'mode' => 'MultiSelect'))); $subpanel_list_fields_1['list_fields'] = array('priority' => array('type' => 'enum', 'vname' => 'LBL_PRIORITY', 'sortable' => false, 'width' => '10%', 'default' => true)); $subpanel_def_1 = new aSubPanel("contacts_cases_1", $subpanel_1, $this->bean); $subpanel_1 = new SubPanel('Contacts', 'fab4', $subpanel_def_1->_instance_properties['subpanel_name'], $subpanel_def_1); $subpanel_1->saveSubPanelDefOverride($subpanel_def_1, 'list_fields', $subpanel_list_fields_1); $path_1 = 'custom/modules/' . $subpanel_def_1->_instance_properties['module'] . '/metadata/subpanels'; $filename_1 = $subpanel_def_1->parent_bean->object_name . "_subpanel_" . $subpanel_def_1->name; $extname_1 = '_override' . $subpanel_def_1->parent_bean->object_name . "_subpanel_" . $subpanel_def_1->name; // Create SubPane 2 $subpanel_2 = array('order' => 100, 'module' => 'Cases', 'subpanel_name' => 'default', 'sort_order' => 'asc', 'sort_by' => 'id', 'title_key' => 'LBL_CONTACTS_CASES_2_FROM_CASES_TITLE', 'get_subpanel_data' => 'contacts_cases_2', 'top_buttons' => array(0 => array('widget_class' => 'SubPanelTopButtonQuickCreate'), 1 => array('widget_class' => 'SubPanelTopSelectButton', 'mode' => 'MultiSelect'))); $subpanel_list_fields_2 = array('case_number' => array('vname' => 'LBL_LIST_NUMBER', 'width' => '6%', 'default' => true)); $subpanel_def_2 = new aSubPanel("contacts_cases_2", $subpanel_2, $this->bean); $subpanel_2 = new SubPanel('Contacts', 'fab4', $subpanel_def_2->_instance_properties['subpanel_name'], $subpanel_def_2); $subpanel_2->saveSubPanelDefOverride($subpanel_def_2, 'list_fields', $subpanel_list_fields_2); $path_2 = 'custom/modules/' . $subpanel_def_2->_instance_properties['module'] . '/metadata/subpanels'; $filename_2 = $subpanel_def_1->parent_bean->object_name . "_subpanel_" . $subpanel_def_2->name; $extname_2 = '_override' . $subpanel_def_1->parent_bean->object_name . "_subpanel_" . $subpanel_def_2->name; // Check files genertaed by subpanel overriding : layout override and subpanel overire $this->filename_check[] = 'custom/Extension/modules/' . $subpanel_def_1->parent_bean->module_dir . "/Ext/Layoutdefs/{$extname_1}.php"; $this->assertTrue(file_exists(end($this->filename_check))); $this->filename_check[] = $path_1 . '/' . $filename_1 . '.php'; $this->assertTrue(file_exists(end($this->filename_check))); $this->filename_check[] = 'custom/Extension/modules/' . $subpanel_def_2->parent_bean->module_dir . "/Ext/Layoutdefs/{$extname_2}.php"; $this->assertTrue(file_exists(end($this->filename_check))); $this->filename_check[] = $path_2 . '/' . $filename_2 . '.php'; $this->assertTrue(file_exists(end($this->filename_check))); // laout_defs are reloaded in saveSubPanelDefOverride method, we lauched it global $layout_defs; // Check override_subpanel_name are differents $this->assertTrue(isset($layout_defs['Contacts']['subpanel_setup']['contacts_cases_1']['override_subpanel_name'])); $this->assertTrue(isset($layout_defs['Contacts']['subpanel_setup']['contacts_cases_2']['override_subpanel_name'])); $this->assertNotEquals($layout_defs['Contacts']['subpanel_setup']['contacts_cases_1']['override_subpanel_name'], $layout_defs['Contacts']['subpanel_setup']['contacts_cases_2']['override_subpanel_name']); }
function deploy($defs) { // first sort out the historical record... write_array_to_file(self::HISTORYVARIABLENAME, $this->_viewdefs, $this->historyPathname, 'w', ''); $this->_history->append($this->historyPathname); $this->_viewdefs = $defs; require_once 'include/SubPanel/SubPanel.php'; $subpanel = new SubPanel($this->_moduleName, 'fab4', $this->_subpanelName, $this->_aSubPanelObject); $subpanel->saveSubPanelDefOverride($this->_aSubPanelObject, 'list_fields', $defs); // now clear the cache so that the results are immediately visible MetaDataFiles::clearModuleClientCache($this->_aSubPanelObject->template_instance->module_name, 'view'); MetaDataFiles::clearModuleClientCache($this->_moduleName, 'layout'); include_once 'include/TemplateHandler/TemplateHandler.php'; TemplateHandler::clearCache($this->_moduleName); }
function handleSave() { $GLOBALS['log']->debug("in ParserModifySubPanel->handleSave()"); require_once 'include/SubPanel/SubPanel.php'; $subpanel = new SubPanel($this->moduleName, 'fab4', $this->subPanelName, $this->panel); $newFields = array(); foreach ($this->listViewDefs as $name => $field) { if (!isset($field['usage']) || $field['usage'] != 'query_only') { $existingFields[$name] = $field; } else { $newFields[$name] = $field; } } // Loop through all of the fields defined in the 'Default' group of the ListView data in $_REQUEST // Replace the field specification in the originalListViewDef with this new updated specification foreach ($_REQUEST['group_0'] as $field) { if (!empty($this->originalListViewDefs[$field])) { $newFields[$field] = $this->originalListViewDefs[$field]; } else { $vname = ''; if (isset($this->panel->template_instance->field_defs[$field])) { $vname = $this->panel->template_instance->field_defs[$field]['vname']; } if ($this->subPanelParentModule != null && (isset($this->subPanelParentModule->field_name_map[$field]) && ($this->subPanelParentModule->field_name_map[$field]['type'] == 'bool' || isset($this->subPanelParentModule->field_name_map[$field]['custom_type']) && $this->subPanelParentModule->field_name_map[$field]['custom_type'] == 'bool'))) { $newFields[$field] = array('name' => $field, 'vname' => $vname, 'widget_type' => 'checkbox'); } else { $newFields[$field] = array('name' => $field, 'vname' => $vname); } } // Now set the field width if specified in the $_REQUEST data if (isset($_REQUEST[strtolower($field) . 'width'])) { $width = substr($_REQUEST[strtolower($field) . 'width'], 6, 3); if (strpos($width, "%") != false) { $width = substr($width, 0, 2); } if ($width < 101 && $width > 0) { $newFields[$field]['width'] = $width; } } else { if (isset($this->listViewDefs[$field]['width'])) { $newFields[$field]['width'] = $this->listViewDefs[$field]['width']; } } } $subpanel->saveSubPanelDefOverride($this->panel, 'list_fields', $newFields); }