[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/ -> jslib.php (source)

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * This file contains various javascript related functions,
  19   * all functions here are self contained and can be used in ABORT_AFTER_CONFIG scripts.
  20   *
  21   * @package   core_lib
  22   * @copyright 2012 Petr Skoda (skodak)  {@link http://skodak.org}
  23   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  24   */
  25  
  26  defined('MOODLE_INTERNAL') || die();
  27  
  28  /**
  29   * Send javascript file content with as much caching as possible
  30   * @param string $jspath
  31   * @param string $etag
  32   * @param string $filename
  33   */
  34  function js_send_cached($jspath, $etag, $filename = 'javascript.php') {
  35      require (__DIR__ . '/xsendfilelib.php');
  36  
  37      $lifetime = 60*60*24*60; // 60 days only - the revision may get incremented quite often
  38  
  39      header('Etag: "'.$etag.'"');
  40      header('Content-Disposition: inline; filename="'.$filename.'"');
  41      header('Last-Modified: '. gmdate('D, d M Y H:i:s', filemtime($jspath)) .' GMT');
  42      header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
  43      header('Pragma: ');
  44      header('Cache-Control: public, max-age='.$lifetime);
  45      header('Accept-Ranges: none');
  46      header('Content-Type: application/javascript; charset=utf-8');
  47  
  48      if (xsendfile($jspath)) {
  49          die;
  50      }
  51  
  52      if (!min_enable_zlib_compression()) {
  53          header('Content-Length: '.filesize($jspath));
  54      }
  55  
  56      readfile($jspath);
  57      die;
  58  }
  59  
  60  /**
  61   * Send javascript without any caching
  62   * @param string $js
  63   * @param string $filename
  64   */
  65  function js_send_uncached($js, $filename = 'javascript.php') {
  66      header('Content-Disposition: inline; filename="'.$filename.'"');
  67      header('Last-Modified: '. gmdate('D, d M Y H:i:s', time()) .' GMT');
  68      header('Expires: '. gmdate('D, d M Y H:i:s', time() + 2) .' GMT');
  69      header('Pragma: ');
  70      header('Accept-Ranges: none');
  71      header('Content-Type: application/javascript; charset=utf-8');
  72      header('Content-Length: '.strlen($js));
  73  
  74      echo $js;
  75      die;
  76  }
  77  
  78  /**
  79   * Send file not modified headers
  80   * @param int $lastmodified
  81   * @param string $etag
  82   */
  83  function js_send_unmodified($lastmodified, $etag) {
  84      $lifetime = 60*60*24*60; // 60 days only - the revision may get incremented quite often
  85      header('HTTP/1.1 304 Not Modified');
  86      header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
  87      header('Cache-Control: public, max-age='.$lifetime);
  88      header('Content-Type: application/javascript; charset=utf-8');
  89      header('Etag: "'.$etag.'"');
  90      if ($lastmodified) {
  91          header('Last-Modified: '. gmdate('D, d M Y H:i:s', $lastmodified) .' GMT');
  92      }
  93      die;
  94  }
  95  
  96  /**
  97   * Create cache file for JS content
  98   * @param string $file full file path to cache file
  99   * @param string $content JS code
 100   */
 101  function js_write_cache_file_content($file, $content) {
 102      global $CFG;
 103  
 104      clearstatcache();
 105      if (!file_exists(dirname($file))) {
 106          @mkdir(dirname($file), $CFG->directorypermissions, true);
 107      }
 108  
 109      // Prevent serving of incomplete file from concurrent request,
 110      // the rename() should be more atomic than fwrite().
 111      ignore_user_abort(true);
 112      if ($fp = fopen($file.'.tmp', 'xb')) {
 113          fwrite($fp, $content);
 114          fclose($fp);
 115          rename($file.'.tmp', $file);
 116          @chmod($file, $CFG->filepermissions);
 117          @unlink($file.'.tmp'); // just in case anything fails
 118      }
 119      ignore_user_abort(false);
 120      if (connection_aborted()) {
 121          die;
 122      }
 123  }
 124  
 125  /**
 126   * Sends a 404 message about CSS not being found.
 127   */
 128  function js_send_css_not_found() {
 129      header('HTTP/1.0 404 not found');
 130      die('JS was not found, sorry.');
 131  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1