eZContentOperationCollection::deleteObject PHP Method

deleteObject() public static method

Deletes a content object, or a list of content objects
public static deleteObject ( array $deleteIDArray, boolean $moveToTrash = false ) : array
$deleteIDArray array
$moveToTrash boolean
return array An array with operation status, always true
    public static function deleteObject($deleteIDArray, $moveToTrash = false)
    {
        $ini = eZINI::instance();
        $aNodes = eZContentObjectTreeNode::fetch($deleteIDArray);
        if (!is_array($aNodes)) {
            $aNodes = array($aNodes);
        }
        $delayedIndexingValue = $ini->variable('SearchSettings', 'DelayedIndexing');
        if ($delayedIndexingValue === 'enabled' || $delayedIndexingValue === 'classbased') {
            $pendingActionsToDelete = array();
            $classList = $ini->variable('SearchSettings', 'DelayedIndexingClassList');
            // Will be used below if DelayedIndexing is classbased
            $assignedNodesByObject = array();
            $nodesToDeleteByObject = array();
            foreach ($aNodes as $node) {
                $object = $node->object();
                $objectID = $object->attribute('id');
                $assignedNodes = $object->attribute('assigned_nodes');
                // Only delete pending action if this is the last object's node that is requested for deletion
                // But $deleteIDArray can also contain all the object's node (mainly if this method is called programmatically)
                // So if this is not the last node, then store its id in a temp array
                // This temp array will then be compared to the whole object's assigned nodes array
                if (count($assignedNodes) > 1) {
                    // $assignedNodesByObject will be used as a referent to check if we want to delete all lasting nodes
                    if (!isset($assignedNodesByObject[$objectID])) {
                        $assignedNodesByObject[$objectID] = array();
                        foreach ($assignedNodes as $assignedNode) {
                            $assignedNodesByObject[$objectID][] = $assignedNode->attribute('node_id');
                        }
                    }
                    // Store the node assignment we want to delete
                    // Then compare the array to the referent node assignment array
                    $nodesToDeleteByObject[$objectID][] = $node->attribute('node_id');
                    $diff = array_diff($assignedNodesByObject[$objectID], $nodesToDeleteByObject[$objectID]);
                    if (!empty($diff)) {
                        continue;
                    }
                }
                if ($delayedIndexingValue !== 'classbased' || is_array($classList) && in_array($object->attribute('class_identifier'), $classList)) {
                    $pendingActionsToDelete[] = $objectID;
                }
            }
            if (!empty($pendingActionsToDelete)) {
                $filterConds = array('param' => array($pendingActionsToDelete));
                eZPendingActions::removeByAction('index_object', $filterConds);
            }
        }
        // Add assigned nodes to the clear cache list
        // This allows to clear assigned nodes separately (e.g. in reverse proxies)
        // as once content is removed, there is no more assigned nodes, and http cache clear is not possible any more.
        // See https://jira.ez.no/browse/EZP-22447
        foreach ($aNodes as $node) {
            eZContentCacheManager::addAdditionalNodeIDPerObject($node->attribute('contentobject_id'), $node->attribute('node_id'));
        }
        eZContentObjectTreeNode::removeSubtrees($deleteIDArray, $moveToTrash);
        return array('status' => true);
    }

Usage Example

Esempio n. 1
0
if ($http->hasPostVariable('SupportsMoveToTrash')) {
    if ($http->hasPostVariable('MoveToTrash')) {
        $moveToTrash = $http->postVariable('MoveToTrash') ? true : false;
    } else {
        $moveToTrash = false;
    }
}
$hideRemoveConfirm = $contentINI->hasVariable('RemoveSettings', 'HideRemoveConfirmation') ? $contentINI->variable('RemoveSettings', 'HideRemoveConfirmation') == 'true' ? true : false : false;
if ($http->hasSessionVariable('HideRemoveConfirmation')) {
    $hideRemoveConfirm = $http->sessionVariable('HideRemoveConfirmation');
}
if ($http->hasPostVariable("ConfirmButton") or $hideRemoveConfirm) {
    if (eZOperationHandler::operationIsAvailable('content_delete')) {
        $operationResult = eZOperationHandler::execute('content', 'delete', array('node_id_list' => $deleteIDArray, 'move_to_trash' => $moveToTrash), null, true);
    } else {
        eZContentOperationCollection::deleteObject($deleteIDArray, $moveToTrash);
    }
    if ($http->hasSessionVariable('RedirectURIAfterRemove') && $http->sessionVariable('RedirectURIAfterRemove')) {
        $Module->redirectTo($http->sessionVariable('RedirectURIAfterRemove'));
        $http->removeSessionVariable('RedirectURIAfterRemove');
        return $http->removeSessionVariable('RedirectIfCancel');
    } else {
        return $Module->redirectToView('view', array($viewMode, $contentNodeID, $contentLanguage));
    }
}
$showCheck = $contentINI->hasVariable('RemoveSettings', 'ShowRemoveToTrashCheck') ? $contentINI->variable('RemoveSettings', 'ShowRemoveToTrashCheck') == 'false' ? false : true : true;
$info = eZContentObjectTreeNode::subtreeRemovalInformation($deleteIDArray);
$deleteResult = $info['delete_list'];
$moveToTrashAllowed = $info['move_to_trash'];
$totalChildCount = $info['total_child_count'];
$hasPendingObject = $info['has_pending_object'];
All Usage Examples Of eZContentOperationCollection::deleteObject