book.inc in Node import 6
Same filename and directory in other branches
Support file for the core book module.
File
supported/book.incView source
<?php
/**
* @file
* Support file for the core book module.
*/
/**
* Implementation of hook_node_import_fields().
*/
function book_node_import_fields($type) {
$fields = array();
if (($node_type = node_import_type_is_node($type)) !== FALSE && book_type_is_allowed($node_type) && (user_access('administer book outlines') || user_access('add content to books'))) {
$fields['book:book'] = array(
'title' => t('Book'),
'group' => t('Book outline'),
'module' => 'book',
'input_format' => 'book_reference',
);
$fields['book:parent'] = array(
'title' => t('Parent item'),
'group' => t('Book outline'),
'module' => 'book',
'input_format' => 'book_page_reference',
);
$fields['book:weight'] = array(
'title' => t('Weight'),
'group' => t('Book outline'),
'module' => 'book',
'input_format' => 'weight',
'delta' => 15,
);
}
return $fields;
}
/**
* Implementation of hook_node_import_fields_alter().
*/
function book_node_import_fields_alter(&$fields, $type) {
foreach ($fields as $fieldname => $fieldinfo) {
switch ($fieldinfo['input_format']) {
case 'book_reference':
$fields[$fieldname]['preprocess'][] = 'node_import_check_book_reference';
break;
case 'book_page_reference':
// Because the book page reference needs to know what book we are
// adding the page to, we can't preprocess here, but need to do
// it in book_node_import_values_alter().
break;
}
}
}
/**
* Check whether the value is a book (by NID or Title).
*
* Uses: nothing.
*
* @ingroup node_import_preprocess
*/
function node_import_check_book_reference(&$value, $field, $options, $preview) {
static $first_run = TRUE;
if ($first_run) {
foreach (node_import_extract_property(book_get_books()) as $nid => $title) {
node_import_set_object('book', $title, $nid);
node_import_set_object('book', $nid, $nid);
node_import_set_object('book:title', $nid, $title);
}
$first_run = FALSE;
}
if ($value == '<none>') {
// Not in a book.
$value = '';
return TRUE;
}
else {
if ($value == '<new>') {
// A new top-level book.
$value = 'new';
return TRUE;
}
else {
if (($bid = node_import_get_object('book', $value)) !== NULL) {
// An existing book.
$value = $bid;
return TRUE;
}
}
}
node_import_input_error(t('Input error: %value is not allowed for %name (not a book).', array(
'%value' => $value,
'%name' => $field['title'],
)));
return FALSE;
}
/**
* Implementation of hook_node_import_defaults().
*/
function book_node_import_defaults($type, $defaults, $fields, $map) {
$form = array();
if (($node_type = node_import_type_is_node($type)) !== FALSE && book_type_is_allowed($node_type) && (user_access('administer book outlines') || user_access('add content to books'))) {
$book_options = array(
'<new>' => '<' . t('create a new book') . '>',
'<none>' => '<' . t('none') . '>',
) + node_import_extract_property(book_get_books());
$form['book:book'] = array(
'#title' => t('Book'),
'#type' => 'select',
'#options' => $book_options,
'#default_value' => isset($defaults['book:book']) ? $defaults['book:book'] : ($type == 'node:book' ? '<new>' : '<none>'),
);
$form['book:weight'] = array(
'#title' => t('Weight'),
'#type' => 'weight',
'#delta' => 15,
'#default_value' => isset($defaults['book:weight']) ? $defaults['book:weight'] : '0',
);
}
return $form;
}
/**
* Implementation of hook_node_import_values_alter().
*/
function book_node_import_values_alter(&$values, $type, $defaults, $options, $fields, $preview) {
static $virtual_book = 0;
static $virtual_book_page = 0;
if (($node_type = node_import_type_is_node($type)) !== FALSE && book_type_is_allowed($node_type) && (user_access('administer book outlines') || user_access('add content to books'))) {
$book = $values['book:book'];
$parent = $values['book:parent'];
$weight = $values['book:weight'];
unset($values['book:book']);
unset($values['book:parent']);
unset($values['book:weight']);
// Not in a book.
if (drupal_strlen($book) == 0) {
$values['book'] = array(
'bid' => 0,
'weight' => $weight,
);
return;
}
// A new top-level book.
if ($book == 'new') {
if ($preview) {
drupal_set_message(t('A new book %title will be created.', array(
'%title' => $values['title'],
)));
$virtual_book--;
node_import_set_object('book', $values['title'], $virtual_book);
node_import_set_object('book:title', $virtual_book, $values['title']);
}
else {
// When a new book is created, the form will no longer validate
// as book_get_books() is cached.
global $node_import_can_continue;
$node_import_can_continue = FALSE;
}
$values['book'] = array(
'bid' => $book,
'weight' => $weight,
);
return;
}
// A new page in an existing book.
$plid = node_import_get_object('book:' . $book, $parent);
if ($plid === NULL && $book > 0 && drupal_strlen($parent) > 0) {
if ($plid = db_result(db_query("SELECT mlid FROM {menu_links} WHERE menu_name = '%s' AND module = 'book' AND (LOWER(link_title) = '%s' OR link_path = '%s')", book_menu_name($book), drupal_strtolower($parent), 'node/' . (is_numeric($parent) && intval($parent) > 0 ? $parent : '')))) {
node_import_set_object('book:' . $book, $parent, $plid);
}
}
if ($book > 0 && isset($plid) && $plid > 0) {
$values['book'] = array(
'plid' => $plid,
'weight' => $weight,
'bid' => $book,
);
return;
}
else {
if ($book > 0 && drupal_strlen($parent) == 0) {
$values['book'] = array(
'bid' => $book,
'weight' => $weight,
);
return;
}
}
if ($preview) {
$virtual_book_page--;
node_import_set_object('book:' . $book, $values['title'], $virtual_book_page);
node_import_set_object('book:' . $book . ':title', $virtual_book_page, $values['title']);
if ($book < 0) {
drupal_set_message(t('This will be a page in %title.', array(
'%title' => node_import_get_object('book:title', $book),
)));
}
else {
$values['book'] = array(
'bid' => $book,
'weight' => $weight,
);
}
if ($plid < 0) {
drupal_set_message(t('This will be a child page of %title.', array(
'%title' => node_import_get_object('book:' . $book . ':title', $plid),
)));
return;
}
else {
if (drupal_strlen($parent) == 0) {
drupal_set_message(t('This will be the top-level page in this book.'));
return;
}
}
}
node_import_input_error(t('Input error: %value is not allowed for %name (not a book page in %book).', array(
'%value' => $parent,
'%name' => t('Parent item'),
'%book' => node_import_get_object('book:title', $book),
)));
}
}
/**
* Implementation of hook_node_import_postprocess().
*/
function book_node_import_postprocess($type, $values, $options, $preview) {
if (!$preview && isset($values['nid']) && ($node_type = node_import_type_is_node($type)) !== FALSE && book_type_is_allowed($node_type) && (user_access('administer book outlines') || user_access('add content to books')) && isset($values['book']['plid']) && $values['book']['plid'] > 0 && ($mlid = db_result(db_query("SELECT mlid FROM {menu_links} WHERE module = 'book' AND link_path = '%s'", 'node/' . $values['nid'])))) {
$menu_link = array(
'menu_name' => book_menu_name($values['book']['bid']),
'weight' => $values['book']['weight'],
'mlid' => $mlid,
'plid' => $values['book']['plid'],
'router_path' => 'node/%',
'link_path' => 'node/' . $values['nid'],
'link_title' => $values['title'],
'module' => 'book',
);
menu_link_save($menu_link);
}
}
Functions
Name | Description |
---|---|
book_node_import_defaults | Implementation of hook_node_import_defaults(). |
book_node_import_fields | Implementation of hook_node_import_fields(). |
book_node_import_fields_alter | Implementation of hook_node_import_fields_alter(). |
book_node_import_postprocess | Implementation of hook_node_import_postprocess(). |
book_node_import_values_alter | Implementation of hook_node_import_values_alter(). |
node_import_check_book_reference | Check whether the value is a book (by NID or Title). |