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'])); }