/** * Added for bug #40941 * Deletes the field from DetailView and editView of the appropriate module * after the relatioship is deleted in delete() function above. * @param $relationship The relationship that is getting deleted * return null */ private function removeFieldsFromDeployedLayout($relationship) { // many-to-many relationships don't have fields so if we have a many-to-many we can just skip this... if ($relationship->getType() == MB_MANYTOMANY) { return false; } $successful = true; $layoutAdditions = $relationship->buildFieldsToLayouts(); require_once 'modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php'; foreach ($layoutAdditions as $deployedModuleName => $fieldName) { foreach (array(MB_EDITVIEW, MB_DETAILVIEW) as $view) { $parser = new GridLayoutMetaDataParser($view, $deployedModuleName); $parser->removeField($fieldName); $parser->handleSave(false); } } return $successful; }
protected function saveFieldsToLayouts($basepath, $dummy, $relationshipName, $layoutAdditions) { require_once 'modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php'; // these modules either lack editviews/detailviews or use custom mechanisms for the editview/detailview. In either case, we don't want to attempt to add a relate field to them // would be better if GridLayoutMetaDataParser could handle this gracefully, so we don't have to maintain this list here $invalidModules = array('emails', 'kbdocuments'); foreach ($layoutAdditions as $deployedModuleName => $fieldName) { if (!in_array(strtolower($deployedModuleName), $invalidModules)) { foreach (array(MB_EDITVIEW, MB_DETAILVIEW) as $view) { $GLOBALS['log']->info(get_class($this) . ": adding {$fieldName} to {$view} layout for module {$deployedModuleName}"); $parser = new GridLayoutMetaDataParser($view, $deployedModuleName); $parser->addField(array('name' => $fieldName)); $parser->handleSave(false); } } } }
private function updateUndeployedLayout($relationship, $actionAdd = true) { // many-to-many relationships don't have fields so if we have a many-to-many we can just skip this... if ($relationship->getType() == MB_MANYTOMANY) { return false; } $successful = true; $layoutAdditions = $relationship->buildFieldsToLayouts(); require_once 'modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php'; foreach ($layoutAdditions as $deployedModuleName => $fieldName) { foreach (array(MB_EDITVIEW, MB_DETAILVIEW) as $view) { $parsedName = AbstractRelationships::parseDeployedModuleName($deployedModuleName); if (isset($parsedName['packageName'])) { $GLOBALS['log']->debug(get_class($this) . ": " . ($actionAdd ? "adding" : "removing") . " {$fieldName} on {$view} layout for undeployed module {$parsedName['moduleName']} in package {$parsedName['packageName']}"); $parser = new GridLayoutMetaDataParser($view, $parsedName['moduleName'], $parsedName['packageName']); if ($actionAdd ? $parser->addField(array('name' => $fieldName)) : $parser->removeField($fieldName)) { $parser->handleSave(false); } else { $GLOBALS['log']->debug(get_class($this) . ": couldn't " . ($actionAdd ? "add" : "remove") . " {$fieldName} on {$view} layout for undeployed module {$deployedModuleName}"); $successful = false; } } } } return $successful; }