summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/blog/blog.module8
-rw-r--r--modules/book/book.module30
-rw-r--r--modules/comment/comment.module14
-rw-r--r--modules/field/field.api.php6
-rw-r--r--modules/field/field.attach.inc12
-rw-r--r--modules/field/field.default.inc35
-rw-r--r--modules/field/field.module16
-rw-r--r--modules/field/modules/text/text.module13
-rw-r--r--modules/field/theme/field.tpl.php2
-rw-r--r--modules/forum/forum.module12
-rw-r--r--modules/node/node.api.php29
-rw-r--r--modules/node/node.module133
-rw-r--r--modules/node/node.pages.inc8
-rw-r--r--modules/node/node.test7
-rw-r--r--modules/node/node.tpl.php3
-rw-r--r--modules/node/tests/node_test.module6
-rw-r--r--modules/poll/poll.module6
-rw-r--r--modules/search/search.api.php6
-rw-r--r--modules/statistics/statistics.module4
-rw-r--r--modules/system/system.api.php7
-rw-r--r--modules/taxonomy/taxonomy.module8
-rw-r--r--modules/translation/translation.module2
-rw-r--r--modules/trigger/trigger.module4
-rw-r--r--modules/upload/upload.module12
-rw-r--r--modules/upload/upload.test2
-rw-r--r--modules/user/user.module1
26 files changed, 171 insertions, 215 deletions
diff --git a/modules/blog/blog.module b/modules/blog/blog.module
index 900e0930a..f99657f83 100644
--- a/modules/blog/blog.module
+++ b/modules/blog/blog.module
@@ -79,7 +79,7 @@ function blog_form($node, $form_state) {
/**
* Implement hook_view().
*/
-function blog_view($node, $teaser) {
+function blog_view($node, $build_mode) {
if ((bool)menu_get_object()) {
// Breadcrumb navigation.
drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('Blogs'), 'blog'), l(t("!name's blog", array('!name' => $node->name)), 'blog/' . $node->uid)));
@@ -88,10 +88,10 @@ function blog_view($node, $teaser) {
}
/**
- * Implement hook_node_view.
+ * Implement hook_node_view().
*/
-function blog_node_view($node, $teaser = FALSE) {
- if ($node->build_mode != NODE_BUILD_RSS) {
+function blog_node_view($node, $build_mode = 'full') {
+ if ($build_mode != 'rss') {
if ($node->type == 'blog' && arg(0) != 'blog' || arg(1) != $node->uid) {
$links['blog_usernames_blog'] = array(
'title' => t("!username's blog", array('!username' => $node->name)),
diff --git a/modules/book/book.module b/modules/book/book.module
index c17e45199..8eba4dee8 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -63,11 +63,11 @@ function book_perm() {
/**
* Inject links into $node as needed.
*/
-function book_node_view_link($node, $teaser) {
+function book_node_view_link($node, $build_mode) {
$links = array();
if (isset($node->book['depth'])) {
- if (!$teaser) {
+ if ($build_mode == 'full') {
$child_type = variable_get('book_child_type', 'book');
if ((user_access('add content to books') || user_access('administer book outlines')) && node_access('create', $child_type) && $node->status == 1 && $node->book['depth'] < MENU_MAX_DEPTH) {
$links['book_add_child'] = array(
@@ -185,6 +185,19 @@ function book_init() {
}
/**
+ * Implement hook_field_build_modes().
+ */
+function book_field_build_modes($obj_type) {
+ $modes = array();
+ if ($obj_type == 'node') {
+ $modes = array(
+ 'print' => t('Print'),
+ );
+ }
+ return $modes;
+}
+
+/**
* Implement hook_block_list().
*/
function book_block_list() {
@@ -705,9 +718,9 @@ function book_node_load($nodes, $types) {
/**
* Implement hook_node_view().
*/
-function book_node_view($node, $teaser) {
- if (!$teaser) {
- if (!empty($node->book['bid']) && $node->build_mode == NODE_BUILD_NORMAL) {
+function book_node_view($node, $build_mode) {
+ if ($build_mode == 'full') {
+ if (!empty($node->book['bid']) && empty($node->in_preview)) {
$node->content['book_navigation'] = array(
'#markup' => theme('book_navigation', $node->book),
'#weight' => 100,
@@ -715,8 +728,8 @@ function book_node_view($node, $teaser) {
}
}
- if ($node->build_mode != NODE_BUILD_RSS) {
- book_node_view_link($node, $teaser);
+ if ($build_mode != 'rss') {
+ book_node_view_link($node, $build_mode);
}
}
@@ -1035,8 +1048,7 @@ function book_export_traverse($tree, $visit_func) {
* The HTML generated for the given node.
*/
function book_node_export($node, $children = '') {
- $node->build_mode = NODE_BUILD_PRINT;
- $node = node_build_content($node, FALSE, FALSE);
+ $node = node_build_content($node, 'print');
$node->rendered = drupal_render($node->content);
return theme('book_node_export_html', $node, $children);
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 3e64620c2..c1fd811c5 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -457,13 +457,13 @@ function theme_comment_block() {
}
/**
- * An implementation of hook_node_view().
+ * Implement hook_node_view().
*/
-function comment_node_view($node, $teaser) {
+function comment_node_view($node, $build_mode) {
$links = array();
if ($node->comment) {
- if ($node->build_mode == NODE_BUILD_RSS) {
+ if ($build_mode == 'rss') {
if ($node->comment != COMMENT_NODE_HIDDEN) {
// Add a comments RSS element which is a URL to the comments of this node.
$node->rss_elements[] = array(
@@ -472,7 +472,7 @@ function comment_node_view($node, $teaser) {
);
}
}
- else if ($teaser) {
+ elseif ($build_mode == 'teaser') {
// Main page: display the number of comments that have been posted.
if (user_access('access comments')) {
if (!empty($node->comment_count)) {
@@ -548,7 +548,7 @@ function comment_node_view($node, $teaser) {
);
// Append the list of comments to $node->content for node detail pages.
- if ($node->comment && (bool)menu_get_object() && $node->build_mode != NODE_BUILD_PREVIEW) {
+ if ($node->comment && (bool)menu_get_object() && empty($node->in_preview)) {
$node->content['comments'] = array(
'#markup' => comment_render($node),
'#sorted' => TRUE,
@@ -1016,7 +1016,7 @@ function comment_save($edit) {
/**
* Implement hook_link().
*/
-function comment_link($type, $object, $teaser) {
+function comment_link($type, $object, $build_mode) {
if ($type == 'comment') {
$links = comment_links($object, FALSE);
return $links;
@@ -2032,7 +2032,7 @@ function template_preprocess_comment_folded(&$variables) {
$variables['classes_array'][] = 'comment-new';
}
}
-
+
}
/**
diff --git a/modules/field/field.api.php b/modules/field/field.api.php
index 24f5e5839..4accf941f 100644
--- a/modules/field/field.api.php
+++ b/modules/field/field.api.php
@@ -657,10 +657,10 @@ function hook_field_attach_delete_revision($obj_type, $object) {
* The type of $object; e.g. 'node' or 'user'.
* @param $object
* The object with fields to render.
- * @param $teaser
- * Whether to display the teaser only, as on the main page.
+ * @param $build_mode
+ * Build mode, e.g. 'full', 'teaser'...
*/
-function hook_field_attach_view_alter($output, $obj_type, $object, $teaser) {
+function hook_field_attach_view_alter($output, $obj_type, $object, $build_mode) {
}
/**
diff --git a/modules/field/field.attach.inc b/modules/field/field.attach.inc
index db5c59935..523855793 100644
--- a/modules/field/field.attach.inc
+++ b/modules/field/field.attach.inc
@@ -149,7 +149,7 @@ define('FIELD_STORAGE_INSERT', 'insert');
* The fully formed $obj_type object.
* @param $a
* - The $form in the 'form' operation.
- * - The value of $teaser in the 'view' operation.
+ * - The value of $build_mode in the 'view' operation.
* - Otherwise NULL.
* @param $b
* - The $form_state in the 'submit' operation.
@@ -883,19 +883,19 @@ function field_attach_query_revisions($field_name, $conditions, $result_format =
* The type of $object; e.g. 'node' or 'user'.
* @param $object
* The object with fields to render.
- * @param $teaser
- * Whether to display the teaser only, as on the main page.
+ * @param $build_mode
+ * Build mode, e.g. 'full', 'teaser'...
* @return
* A structured content array tree for drupal_render().
*/
-function field_attach_view($obj_type, $object, $teaser = FALSE) {
+function field_attach_view($obj_type, $object, $build_mode = 'full') {
// Let field modules sanitize their data for output.
_field_invoke('sanitize', $obj_type, $object);
- $output = _field_invoke_default('view', $obj_type, $object, $teaser);
+ $output = _field_invoke_default('view', $obj_type, $object, $build_mode);
// Let other modules make changes after rendering the view.
- drupal_alter('field_attach_view', $output, $obj_type, $object, $teaser);
+ drupal_alter('field_attach_view', $output, $obj_type, $object, $build_mode);
return $output;
diff --git a/modules/field/field.default.inc b/modules/field/field.default.inc
index f60693676..f0bcc4dc3 100644
--- a/modules/field/field.default.inc
+++ b/modules/field/field.default.inc
@@ -76,8 +76,8 @@ function field_default_insert($obj_type, $object, $field, $instance, &$items) {
* '#field_name' => 'field_name',
* '#object' => $object,
* '#object_type' => $obj_type,
- * // Value of the $teaser param of hook_node('view').
- * '#teaser' => $teaser,
+ * // Value of the $build_mode param of hook_node('view').
+ * '#build_mode' => $build_mode,
* 'items' =>
* 0 => array(
* '#item' => $items[0],
@@ -112,27 +112,14 @@ function field_default_insert($obj_type, $object, $field, $instance, &$items) {
* ),
* );
*/
-function field_default_view($obj_type, $object, $field, $instance, $items, $teaser) {
+function field_default_view($obj_type, $object, $field, $instance, $items, $build_mode) {
list($id, $vid, $bundle) = field_attach_extract_ids($obj_type, $object);
$addition = array();
- // Entities without build modes should provide a 'full' context.
- // NODE_BUILD_NORMAL is 0, and ('whatever' == 0) is TRUE, so we need a ===.
- if (!isset($object->build_mode)) {
- $context = 'full';
- }
- elseif ($object->build_mode === NODE_BUILD_NORMAL
- || $object->build_mode == NODE_BUILD_PREVIEW) {
- $context = $teaser ? 'teaser' : 'full';
- }
- else {
- $context = $object->build_mode;
- }
-
// If we don't have specific settings for the current build_mode, we use the
// (required) 'full' build_mode.
- $display = isset($instance['display'][$context]) ? $instance['display'][$context] : $instance['display']['full'];
+ $display = isset($instance['display'][$build_mode]) ? $instance['display'][$build_mode] : $instance['display']['full'];
// Ensure we have a valid formatter and formatter settings.
$display = _field_get_formatter($display, $field);
@@ -141,7 +128,7 @@ function field_default_view($obj_type, $object, $field, $instance, $items, $teas
$single = (field_behaviors_formatter('multiple values', $display) == FIELD_BEHAVIOR_DEFAULT);
$label_display = $display['label'];
- if (isset($object->build_mode) && $object->build_mode == NODE_BUILD_SEARCH_INDEX) {
+ if ($build_mode == 'search_index') {
$label_display = 'hidden';
}
@@ -157,7 +144,7 @@ function field_default_view($obj_type, $object, $field, $instance, $items, $teas
'#title' => check_plain(t($instance['label'])),
'#access' => field_access('view', $field),
'#label_display' => $label_display,
- '#teaser' => $teaser,
+ '#build_mode' => $build_mode,
'#single' => $single,
'items' => array(),
);
@@ -196,7 +183,7 @@ function field_default_view($obj_type, $object, $field, $instance, $items, $teas
'field' => $element,
'#weight' => $instance['weight'],
'#post_render' => array('field_wrapper_post_render'),
- '#context' => $context,
+ '#build_mode' => $build_mode,
);
$addition = array($field['field_name'] => $wrapper);
@@ -209,7 +196,7 @@ function field_default_view($obj_type, $object, $field, $instance, $items, $teas
*/
function field_wrapper_post_render($content, $element) {
$instance = field_info_instance($element['#field_name'], $element['#bundle']);
- if (theme('field_exclude', $content, $instance, $element['#context'])) {
+ if (theme('field_exclude', $content, $instance, $element['#build_mode'])) {
return '';
}
return $content;
@@ -231,10 +218,10 @@ function field_wrapper_post_render($content, $element) {
* Whether or not the field's content is to be added in this context.
* Uses the 'exclude' value from the field's display settings.
*/
-function theme_field_exclude($content, $object, $context) {
+function theme_field_exclude($content, $object, $build_mode) {
if (empty($object['display'])
- || empty($object['display'][$context])
- || empty($object['display'][$context]['exclude'])) {
+ || empty($object['display'][$build_mode])
+ || empty($object['display'][$build_mode]['exclude'])) {
return FALSE;
}
else {
diff --git a/modules/field/field.module b/modules/field/field.module
index f518169f9..ef1fb1e5d 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -482,8 +482,7 @@ function field_format($obj_type, $object, $field, $item, $formatter_name = NULL,
* $FIELD_NAME_rendered variables instead.
*
* By default, the field is displayed using the settings defined for the
- * 'full' or 'teaser' contexts (depending on the value of the $teaser param).
- * Set $node->build_mode to a different value to use a different context.
+ * 'full' or 'teaser' contexts (depending on the value of the $build_mode param).
*
* Different settings can be specified by adjusting $field['display'].
*
@@ -492,19 +491,16 @@ function field_format($obj_type, $object, $field, $item, $formatter_name = NULL,
* @param $object
* The object containing the field to display. Must at least contain the id key,
* revision key (if applicable), bundle key, and the field data.
- * @param $teaser
- * Similar to hook_node('view')
+ * @param $build_mode
+ * Build mode, e.g. 'full', 'teaser'...
* @return
* The themed output for the field.
*/
-function field_view_field($obj_type, $object, $field, $instance, $teaser = FALSE) {
+function field_view_field($obj_type, $object, $field, $instance, $build_mode = 'full') {
$output = '';
if (isset($object->$field['field_name'])) {
$items = $object->$field['field_name'];
- // Use 'full'/'teaser' if not specified otherwise.
- $object->build_mode = isset($object->build_mode) ? $object->build_mode : NODE_BUILD_NORMAL;
-
// One-field equivalent to _field_invoke('sanitize').
$function = $field['module'] . '_field_sanitize';
if (drupal_function_exists($function)) {
@@ -512,7 +508,7 @@ function field_view_field($obj_type, $object, $field, $instance, $teaser = FALSE
$object->$field['field_name'] = $items;
}
- $view = field_default_view($obj_type, $object, $field, $instance, $items, $teaser);
+ $view = field_default_view($obj_type, $object, $field, $instance, $items, $build_mode);
// TODO : what about hook_field_attach_view ?
// field_default_view() adds a wrapper to handle variables and 'excluded'
@@ -594,7 +590,7 @@ function template_preprocess_field(&$variables) {
$variables['items'][0]['view'] = drupal_render_children($element, array('items'));
}
- $variables['teaser'] = $element['#teaser'];
+ $variables['build_mode'] = $element['#build_mode'];
$variables['page'] = (bool)menu_get_object();
$field_empty = TRUE;
diff --git a/modules/field/modules/text/text.module b/modules/field/modules/text/text.module
index 00ba52017..fe6e1da80 100644
--- a/modules/field/modules/text/text.module
+++ b/modules/field/modules/text/text.module
@@ -176,12 +176,10 @@ function text_field_load($obj_type, $objects, $field, $instances, &$items) {
// handled by text_field_sanitize().
$format = $item['format'];
if (filter_format_allowcache($format)) {
- // TODO D7 : this code is really node-related.
- $check = is_null($object) || (isset($object->build_mode) && $object->build_mode == NODE_BUILD_PREVIEW);
$lang = isset($object->language) ? $object->language : $language->language;
- $items[$id][$delta]['safe'] = isset($item['value']) ? check_markup($item['value'], $format, $lang, $check, FALSE) : '';
+ $items[$id][$delta]['safe'] = isset($item['value']) ? check_markup($item['value'], $format, $lang, FALSE, FALSE) : '';
if ($field['type'] == 'text_with_summary') {
- $items[$id][$delta]['safe_summary'] = isset($item['summary']) ? check_markup($item['summary'], $format, $lang, $check, FALSE) : '';
+ $items[$id][$delta]['safe_summary'] = isset($item['summary']) ? check_markup($item['summary'], $format, $lang, FALSE, FALSE) : '';
}
}
}
@@ -209,12 +207,10 @@ function text_field_sanitize($obj_type, $object, $field, $instance, &$items) {
if (!isset($items[$delta]['safe'])) {
if (!empty($instance['settings']['text_processing'])) {
$format = $item['format'];
- // TODO D7 : this code is really node-related.
- $check = is_null($object) || (isset($object->build_mode) && $object->build_mode == NODE_BUILD_PREVIEW);
$lang = isset($object->language) ? $object->language : $language->language;
- $items[$delta]['safe'] = isset($item['value']) ? check_markup($item['value'], $format, $lang, $check) : '';
+ $items[$delta]['safe'] = isset($item['value']) ? check_markup($item['value'], $format, $lang, FALSE) : '';
if ($field['type'] == 'text_with_summary') {
- $items[$delta]['safe_summary'] = isset($item['summary']) ? check_markup($item['summary'], $format, $lang, $check) : '';
+ $items[$delta]['safe_summary'] = isset($item['summary']) ? check_markup($item['summary'], $format, $lang, FALSE) : '';
}
}
else {
@@ -770,3 +766,4 @@ function theme_text_textarea_with_summary($element) {
return $element['#children'];
}
}
+
diff --git a/modules/field/theme/field.tpl.php b/modules/field/theme/field.tpl.php
index 037d4380c..efa629da1 100644
--- a/modules/field/theme/field.tpl.php
+++ b/modules/field/theme/field.tpl.php
@@ -9,7 +9,7 @@
* - $object: The object to which the field is attached.
* - $field: The field array.
* - $items: An array of values for each item in the field array.
- * - $teaser: Whether this is displayed as a teaser.
+ * - $build_mode: Build mode, e.g. 'full', 'teaser'...
* - $page: Whether this is displayed as a page.
* - $field_name: The field name.
* - $field_type: The field type.
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index a65762d0c..ef5c9517a 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -187,7 +187,7 @@ function _forum_node_check_node_type($node, $vocabulary) {
/**
* Implement hook_node_view().
*/
-function forum_node_view($node, $teaser) {
+function forum_node_view($node, $build_mode) {
$vid = variable_get('forum_nav_vocabulary', 0);
$vocabulary = taxonomy_vocabulary_load($vid);
if (_forum_node_check_node_type($node, $vocabulary)) {
@@ -212,7 +212,7 @@ function forum_node_view($node, $teaser) {
}
drupal_set_breadcrumb($breadcrumb);
- if (!$teaser) {
+ if ($build_mode == 'full') {
$node->content['forum_navigation'] = array(
'#markup' => theme('forum_topic_navigation', $node),
'#weight' => 100,
@@ -642,7 +642,7 @@ function forum_get_forums($tid = 0) {
$query->join('node_comment_statistics', 'ncs', 'n.nid = ncs.nid');
$query->join('users', 'u2', 'ncs.last_comment_uid = u2.uid');
$query->addExpression('IF (ncs.last_comment_uid != 0, u2.name, ncs.last_comment_name)', 'last_comment_name');
-
+
$topic = $query
->fields('ncs', array('last_comment_timestamp', 'last_comment_uid'))
->condition('n.status', 1)
@@ -651,7 +651,7 @@ function forum_get_forums($tid = 0) {
->addTag('node_access')
->execute()
->fetchObject();
-
+
$last_post = new stdClass();
if (!empty($topic->last_comment_timestamp)) {
$last_post->timestamp = $topic->last_comment_timestamp;
@@ -724,14 +724,14 @@ function forum_get_topics($tid, $sortby, $forum_per_page) {
->orderByHeader($forum_topic_list_header)
->orderBy('n.created', 'DESC')
->limit($forum_per_page);
-
+
$count_query = db_select('node', 'n');
$count_query->join('taxonomy_term_node', 'r', 'n.vid = r.vid AND r.tid = :tid', array(':tid' => $tid));
$count_query->addExpression('COUNT(*)');
$count_query
->condition('n.status', 1)
->addTag('node_access');
-
+
$query->setCountQuery($count_query);
$result = $query->execute();
$topics = array();
diff --git a/modules/node/node.api.php b/modules/node/node.api.php
index 66630b7d0..37a83dc00 100644
--- a/modules/node/node.api.php
+++ b/modules/node/node.api.php
@@ -474,10 +474,10 @@ function hook_node_validate($node, $form) {
* will be called after hook_view(). The structure of $node->content is a
* renderable array as expected by drupal_render().
*
- * When $node->build_mode is NODE_BUILD_RSS modules can also add extra RSS
- * elements and namespaces to $node->rss_elements and $node->rss_namespaces
- * respectively for the RSS item generated for this node. For details on how
- * this is used @see node_feed()
+ * When $build_mode is 'rss', modules can also add extra RSS elements and
+ * namespaces to $node->rss_elements and $node->rss_namespaces respectively for
+ * the RSS item generated for this node.
+ * For details on how this is used @see node_feed()
*
* @see taxonomy_node_view()
* @see upload_node_view()
@@ -485,10 +485,10 @@ function hook_node_validate($node, $form) {
*
* @param $node
* The node the action is being performed on.
- * @param $teaser
- * The $teaser parameter from node_build().
+ * @param $build_mode
+ * The $build_mode parameter from node_build().
*/
-function hook_node_view($node, $teaser) {
+function hook_node_view($node, $build_mode) {
$node->content['my_additional_field'] = array(
'#value' => $additional_field,
'#weight' => 10,
@@ -510,10 +510,10 @@ function hook_node_view($node, $teaser) {
*
* @param $node
* The node the action is being performed on.
- * @param $teaser
- * The $teaser parameter from node_build().
+ * @param $build_mode
+ * The $build_mode parameter from node_build().
*/
-function hook_node_build_alter($node, $teaser) {
+function hook_node_build_alter($node, $build_mode) {
// Check for the existence of a field added by another module.
if (isset($node->content['an_additional_field'])) {
// Change its weight.
@@ -855,7 +855,7 @@ function hook_update($node) {
*
* Changes made to the $node object within a hook_validate() function will
* have no effect. The preferred method to change a node's content is to use
- * hook_node_presave() instead. If it is really necessary to change
+ * hook_node_presave() instead. If it is really necessary to change
* the node at the validate stage, you can use function form_set_value().
*
* For a detailed usage example, see node_example.module.
@@ -877,9 +877,8 @@ function hook_validate($node, &$form) {
*
* @param $node
* The node to be displayed.
- * @param $teaser
- * Whether we are to generate a "teaser" or summary of the node, rather than
- * display the whole thing.
+ * @param $build_mode
+ * Build mode, e.g. 'full', 'teaser'...
* @return
* $node. The passed $node parameter should be modified as necessary and
* returned so it can be properly presented. Nodes are prepared for display
@@ -894,7 +893,7 @@ function hook_validate($node, &$form) {
*
* For a detailed usage example, see node_example.module.
*/
-function hook_view($node, $teaser = FALSE) {
+function hook_view($node, $build_mode = 'full') {
if ((bool)menu_get_object()) {
$breadcrumb = array();
$breadcrumb[] = array('path' => 'example', 'title' => t('example'));
diff --git a/modules/node/node.module b/modules/node/node.module
index ad7bedbe5..b416dd405 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -16,36 +16,6 @@
define('NODE_NEW_LIMIT', REQUEST_TIME - 30 * 24 * 60 * 60);
/**
- * Node is being built before being viewed normally.
- */
-define('NODE_BUILD_NORMAL', 0);
-
-/**
- * Node is being built before being previewed.
- */
-define('NODE_BUILD_PREVIEW', 1);
-
-/**
- * Node is being built before being indexed by search module.
- */
-define('NODE_BUILD_SEARCH_INDEX', 2);
-
-/**
- * Node is being built before being displayed as a search result.
- */
-define('NODE_BUILD_SEARCH_RESULT', 3);
-
-/**
- * Node is being built before being displayed as part of an RSS feed.
- */
-define('NODE_BUILD_RSS', 4);
-
-/**
- * Node is being built before being printed.
- */
-define('NODE_BUILD_PRINT', 5);
-
-/**
* Implement hook_help().
*/
function node_help($path, $arg) {
@@ -181,13 +151,14 @@ function node_field_build_modes($obj_type) {
$modes = array(
'teaser' => t('Teaser'),
'full' => t('Full node'),
- NODE_BUILD_RSS => t('RSS'),
- NODE_BUILD_PRINT => t('Print'),
+ 'rss' => t('RSS'),
);
+ // Search integration is provided by node.module, so search-related
+ // build-modes for nodes are defined here and not in search.module.
if (module_exists('search')) {
$modes += array(
- NODE_BUILD_SEARCH_INDEX => t('Search Index'),
- NODE_BUILD_SEARCH_RESULT => t('Search Result'),
+ 'search_index' => t('Search Index'),
+ 'search_result' => t('Search Result'),
);
}
}
@@ -1107,22 +1078,22 @@ function node_delete_multiple($nids) {
*
* @param $node
* A node array or node object.
- * @param $teaser
- * Whether to display the teaser only or the full form.
+ * @param $build_mode
+ * Build mode, e.g. 'full', 'teaser'...
*
* @return
* An array as expected by drupal_render().
*/
-function node_build($node, $teaser = FALSE) {
+function node_build($node, $build_mode = 'full') {
$node = (object)$node;
- $node = node_build_content($node, $teaser);
+ $node = node_build_content($node, $build_mode);
$build = $node->content;
$build += array(
'#theme' => 'node',
'#node' => $node,
- '#teaser' => $teaser,
+ '#build_mode' => $build_mode,
);
return $build;
}
@@ -1130,52 +1101,49 @@ function node_build($node, $teaser = FALSE) {
/**
* Builds a structured array representing the node's content.
*
- * The content built for the node will vary depending on the $node->build_mode
- * attribute. The node module defines a set of common build mode constants:
- * - NODE_BUILD_NORMAL: Node is being built to be viewed normally.
- * - NODE_BUILD_PREVIEW: Node is being built to be previewed.
- * - NODE_BUILD_SEARCH_INDEX: Node is being built to be indexed for search.
- * - NODE_BUILD_SEARCH_RESULT: Node is being built as a search result.
- * - NODE_BUILD_RSS: Node is being built to be displayed in an RSS feed.
- *
- * The default mode is NODE_BUILD_NORMAL, which will be used if
- * $node->build_mode is not set.
- *
- * When defining an additional build mode constant in a contributed module,
- * the suggested standard is to use the unix timestamp of when you write the
- * code to minimize the likelihood of two modules using the same value.
+ * The content built for the node (field values, comments, file attachments or
+ * other node components) will vary depending on the $build_mode parameter.
+ *
+ * Drupal core defines the following build modes for nodes, with the following
+ * default use cases:
+ * - full (default): node is being displayed on its own page (node/123)
+ * - teaser: node is being displayed on the default home page listing, on
+ * taxonomy listing pages, or on blog listing pages.
+ * - rss: node displayed in an RSS feed.
+ * If search.module is enabled:
+ * - search_index: node is being indexed for search.
+ * - search_result: node is being displayed as a search result.
+ * If book.module is enabled:
+ * - print: node is being displayed in print-friendly mode.
+ * Contributed modules might define additional build modes, or use existing
+ * build modes in additional contexts.
*
* @param $node
* A node object.
- * @param $teaser
- * Whether to display the teaser only, as on the main page.
+ * @param $build_mode
+ * Build mode, e.g. 'full', 'teaser'...
*
* @return
- * An structured array containing the individual elements
+ * A structured array containing the individual elements
* of the node's content.
*/
-function node_build_content($node, $teaser = FALSE) {
- // The build mode identifies the target for which the node is built.
- if (!isset($node->build_mode)) {
- $node->build_mode = NODE_BUILD_NORMAL;
- }
-
+function node_build_content($node, $build_mode = 'full') {
// The 'view' hook can be implemented to overwrite the default function
// to display nodes.
if (node_hook($node, 'view')) {
- $node = node_invoke($node, 'view', $teaser);
+ $node = node_invoke($node, 'view', $build_mode);
}
// Build fields content.
if (empty($node->content)) {
$node->content = array();
};
- $node->content += field_attach_view('node', $node, $teaser);
+ $node->content += field_attach_view('node', $node, $build_mode);
// Always display a read more link on teasers because we have no way
// to know when a teaser view is different than a full view.
$links = array();
- if ($teaser) {
+ if ($build_mode == 'teaser') {
$links['node_readmore'] = array(
'title' => t('Read more'),
'href' => 'node/' . $node->nid,
@@ -1188,10 +1156,10 @@ function node_build_content($node, $teaser = FALSE) {
);
// Allow modules to make their own additions to the node.
- module_invoke_all('node_view', $node, $teaser);
+ module_invoke_all('node_view', $node, $build_mode);
// Allow modules to modify the structured node.
- drupal_alter('node_build', $node, $teaser);
+ drupal_alter('node_build', $node, $build_mode);
return $node;
}
@@ -1215,7 +1183,7 @@ function node_show($node, $message = FALSE) {
node_tag_new($node->nid);
// For markup consistency with other pages, use node_build_multiple() rather than node_build().
- return node_build_multiple(array($node), FALSE);
+ return node_build_multiple(array($node), 'full');
}
/**
@@ -1227,13 +1195,15 @@ function node_show($node, $message = FALSE) {
*
* The $variables array contains the following arguments:
* - $node
- * - $teaser
+ * - $build_mode
* - $page
*
* @see node.tpl.php
*/
function template_preprocess_node(&$variables) {
- $variables['teaser'] = $variables['elements']['#teaser'];
+ $variables['build_mode'] = $variables['elements']['#build_mode'];
+ // Provide a distinct $teaser boolean.
+ $variables['teaser'] = $variables['build_mode'] == 'teaser';
$variables['node'] = $variables['elements']['#node'];
$node = $variables['node'];
@@ -1243,7 +1213,7 @@ function template_preprocess_node(&$variables) {
$variables['title'] = check_plain($node->title);
$variables['page'] = (bool)menu_get_object();
- if ($node->build_mode == NODE_BUILD_PREVIEW) {
+ if (!empty($node->in_preview)) {
unset($node->content['links']);
}
@@ -1480,8 +1450,7 @@ function node_search($op = 'search', $keys = NULL) {
foreach ($find as $item) {
// Render the node.
$node = node_load($item->sid);
- $node->build_mode = NODE_BUILD_SEARCH_RESULT;
- $node = node_build_content($node, FALSE, FALSE);
+ $node = node_build_content($node, 'search_result');
$node->rendered = drupal_render($node->content);
// Fetch comments for snippet.
@@ -1626,11 +1595,11 @@ function theme_node_search_admin($form) {
/**
* Implement hook_link().
*/
-function node_link($type, $node = NULL, $teaser = FALSE) {
+function node_link($type, $node, $build_mode) {
$links = array();
if ($type == 'node') {
- if ($teaser == 1) {
+ if ($build_mode == 'teaser') {
$links['node_read_more'] = array(
'title' => t('Read more'),
'href' => "node/$node->nid",
@@ -1932,7 +1901,6 @@ function node_feed($nids = FALSE, $channel = array()) {
foreach ($nodes as $node) {
$item_text = '';
- $node->build_mode = NODE_BUILD_RSS;
$node->link = url("node/$node->nid", array('absolute' => TRUE));
$node->rss_namespaces = array();
$node->rss_elements = array(
@@ -1943,7 +1911,7 @@ function node_feed($nids = FALSE, $channel = array()) {
// The node gets built and modules add to or modify $node->rss_elements
// and $node->rss_namespaces.
- $node = node_build_content($node, $teaser);
+ $node = node_build_content($node, 'rss');
if (!empty($node->rss_namespaces)) {
$namespaces = array_merge($namespaces, $node->rss_namespaces);
@@ -1981,17 +1949,17 @@ function node_feed($nids = FALSE, $channel = array()) {
*
* @param $nodes
* An array of nodes as returned by node_load_multiple().
- * @param $teaser
- * Display nodes into teaser view or full view.
+ * @param $build_mode
+ * Build mode, e.g. 'full', 'teaser'...
* @param $weight
* An integer representing the weight of the first node in the list.
* @return
* An array in the format expected by drupal_render().
*/
-function node_build_multiple($nodes, $teaser = TRUE, $weight = 0) {
+function node_build_multiple($nodes, $build_mode = 'teaser', $weight = 0) {
$build = array();
foreach ($nodes as $node) {
- $build['nodes'][$node->nid] = node_build($node, $teaser);
+ $build['nodes'][$node->nid] = node_build($node, $build_mode);
$build['nodes'][$node->nid]['#weight'] = $weight;
$weight++;
}
@@ -2084,8 +2052,7 @@ function _node_index_node($node) {
variable_set('node_cron_last', $node->changed);
// Render the node.
- $node->build_mode = NODE_BUILD_SEARCH_INDEX;
- $node = node_build_content($node, FALSE, FALSE);
+ $node = node_build_content($node, 'search_index');
$node->rendered = drupal_render($node->content);
$text = '<h1>' . check_plain($node->title) . '</h1>' . $node->rendered;
diff --git a/modules/node/node.pages.inc b/modules/node/node.pages.inc
index ee362cbf6..185160e08 100644
--- a/modules/node/node.pages.inc
+++ b/modules/node/node.pages.inc
@@ -123,7 +123,7 @@ function node_form(&$form_state, $node) {
node_object_prepare($node);
}
else {
- $node->build_mode = NODE_BUILD_PREVIEW;
+ $node->in_preview = TRUE;
}
// Set the id and identify this as a node edit form.
@@ -351,7 +351,7 @@ function node_preview($node) {
// Previewing alters $node so it needs to be cloned.
if (!form_get_errors()) {
$cloned_node = clone $node;
- $cloned_node->build_mode = NODE_BUILD_PREVIEW;
+ $cloned_node->in_preview = TRUE;
$output = theme('node_preview', $cloned_node);
}
drupal_set_title(t('Preview'), PASS_THROUGH);
@@ -373,8 +373,8 @@ function theme_node_preview($node) {
$preview_trimmed_version = FALSE;
- $trimmed = drupal_render(node_build(clone $node, TRUE));
- $full = drupal_render(node_build($node, FALSE));
+ $trimmed = drupal_render(node_build(clone $node, 'teaser'));
+ $full = drupal_render(node_build($node, 'full'));
// Do we need to preview trimmed version of post as well as full version?
if ($trimmed != $full) {
diff --git a/modules/node/node.test b/modules/node/node.test
index 152a1353b..246f9b2c4 100644
--- a/modules/node/node.test
+++ b/modules/node/node.test
@@ -519,11 +519,11 @@ class NodeRSSContentTestCase extends DrupalWebTestCase {
$this->drupalGet('rss.xml');
- // Check that content added in NODE_BUILD_RSS appear in RSS feed.
+ // Check that content added in 'rss' build mode appear in RSS feed.
$rss_only_content = t('Extra data that should appear only in the RSS feed for node !nid.', array('!nid' => $node->nid));
$this->assertText($rss_only_content, t('Node content designated for RSS appear in RSS feed.'));
- // Check that content added in build modes other than NODE_BUILD_RSS doesn't
+ // Check that content added in build modes other than 'rss' doesn't
// appear in RSS feed.
$non_rss_content = t('Extra data that should appear everywhere except the RSS feed for node !nid.', array('!nid' => $node->nid));
$this->assertNoText($non_rss_content, t('Node content not designed for RSS doesn\'t appear in RSS feed.'));
@@ -537,7 +537,8 @@ class NodeRSSContentTestCase extends DrupalWebTestCase {
$this->assertRaw(format_xml_elements(array($test_element)), t('Extra RSS elements appear in RSS feed.'));
$this->assertRaw($test_ns, t('Extra namespaces appear in RSS feed.'));
- // Check that content added in NODE_BUILD_RSS doesn't appear when viewing node.
+ // Check that content added in 'rss' build mode doesn't appear when
+ // viewing node.
$this->drupalGet("node/$node->nid");
$this->assertNoText($rss_only_content, t('Node content designed for RSS doesn\'t appear when viewing node.'));
}
diff --git a/modules/node/node.tpl.php b/modules/node/node.tpl.php
index 49979a22d..fc4255f43 100644
--- a/modules/node/node.tpl.php
+++ b/modules/node/node.tpl.php
@@ -51,7 +51,8 @@
* - $id: Position of the node. Increments each time it's output.
*
* Node status variables:
- * - $teaser: Flag for the teaser state.
+ * - $build_mode: Build mode, e.g. 'full', 'teaser'...
+ * - $teaser: Flag for the teaser state (shortcut for $build_mode == 'teaser').
* - $page: Flag for the full page state.
* - $promote: Flag for front page promotion state.
* - $sticky: Flags for sticky post setting.
diff --git a/modules/node/tests/node_test.module b/modules/node/tests/node_test.module
index fd0fca707..dc354ff80 100644
--- a/modules/node/tests/node_test.module
+++ b/modules/node/tests/node_test.module
@@ -10,8 +10,8 @@
/**
* Implement hook_node_view().
*/
-function node_test_node_view($node, $teaser) {
- if ($node->build_mode == NODE_BUILD_RSS) {
+function node_test_node_view($node, $build_mode) {
+ if ($build_mode == 'rss') {
// Add RSS elements and namespaces when building the RSS feed.
$node->rss_elements[] = array(
'key' => 'testElement',
@@ -26,7 +26,7 @@ function node_test_node_view($node, $teaser) {
);
}
- if ($node->build_mode != NODE_BUILD_RSS) {
+ if ($build_mode != 'rss') {
// Add content that should NOT be displayed in the RSS feed.
$node->content['extra_non_feed_content'] = array(
'#markup' => '<p>' . t('Extra data that should appear everywhere except the RSS feed for node !nid.', array('!nid' => $node->nid)) . '</p>',
diff --git a/modules/poll/poll.module b/modules/poll/poll.module
index e59b5971c..ed1b4e90b 100644
--- a/modules/poll/poll.module
+++ b/modules/poll/poll.module
@@ -584,7 +584,7 @@ function poll_block_latest_poll_view($node) {
/**
* Implement hook_view().
*/
-function poll_view($node, $teaser = FALSE) {
+function poll_view($node, $build_mode = 'full') {
global $user;
$output = '';
@@ -592,7 +592,7 @@ function poll_view($node, $teaser = FALSE) {
$node->content['poll_view_voting'] = drupal_get_form('poll_view_voting', $node);
}
else {
- $node->content['poll_view_results'] = array('#markup' => poll_view_results($node, $teaser));
+ $node->content['poll_view_results'] = array('#markup' => poll_view_results($node, $build_mode));
}
return $node;
}
@@ -712,7 +712,7 @@ function template_preprocess_poll_vote(&$variables) {
/**
* Generates a graphical representation of the results of a poll.
*/
-function poll_view_results($node, $teaser, $block = FALSE) {
+function poll_view_results($node, $build_mode, $block = FALSE) {
// Count the votes and find the maximum
$total_votes = 0;
$max_votes = 0;
diff --git a/modules/search/search.api.php b/modules/search/search.api.php
index 417ea7d0e..03a0016d3 100644
--- a/modules/search/search.api.php
+++ b/modules/search/search.api.php
@@ -171,8 +171,7 @@ function hook_search($op = 'search', $keys = NULL) {
foreach ($find as $item) {
// Build the node body.
$node = node_load($item->sid);
- $node->build_mode = NODE_BUILD_SEARCH_RESULT;
- $node = node_build_content($node, FALSE, FALSE);
+ $node = node_build_content($node, 'search_result');
$node->body = drupal_render($node->content);
// Fetch comments for snippet.
@@ -257,8 +256,7 @@ function hook_update_index() {
variable_set('node_cron_last', $node->changed);
// Render the node.
- $node->build_mode = NODE_BUILD_SEARCH_INDEX;
- $node = node_build_content($node, FALSE, FALSE);
+ $node = node_build_content($node, 'search_index');
$node->rendered = drupal_render($node->content);
$text = '<h1>' . check_plain($node->title) . '</h1>' . $node->rendered;
diff --git a/modules/statistics/statistics.module b/modules/statistics/statistics.module
index 393a9754a..4cf85b935 100644
--- a/modules/statistics/statistics.module
+++ b/modules/statistics/statistics.module
@@ -103,8 +103,8 @@ function statistics_perm() {
/**
* Implement hook_node_view().
*/
-function statistics_node_view($node, $teaser) {
- if ($node->build_mode != NODE_BUILD_RSS) {
+function statistics_node_view($node, $build_mode) {
+ if ($build_mode != 'rss') {
$links = array();
if (user_access('view post access counter')) {
$statistics = statistics_get($node->nid);
diff --git a/modules/system/system.api.php b/modules/system/system.api.php
index c8d07cd77..776d92c7b 100644
--- a/modules/system/system.api.php
+++ b/modules/system/system.api.php
@@ -437,14 +437,13 @@ function hook_image_toolkits() {
* - comment: Links to be placed below a comment being viewed.
* @param $object
* A comment object.
- * @param $teaser
- * A 0/1 flag depending on whether the node is
- * displayed with its teaser or its full form.
+ * @param $build_mode
+ * Build mode for the node, e.g. 'full', 'teaser'...
* @return
* An array of the requested links.
*
*/
-function hook_link($type, $object, $teaser = FALSE) {
+function hook_link($type, $object, $build_mode) {
$links = array();
if ($type == 'comment') {
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 4c669c099..d14496c27 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -66,14 +66,14 @@ function taxonomy_theme() {
}
/**
- * An implementation of hook_node_view().
+ * Implement hook_node_view().
*/
-function taxonomy_node_view($node) {
+function taxonomy_node_view($node, $build_mode) {
if (empty($node->taxonomy)) {
return;
}
- if ($node->build_mode == NODE_BUILD_RSS) {
+ if ($build_mode == 'rss') {
// Provide category information for RSS feeds.
foreach ($node->taxonomy as $term) {
$node->rss_elements[] = array(
@@ -87,7 +87,7 @@ function taxonomy_node_view($node) {
$links = array();
// If previewing, the terms must be converted to objects first.
- if ($node->build_mode == NODE_BUILD_PREVIEW) {
+ if (!empty($node->in_preview)) {
$node->taxonomy = taxonomy_preview_terms($node);
}
diff --git a/modules/translation/translation.module b/modules/translation/translation.module
index 4b9dbecd7..b2e1ed9f3 100644
--- a/modules/translation/translation.module
+++ b/modules/translation/translation.module
@@ -167,7 +167,7 @@ function translation_form_alter(&$form, &$form_state, $form_id) {
* Display translation links with native language names, if this node
* is part of a translation set.
*/
-function translation_node_view($node, $teaser = FALSE) {
+function translation_node_view($node, $build_mode) {
if (isset($node->tnid) && $translations = translation_node_get_translations($node->tnid)) {
// Do not show link to the same node.
unset($translations[$node->language]);
diff --git a/modules/trigger/trigger.module b/modules/trigger/trigger.module
index 68ef220c9..00e732ab4 100644
--- a/modules/trigger/trigger.module
+++ b/modules/trigger/trigger.module
@@ -245,8 +245,8 @@ function _trigger_node($node, $op, $a3 = NULL, $a4 = NULL) {
/**
* Implement hook_node_view().
*/
-function trigger_node_view($node, $teaser) {
- _trigger_node($node, 'view', $teaser);
+function trigger_node_view($node, $build_mode) {
+ _trigger_node($node, 'view', $build_mode);
}
/**
diff --git a/modules/upload/upload.module b/modules/upload/upload.module
index c54297a41..86ed1ba3e 100644
--- a/modules/upload/upload.module
+++ b/modules/upload/upload.module
@@ -58,7 +58,7 @@ function upload_perm() {
/**
* Inject links into $node for attachments.
*/
-function upload_node_links($node, $teaser) {
+function upload_node_links($node, $build_mode) {
$links = array();
// Display a link with the number of attachments
@@ -337,14 +337,14 @@ function upload_node_load($nodes, $types) {
/**
* Implement hook_node_view().
*/
-function upload_node_view($node, $teaser) {
+function upload_node_view($node, $build_mode) {
if (!isset($node->files)) {
return;
}
- if (user_access('view uploaded files') && $node->build_mode != NODE_BUILD_RSS) {
+ if (user_access('view uploaded files') && $build_mode != 'rss') {
if (count($node->files)) {
- if (!$teaser) {
+ if ($build_mode == 'full') {
// Add the attachments list to node body with a heavy weight to ensure
// they're below other elements.
$node->content['files'] = array(
@@ -354,12 +354,12 @@ function upload_node_view($node, $teaser) {
);
}
else {
- upload_node_links($node, $teaser);
+ upload_node_links($node, $build_mode);
}
}
}
- if ($node->build_mode == NODE_BUILD_RSS) {
+ if ($build_mode == 'rss') {
// Add the first file as an enclosure to the RSS item. RSS allows only one
// enclosure per item. See: http://en.wikipedia.org/wiki/RSS_enclosure
foreach ($node->files as $file) {
diff --git a/modules/upload/upload.test b/modules/upload/upload.test
index 7c07c516d..124c9bbd8 100644
--- a/modules/upload/upload.test
+++ b/modules/upload/upload.test
@@ -64,7 +64,7 @@ class UploadTestCase extends DrupalWebTestCase {
// Assure that the attachment link appears on teaser view and has correct count.
$node = node_load($node->nid);
- $teaser = drupal_render(node_build($node, TRUE));
+ $teaser = drupal_render(node_build($node, 'teaser'));
$this->assertTrue(strpos($teaser, format_plural(2, '1 attachment', '@count attachments')), 'Attachments link found on node teaser.');
// Fetch db record and use fid to rename and delete file.
diff --git a/modules/user/user.module b/modules/user/user.module
index c0ff8defa..7c182a561 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -2047,7 +2047,6 @@ function user_build_content(&$account) {
// Build fields content.
// TODO D7 : figure out where exactly this needs to go
- // TODO D7 : $page / $teaser ??
$account->content += field_attach_view('user', $account);
user_module_invoke('view', $edit, $account);