CRM-14949 - Switch dynamic l10n js back to a callback instead of a file
authorColeman Watts <coleman@civicrm.org>
Sun, 5 Oct 2014 19:23:52 +0000 (15:23 -0400)
committerColeman Watts <coleman@civicrm.org>
Sun, 5 Oct 2014 19:23:52 +0000 (15:23 -0400)
CRM/Admin/Page/AJAX.php
CRM/Core/BAO/WordReplacement.php
CRM/Core/Invoke.php
CRM/Core/Page/AJAX.php
CRM/Core/Resources.php
CRM/Core/xml/Menu/Misc.xml
CRM/Upgrade/Page/Upgrade.php
CRM/Utils/File.php

index 2677fab16f2de7c3648eeda7e9d1f27161ecd32f..49f459ed8c0fd13ad9bfc26dccff882a41356bf5 100644 (file)
@@ -45,12 +45,7 @@ class CRM_Admin_Page_AJAX {
   static function getNavigationMenu() {
     $contactID = CRM_Core_Session::singleton()->get('userID');
     if ($contactID) {
-      // Set headers to encourage browsers to cache for a long time
-      $year = 60*60*24*364;
-      header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + $year));
-      header('Content-Type:    application/javascript');
-      header("Cache-Control: max-age=$year, public");
-
+      CRM_Core_Page_AJAX::setJsHeaders();
       print CRM_Core_Smarty::singleton()->fetchWith('CRM/common/navigation.js.tpl', array(
         'navigation' => CRM_Core_BAO_Navigation::createNavigation($contactID),
       ));
index ed023400aaea0a2dbc2079163f51c9d7002747c7..10eb8d4b5641fd4cfab5f4e010f8900603e7516c 100644 (file)
@@ -208,7 +208,7 @@ WHERE  domain_id = %1
         // Reset navigation
         CRM_Core_BAO_Navigation::resetNavigation();
         // Clear js localization
-        CRM_Core_Resources::singleton()->flushStrings()->rebuildDynamicResources();
+        CRM_Core_Resources::singleton()->flushStrings()->resetCacheCode();
       }
 
       return TRUE;
index a1e5f726f99271cbc1c067f70b9cc6632e8c36a6..4c25c0f885a14ab036f37efad462fc9a9dabd674 100644 (file)
@@ -404,7 +404,7 @@ class CRM_Core_Invoke {
 
     CRM_Core_BAO_Setting::updateSettingsFromMetaData();
     // Clear js caches
-    CRM_Core_Resources::singleton()->flushStrings()->rebuildDynamicResources();
+    CRM_Core_Resources::singleton()->flushStrings()->resetCacheCode();
     CRM_Case_XMLRepository::singleton(TRUE);
 
     // also rebuild triggers if requested explicitly
index 42ac838b464a0b572bc82c469e682f4d3b5f021f..0b5f72fae6dd279ce08c77e6f1a1aec2e6aeb421 100644 (file)
@@ -197,6 +197,17 @@ class CRM_Core_Page_AJAX {
     CRM_Utils_System::civiExit();
   }
 
+  /**
+   * Set headers appropriate for a js file
+   */
+  static function setJsHeaders() {
+    // Encourage browsers to cache for a long time - 1 year
+    $year = 60*60*24*364;
+    header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + $year));
+    header('Content-Type:      application/javascript');
+    header("Cache-Control: max-age=$year, public");
+  }
+
   /**
    * Send autocomplete results to the client. Input can be a simple or nested array.
    * @param array $results - If nested array, also provide:
index 8baab9edf67ef841be823233f4c2835ac6d41f0b..2a34bde700508fcdafa33ffb484930944ad107c3 100644 (file)
@@ -476,7 +476,7 @@ class CRM_Core_Resources {
       }
 
       // Dynamic localization script
-      $this->addScriptUrl($this->addLocalizationJs(), $jsWeight++, $region);
+      $this->addScriptUrl(CRM_Utils_System::url('civicrm/ajax/l10n-js/' . $config->lcMessages, array('r' => $this->getCacheCode())), $jsWeight++, $region);
 
       // Add global settings
       $settings = array('config' => array(
@@ -531,16 +531,6 @@ class CRM_Core_Resources {
     return $this;
   }
 
-  /**
-   * Deletes and rebuilds dynamic resource files
-   * @return CRM_Core_Resources
-   */
-  public function rebuildDynamicResources() {
-    CRM_Utils_File::flushDynamicResources();
-    $this->addLocalizationJs();
-    return $this;
-  }
-
   /**
    * Translate strings in a javascript file
    *
@@ -567,27 +557,13 @@ class CRM_Core_Resources {
     $this->addString($stringsByFile[$file]);
   }
 
-  /**
-   * Add dynamic l10n js
-   *
-   * @return string URL of JS file
-   */
-  private function addLocalizationJs() {
-    $config = CRM_Core_Config::singleton();
-    $fileName = 'l10n-' . $config->lcMessages . '.js';
-    if (!is_file(CRM_Utils_File::dynamicResourcePath($fileName))) {
-      CRM_Utils_File::addDynamicResource($fileName, $this->createLocalizationJs());
-    }
-    // Dynamic localization script
-    return CRM_Utils_File::dynamicResourceUrl($fileName);
-  }
-
   /**
    * Create dynamic script for localizing js widgets
    *
    * @return string javascript content
    */
