summaryrefslogtreecommitdiff
path: root/modules/node/node.module
diff options
context:
space:
mode:
authorGábor Hojtsy <gabor@hojtsy.hu>2008-01-09 12:10:04 +0000
committerGábor Hojtsy <gabor@hojtsy.hu>2008-01-09 12:10:04 +0000
commitdb55c269da3089b1b18d428793143a4786ffe1c0 (patch)
tree4a711ff7941c622ca7c7c4cb0ebef1467b990e1d /modules/node/node.module
parent6ab877faf12c9760be3cefa79c2075c9dbdfcf49 (diff)
downloadbrdo-db55c269da3089b1b18d428793143a4786ffe1c0.tar.gz
brdo-db55c269da3089b1b18d428793143a4786ffe1c0.tar.bz2
#201667 by theborg, quicksketch, gpk, catch: fix bugs with teaser splitter in JS and no-JS mode
Diffstat (limited to 'modules/node/node.module')
-rw-r--r--modules/node/node.module59
1 files changed, 52 insertions, 7 deletions
diff --git a/modules/node/node.module b/modules/node/node.module
index 9f6714db1..c9aeeb4bd 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -215,8 +215,8 @@ function node_mark($nid, $timestamp) {
* See if the user used JS to submit a teaser.
*/
function node_teaser_js(&$form, &$form_state) {
- // Glue the teaser to the body.
if (isset($form['#post']['teaser_js'])) {
+ // Glue the teaser to the body.
if (trim($form_state['values']['teaser_js'])) {
// Space the teaser from the body
$body = trim($form_state['values']['teaser_js']) ."\r\n<!--break-->\r\n". trim($form_state['values']['body']);
@@ -225,20 +225,65 @@ function node_teaser_js(&$form, &$form_state) {
// Empty teaser, no spaces.
$body = '<!--break-->'. $form_state['values']['body'];
}
- // Pass value onto preview/submit
+ // Pass updated body value on to preview/submit form processing.
form_set_value($form['body'], $body, $form_state);
- // Pass value back onto form
+ // Pass updated body value back onto form for those cases
+ // in which the form is redisplayed.
$form['body']['#value'] = $body;
}
return $form;
}
/**
- * Automatically generate a teaser for a node body.
+ * Ensure value of "teaser_include" checkbox is consistent with other form data
+ *
+ * This handles two situations in which an unchecked checkbox is rejected:
+ *
+ * 1. The user defines a teaser (summary) but it is empty;
+ * 2. The user does not define a teaser (summary) (in this case an
+ * unchecked checkbox would cause the body to be empty, or missing
+ * the auto-generated teaser).
+ *
+ * If JavasSript is active then it is used to force the checkbox to be
+ * checked when hidden, and so the second case will not arise.
+ *
+ * In either case a warning message is output.
+ */
+function node_teaser_include_verify(&$form, &$form_state) {
+ $message = '';
+
+ // $form['#post'] is set only when the form is built for preview/submit.
+ if (isset($form['#post']['body']) && isset($form_state['values']['teaser_include']) && !$form_state['values']['teaser_include']) {
+ // "teaser_include" checkbox is present and unchecked.
+ if (strpos($form_state['values']['body'], '<!--break-->') === 0) {
+ // Teaser is empty string
+ $message = t('You specified that the summary should not be shown when this post is displayed in full view. This setting is ignored when the summary is empty.');
+ }
+ elseif (strpos($form_state['values']['body'], '<!--break-->') === FALSE) {
+ // Teaser delimiter is not present in the body.
+ $message = t('You specified that the summary should not be shown when this post is displayed in full view. This setting has been ignored since you have not defined a summary for the post. (To define a summary, insert the delimiter "&lt;!--break--&gt;" (without the quotes) in the Body of the post to indicate the end of the summary and the start of the main content.)');
+ }
+
+ if (!empty($message)) {
+ drupal_set_message($message, 'warning');
+ // Pass new checkbox value on to preview/submit form processing.
+ form_set_value($form['teaser_include'], 1, $form_state);
+ // Pass new checkbox value back onto form for those cases
+ // in which form is redisplayed.
+ $form['teaser_include']['#value'] = 1;
+ }
+ }
+
+ return $form;
+}
+
+/**
+ * Generate a teaser for a node body.
*
* If the end of the teaser is not indicated using the <!--break--> delimiter
- * then we try to end it at a sensible place, such as the end of a paragraph,
- * a line break, or the end of a sentence (in that order of preference).
+ * then we generate the teaser automatically, trying to end it at a sensible
+ * place such as the end of a paragraph, a line break, or the end of a
+ * sentence (in that order of preference).
*
* @param $body
* The content for which a teaser will be generated.
@@ -773,7 +818,7 @@ function node_submit($node) {
// Convert the node to an object, if necessary.
$node = (object)$node;
- // Auto-generate the teaser, but only if it hasn't been set (e.g. by a
+ // Generate the teaser, but only if it hasn't been set (e.g. by a
// module-provided 'teaser' form item).
if (!isset($node->teaser)) {
if (isset($node->body)) {