From ca497f4f7cb92fb5b52db77284290e1612c27091 Mon Sep 17 00:00:00 2001
From: nicolasconnault <nicolasconnault>
Date: Tue, 15 Sep 2009 07:19:03 +0000
Subject: [PATCH] MDL-19676 Properly hiding blog_menu from block dropdown when
 blogs are disabled. Also showing "Blogs are disabled" in existing blog_menu
 blocks and removing old bloglevel options from subsystems settings

---
 admin/settings/appearance.php        |  2 +-
 admin/settings/subsystems.php        |  4 +---
 blocks/blog_menu/block_blog_menu.php |  4 ++--
 lib/adminlib.php                     | 24 ++++++++++++++++++++++++
 4 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/admin/settings/appearance.php b/admin/settings/appearance.php
index 78d962fe88..f2242a0632 100644
--- a/admin/settings/appearance.php
+++ b/admin/settings/appearance.php
@@ -52,7 +52,7 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     // blog
     $temp = new admin_settingpage('blog', get_string('blog','blog'));
     $temp->add(new admin_setting_configcheckbox('useblogassociations', get_string('useblogassociations', 'blog'), get_string('configuseblogassociations','blog'), 1));
-    $temp->add(new admin_setting_configselect('bloglevel', get_string('bloglevel', 'admin'), get_string('configbloglevel', 'admin'), 4, array(5 => get_string('worldblogs','blog'),
+    $temp->add(new admin_setting_bloglevel('bloglevel', get_string('bloglevel', 'admin'), get_string('configbloglevel', 'admin'), 4, array(5 => get_string('worldblogs','blog'),
                                                                                                                                               4 => get_string('siteblogs','blog'),
                                                                                                                                               1 => get_string('personalblogs','blog'),
                                                                                                                                               0 => get_string('disableblogs','blog'))));
diff --git a/admin/settings/subsystems.php b/admin/settings/subsystems.php
index 33b2fd2ab6..d5dad0943f 100644
--- a/admin/settings/subsystems.php
+++ b/admin/settings/subsystems.php
@@ -21,11 +21,9 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
 
     $optionalsubsystems->add(new admin_setting_configcheckbox('enablerssfeeds', get_string('enablerssfeeds', 'admin'), get_string('configenablerssfeeds', 'admin'), 0));
 
-    $optionalsubsystems->add(new admin_setting_configselect('bloglevel', get_string('bloglevel', 'admin'),
+    $optionalsubsystems->add(new admin_setting_bloglevel('bloglevel', get_string('bloglevel', 'admin'),
                                 get_string('configbloglevel', 'admin'), 4, array(5 => get_string('worldblogs','blog'),
                                                                                  4 => get_string('siteblogs','blog'),
-                                                                                 3 => get_string('courseblogs','blog'),
-                                                                                 2 => get_string('groupblogs','blog'),
                                                                                  1 => get_string('personalblogs','blog'),
                                                                                  0 => get_string('disableblogs','blog'))));
 
diff --git a/blocks/blog_menu/block_blog_menu.php b/blocks/blog_menu/block_blog_menu.php
index 1a8941aaf9..1bd1c4c12f 100755
--- a/blocks/blog_menu/block_blog_menu.php
+++ b/blocks/blog_menu/block_blog_menu.php
@@ -57,13 +57,13 @@ class block_blog_menu extends block_base {
         $context = $PAGE->get_context();
 
         if (empty($CFG->bloglevel)) {
-            $this->content->text = '';
+            $this->content->text = get_string('blogdisable', 'blog');
             return $this->content;
         }
 
         // don't display menu block if block is set at site level, and user is not logged in
         if ($CFG->bloglevel < BLOG_GLOBAL_LEVEL && !(isloggedin() && !isguest())) {
-            $this->content->text = '';
+            $this->content->text = get_string('blogdisable', 'blog');
             return $this->content;
         }
 
diff --git a/lib/adminlib.php b/lib/adminlib.php
index 0865e57309..3c39dcd45f 100644
--- a/lib/adminlib.php
+++ b/lib/adminlib.php
@@ -2748,6 +2748,30 @@ class admin_setting_sitesetselect extends admin_setting_configselect {
     }
 }
 
+/**
+ * Select for blog's bloglevel setting: if set to 0, will set blog_menu
+ * block to hidden.
+ *
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class admin_setting_bloglevel extends admin_setting_configselect {
+    /**
+     * Updates the database and save the setting
+     *
+     * @param string data
+     * @return string empty or error message
+     */
+    public function write_setting($data) {
+        global $DB;
+        if ($data['bloglevel'] == 0) {
+            $DB->set_field('block', 'visible', 0, array('name' => 'blog_menu'));
+        } else {
+            $DB->set_field('block', 'visible', 1, array('name' => 'blog_menu'));
+        }
+        return parent::write_setting($data);
+    }
+}
+
 /**
  * Special select - lists on the frontpage - hacky
  *
-- 
2.39.5