Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
   1  <?php
   2  
   3  namespace Kevinrob\GuzzleCache\Storage;
   4  
   5  use Illuminate\Contracts\Cache\Repository as Cache;
   6  use Kevinrob\GuzzleCache\CacheEntry;
   7  
   8  class LaravelCacheStorage implements CacheStorageInterface
   9  {
  10      /**
  11       * @var Cache
  12       */
  13      protected $cache;
  14  
  15      /**
  16       * @param Cache $cache
  17       */
  18      public function __construct(Cache $cache)
  19      {
  20          $this->cache = $cache;
  21      }
  22  
  23      /**
  24       * {@inheritdoc}
  25       */
  26      public function fetch($key)
  27      {
  28          try {
  29              $cache = unserialize($this->cache->get($key, ''));
  30              if ($cache instanceof CacheEntry) {
  31                  return $cache;
  32              }
  33          } catch (\Exception $ignored) {
  34              return;
  35          }
  36  
  37          return;
  38      }
  39  
  40      /**
  41       * {@inheritdoc}
  42       */
  43      public function save($key, CacheEntry $data)
  44      {
  45          try {
  46              $lifeTime = $this->getLifeTime($data);
  47              if ($lifeTime === 0) {
  48                  return $this->cache->forever(
  49                      $key,
  50                      serialize($data)
  51                  );
  52              } else if ($lifeTime > 0) {
  53                  return $this->cache->add(
  54                      $key,
  55                      serialize($data),
  56                      $lifeTime
  57                  );
  58              }
  59          } catch (\Exception $ignored) {
  60              // No fail if we can't save it the storage
  61          }
  62  
  63          return false;
  64      }
  65  
  66      /**
  67       * {@inheritdoc}
  68       */
  69      public function delete($key)
  70      {
  71          return $this->cache->forget($key);
  72      }
  73  
  74      protected function getLifeTime(CacheEntry $data)
  75      {
  76          $version = app()->version();
  77          if (preg_match('/^\d+(\.\d+)?(\.\d+)?/', $version) && version_compare($version, '5.8.0') < 0) {
  78              // getTTL returns seconds, Laravel needs minutes before v5.8
  79              return $data->getTTL() / 60;
  80          }
  81  
  82          return $data->getTTL();
  83      }
  84  }