From 4b030206c659d2904b95e54e371d94c8bd92fe17 Mon Sep 17 00:00:00 2001
From: Tim Otten <totten@civicrm.org>
Date: Tue, 26 Nov 2013 12:30:28 -0800
Subject: [PATCH] CRM_Dashlet_Page_Blog - Get feed URL from settings

---
 CRM/Dashlet/Page/Blog.php | 21 ++++++++++++++++++---
 settings/Core.setting.php | 22 ++++++++++++++++++++++
 2 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/CRM/Dashlet/Page/Blog.php b/CRM/Dashlet/Page/Blog.php
index 40e355f9df..1c3d78c7be 100644
--- a/CRM/Dashlet/Page/Blog.php
+++ b/CRM/Dashlet/Page/Blog.php
@@ -42,6 +42,21 @@ class CRM_Dashlet_Page_Blog extends CRM_Core_Page {
   const CACHE_DAYS = 1;
   const BLOG_URL = 'https://civicrm.org/blog/feed';
 
+  /**
+   * Get the final, usable URL string (after interpolating any variables)
+   *
+   * @return FALSE|string
+   */
+  public function getBlogUrl() {
+    // Note: We use "*default*" as the default (rather than self::BLOG_URL) so that future
+    // developers can change BLOG_URL without needing to update {civicrm_setting}.
+    $url = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'blogUrl', NULL, '*default*');
+    if ($url === '*default*') {
+      $url = self::BLOG_URL;
+    }
+    return CRM_Utils_System::evalUrl($url);
+  }
+
   /**
    * List blog articles as dashlet
    *
@@ -72,7 +87,7 @@ class CRM_Dashlet_Page_Blog extends CRM_Core_Page {
       $expire = time() - (60 * 60 * 24 * self::CACHE_DAYS);
       // Refresh data after CACHE_DAYS
       if (strtotime($cache->created_date) < $expire) {
-        $new_data = $this->_getFeed();
+        $new_data = $this->_getFeed($this->getBlogUrl());
         // If fetching the new rss feed was successful, return it
         // Otherwise use the old cached data - it's better than nothing
         if ($new_data) {
@@ -81,7 +96,7 @@ class CRM_Dashlet_Page_Blog extends CRM_Core_Page {
       }
       return unserialize($cache->data);
     }
-    return $this->_getFeed();
+    return $this->_getFeed($this->getBlogUrl());
   }
 
   /**
@@ -91,7 +106,7 @@ class CRM_Dashlet_Page_Blog extends CRM_Core_Page {
    *
    * @access public
    */
-  public function _getFeed( $url = self::BLOG_URL) {
+  public function _getFeed($url) {
     $httpClient = new CRM_Utils_HttpClient(self::CHECK_TIMEOUT);
     list ($status, $rawFeed) = $httpClient->get($url);
     if ($status !== CRM_Utils_HttpClient::STATUS_OK) {
diff --git a/settings/Core.setting.php b/settings/Core.setting.php
index 4f1cfc6192..596f996836 100644
--- a/settings/Core.setting.php
+++ b/settings/Core.setting.php
@@ -516,6 +516,28 @@ When enabled, statistics about your CiviCRM installation are reported anonymousl
     'description' => null,
     'help_text' => null,
   ),
+  'blogUrl' => array(
+    'group_name' => 'CiviCRM Preferences',
+    'group' => 'core',
+    'name' => 'blogUrl',
+    'prefetch' => 0,
+    'config_only'=> 0,
+    'type' => 'String',
+    'quick_form_type' => 'Element',
+    'html_type' => 'text',
+    'html_attributes' => array(
+      'size' => 64,
+      'maxlength' => 128,
+    ),
+    'html_type' => 'Text',
+    'default' => '*default*',
+    'add' => '4.3',
+    'title' => 'Blog Feed URL',
+    'is_domain' => 1,
+    'is_contact' => 0,
+    'description' => 'Blog feed URL used by the blog dashlet',
+    'help_text' => 'Use "*default*" for the system default or override with a custom URL',
+  ),
   'communityMessagesUrl' => array(
     'group_name' => 'CiviCRM Preferences',
     'group' => 'core',
-- 
2.25.1