]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #3754: Language JS views send cache headers and support conditional get
authorSteve Clay <steve@mrclay.org>
Sun, 31 Mar 2013 22:18:33 +0000 (18:18 -0400)
committerSteve Clay <steve@mrclay.org>
Sun, 31 Mar 2013 22:18:33 +0000 (18:18 -0400)
js/lib/languages.js
views/default/js/languages.php

index 44ea56d2b081563b3e5482f049063c78bd2f4830..d218cbc4f95723f2047ff8ccf30f10bda4717886 100644 (file)
@@ -30,6 +30,9 @@ elgg.reload_all_translations = function(language) {
        var url, options;
        url = 'ajax/view/js/languages';
        options = {data: {language: lang}};
+    if (elgg.config.simplecache_enabled) {
+        options.data.lc = elgg.config.lastcache;
+    }
 
        options['success'] = function(json) {
                elgg.add_translation(lang, json);
index c51d7bcb29e2db53446cd754941ff1d0b0de7e2a..fcf903d4b1e55882ad9c9014e1a6032e4fd391bd 100644 (file)
@@ -1,15 +1,33 @@
 <?php
 /**
  * @uses $vars['language']
+ * @uses $vars['lc'] if present, client will be sent long expires headers
  */
-global $CONFIG;
 
 $language = $vars['language'];
+$lastcache = elgg_extract('lc', $vars, 0);
 
-$translations = $CONFIG->translations['en'];
+// @todo add server-side caching
+if ($lastcache) {
+       // we're relying on lastcache changes to predict language changes
+       $etag = '"' . md5("$language|$lastcache") .  '"';
+
+       header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+6 months")), true);
+       header("Pragma: public", true);
+       header("Cache-Control: public", true);
+       header("ETag: $etag");
+
+       if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) === $etag) {
+               header("HTTP/1.1 304 Not Modified");
+               exit;
+       }
+}
+
+$all_translations = elgg_get_config('translations');
+$translations = $all_translations['en'];
 
 if ($language != 'en') {
-       $translations = array_merge($translations, $CONFIG->translations[$language]);
+       $translations = array_merge($translations, $all_translations[$language]);
 }
 
 echo json_encode($translations);
\ No newline at end of file