From cb159b9ff1b3165219292e63a89fa553d5811749 Mon Sep 17 00:00:00 2001
From: Angie Byron <webchick@24967.no-reply.drupal.org>
Date: Fri, 9 Jan 2009 16:19:56 +0000
Subject: [PATCH] #143434 by Jody Lynn: Move 'display post information' to
 where users would expect.

---
 includes/theme.inc               |  9 ++---
 modules/node/content_types.inc   | 13 ++++++-
 modules/node/node.test           | 62 ++++++++++++++++++++++++++++++++
 modules/system/system.admin.inc  | 29 ++-------------
 modules/system/system.install    | 29 +++++++++++++++
 modules/system/system.module     | 19 ----------
 profiles/default/default.profile |  4 +--
 themes/chameleon/chameleon.theme |  2 +-
 8 files changed, 110 insertions(+), 57 deletions(-)

diff --git a/includes/theme.inc b/includes/theme.inc
index b934462d6a33..952984372fa0 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -918,11 +918,6 @@ function theme_get_settings($key = NULL) {
     'toggle_secondary_menu'         =>  1,
   );
 
-  if (module_exists('node')) {
-    foreach (node_get_types() as $type => $name) {
-      $defaults['toggle_node_info_' . $type] = 1;
-    }
-  }
   $settings = array_merge($defaults, variable_get('theme_settings', array()));
 
   if ($key) {
@@ -2009,8 +2004,8 @@ function template_preprocess_node(&$variables) {
   // Flatten the node object's member fields.
   $variables = array_merge((array)$node, $variables);
 
-  // Display info only on certain node types.
-  if (theme_get_setting('toggle_node_info_' . $node->type)) {
+  // Display post information only on certain node types.
+  if (variable_get('node_submitted_' . $node->type, TRUE)) {
     $variables['submitted'] = theme('node_submitted', $node);
     $variables['picture'] = theme_get_setting('toggle_node_user_picture') ? theme('user_picture', $node) : '';
   }
diff --git a/modules/node/content_types.inc b/modules/node/content_types.inc
index be1dd765461c..3868c50f4ec2 100644
--- a/modules/node/content_types.inc
+++ b/modules/node/content_types.inc
@@ -159,7 +159,18 @@ function node_type_form(&$form_state, $type = NULL) {
     ),
     '#description' => t('Users with the <em>administer nodes</em> permission will be able to override these options.'),
   );
-
+  $form['display'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Display settings'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+  );
+  $form['display']['node_submitted'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Display post information'),
+    '#default_value' => variable_get('node_submitted_'. $type->type, TRUE),
+    '#description' => t('Enable the <em>submitted by Username on date</em> text.'), 
+  ); 
   $form['old_type'] = array(
     '#type' => 'value',
     '#value' => $type->type,
diff --git a/modules/node/node.test b/modules/node/node.test
index 419a1dfd3c28..42294f721927 100644
--- a/modules/node/node.test
+++ b/modules/node/node.test
@@ -537,3 +537,65 @@ class NodeBlockTestCase extends DrupalWebTestCase {
     $this->assertText(t('The block settings have been updated.'), t('Block successfully move to footer region.'));
   }
 }
+
+/**
+ * Check that the post information displays when enabled for a content type.
+ */
+class NodePostSettingsTestCase extends DrupalWebTestCase {
+  function getInfo() {
+    return array(
+      'name' => t('Node post information display'),
+      'description' => t('Check that the post information (submitted by Username on date) text displays appropriately.'),
+      'group' => t('Node'),
+    );
+  }
+
+  function setUp() {
+    parent::setUp();
+
+    $web_user = $this->drupalCreateUser(array('create page content', 'administer content types', 'access user profiles'));
+    $this->drupalLogin($web_user);
+  }
+
+  /**
+   * Set page content type to display post information and confirm its presence on a new node.
+   */
+  function testPagePostInfo() {
+
+    // Set page content type to display post information.
+    $edit = array();
+    $edit['node_submitted'] = TRUE;
+    $this->drupalPost('admin/build/node-type/page', $edit, t('Save content type'));
+
+    // Create a node.
+    $edit = array();
+    $edit['title'] = $this->randomName(8);
+    $edit['body'] = $this->randomName(16);
+    $this->drupalPost('node/add/page', $edit, t('Save'));
+
+    // Check that the post information is displayed.
+    $node = $this->drupalGetNodeByTitle($edit['title']);
+    $this->assertRaw(theme('node_submitted', $node), t('Post information is displayed.'));
+  }
+
+  /**
+   * Set page content type to not display post information and confirm its absence on a new node.
+   */
+  function testPageNotPostInfo() {
+
+    // Set page content type to display post information.
+    $edit = array();
+    $edit['node_submitted'] = FALSE;
+    $this->drupalPost('admin/build/node-type/page', $edit, t('Save content type'));
+
+    // Create a node.
+    $edit = array();
+    $edit['title'] = $this->randomName(8);
+    $edit['body'] = $this->randomName(16);
+    $this->drupalPost('node/add/page', $edit, t('Save'));
+
+    // Check that the post information is displayed.
+    $node = $this->drupalGetNodeByTitle($edit['title']);
+    $this->assertNoRaw(theme('node_submitted', $node), t('Post information is not displayed.'));
+  }
+}
\ No newline at end of file
diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
index d67213e64d2f..dbf0d39d04a2 100644
--- a/modules/system/system.admin.inc
+++ b/modules/system/system.admin.inc
@@ -399,30 +399,7 @@ function system_theme_settings(&$form_state, $key = '') {
     }
   }
 
-  // System wide only settings.
-  if (!$key) {
-    // Create neat 2-column layout for the toggles
-    $form['theme_settings'] += array(
-      '#prefix' => '<div class="theme-settings-left">',
-      '#suffix' => '</div>',
-    );
-
-    // Toggle node display.
-    $node_types = node_get_types('names');
-    if ($node_types) {
-      $form['node_info'] = array(
-        '#type' => 'fieldset',
-        '#title' => t('Display post information on'),
-        '#description' => t('Enable or disable the <em>submitted by Username on date</em> text when displaying posts of the following type.'),
-        '#prefix' => '<div class="theme-settings-right">',
-        '#suffix' => '</div>',
-      );
-      foreach ($node_types as $type => $name) {
-        $form['node_info']["toggle_node_info_$type"] = array('#type' => 'checkbox', '#title' => check_plain($name), '#default_value' => $settings["toggle_node_info_$type"]);
-      }
-    }
-  }
-  elseif (!element_children($form['theme_settings'])) {
+  if (!element_children($form['theme_settings'])) {
     // If there is no element in the theme settings fieldset then do not show
     // it -- but keep it in the form if another module wants to alter.
     $form['theme_settings']['#access'] = FALSE;
@@ -436,7 +413,7 @@ function system_theme_settings(&$form_state, $key = '') {
       '#description' => t('If toggled on, the following logo will be displayed.'),
       '#attributes' => array('class' => 'theme-settings-bottom'),
     );
-    $form['logo']["default_logo"] = array(
+    $form['logo']['default_logo'] = array(
       '#type' => 'checkbox',
       '#title' => t('Use the default logo'),
       '#default_value' => $settings['default_logo'],
@@ -461,7 +438,7 @@ function system_theme_settings(&$form_state, $key = '') {
     $form['favicon'] = array(
       '#type' => 'fieldset',
       '#title' => t('Shortcut icon settings'),
-      '#description' => t("Your shortcut icon, or 'favicon', is displayed in the address bar and bookmarks of most browsers.")
+      '#description' => t("Your shortcut icon, or 'favicon', is displayed in the address bar and bookmarks of most browsers."),
     );
     $form['favicon']['default_favicon'] = array(
       '#type' => 'checkbox',
diff --git a/modules/system/system.install b/modules/system/system.install
index e75b91658300..5b73c4b87e8e 100644
--- a/modules/system/system.install
+++ b/modules/system/system.install
@@ -3165,6 +3165,35 @@ function system_update_7016() {
   return $ret;
 }
 
+/**
+ * Change the theme setting 'toggle_node_info' into a per content type variable.
+ */
+function system_update_7017() {
+  $ret = array();
+  $types = node_get_types();
+  if (count($types)) {
+    foreach ($types as $type) {
+      $node_info = theme_get_setting('toggle_node_info_' . $type->type);
+      if ($node_info !== NULL) {
+        variable_set('node_submitted_' . $type->type, $node_info);
+        $ret[] = array('success' => TRUE, 'query' => "variable_set('node_submitted_$type->type')");
+      }
+    }
+  }
+
+  // Unset deprecated 'toggle_node_info' theme settings.
+  $theme_settings = theme_get_settings();
+  foreach ($theme_settings as $setting => $value) {
+    if (substr($setting, 0, 16) == 'toggle_node_info') {
+      unset($theme_settings[$setting]);
+    }
+  }
+  variable_set('theme_settings', $theme_settings);
+  $ret[] = array('success' => TRUE, 'query' => "variable_set('theme_settings')");
+
+  return $ret;
+}
+
 /**
  * @} End of "defgroup updates-6.x-to-7.x"
  * The next series of updates should start at 8000.
diff --git a/modules/system/system.module b/modules/system/system.module
index f71ccd75c6ed..49caeea0001c 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -1353,25 +1353,6 @@ function _system_sort_requirements($a, $b) {
   return isset($b['weight']) ? $a['weight'] - $b['weight'] : $a['weight'];
 }
 
-/**
- * Implementation of hook_node_type().
- *
- * Updates theme settings after a node type change.
- */
-function system_node_type($op, $info) {
-  if ($op == 'update' && !empty($info->old_type) && $info->type != $info->old_type) {
-    $old = 'toggle_node_info_' . $info->old_type;
-    $new = 'toggle_node_info_' . $info->type;
-
-    $theme_settings = variable_get('theme_settings', array());
-    if (isset($theme_settings[$old])) {
-      $theme_settings[$new] = $theme_settings[$old];
-      unset($theme_settings[$old]);
-      variable_set('theme_settings', $theme_settings);
-    }
-  }
-}
-
 /**
  * Output a confirmation form
  *
diff --git a/profiles/default/default.profile b/profiles/default/default.profile
index 1af48d2de79d..a3ddc7f2bddf 100644
--- a/profiles/default/default.profile
+++ b/profiles/default/default.profile
@@ -125,9 +125,7 @@ function default_profile_tasks(&$task, $url) {
   variable_set('comment_page', COMMENT_NODE_DISABLED);
 
   // Don't display date and author information for page nodes by default.
-  $theme_settings = variable_get('theme_settings', array());
-  $theme_settings['toggle_node_info_page'] = FALSE;
-  variable_set('theme_settings', $theme_settings);
+  variable_set('node_submitted_page', FALSE);
 
   // Create a default vocabulary named "Tags", enabled for the 'article' content type.
   $description = st('Use tags to group articles on similar topics into categories.');
diff --git a/themes/chameleon/chameleon.theme b/themes/chameleon/chameleon.theme
index 74a332b98d5e..eb5d7b33ba98 100644
--- a/themes/chameleon/chameleon.theme
+++ b/themes/chameleon/chameleon.theme
@@ -134,7 +134,7 @@ function chameleon_node($node, $teaser = 0) {
   $output .= " </div>\n";
 
   $submitted = '';
-  if (theme_get_setting("toggle_node_info_$node->type")) {
+  if (variable_get('node_submitted_' . $node->type, TRUE)) {
     $submitted = t("By !author at @date", array('!author' => theme('username', $node), '@date' => format_date($node->created, 'small')));
   }
 
-- 
GitLab