/** * Process changes to the site components. This is the method that the various * actions that modify the site should override. * * @param object SiteDirector $director * @return void * @access public * @since 4/14/06 */ function processChanges(SiteDirector $director) { $component = $director->getSiteComponentById(SiteDispatcher::getCurrentNodeId()); // Do not allow delete of the root menu. if (method_exists($component, 'isRootMenu')) { if ($component->isRootMenu()) { $this->returnToCallerPage(); exit; } } $this->findSafeReturnNode($director, $component); $organizer = $component->getParentComponent(); if ($organizer) { $organizer->detatchSubcomponent($component); } $rootSiteComponent = $director->getRootSiteComponent(SiteDispatcher::getCurrentNodeId()); // If we are deleting the site unhitch it from the slot if ($rootSiteComponent->getId() == SiteDispatcher::getCurrentNodeId()) { $slotMgr = SlotManager::instance(); $idMgr = Services::getService("Id"); try { $slot = $slotMgr->getSlotBySiteId($idMgr->getId(SiteDispatcher::getCurrentNodeId())); $slot->deleteSiteId(); } catch (Exception $e) { } } $director->deleteSiteComponent($component); }
/** * Process changes to the site components. This is the method that the various * actions that modify the site should override. * * @param object SiteDirector $director * @return void * @access public * @since 8/22/07 */ function processChanges(SiteDirector $director) { $harmoni = Harmoni::instance(); $harmoni->request->startNamespace("reorder"); // Get our component $block = $director->getSiteComponentById(RequestContext::value('node')); // The reordering is in the Flow Organizer, so get the parent of our node $organizer = $block->getParentComponent(); // Do the reordering $organizer->putSubcomponentInCell($block, RequestContext::value('position')); $harmoni->request->endNamespace(); }
/** * Process changes to the site components. This is the method that the various * actions that modify the site should override. * * @param object SiteDirector $director * @return void * @access public * @since 9/22/06 */ function processChanges(SiteDirector $director) { // Get the target organizer's Id & Cell $parentNavBlockId = RequestContext::value('parent'); $parentNavBlock = $director->getSiteComponentById($parentNavBlockId); $director->getRootSiteComponent($parentNavBlockId); $navOrganizer = $parentNavBlock->getOrganizer(); // Crete the submenu $subMenu = $director->createSiteComponent(new Type('segue', 'edu.middlebury', "MenuOrganizer"), $parentNavBlock); // If the parent menu is vertical, nest the sub-menu by default. $parentMenu = $parentNavBlock->getParentComponent(); if (preg_match('/^(Top-Bottom|Bottom-Top)\\//i', $parentMenu->getDirection())) { $parentNavBlock->makeNested($subMenu); } else { $numCells = $navOrganizer->getTotalNumberOfCells(); for ($i = 0; $i < $numCells; $i++) { if (!$navOrganizer->getSubComponentForCell($i)) { $firstEmpty = $i; break; } } if (!isset($firstEmpty)) { $navOrganizer->updateNumColumns($navOrganizer->getNumColumns() + 1); $firstEmpty = $navOrganizer->getLastIndexFilled() + 1; } $navOrganizer->putSubcomponentInCell($subMenu, $firstEmpty); for ($i = $firstEmpty; $i > 0; $i--) { $navOrganizer->swapCells($i, $i - 1); } } // See if there is an empty cell to use for the target. $numCells = $navOrganizer->getTotalNumberOfCells(); for ($i = 0; $i < $numCells; $i++) { if (!$navOrganizer->getSubComponentForCell($i)) { $subMenuTarget = $navOrganizer->getId() . "_cell:" . $i; break; } } // If not, expand the navOrganizer to make room for the new menu target in the second cell. if (!isset($subMenuTarget)) { $navOrganizer->updateNumColumns($navOrganizer->getNumColumns() + 1); for ($i = $navOrganizer->getTotalNumberOfCells() - 1; $i > 1; $i--) { $navOrganizer->swapCells($i, $i - 1); } $subMenuTarget = $navOrganizer->getId() . "_cell:1"; } // Set its target. $subMenu->updateTargetId($subMenuTarget); // set the direction if (RequestContext::value('direction')) { $subMenu->updateDirection(urldecode(RequestContext::value('direction'))); } }
/** * Process changes to the site components. This is the method that the various * actions that modify the site should override. * * @param object SiteDirector $director * @return void * @access public * @since 4/14/06 */ function processChanges(SiteDirector $director) { $component = $director->getSiteComponentById(SiteDispatcher::getCurrentNodeId()); $component->acceptVisitor(new ModifySettingsSiteVisitor()); /********************************************************* * Log the event *********************************************************/ if (Services::serviceRunning("Logging")) { $loggingManager = Services::getService("Logging"); $log = $loggingManager->getLogForWriting("Segue"); $formatType = new Type("logging", "edu.middlebury", "AgentsAndNodes", "A format in which the acting Agent[s] and the target nodes affected are specified."); $priorityType = new Type("logging", "edu.middlebury", "Event_Notice", "Normal events."); $item = new AgentNodeEntryItem("Component Modified", $component->getComponentClass() . " modified."); $item->addNodeId($component->getQualifierId()); $site = $component->getDirector()->getRootSiteComponent($component->getId()); if (!$component->getQualifierId()->isEqual($site->getQualifierId())) { $item->addNodeId($site->getQualifierId()); } $log->appendLogWithTypes($item, $formatType, $priorityType); } }
/** * Process changes to the site components. This is the method that the various * actions that modify the site should override. * * @param object SiteDirector $director * @return void * @access public * @since 4/14/06 */ function processChanges(SiteDirector $director) { // Get the target organizer's Id & Cell $targetId = RequestContext::value('destination'); preg_match("/^(.+)_cell:(.+)\$/", $targetId, $matches); $targetOrgId = $matches[1]; $targetCell = $matches[2]; $component = $director->getSiteComponentById(RequestContext::value('component')); // Store the existing Role of the user. $roleMgr = SegueRoleManager::instance(); $oldRole = $roleMgr->getUsersRole($component->getQualifierId(), true); // If we are moving a navOrganizer, update the target of the menu if (preg_match('/^.*NavOrganizerSiteComponent$/i', get_class($component))) { $menuOrganizer = $component->getMenuOrganizer(); $menuOrganizer->updateTargetId(RequestContext::value('destination')); return; } else { if (preg_match('/^.*MenuOrganizerSiteComponent$/i', get_class($component))) { $newOrganizer = $director->getSiteComponentById($targetOrgId); $currentComponentInCell = $newOrganizer->getSubcomponentForCell($targetCell); if (preg_match('/^.*NavBlockSiteComponent$/i', get_class($currentComponentInCell))) { $currentComponentInCell->makeNested($component); return; } } } // printpre("targetId: ".$targetId); // printpre("targetOrgId: ".$targetOrgId); // printpre("targetCell: ".$targetCell); // printpre("componentId: ".RequestContext::value('component')); $filledTargetIds = $director->getFilledTargetIds($targetOrgId); $newOrganizer = $director->getSiteComponentById($targetOrgId); $oldCellId = $newOrganizer->putSubcomponentInCell($component, $targetCell); // printpre("oldCellId: ".$oldCellId); // If the targetCell was a target for any menus, change their targets // to the cell just vacated by the component we swapped with if (in_array($targetId, $filledTargetIds)) { $menuIds = array_keys($filledTargetIds, $targetId); foreach ($menuIds as $menuId) { $menuOrganizer = $director->getSiteComponentById($menuId); // printpre(get_class($menuOrganizer)); $menuOrganizer->updateTargetId($oldCellId); } } // Update the new role if needed $newRole = $roleMgr->getUsersRole($component->getQualifierId(), true); if ($newRole->isLessThan($oldRole)) { $oldRole->applyToUser($component->getQualifierId(), true); } /********************************************************* * Log the event *********************************************************/ if (Services::serviceRunning("Logging")) { $loggingManager = Services::getService("Logging"); $log = $loggingManager->getLogForWriting("Segue"); $formatType = new Type("logging", "edu.middlebury", "AgentsAndNodes", "A format in which the acting Agent[s] and the target nodes affected are specified."); $priorityType = new Type("logging", "edu.middlebury", "Event_Notice", "Normal events."); $item = new AgentNodeEntryItem("Component Moved", $component->getComponentClass() . " moved."); $item->addNodeId($component->getQualifierId()); $site = $component->getDirector()->getRootSiteComponent($component->getId()); if (!$component->getQualifierId()->isEqual($site->getQualifierId())) { $item->addNodeId($site->getQualifierId()); } $log->appendLogWithTypes($item, $formatType, $priorityType); } // exit; }