/**
 * Special page allowing users with the appropriate permissions to view
 * and hide revisions. Log items can also be hidden.
 *
 * @file
 * @ingroup SpecialPage
 */
function wfSpecialRevisiondelete($par = null)
{
    global $wgOut, $wgRequest, $wgUser;
    # Handle our many different possible input types
    $target = $wgRequest->getText('target');
    $oldid = $wgRequest->getArray('oldid');
    $artimestamp = $wgRequest->getArray('artimestamp');
    $logid = $wgRequest->getArray('logid');
    $img = $wgRequest->getArray('oldimage');
    $fileid = $wgRequest->getArray('fileid');
    # For reviewing deleted files...
    $file = $wgRequest->getVal('file');
    # If this is a revision, then we need a target page
    $page = Title::newFromUrl($target);
    if (is_null($page)) {
        $wgOut->addWikiMsg('undelete-header');
        return;
    }
    # Only one target set at a time please!
    $i = (bool) $file + (bool) $oldid + (bool) $logid + (bool) $artimestamp + (bool) $fileid + (bool) $img;
    if ($i !== 1) {
        $wgOut->showErrorPage('revdelete-nooldid-title', 'revdelete-nooldid-text');
        return;
    }
    # Logs must have a type given
    if ($logid && !strpos($page->getDBKey(), '/')) {
        $wgOut->showErrorPage('revdelete-nooldid-title', 'revdelete-nooldid-text');
        return;
    }
    # Either submit or create our form
    $form = new RevisionDeleteForm($page, $oldid, $logid, $artimestamp, $fileid, $img, $file);
    if ($wgRequest->wasPosted()) {
        $form->submit($wgRequest);
    } else {
        if ($oldid || $artimestamp) {
            $form->showRevs();
        } else {
            if ($fileid || $img) {
                $form->showImages();
            } else {
                if ($logid) {
                    $form->showLogItems();
                }
            }
        }
    }
    # Show relevant lines from the deletion log. This will show even if said ID
    # does not exist...might be helpful
    $wgOut->addHTML("<h2>" . htmlspecialchars(LogPage::logName('delete')) . "</h2>\n");
    LogEventsList::showLogExtract($wgOut, 'delete', $page->getPrefixedText());
    if ($wgUser->isAllowed('suppressionlog')) {
        $wgOut->addHTML("<h2>" . htmlspecialchars(LogPage::logName('suppress')) . "</h2>\n");
        LogEventsList::showLogExtract($wgOut, 'suppress', $page->getPrefixedText());
    }
}
/**
 * Not quite ready for production use yet; need to fix up the restricted mode,
 * and provide for preservation across delete/undelete of the page.
 *
 * To try this out, set up extra permissions something like:
 * $wgGroupPermissions['sysop']['deleterevision'] = true;
 * $wgGroupPermissions['bureaucrat']['hiderevision'] = true;
 */
function wfSpecialRevisiondelete($par = null)
{
    global $wgOut, $wgRequest, $wgUser;
    $target = $wgRequest->getVal('target');
    $oldid = $wgRequest->getInt('oldid');
    $sk = $wgUser->getSkin();
    $page = Title::newFromUrl($target);
    if (is_null($page)) {
        $wgOut->showErrorPage('notargettitle', 'notargettext');
        return;
    }
    $form = new RevisionDeleteForm($wgRequest);
    if ($wgRequest->wasPosted()) {
        $form->submit($wgRequest);
    } else {
        $form->show($wgRequest);
    }
}