xref: /template/strap/vendor/salesforce/handlebars-php/src/Handlebars/Cache/Disk.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau/**
3*04fd306cSNickeau * A flat-file filesystem cache.
4*04fd306cSNickeau *
5*04fd306cSNickeau * @category  Xamin
6*04fd306cSNickeau * @package   Handlebars
7*04fd306cSNickeau * @author    Alex Soncodi <alex@brokerloop.com>
8*04fd306cSNickeau * @author    Behrooz Shabani <everplays@gmail.com>
9*04fd306cSNickeau * @author    Mardix <https://github.com/mardix>
10*04fd306cSNickeau * @copyright 2013 (c) Brokerloop, Inc.
11*04fd306cSNickeau * @copyright 2013 (c) Behrooz Shabani
12*04fd306cSNickeau * @copyright 2013 (c) Mardix
13*04fd306cSNickeau * @license   MIT
14*04fd306cSNickeau * @link      http://voodoophp.org/docs/handlebars
15*04fd306cSNickeau */
16*04fd306cSNickeau
17*04fd306cSNickeaunamespace Handlebars\Cache;
18*04fd306cSNickeauuse Handlebars\Cache;
19*04fd306cSNickeauuse InvalidArgumentException;
20*04fd306cSNickeauuse RuntimeException;
21*04fd306cSNickeau
22*04fd306cSNickeauclass Disk implements Cache
23*04fd306cSNickeau{
24*04fd306cSNickeau
25*04fd306cSNickeau    private $path = '';
26*04fd306cSNickeau    private $prefix = '';
27*04fd306cSNickeau    private $suffix = '';
28*04fd306cSNickeau
29*04fd306cSNickeau    /**
30*04fd306cSNickeau     * Construct the disk cache.
31*04fd306cSNickeau     *
32*04fd306cSNickeau     * @param string $path   Filesystem path to the disk cache location
33*04fd306cSNickeau     * @param string $prefix optional file prefix, defaults to empty string
34*04fd306cSNickeau     * @param string $suffix optional file extension, defaults to empty string
35*04fd306cSNickeau     *
36*04fd306cSNickeau     * @throws \RuntimeException
37*04fd306cSNickeau     * @throws \InvalidArgumentException
38*04fd306cSNickeau     */
39*04fd306cSNickeau    public function __construct($path, $prefix = '', $suffix = '')
40*04fd306cSNickeau    {
41*04fd306cSNickeau        if (empty($path)) {
42*04fd306cSNickeau            throw new InvalidArgumentException('Must specify disk cache path');
43*04fd306cSNickeau        } elseif (!is_dir($path)) {
44*04fd306cSNickeau            @mkdir($path, 0777, true);
45*04fd306cSNickeau
46*04fd306cSNickeau            if (!is_dir($path)) {
47*04fd306cSNickeau                throw new RuntimeException('Could not create cache file path');
48*04fd306cSNickeau            }
49*04fd306cSNickeau        }
50*04fd306cSNickeau
51*04fd306cSNickeau        $this->path = $path;
52*04fd306cSNickeau        $this->prefix = $prefix;
53*04fd306cSNickeau        $this->suffix = $suffix;
54*04fd306cSNickeau    }
55*04fd306cSNickeau
56*04fd306cSNickeau    /**
57*04fd306cSNickeau     * Gets the full disk path for a given cache item's file,
58*04fd306cSNickeau     * taking into account the cache path, optional prefix,
59*04fd306cSNickeau     * and optional extension.
60*04fd306cSNickeau     *
61*04fd306cSNickeau     * @param string $name Name of the cache item
62*04fd306cSNickeau     *
63*04fd306cSNickeau     * @return string full disk path of cached item
64*04fd306cSNickeau     */
65*04fd306cSNickeau    private function getPath($name)
66*04fd306cSNickeau    {
67*04fd306cSNickeau        return $this->path . DIRECTORY_SEPARATOR .
68*04fd306cSNickeau            $this->prefix . $name . $this->suffix;
69*04fd306cSNickeau    }
70*04fd306cSNickeau
71*04fd306cSNickeau    /**
72*04fd306cSNickeau     * Get cache for $name if it exists.
73*04fd306cSNickeau     *
74*04fd306cSNickeau     * @param string $name Cache id
75*04fd306cSNickeau     *
76*04fd306cSNickeau     * @return mixed data on hit, boolean false on cache not found
77*04fd306cSNickeau     */
78*04fd306cSNickeau    public function get($name)
79*04fd306cSNickeau    {
80*04fd306cSNickeau        $path = $this->getPath($name);
81*04fd306cSNickeau
82*04fd306cSNickeau        return (file_exists($path)) ?
83*04fd306cSNickeau            unserialize(file_get_contents($path)) : false;
84*04fd306cSNickeau    }
85*04fd306cSNickeau
86*04fd306cSNickeau    /**
87*04fd306cSNickeau     * Set a cache
88*04fd306cSNickeau     *
89*04fd306cSNickeau     * @param string $name  cache id
90*04fd306cSNickeau     * @param mixed  $value data to store
91*04fd306cSNickeau     *
92*04fd306cSNickeau     * @return void
93*04fd306cSNickeau     */
94*04fd306cSNickeau    public function set($name, $value)
95*04fd306cSNickeau    {
96*04fd306cSNickeau        $path = $this->getPath($name);
97*04fd306cSNickeau
98*04fd306cSNickeau        file_put_contents($path, serialize($value));
99*04fd306cSNickeau    }
100*04fd306cSNickeau
101*04fd306cSNickeau    /**
102*04fd306cSNickeau     * Remove cache
103*04fd306cSNickeau     *
104*04fd306cSNickeau     * @param string $name Cache id
105*04fd306cSNickeau     *
106*04fd306cSNickeau     * @return void
107*04fd306cSNickeau     */
108*04fd306cSNickeau    public function remove($name)
109*04fd306cSNickeau    {
110*04fd306cSNickeau        $path = $this->getPath($name);
111*04fd306cSNickeau
112*04fd306cSNickeau        unlink($path);
113*04fd306cSNickeau    }
114*04fd306cSNickeau
115*04fd306cSNickeau}
116