196 lines
6.0 KiB
PHP
196 lines
6.0 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Callbacks for adding, editing, and deleting content and managing revisions.
|
|
*
|
|
* Also includes validation, submission and other helper functions.
|
|
*
|
|
* @see node_menu()
|
|
*/
|
|
|
|
use Drupal\Core\Entity\EntityInterface;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Drupal\node\NodeInterface;
|
|
|
|
/**
|
|
* Returns HTML for a list of available node types for node creation.
|
|
*
|
|
* @param $variables
|
|
* An associative array containing:
|
|
* - content: An array of content types.
|
|
*
|
|
* @see node_add_page()
|
|
*
|
|
* @ingroup themeable
|
|
*/
|
|
function theme_node_add_list($variables) {
|
|
$content = $variables['content'];
|
|
|
|
if ($content) {
|
|
$output = '<dl class="node-type-list">';
|
|
foreach ($content as $type) {
|
|
$output .= '<dt>' . l($type->name, 'node/add/' . $type->type) . '</dt>';
|
|
$output .= '<dd>' . filter_xss_admin($type->description) . '</dd>';
|
|
}
|
|
$output .= '</dl>';
|
|
}
|
|
else {
|
|
$output = '<p>' . t('You have not created any content types yet. Go to the <a href="@create-content">content type creation page</a> to add a new content type.', array('@create-content' => url('admin/structure/types/add'))) . '</p>';
|
|
}
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Generates a node preview.
|
|
*
|
|
* @param \Drupal\Core\Entity\EntityInterface $node
|
|
* The node to preview.
|
|
*
|
|
* @return
|
|
* An HTML-formatted string of a node preview.
|
|
*
|
|
* @see node_form_build_preview()
|
|
*/
|
|
function node_preview(NodeInterface $node, array &$form_state) {
|
|
if ($node->access('create') || $node->access('update')) {
|
|
|
|
$node->changed = REQUEST_TIME;
|
|
|
|
// Display a preview of the node.
|
|
if (!form_get_errors($form_state)) {
|
|
$node->in_preview = TRUE;
|
|
$node_preview = array(
|
|
'#theme' => 'node_preview',
|
|
'#node' => $node,
|
|
);
|
|
$output = drupal_render($node_preview);
|
|
unset($node->in_preview);
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns HTML for a node preview for display during node creation and editing.
|
|
*
|
|
* @param $variables
|
|
* An associative array containing:
|
|
* - node: The node entity which is being previewed.
|
|
*
|
|
* @see NodeFormController::preview()
|
|
* @see node_preview()
|
|
*
|
|
* @ingroup themeable
|
|
*/
|
|
function theme_node_preview($variables) {
|
|
$node = $variables['node'];
|
|
|
|
$output = '';
|
|
|
|
$elements = node_view($node, 'teaser');
|
|
$elements['#attached']['library'][] = array('node', 'drupal.node.preview');
|
|
$trimmed = drupal_render($elements);
|
|
$elements = node_view($node, 'full');
|
|
$full = drupal_render($elements);
|
|
|
|
// Do we need to preview trimmed version of post as well as full version?
|
|
if ($trimmed != $full) {
|
|
drupal_set_message(t('The trimmed version of your post shows what your post looks like when promoted to the main page or when exported for syndication.<span class="no-js"> You can insert the delimiter "<!--break-->" (without the quotes) to fine-tune where your post gets split.</span>'));
|
|
$output .= '<h3>' . t('Preview trimmed version') . '</h3>';
|
|
$output .= $trimmed;
|
|
$output .= '<h3>' . t('Preview full version') . '</h3>';
|
|
$output .= $full;
|
|
}
|
|
else {
|
|
$output .= $full;
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Page callback: Generates an overview table of older revisions of a node.
|
|
*
|
|
* @param object $node
|
|
* A node object.
|
|
*
|
|
* @return array
|
|
* An array as expected by drupal_render().
|
|
*
|
|
* @see node_menu()
|
|
*
|
|
* @deprecated Use \Drupal\node\Controller\NodeController::revisionOverview()
|
|
*/
|
|
function node_revision_overview($node) {
|
|
$build['#title'] = t('Revisions for %title', array('%title' => $node->label()));
|
|
|
|
$header = array(t('Revision'), t('Operations'));
|
|
|
|
$revisions = node_revision_list($node);
|
|
|
|
$rows = array();
|
|
$type = $node->getType();
|
|
|
|
$revert_permission = FALSE;
|
|
if ((user_access("revert $type revisions") || user_access('revert all revisions') || user_access('administer nodes')) && $node->access('update')) {
|
|
$revert_permission = TRUE;
|
|
}
|
|
$delete_permission = FALSE;
|
|
if ((user_access("delete $type revisions") || user_access('delete all revisions') || user_access('administer nodes')) && $node->access('delete')) {
|
|
$delete_permission = TRUE;
|
|
}
|
|
foreach ($revisions as $revision) {
|
|
$row = array();
|
|
if ($revision->current_vid > 0) {
|
|
$username = array(
|
|
'#theme' => 'username',
|
|
'#account' => user_load($revision->uid),
|
|
);
|
|
$row[] = array('data' => t('!date by !username', array('!date' => l(format_date($revision->revision_timestamp, 'short'), 'node/' . $node->id()), '!username' => drupal_render($username)))
|
|
. (($revision->log != '') ? '<p class="revision-log">' . filter_xss($revision->log) . '</p>' : ''),
|
|
'class' => array('revision-current'));
|
|
$row[] = array('data' => drupal_placeholder(t('current revision')), 'class' => array('revision-current'));
|
|
}
|
|
else {
|
|
$username = array(
|
|
'#theme' => 'username',
|
|
'#account' => user_load($revision->uid),
|
|
);
|
|
$row[] = t('!date by !username', array('!date' => l(format_date($revision->revision_timestamp, 'short'), "node/" . $node->id() . "/revisions/" . $revision->vid . "/view"), '!username' => drupal_render($username)))
|
|
. (($revision->log != '') ? '<p class="revision-log">' . filter_xss($revision->log) . '</p>' : '');
|
|
if ($revert_permission) {
|
|
$links['revert'] = array(
|
|
'title' => t('Revert'),
|
|
'href' => "node/" . $node->id() . "/revisions/" . $revision->vid . "/revert",
|
|
);
|
|
}
|
|
if ($delete_permission) {
|
|
$links['delete'] = array(
|
|
'title' => t('Delete'),
|
|
'href' => "node/" . $node->id() . "/revisions/" . $revision->vid . "/delete",
|
|
);
|
|
}
|
|
$row[] = array(
|
|
'data' => array(
|
|
'#type' => 'operations',
|
|
'#links' => $links,
|
|
),
|
|
);
|
|
}
|
|
$rows[] = $row;
|
|
}
|
|
|
|
$build['node_revisions_table'] = array(
|
|
'#theme' => 'table',
|
|
'#rows' => $rows,
|
|
'#header' => $header,
|
|
'#attached' => array (
|
|
'css' => array(drupal_get_path('module', 'node') . '/css/node.admin.css'),
|
|
),
|
|
);
|
|
|
|
return $build;
|
|
}
|