-  private function createLocalizationJs() {
+  static function outputLocalizationJS() {
+    CRM_Core_Page_AJAX::setJsHeaders();
     $config = CRM_Core_Config::singleton();
     $vars = array(
       'moneyFormat' => json_encode(CRM_Utils_Money::format(1234.56)),
@@ -595,7 +571,8 @@ class CRM_Core_Resources {
       'otherSearch' => json_encode(ts('Enter search term...')),
       'contactCreate' => CRM_Core_BAO_UFGroup::getCreateLinks(),
     );
-    return CRM_Core_Smarty::singleton()->fetchWith('CRM/common/localization.js.tpl', $vars);
+    print CRM_Core_Smarty::singleton()->fetchWith('CRM/common/localization.js.tpl', $vars);
+    CRM_Utils_System::civiExit();
   }
 
   /**
index e1f4a1d11d43694c01890bdc8514851933ac1a95..64c350ec7d52fe9394428b72139ca8455a123cd3 100644 (file)
     <page_callback>CRM_Core_Page_Angular</page_callback>
     <access_arguments>access CiviCRM</access_arguments>
   </item>
+  <item>
+    <path>civicrm/ajax/l10n-js</path>
+    <page_callback>CRM_Core_Resources::outputLocalizationJS</page_callback>
+  </item>
 </menu>
index f3386177df77845acf675c1a5fe9bd4643068d47..f7f7bd2c4f88c35c52ecb6bcecb84e2d37321490 100644 (file)
@@ -90,7 +90,8 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page {
     }
 
     // All cached content needs to be cleared because the civi codebase was just replaced
-    CRM_Core_Resources::singleton()->flushStrings()->rebuildDynamicResources();
+    CRM_Core_Resources::singleton()->flushStrings()->resetCacheCode();
+    CRM_Core_Menu::store();
 
     // This could be removed in later rev
     if ($currentVer == '2.1.6') {
index 82f18f5f45ce244b5a6b80143ddcdf02462ff426..42ef38472b85d2443c257fdd597e6da12dafbbae 100644 (file)
@@ -689,68 +689,5 @@ HTACCESS;
     }
     return TRUE;
   }
-
-  /**
-   * Create a static file (e.g. css or js) in the dynamic resource directory
-   * Note: if the file already exists it will be overwritten
-   * @param string $fileName
-   * @param string $contents
-   */
-  static function addDynamicResource($fileName, $contents) {
-    // First ensure the directory exists
-    $path = self::dynamicResourcePath();
-    if (!is_dir($path)) {
-      self::createDir($path);
-      self::restrictBrowsing($path);
-    }
-    file_put_contents("$path/$fileName", $contents);
-  }
-
-  /**
-   * Get the path of a dynamic resource file
-   * With no fileName supplied, returns the path of the directory
-   * @param string $fileName
-   * @return string
-   */
-  static function dynamicResourcePath($fileName = NULL) {
-    $config = CRM_Core_Config::singleton();
-    // FIXME: Use self::baseFilePath once url issue has been resolved
-    // Windows PHP accepts any mix of "/" or "\"; simpler if we only deal with one of those
-    $imageUploadDir = str_replace('\\', '/', $config->imageUploadDir);
-    $path = self::addTrailingSlash(str_replace('/persist/contribute', '', $imageUploadDir), '/') . 'dynamic';
-    if ($fileName !== NULL) {
-      $path .= "/$fileName";
-    }
-    return $path;
-  }
-
-  /**
-   * Get the URL of a dynamic resource file
-   * @param string $fileName
-   * @return string
-   */
-  static function dynamicResourceUrl($fileName, $addCacheCode = TRUE) {
-    $config = CRM_Core_Config::singleton();
-    // FIXME: Need a better way of getting the url of the baseFilePath
-    $url = self::addTrailingSlash(str_replace('/persist/contribute', '', $config->imageUploadURL), '/') . 'dynamic/' . $fileName;
-    if ($addCacheCode) {
-      return $url . '?r=' . CRM_Core_Resources::singleton()->getCacheCode();
-    }
-    return $url;
-  }
-
-  /**
-   * Delete all files from the dynamic resource directory
-   * Change the cache code to force browsers to reload new resources
-   */
-  static function flushDynamicResources() {
-    $files = glob(self::dynamicResourcePath('*'));
-    foreach ($files ? $files : array() as $file) {
-      if (is_file($file)) {
-        unlink($file);
-      }
-    }
-    CRM_Core_Resources::singleton()->resetCacheCode();
-  }
 }