Пример #1
0
 /**
  * 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);
 }
Пример #2
0
 /**
  * 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();
 }
Пример #3
0
 /**
  * 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')));
     }
 }
Пример #4
0
 /**
  * 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);
     }
 }
Пример #5
0
 /**
  * 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;
 }