summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorSteven Wittens <steven@10.no-reply.drupal.org>2005-06-01 03:32:22 +0000
committerSteven Wittens <steven@10.no-reply.drupal.org>2005-06-01 03:32:22 +0000
commit5257b684ff5d3d8173c1854fddbfd7cd2ca2ac30 (patch)
treeee2a3e67922bcf95e9213fa2b36f3a3fd48b9a12 /modules
parent0b008c55ffd0068a27cc2dd136a6bd2a2f6109c9 (diff)
downloadbrdo-5257b684ff5d3d8173c1854fddbfd7cd2ca2ac30.tar.gz
brdo-5257b684ff5d3d8173c1854fddbfd7cd2ca2ac30.tar.bz2
- #18836: Cleanup teaser generation code, and refine handling of PHP code teasers.
Diffstat (limited to 'modules')
-rw-r--r--modules/node.module73
-rw-r--r--modules/node/node.module73
2 files changed, 44 insertions, 102 deletions
diff --git a/modules/node.module b/modules/node.module
index 15bbc9b24..043a6c4c1 100644
--- a/modules/node.module
+++ b/modules/node.module
@@ -153,23 +153,28 @@ function node_mark($nid, $timestamp) {
}
/**
- * Automatically generate a teaser for the given body text.
+ * Automatically generate a teaser for a node body in a given format.
*/
-function node_teaser($body) {
+function node_teaser($body, $format = NULL) {
$size = variable_get('teaser_length', 600);
// find where the delimiter is in the body
$delimiter = strpos($body, '<!--break-->');
- // If the size is zero, and there is no delimiter, we return the entire body.
+ // If the size is zero, and there is no delimiter, the entire body is the teaser.
if ($size == 0 && $delimiter == 0) {
return $body;
}
- // If the body contains PHP code, do not split it up to prevent parse errors.
- if (strpos($body, '<?') != false) {
- return $body;
+ // We check for the presence of the PHP evaluator filter in the current
+ // format. If the body contains PHP code, we do not split it up to prevent
+ // parse errors.
+ if (isset($format)) {
+ $filters = filter_list_format($format);
+ if (isset($filters['filter/1']) && strpos($body, '<?') != false) {
+ return $body;
+ }
}
// If a valid delimiter has been specified, use it to chop of the teaser.
@@ -177,60 +182,26 @@ function node_teaser($body) {
return substr($body, 0, $delimiter);
}
- // If we have a short body, return the entire body.
+ // If we have a short body, the entire body is the teaser.
if (strlen($body) < $size) {
return $body;
}
// In some cases, no delimiter has been specified (e.g. when posting using
// the Blogger API). In this case, we try to split at paragraph boundaries.
- if ($length = strpos($body, '</p>', $size)) {
- return substr($body, 0, $length + 4);
- }
-
- if ($length = strpos($body, '<br />', $size)) {
- return substr($body, 0, $length);
- }
-
- if ($length = strpos($body, '<br>', $size)) {
- return substr($body, 0, $length);
- }
-
- if ($length = strpos($body, "\n", $size)) {
- return substr($body, 0, $length);
- }
-
- // When even the first paragraph is too long, try to split at the end of
+ // When even the first paragraph is too long, we try to split at the end of
// the next sentence.
- if ($length = strpos($body, '. ', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '! ', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '? ', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '。', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '、', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '؟ ', $size)) {
- return substr($body, 0, $length + 1);
+ $breakpoints = array('</p>' => 4, '<br />' => 0, '<br>' => 0, "\n" => 0, '. ' => 1, '! ' => 1, '? ' => 1, '。' => 1, '؟ ' => 1);
+ foreach ($breakpoints as $point => $charnum) {
+ if ($length = strpos($body, $point, $size)) {
+ return substr($body, 0, $length + $charnum);
+ }
}
-
- // If all else fails, simply truncate the string.
+
+ // If all else fails, we simply truncate the string.
return truncate_utf8($body, $size);
}
-
/**
* Determine the module that defines the node type of the given node.
*
@@ -1216,7 +1187,7 @@ function node_validate($node) {
// Auto-generate the teaser, but only if it hasn't been set (e.g. by a
// module-provided 'teaser' form item).
if (!isset($node->teaser)) {
- $node->teaser = node_teaser($node->body);
+ $node->teaser = node_teaser($node->body, $node->format);
}
if (node_last_changed($node->nid) > $node->changed) {
@@ -1496,7 +1467,7 @@ function node_preview($node) {
// Extract a teaser, if it hasn't been set (e.g. by a module-provided
// 'teaser' form item).
if (!isset($node->teaser)) {
- $node->teaser = node_teaser($node->body);
+ $node->teaser = node_teaser($node->body, $node->format);
}
// Display a preview of the node:
diff --git a/modules/node/node.module b/modules/node/node.module
index 15bbc9b24..043a6c4c1 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -153,23 +153,28 @@ function node_mark($nid, $timestamp) {
}
/**
- * Automatically generate a teaser for the given body text.
+ * Automatically generate a teaser for a node body in a given format.
*/
-function node_teaser($body) {
+function node_teaser($body, $format = NULL) {
$size = variable_get('teaser_length', 600);
// find where the delimiter is in the body
$delimiter = strpos($body, '<!--break-->');
- // If the size is zero, and there is no delimiter, we return the entire body.
+ // If the size is zero, and there is no delimiter, the entire body is the teaser.
if ($size == 0 && $delimiter == 0) {
return $body;
}
- // If the body contains PHP code, do not split it up to prevent parse errors.
- if (strpos($body, '<?') != false) {
- return $body;
+ // We check for the presence of the PHP evaluator filter in the current
+ // format. If the body contains PHP code, we do not split it up to prevent
+ // parse errors.
+ if (isset($format)) {
+ $filters = filter_list_format($format);
+ if (isset($filters['filter/1']) && strpos($body, '<?') != false) {
+ return $body;
+ }
}
// If a valid delimiter has been specified, use it to chop of the teaser.
@@ -177,60 +182,26 @@ function node_teaser($body) {
return substr($body, 0, $delimiter);
}
- // If we have a short body, return the entire body.
+ // If we have a short body, the entire body is the teaser.
if (strlen($body) < $size) {
return $body;
}
// In some cases, no delimiter has been specified (e.g. when posting using
// the Blogger API). In this case, we try to split at paragraph boundaries.
- if ($length = strpos($body, '</p>', $size)) {
- return substr($body, 0, $length + 4);
- }
-
- if ($length = strpos($body, '<br />', $size)) {
- return substr($body, 0, $length);
- }
-
- if ($length = strpos($body, '<br>', $size)) {
- return substr($body, 0, $length);
- }
-
- if ($length = strpos($body, "\n", $size)) {
- return substr($body, 0, $length);
- }
-
- // When even the first paragraph is too long, try to split at the end of
+ // When even the first paragraph is too long, we try to split at the end of
// the next sentence.
- if ($length = strpos($body, '. ', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '! ', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '? ', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '。', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '、', $size)) {
- return substr($body, 0, $length + 1);
- }
-
- if ($length = strpos($body, '؟ ', $size)) {
- return substr($body, 0, $length + 1);
+ $breakpoints = array('</p>' => 4, '<br />' => 0, '<br>' => 0, "\n" => 0, '. ' => 1, '! ' => 1, '? ' => 1, '。' => 1, '؟ ' => 1);
+ foreach ($breakpoints as $point => $charnum) {
+ if ($length = strpos($body, $point, $size)) {
+ return substr($body, 0, $length + $charnum);
+ }
}
-
- // If all else fails, simply truncate the string.
+
+ // If all else fails, we simply truncate the string.
return truncate_utf8($body, $size);
}
-
/**
* Determine the module that defines the node type of the given node.
*
@@ -1216,7 +1187,7 @@ function node_validate($node) {
// Auto-generate the teaser, but only if it hasn't been set (e.g. by a
// module-provided 'teaser' form item).
if (!isset($node->teaser)) {
- $node->teaser = node_teaser($node->body);
+ $node->teaser = node_teaser($node->body, $node->format);
}
if (node_last_changed($node->nid) > $node->changed) {
@@ -1496,7 +1467,7 @@ function node_preview($node) {
// Extract a teaser, if it hasn't been set (e.g. by a module-provided
// 'teaser' form item).
if (!isset($node->teaser)) {
- $node->teaser = node_teaser($node->body);
+ $node->teaser = node_teaser($node->body, $node->format);
}
// Display a preview of the node: