コード例 #1
0
ファイル: Controller.php プロジェクト: rjsmelo/tiki
 function action_remove_item($input)
 {
     $trackerId = $input->trackerId->int();
     $definition = Tracker_Definition::get($trackerId);
     if (!$definition) {
         throw new Services_Exception_NotFound();
     }
     if (!($itemId = $input->itemId->int())) {
         throw new Services_Exception_MissingValue('itemId');
     }
     $trklib = TikiLib::lib('trk');
     $itemInfo = $trklib->get_tracker_item($itemId);
     if (!$itemInfo || $itemInfo['trackerId'] != $trackerId) {
         throw new Services_Exception_NotFound();
     }
     $itemObject = Tracker_Item::fromInfo($itemInfo);
     if (!$itemObject->canRemove()) {
         throw new Services_Exception_Denied();
     }
     $uncascaded = $trklib->findUncascadedDeletes($itemId, $trackerId);
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         $tx = TikiDb::get()->begin();
         $itemData = $itemObject->getData();
         foreach ($definition->getFields() as $field) {
             $handler = $definition->getFieldFactory()->getHandler($field, $itemData);
             if (method_exists($handler, 'handleDelete')) {
                 $handler->handleDelete();
             }
         }
         $trklib->replaceItemReferences($input->replacement->int() ?: '', $uncascaded['itemIds'], $uncascaded['fieldIds']);
         $this->utilities->removeItem($itemId);
         $tx->commit();
         TikiLib::events()->trigger('tiki.process.redirect');
         // wait for indexing to complete before loading of next request to ensure updated info shown
     }
     return array('title' => tr('Remove'), 'trackerId' => $trackerId, 'itemId' => $itemId, 'affectedCount' => count($uncascaded['itemIds']));
 }