web/lib/Zend/Cache/Backend/TwoLevels.php
author Raphael Velt <raph.velt@gmail.com>
Thu, 19 Jul 2012 15:09:12 +0200
changeset 658 7e85f1b9004e
parent 207 621fa6caec0c
child 807 877f952ae2bd
permissions -rw-r--r--
Correction
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     1
<?php
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     2
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     3
 * Zend Framework
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     4
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     5
 * LICENSE
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     6
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     7
 * This source file is subject to the new BSD license that is bundled
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     8
 * with this package in the file LICENSE.txt.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     9
 * It is also available through the world-wide-web at this URL:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    10
 * http://framework.zend.com/license/new-bsd
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    11
 * If you did not receive a copy of the license and are unable to
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    12
 * obtain it through the world-wide-web, please send an email
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    13
 * to license@zend.com so we can send you a copy immediately.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    14
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    15
 * @category   Zend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    16
 * @package    Zend_Cache
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    17
 * @subpackage Zend_Cache_Backend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    18
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    19
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    20
 * @version    $Id: TwoLevels.php 22736 2010-07-30 16:25:54Z andyfowler $
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    21
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    22
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    23
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    24
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    25
 * @see Zend_Cache_Backend_ExtendedInterface
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    26
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    27
require_once 'Zend/Cache/Backend/ExtendedInterface.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    28
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    29
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    30
 * @see Zend_Cache_Backend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    31
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    32
require_once 'Zend/Cache/Backend.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    33
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    34
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    35
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    36
 * @package    Zend_Cache
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    37
 * @subpackage Zend_Cache_Backend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    38
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    39
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    40
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    41
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    42
class Zend_Cache_Backend_TwoLevels extends Zend_Cache_Backend implements Zend_Cache_Backend_ExtendedInterface
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    43
{
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    44
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    45
     * Available options
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    46
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    47
     * =====> (string) slow_backend :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    48
     * - Slow backend name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    49
     * - Must implement the Zend_Cache_Backend_ExtendedInterface
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    50
     * - Should provide a big storage
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    51
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    52
     * =====> (string) fast_backend :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    53
     * - Flow backend name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    54
     * - Must implement the Zend_Cache_Backend_ExtendedInterface
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    55
     * - Must be much faster than slow_backend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    56
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    57
     * =====> (array) slow_backend_options :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    58
     * - Slow backend options (see corresponding backend)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    59
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    60
     * =====> (array) fast_backend_options :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    61
     * - Fast backend options (see corresponding backend)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    62
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    63
     * =====> (int) stats_update_factor :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    64
     * - Disable / Tune the computation of the fast backend filling percentage
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    65
     * - When saving a record into cache :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    66
     *     1               => systematic computation of the fast backend filling percentage
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    67
     *     x (integer) > 1 => computation of the fast backend filling percentage randomly 1 times on x cache write
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    68
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    69
     * =====> (boolean) slow_backend_custom_naming :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    70
     * =====> (boolean) fast_backend_custom_naming :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    71
     * =====> (boolean) slow_backend_autoload :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    72
     * =====> (boolean) fast_backend_autoload :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    73
     * - See Zend_Cache::factory() method
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    74
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    75
     * =====> (boolean) auto_refresh_fast_cache
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    76
     * - If true, auto refresh the fast cache when a cache record is hit
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    77
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    78
     * @var array available options
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    79
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    80
    protected $_options = array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    81
        'slow_backend' => 'File',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    82
        'fast_backend' => 'Apc',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    83
        'slow_backend_options' => array(),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    84
        'fast_backend_options' => array(),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    85
        'stats_update_factor' => 10,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    86
        'slow_backend_custom_naming' => false,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    87
        'fast_backend_custom_naming' => false,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    88
        'slow_backend_autoload' => false,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    89
        'fast_backend_autoload' => false,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    90
        'auto_refresh_fast_cache' => true
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    91
    );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    92
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    93
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    94
     * Slow Backend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    95
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    96
     * @var Zend_Cache_Backend_ExtendedInterface
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    97
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    98
    protected $_slowBackend;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    99
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   100
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   101
     * Fast Backend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   102
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   103
     * @var Zend_Cache_Backend_ExtendedInterface
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   104
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   105
    protected $_fastBackend;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   106
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   107
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   108
     * Cache for the fast backend filling percentage
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   109
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   110
     * @var int
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   111
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   112
    protected $_fastBackendFillingPercentage = null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   113
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   114
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   115
     * Constructor
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   116
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   117
     * @param  array $options Associative array of options
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   118
     * @throws Zend_Cache_Exception
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   119
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   120
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   121
    public function __construct(array $options = array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   122
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   123
        parent::__construct($options);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   124
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   125
        if ($this->_options['slow_backend'] === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   126
            Zend_Cache::throwException('slow_backend option has to set');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   127
        } elseif ($this->_options['slow_backend'] instanceof Zend_Cache_Backend_ExtendedInterface) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   128
            $this->_slowBackend = $this->_options['slow_backend'];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   129
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   130
            $this->_slowBackend = Zend_Cache::_makeBackend(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   131
                $this->_options['slow_backend'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   132
                $this->_options['slow_backend_options'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   133
                $this->_options['slow_backend_custom_naming'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   134
                $this->_options['slow_backend_autoload']
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   135
            );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   136
            if (!in_array('Zend_Cache_Backend_ExtendedInterface', class_implements($this->_slowBackend))) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   137
                Zend_Cache::throwException('slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interface');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   138
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   139
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   140
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   141
        if ($this->_options['fast_backend'] === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   142
            Zend_Cache::throwException('fast_backend option has to set');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   143
        } elseif ($this->_options['fast_backend'] instanceof Zend_Cache_Backend_ExtendedInterface) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   144
            $this->_fastBackend = $this->_options['fast_backend'];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   145
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   146
            $this->_fastBackend = Zend_Cache::_makeBackend(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   147
                $this->_options['fast_backend'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   148
                $this->_options['fast_backend_options'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   149
                $this->_options['fast_backend_custom_naming'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   150
                $this->_options['fast_backend_autoload']
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   151
            );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   152
            if (!in_array('Zend_Cache_Backend_ExtendedInterface', class_implements($this->_fastBackend))) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   153
                Zend_Cache::throwException('fast_backend must implement the Zend_Cache_Backend_ExtendedInterface interface');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   154
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   155
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   156
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   157
        $this->_slowBackend->setDirectives($this->_directives);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   158
        $this->_fastBackend->setDirectives($this->_directives);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   159
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   160
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   161
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   162
     * Test if a cache is available or not (for the given id)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   163
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   164
     * @param  string $id cache id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   165
     * @return mixed|false (a cache is not available) or "last modified" timestamp (int) of the available cache record
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   166
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   167
    public function test($id)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   168
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   169
        $fastTest = $this->_fastBackend->test($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   170
        if ($fastTest) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   171
            return $fastTest;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   172
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   173
            return $this->_slowBackend->test($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   174
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   175
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   176
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   177
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   178
     * Save some string datas into a cache record
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   179
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   180
     * Note : $data is always "string" (serialization is done by the
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   181
     * core not by the backend)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   182
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   183
     * @param  string $data            Datas to cache
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   184
     * @param  string $id              Cache id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   185
     * @param  array $tags             Array of strings, the cache record will be tagged by each string entry
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   186
     * @param  int   $specificLifetime If != false, set a specific lifetime for this cache record (null => infinite lifetime)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   187
     * @param  int   $priority         integer between 0 (very low priority) and 10 (maximum priority) used by some particular backends
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   188
     * @return boolean true if no problem
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   189
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   190
    public function save($data, $id, $tags = array(), $specificLifetime = false, $priority = 8)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   191
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   192
        $usage = $this->_getFastFillingPercentage('saving');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   193
        $boolFast = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   194
        $lifetime = $this->getLifetime($specificLifetime);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   195
        $preparedData = $this->_prepareData($data, $lifetime, $priority);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   196
        if (($priority > 0) && (10 * $priority >= $usage)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   197
            $fastLifetime = $this->_getFastLifetime($lifetime, $priority);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   198
            $boolFast = $this->_fastBackend->save($preparedData, $id, array(), $fastLifetime);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   199
            $boolSlow = $this->_slowBackend->save($preparedData, $id, $tags, $lifetime);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   200
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   201
            $boolSlow = $this->_slowBackend->save($preparedData, $id, $tags, $lifetime);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   202
            if ($boolSlow === true) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   203
                $boolFast = $this->_fastBackend->remove($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   204
                if (!$boolFast && !$this->_fastBackend->test($id)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   205
                    // some backends return false on remove() even if the key never existed. (and it won't if fast is full)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   206
                    // all we care about is that the key doesn't exist now
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   207
                    $boolFast = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   208
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   209
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   210
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   211
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   212
        return ($boolFast && $boolSlow);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   213
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   214
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   215
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   216
     * Test if a cache is available for the given id and (if yes) return it (false else)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   217
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   218
     * Note : return value is always "string" (unserialization is done by the core not by the backend)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   219
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   220
     * @param  string  $id                     Cache id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   221
     * @param  boolean $doNotTestCacheValidity If set to true, the cache validity won't be tested
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   222
     * @return string|false cached datas
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   223
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   224
    public function load($id, $doNotTestCacheValidity = false)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   225
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   226
        $res = $this->_fastBackend->load($id, $doNotTestCacheValidity);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   227
        if ($res === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   228
            $res = $this->_slowBackend->load($id, $doNotTestCacheValidity);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   229
            if ($res === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   230
                // there is no cache at all for this id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   231
                return false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   232
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   233
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   234
        $array = unserialize($res);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   235
        // maybe, we have to refresh the fast cache ?
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   236
        if ($this->_options['auto_refresh_fast_cache']) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   237
            if ($array['priority'] == 10) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   238
                // no need to refresh the fast cache with priority = 10
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   239
                return $array['data'];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   240
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   241
            $newFastLifetime = $this->_getFastLifetime($array['lifetime'], $array['priority'], time() - $array['expire']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   242
            // we have the time to refresh the fast cache
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   243
            $usage = $this->_getFastFillingPercentage('loading');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   244
            if (($array['priority'] > 0) && (10 * $array['priority'] >= $usage)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   245
                // we can refresh the fast cache
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   246
                $preparedData = $this->_prepareData($array['data'], $array['lifetime'], $array['priority']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   247
                $this->_fastBackend->save($preparedData, $id, array(), $newFastLifetime);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   248
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   249
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   250
        return $array['data'];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   251
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   252
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   253
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   254
     * Remove a cache record
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   255
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   256
     * @param  string $id Cache id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   257
     * @return boolean True if no problem
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   258
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   259
    public function remove($id)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   260
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   261
        $boolFast = $this->_fastBackend->remove($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   262
        $boolSlow = $this->_slowBackend->remove($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   263
        return $boolFast && $boolSlow;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   264
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   265
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   266
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   267
     * Clean some cache records
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   268
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   269
     * Available modes are :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   270
     * Zend_Cache::CLEANING_MODE_ALL (default)    => remove all cache entries ($tags is not used)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   271
     * Zend_Cache::CLEANING_MODE_OLD              => remove too old cache entries ($tags is not used)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   272
     * Zend_Cache::CLEANING_MODE_MATCHING_TAG     => remove cache entries matching all given tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   273
     *                                               ($tags can be an array of strings or a single string)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   274
     * Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG => remove cache entries not {matching one of the given tags}
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   275
     *                                               ($tags can be an array of strings or a single string)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   276
     * Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG => remove cache entries matching any given tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   277
     *                                               ($tags can be an array of strings or a single string)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   278
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   279
     * @param  string $mode Clean mode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   280
     * @param  array  $tags Array of tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   281
     * @throws Zend_Cache_Exception
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   282
     * @return boolean true if no problem
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   283
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   284
    public function clean($mode = Zend_Cache::CLEANING_MODE_ALL, $tags = array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   285
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   286
        switch($mode) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   287
            case Zend_Cache::CLEANING_MODE_ALL:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   288
                $boolFast = $this->_fastBackend->clean(Zend_Cache::CLEANING_MODE_ALL);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   289
                $boolSlow = $this->_slowBackend->clean(Zend_Cache::CLEANING_MODE_ALL);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   290
                return $boolFast && $boolSlow;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   291
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   292
            case Zend_Cache::CLEANING_MODE_OLD:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   293
                return $this->_slowBackend->clean(Zend_Cache::CLEANING_MODE_OLD);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   294
            case Zend_Cache::CLEANING_MODE_MATCHING_TAG:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   295
                $ids = $this->_slowBackend->getIdsMatchingTags($tags);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   296
                $res = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   297
                foreach ($ids as $id) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   298
                    $bool = $this->remove($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   299
                    $res = $res && $bool;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   300
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   301
                return $res;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   302
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   303
            case Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   304
                $ids = $this->_slowBackend->getIdsNotMatchingTags($tags);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   305
                $res = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   306
                foreach ($ids as $id) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   307
                    $bool = $this->remove($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   308
                    $res = $res && $bool;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   309
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   310
                return $res;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   311
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   312
            case Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   313
                $ids = $this->_slowBackend->getIdsMatchingAnyTags($tags);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   314
                $res = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   315
                foreach ($ids as $id) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   316
                    $bool = $this->remove($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   317
                    $res = $res && $bool;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   318
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   319
                return $res;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   320
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   321
            default:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   322
                Zend_Cache::throwException('Invalid mode for clean() method');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   323
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   324
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   325
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   326
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   327
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   328
     * Return an array of stored cache ids
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   329
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   330
     * @return array array of stored cache ids (string)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   331
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   332
    public function getIds()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   333
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   334
        return $this->_slowBackend->getIds();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   335
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   336
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   337
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   338
     * Return an array of stored tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   339
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   340
     * @return array array of stored tags (string)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   341
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   342
    public function getTags()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   343
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   344
        return $this->_slowBackend->getTags();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   345
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   346
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   347
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   348
     * Return an array of stored cache ids which match given tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   349
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   350
     * In case of multiple tags, a logical AND is made between tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   351
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   352
     * @param array $tags array of tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   353
     * @return array array of matching cache ids (string)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   354
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   355
    public function getIdsMatchingTags($tags = array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   356
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   357
        return $this->_slowBackend->getIdsMatchingTags($tags);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   358
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   359
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   360
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   361
     * Return an array of stored cache ids which don't match given tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   362
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   363
     * In case of multiple tags, a logical OR is made between tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   364
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   365
     * @param array $tags array of tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   366
     * @return array array of not matching cache ids (string)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   367
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   368
    public function getIdsNotMatchingTags($tags = array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   369
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   370
        return $this->_slowBackend->getIdsNotMatchingTags($tags);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   371
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   372
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   373
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   374
     * Return an array of stored cache ids which match any given tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   375
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   376
     * In case of multiple tags, a logical AND is made between tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   377
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   378
     * @param array $tags array of tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   379
     * @return array array of any matching cache ids (string)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   380
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   381
    public function getIdsMatchingAnyTags($tags = array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   382
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   383
        return $this->_slowBackend->getIdsMatchingAnyTags($tags);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   384
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   385
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   386
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   387
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   388
     * Return the filling percentage of the backend storage
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   389
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   390
     * @return int integer between 0 and 100
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   391
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   392
    public function getFillingPercentage()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   393
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   394
        return $this->_slowBackend->getFillingPercentage();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   395
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   396
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   397
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   398
     * Return an array of metadatas for the given cache id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   399
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   400
     * The array must include these keys :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   401
     * - expire : the expire timestamp
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   402
     * - tags : a string array of tags
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   403
     * - mtime : timestamp of last modification time
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   404
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   405
     * @param string $id cache id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   406
     * @return array array of metadatas (false if the cache id is not found)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   407
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   408
    public function getMetadatas($id)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   409
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   410
        return $this->_slowBackend->getMetadatas($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   411
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   412
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   413
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   414
     * Give (if possible) an extra lifetime to the given cache id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   415
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   416
     * @param string $id cache id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   417
     * @param int $extraLifetime
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   418
     * @return boolean true if ok
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   419
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   420
    public function touch($id, $extraLifetime)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   421
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   422
        return $this->_slowBackend->touch($id, $extraLifetime);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   423
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   424
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   425
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   426
     * Return an associative array of capabilities (booleans) of the backend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   427
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   428
     * The array must include these keys :
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   429
     * - automatic_cleaning (is automating cleaning necessary)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   430
     * - tags (are tags supported)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   431
     * - expired_read (is it possible to read expired cache records
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   432
     *                 (for doNotTestCacheValidity option for example))
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   433
     * - priority does the backend deal with priority when saving
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   434
     * - infinite_lifetime (is infinite lifetime can work with this backend)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   435
     * - get_list (is it possible to get the list of cache ids and the complete list of tags)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   436
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   437
     * @return array associative of with capabilities
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   438
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   439
    public function getCapabilities()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   440
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   441
        $slowBackendCapabilities = $this->_slowBackend->getCapabilities();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   442
        return array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   443
            'automatic_cleaning' => $slowBackendCapabilities['automatic_cleaning'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   444
            'tags' => $slowBackendCapabilities['tags'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   445
            'expired_read' => $slowBackendCapabilities['expired_read'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   446
            'priority' => $slowBackendCapabilities['priority'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   447
            'infinite_lifetime' => $slowBackendCapabilities['infinite_lifetime'],
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   448
            'get_list' => $slowBackendCapabilities['get_list']
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   449
        );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   450
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   451
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   452
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   453
     * Prepare a serialized array to store datas and metadatas informations
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   454
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   455
     * @param string $data data to store
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   456
     * @param int $lifetime original lifetime
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   457
     * @param int $priority priority
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   458
     * @return string serialize array to store into cache
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   459
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   460
    private function _prepareData($data, $lifetime, $priority)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   461
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   462
        $lt = $lifetime;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   463
        if ($lt === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   464
            $lt = 9999999999;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   465
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   466
        return serialize(array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   467
            'data' => $data,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   468
            'lifetime' => $lifetime,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   469
            'expire' => time() + $lt,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   470
            'priority' => $priority
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   471
        ));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   472
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   473
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   474
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   475
     * Compute and return the lifetime for the fast backend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   476
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   477
     * @param int $lifetime original lifetime
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   478
     * @param int $priority priority
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   479
     * @param int $maxLifetime maximum lifetime
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   480
     * @return int lifetime for the fast backend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   481
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   482
    private function _getFastLifetime($lifetime, $priority, $maxLifetime = null)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   483
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   484
        if ($lifetime === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   485
            // if lifetime is null, we have an infinite lifetime
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   486
            // we need to use arbitrary lifetimes
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   487
            $fastLifetime = (int) (2592000 / (11 - $priority));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   488
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   489
            $fastLifetime = (int) ($lifetime / (11 - $priority));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   490
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   491
        if (($maxLifetime !== null) && ($maxLifetime >= 0)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   492
            if ($fastLifetime > $maxLifetime) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   493
                return $maxLifetime;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   494
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   495
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   496
        return $fastLifetime;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   497
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   498
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   499
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   500
     * PUBLIC METHOD FOR UNIT TESTING ONLY !
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   501
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   502
     * Force a cache record to expire
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   503
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   504
     * @param string $id cache id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   505
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   506
    public function ___expire($id)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   507
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   508
        $this->_fastBackend->remove($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   509
        $this->_slowBackend->___expire($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   510
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   511
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   512
    private function _getFastFillingPercentage($mode)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   513
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   514
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   515
        if ($mode == 'saving') {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   516
            // mode saving
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   517
            if ($this->_fastBackendFillingPercentage === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   518
                $this->_fastBackendFillingPercentage = $this->_fastBackend->getFillingPercentage();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   519
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   520
                $rand = rand(1, $this->_options['stats_update_factor']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   521
                if ($rand == 1) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   522
                    // we force a refresh
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   523
                    $this->_fastBackendFillingPercentage = $this->_fastBackend->getFillingPercentage();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   524
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   525
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   526
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   527
            // mode loading
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   528
            // we compute the percentage only if it's not available in cache
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   529
            if ($this->_fastBackendFillingPercentage === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   530
                $this->_fastBackendFillingPercentage = $this->_fastBackend->getFillingPercentage();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   531
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   532
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   533
        return $this->_fastBackendFillingPercentage;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   534
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   535
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   536
}
L iPk/L6uN,7U\ӓ;ۢ͞d僄7"HMBSq4ҡt)-8ULV!o ',)aUL {d80 1mZKbч[L #}W.!(mi !n$B*QԂU\&H-Q6dnj'^h0f4E8R^acd[WE' ïrTRi $SM˦h B`<*bRhN 44hѡA!Rh8dB!*c5<۲bA%yj@p64tDFR CCLɤA#`#C6%6v)t46t9;8ڏ˞W%)L;6SeRѣfԇD!I%5"\/CˍD=S@CUb/>\f3[r`1]=l_:>s1s\fs"lU-aK&QB$e!++ "Lq7p6ΩHЏC:0.4hR4xxmJڒfo5UÄE;pօZ;3.i6ݦn&1Mʕ04V7R[A+SbprYfդj+e`djcM&{x\+22XrU'>g1v //H\Jkw鹩MJ$ԁRb&LqŦWVvE=L9)f&9ɇ4rr66V1GVuzObUgixzڹ̥4a0ԈLZhу aukx%Y94+;#x")$ SaL4C|&gEft7R19|RO-gkVj+U5fUHFDFUtըW-N4/].5Qɫ&/;,1[NʕIʲ`⧀ViL2cQǽ^߅ҙ/v9ӕVfY̳KjX5_ûׇsvZZf\гl!+k˝YCs*14`Q*i+NjU 4u*:տeUi-Ro~4~RJJSrMM֔S.U8о3=)JQ'WѢhI"#;1ڂ(^I()O/+UNSJB|]R#9¶eTI 隝H_"dS Zi )GxDUrm#~g{oH]mja?TyIhTѪa5%4,%}DDG{|C/)1b"T"ΑcrI}|G~J\,~?1AY&SYabD{ aDE@G9[6V rU5KbU;!^,*U lvU"ր5;yfoexu@`h+t:s08<LOJۢ5L ykft-@mPhҨ @`4M=:kDHhɶ;(H*'De;d4*^ *֥WyPѢU 5z*$G[bWfc*f7IfͶ0  yY=)W!KaiWk1l2KiUAhl*1hZ*MҚ"BAւDRPA: JiBJT[5!e(:H6 *JKB #Q/X(A. 6a;b0BiZR2ӢHmhu*Bխ)aFڣL6aa2#0 DSɐԞSzQ4h3HhJdDSMSɊz&z@@@Iꔉ'#fQ 4hCFMhh bzڙ4hI4H4D@@`@jf<zٱltg;xUO o<#$=c秄j!4_};r.Ri"P| k+L2FB4jmF1jXTPX (AcZErs)'+QSeJHb*Ia4jѵm f>9 N23s5f1Q h#iUNiWj*6 2fcL,-l4 m5j[$3B12fmAjV1jڪKLK,#1aU*fSd4H0 HjYT2ȈLU,jKe2lIi6̌Z KfcY1ěI0ΫkQ&bƖDѵ"B MRɪVkJi1fY[MljmCbe$Ѧ9)&R&JJf-,2Y*M%&V$%kTKS/ߏUVj,YcS5MkTjL#I4IҒe pep=gciझHe$I.O &OAt )4z?G:r*̦iOTQ[̬llKmD8*kkxs΃ڒ?BGy2r&8aA?AƃhipR _Y,%8LJ/wW;c$^$z)T윖& "U;uD5y#P>y Uj;fmUAT 6ffblJl'SPq1#$䣉 qDzh51IyPqKmeKUcSj4bb[XAP5Q=Tlm[QYӔO~GO/f.d2W}ǞDSUD 9CRL>ktxVMEc;[|;Nӿ.Fllm fuE]{Iι fg_?4QfZ'^ wqU=T"J{S[^5)j*_WnI٠¤$-nNp}'Wm\Ԗx^5 75ߙs#y箙+^4'%ީTLA iBH!j9z[D}⪩ZYU-ZO,k78{L:z.c+cU;v8~ aM78y"{; ؅h(<(nPJPPh+K^Ja@31&:YO᩵YVVy5Sc~UUUY+L$I/I$ +ʪ=,$MoHsr-w /C_"p;בh>e74|lHfЩV޼# HӔ\`v+SCrݝm64=B!]ܔEAXVY)$j?_XT&BK~Cvĵ/461Ej^ӱÐd0X'77Kvqi5VQ0aXeԏYJnuHicmZe_w$/q"zw\utxPpCne(ɥ&90@QhE ðܚF5/_nA t=}LKc@ߒ_N@|L PPϐ!Xe_XR5@ܳI^,hk8L"kta_5b(fGs2P9+wƻ>_bǫNE/8:HmmR7@b)Ŷd TbjhVJ^vF]|D2eRm(k07hT 2P-bILT bbKe 햆|=" Aqune}[NьH馬6 ݚb UkN5^$Z E(SJ~!B+ҦP1.I& (gB/k@3y.پ[76lDHӆtbJ6DdgzuƤ 2@Ɋ9Dzl1:BM5SH ht[*ϚΊ4^!"L$JҔTM<Cǭιkq&Vf>YNQ ^ura)=,gs[X$ 'bjO!bju`a&#w\Q@eIYwEcM @!ewWm蔏­HJIQ9x췼tSرN)&(\Yҩspt;ʂG 3Kh!lYwi$Ğ# †N( )slװ|T k'3,G-),IHŮVM%/W6^ L,bHF6|y2aKN8Ó]K$\sJut(Uk(d6 9B]d tb q@UY_f+Fc;J}XC_pr,SQRdBi.|SSk qd% hN^eEorlȈd <ŚJkMc0 e^Uy 10%;ՁxoLٌJggjys&ȅ 5A˅Hc m0i[+Ɨ@-o ,ɯ7tW}L& 65cş8;T٘@t 2f,7l& |XG+b4L1'#.EYoeϵdFo8)LM b;睶{u}F]R,:i ,j>NñݩckK;.ZMu|vi12 #sRS " oԭ*LcT 'O("*;iﻋ~:pvLފV~+i=ii|֞^AG0tpdb#ه 3c U267W*K>!hѨ :fUoUUb $0lfЂ&23 6TgQg b2|G(_O>x븭nI,1j^Jj4CQɡ]aTL dQW}C.-hɈZPyPwu!7=4'It3 RH^EѼ7T׆5֖ULT1`'Ԇkq0ҝߡכDf=fv6@#z{=b-s:BDka!`V8(EBݟ+M 쾇w@}3 Rtd̽z ֱάt[^\ <s`|kg}B \嗴T5),rgm !o⭹$*EJgq5^]\:fN`"?LoTM9=9Nd{e$t41Uσ&+a LVejpD`4v>g&Ea<> YHE¡P5Ciz(50Ud'#$GS$zБT9|դ0R v?M:9c+;$ 60T[򼬪hQjgmT5l"_eXTa|s{igRߓzPP9$PtT,1V.2mu1AUSH8zEl* HZA941ie`l~F>Ȼdz=mTt{`+$ђ;XCm &x9mqYNWK RpmZhX@8g1ϟ2le|F0柅b#ldR*7d|M` r+W\HlW\.l2F5/+@^]mS$X֍@wKrQք1 0Pޱ<@Te7\Ol&`.TvZ{R뀹gE~,d,\ !e9/el!Hc#b'k#ƎG,x̝ AD.r,`iQCDT<qѢ1@وZ(H@I鿼AI_믏}3̴aJ"ok޼䔊mC5E1PZRl̹+ic5υ^>/RxOQBh>gPj Y)ԃ>:@j:%9W2!'sh dGJPjV֬2S rɦ6Ƣj#cF5A+$!JJۢume6үfy9c/{.4Ow2TV2G?U3MkBahskX}Ȟp}Ak`g\+*n庞_\79-Tuluę]Ǭ|ÕenuUjvQZUF[+oYǾ)s'zR3GW|l(l΍Ui/ӽNf[YT[WC?[:J1_W/ՏwKMtلhө}8&;8,uEbu8:L5<{=.#N۠B"H@r@)IdsCe&64'ԫ]󄿃^ X ` lKr6kXܠPL2hs4.Q;5OqjIݧjGeGu$T@Y1Jz'uoC}ޝZՔnVkKoOWK0m5Ӷ-R5 @$)@$L%{<1\I)wzI’'xdqtz@ ƍ(`Rг=9ҷ3Ejo۾l`94v7Hږ=0(o^}8y$M"mR!Ҡa$ϋ750:ޯւW5ְW4JQ{ `J`G~?RA&?1'y; ;90~'C8gCg'cz৙l6lhh9:ǡhhQGM (H46(AF)Jp=Jlx=3Y`Ə0;!ȥqIy#E)J74'bAcC"v$S )J(a<ܥ:49q894hM4h} 0tǘaht `|:m@T0D8'Qh4BdlQ6?CJuOq 4'@Q0w9bvph{6lٳa=N穣̧)N NyGУ SzaR8(pRS aNüxF<9=) )Oa)JY`9;p80`)=Nc"<"w 8Ǵ98Se0p0x9uJRop?U}b>UeT@! e_?ize!ĞafG嫷4mRbwǃʪo@gգ\gR+6nrڑ>H)E _y J|gJJ4?5=)Y9N>1 `P2foTO`˜aBph:ŸaNJ{ pQNNq4hri89:Slt6{Oa8=J<iOlaɣ 3CѳɣGХ:0N4x=?}O?~St8=OG{L:u8SfaOpS0 )C̤Z0h2X! ,!#1kQqfY$nJfm(Z/T3E3JI'R7mӪ͊nUfUU9r4&rL9,TML誥3S KU"Nf[&\Jrf57U2LR mBk4+b %(cP 4XLp Z7IK(RhEQBh~`:>ۓȓUSS}_nD7a5}#{CFN@P/EMy2r Đwehd2/1׫  ]v! 2hL BIU ߋG6HK$#|ԗP@aW~VMyr7WDm"#ѫ7m-H)H)tw|P{Rp/?R*P]=vc!&3$V9,۱Dd406lcjЄϳTYhEOEw,XkZwY8b%}CgUo&qbmEj_9tGT;\^[aJ4+3+JUOu6! 1O BlBM[.ʪI$!GK竾58S($!ϛvvKm拡ڴf$~dwKIqk1Kh\"im *xj'$+9W ұS"y5.ri$]7$Bƙ] W{uUSB5u3AdT %/V:-PuV0?.ZE9Au%S=CQ%+_⁴AE $I%jO^j3I%5W֍ %U^G\*zR96\w7b4ps9'wsSo+$!'}' #xbRp̼íu.vIp&﮳Jh)$SsIJqKr]fx}UW\f,xt貫ߋ:5Sx2j9':hW2~S_=5zbfh׷GʯBB9Nl1_s4a? U:uʏ%^o7!4}MBS RaÒ8)ܧOaRa4a)x=?!Mw8>Np`)) p~C{NNǰSœS} 6ru:Srpv<Oq6zRŸCF4ph= :4{ Sih3}yS=CqɇQ0u8SfaOpSqM2= Ja;ÁɱS hQٲ)Ja996rx94C t?az{J{Mu>SF{Md6}g:~))<{ gchѣуSR)Sf =8)6Q'; &0䦎Jx)Gapv0l3gSGC :0y0'0O#f;L<Jw>ܧw= y=ƇOSD&Ns:>Sry Gsu<MGz>O2ͶJl$((ٵmMf. iZmÌe"*XJjdN?E]IݶRlV*"LE@7=R;hsv ֦d̩#xFpiS0Bbp ?f њqATmҴ˩0Nﯟ^̟>DZS4e4ܴC M@. <=hkg5}HF RH!> [}ڎEpp4Ƙvie#cgHԦ>zDfpO - 2=LuzT;5243MU|5L -ƹZ:+FM6r;28$8Zd?ZQe&K"cǵ?ow4nYMeUNg/vKJf5cU̒ۅou-εVk/),&w֖֜Vz͛83kkf>NFr8\r,G4jl91٭ҭb:b/*sɞN_ ыٝ5K',>GeihHJ_ 2Eog9wXhHE~FC2?`f333pUSBחGUe{4yRl%'FPu.G#xO"WZ/a%=FOd}=Hz|ê4&4Q)DDo$9u奒N'zԷͿO~y Y&!Pɍ ifWε[WWW}sGny.u̐_kJ@2 EQB ) m$ԟ};Vi14vm3Zt[7-"IEzһ(GZFɘKcLDz3Fss]ܚWXb~m*w~ 8kdDZLcLJF-EyVݪZ7$6C&hETHIԫd׶֧v*s+[dU8A٘:?a럨Dh?= ΣX4]6Kb3'؜ a$8 'm*N'%̩SX CRN6Kj-' #`56&-mR=Og2# ?iG^3slQzDHI&Nq'q#igrϹKٲ)JR>yhlgu?d;4G>3O$Jpn J!:IGHܟ:_:Ǵ0aLEωllld{C0H,9--r:RogCfLD}ŏRB2%rO3%W ?ׅp.'э_%&)1cCw'Pbqx3m>&,UCN 0NjG1ܗ.\`۲cFD{d "d>Gl @D~]Թs>UVf__/q;wJvFGE J O7t)˜aE"$MF6h=A)SfSݯIF 09qe0rr`C 4d)SM hMv98Ać?Q5|'?]W)9prrˊ0iyi_ES )OؾR0NGt6|)县;kDbJCP(l jBy}q'[IkXTG1m'{VKn\̯`= 4aW0M2fF͚h}Ͷ:"*I)JzHf?PSGI{c'!U^!'CpcǁŶ?ꑰ2Ga4~}ba>#Ͷ?%o ֡1Ré 6| a)JR)R)JR)JP1c1cR)JR)JR)JR)JP)O!?/[޹qR?zJvr?1F2O}C >?R& t]ի|JR)Ka>ϡ8pprppp:IqY50 ~v)N!IlAQpRl^%L1'h 2}v4zN)JR)JS&FE)xhg4hѸ"O3>ÃF4< :P;Cw9F 0=DRG򏌝Dt)JSl;e&=G rSFtJR)JR)JR*9]5ѥT@75A$᭬ %)ǜ+cprR?3–}ڟ~ 8?='?ACe9>U`}ۂ30Ff')JR)JR)JR)JR)JR)JRGѢ#/܅VQU+Ynk#3%\e[W:uΖu֨sC̫y7"\וmTuB?_f8c \f~l+x4RbПqce)4`a 0)JR)JR:1n\ʳ2p~w<ĕ3݆1(bcmCctTBT 7!0Դ'@BI.2QYzG?ͱ ;G's 1I7>9U1VjOanO|ߨty;@QJR)O_;.3-~\Ő,mg׽A 0Ã98888890N<I~ھ1WaNWv8c8w##fR)MkFSRjMǔ~!iKKb8dhUTOO#J}č)M9|0Y6?L~/Eԙ,f8?=O>-蕧7q;,<$ܛs2mc7?$|O"]Qt5V5UC4lc*xl9q.\k4O.5VLLҮ+S+2pZni 6ʪL2d7&^l[p4neYW,iyMͬ+6fYVuc%k-\X֥I,.ݺe^{&Ld&I$Lv(B".ҫ`#޵rJWn2dɓ&L2ku.Đ[pqfK[؞3$h #^lM'>[Z+v)IG2$H9)ѨpS_PL}TRXۙ7ٌy-!oAAa#Ѣ0ŽLb4 ) )4hD84idRDL{yk]4L5 Ü6pz4߫%D᨞yڕb?KՖyi{ A}ЬY;Ng S>Fa61NG[\ I_ 6~wiIA}uD42(uJv8p=ц1x ;Ã.Ԇ HO>]>R)JR)JSžzID;^AMSra)B R^điiLrjODɣN1c뜌S/yߒ_pE35A)Cߌ1J-TWOOu`|as)*ǻ1-1M`;PRbΎߛ0tS}GrpѢ0a lMS1>.jf,1W쎵jkSw_cb ;ZzOe*ޚ[cI$,8TeK&I{{>ZrH 0S?)Ӊ8Or {,rA++LO祹7^Oڢ-I-YBg+^z'.<&)r >D[(8Q;"th(f60R٣f͚)Ff#FNQu0c#M Ԅ t9y]\ M-.LKH zjmA0/~wեKsAYVMXxP8aۧcTfcХ'i̳e)JR(_&C5NfUff"""fRdɑɑ&SmTxfh/աc+P;oc1UZY|bH>SJR)JR)Jy>bAn~0O(Х)v1b)JRcE&12,/̯?.ɘgԡ&.T5Sc2%|S:'s1}')JpaJ`0G *ү>z{2LGm5ʍ VeSbT}sNOK^Jܐ䅐(()Lc'K ?V"#CC"8;OqJW19IISCRx  ="*D6R)Jx0ODPQ6دC#4bu ?G'''o!Tov+eñ )7cu*2lɲF%^֟p4Iב;S։9rLs8l鷴:X0J{Ã%b_e{e'-{'d 'EұŬf0M!*U2nܒ)7a:ckvajccYI\v}R}9tѫ u;ҝtyxY WkS$}Yd7sIcKYʲryYJUENg@Q h[|SK>My>'Ǖ>$%2,elչw;e31d$ۖfjL5k:+6N 5:mLIБjN`tqdmI,eJͦ2-AɼwndusŇf5ailff)RreޮK.5?' Q[2%nY&[wB:jW-ػbk .Y;2ڞCunoJE)Ng& ن j%Xt5nLZgRΆ lBBaskIJ bAG: kLIHhp93Ey .qL)N9ٶ%4F;Y8ISz'X RhA0)JR)c1c1JR0R)J)JR)JR1c1c1cWS٦iR)JR)Lc1Æ8k_|CbCXi ,Cd*\kL)4+b{%H{9AM$tn~I-bNbAD5KBJ]I?h(#^#DzJuitE}ϼ Gױ)JR#5=cI|'RJ&JR4Cӣ=}q[qR#zW%NǃGâ8X}{}t]tTY%G0M `buwLL d*-@Z] %3! ծT"N|=uȀ5kEiw+67ƷKT+(ge9U~|) Yd!%YAYg %EiTU11qO :/GNjK$Vi5 ŘspJ{؋ n[Y:.Esotc 4g0gSJ4Q!]cv5= 2#yN8O19#) }/^5aQ;e$;XՈ; ẍ́<@ BhJD.gSAt$Z֠iw. d[TtjtWYM*:'pM8&ǠM4hFքQG!ÁF 8(&JS䦎ƍ4pl:!``ullw`: u{JSBltoLhЊf k-xP(`f.9z&8Q&uSbCǴ 5;wc~h()0llQ)Jpve)a?l/:Q,ԞgSN pM)<)z4>өԧctMCclhJw):y4h”lèhlphѲ6R{Mlv;h#Ц͘aOaa6{ = 909&e0:0l=a4t'b'lR0u0zQ: ԥ<Ώ#ceE,shލofeѣnHi 6j쐰('{r#p!CQQu6XHP\͟ I-5N֫f3s', HQø ݄7% âZ#dw!8ۓsJf͛z#sr-}[}*#i"dԒ6%8l{0 Tz9=L0dGh=nE6a$荆:JR"I)_jM#]eG&W@S?f{kB')N~rE{w{'@1zy5VdDLp\!h5QJ4R"Ij98fdY2`YbU*'FH3*,~6a{& 8+~h:Є#7H|25!\µDj|E>YX8r3o8٩ RKd**벐~cm-mJnC& R@hde 0TD仲C!i-tJPhf D`Z QlhQ)hTᄴ:{n + jנ7[01v,v4H&bmua0-&R/ٔ `Hؔ2a $@DIZF͓v 0 N9ttr&yh9|>;oߡg41c)JRqmH|)3Dmg'%)Q>2.Zj@{jTBSj3;Gp=Q{oc>Cz#v>!1ܾ!>Q)Gmt5.U'WV7KדOu=onBY1T1l5 \*FleJ$OI#-[8fM&L&ц# JS 0Bd1X͖Rt8!*$6B*oհm dTy賯>61&hɢlF6e*oq?QĤi'Çp45oڟ\IA(L4,>ʃSYR.¤HD}zpЅ!#n#Ή٫ 9113j*iQ (t>wDXAy5Ҁ*NO+宝]<&E1G7gkmM'6Iph3CGaSGc<fb\]#}!!!:9:z u8:; zz6v:hbKʨ~z3Hh=t d~zGev,+'1 $ԇ'k,e+,ew0u4NxU)>) ixf[ղa''Qu4N %Y[e8}8WvwOҨy<8' EP\b%G*kVXQF 0Џv1̜K6jiIWݫyƫmcjMjdq+Mj7."c8͛1a 4[3mMhCAÇ%TZ4RhaʭlRI3LhL.q4Uvmʖ"3ֺY/}T}mH9]uruRpH|6ET'w/k&QRynsZ4ikiVk= drҘ MTSA(k&i_nyB>zod?WS^iь~Xfm,k xEG Rm:jV4iqWIIëMii߉-j8%o"F,vm[݇  *^ӁОa+qiĚc"uVس"z?!ԥ>(Mю=qO)zumMnu*V[6CiWk%Uy sI# ɹqktXGoG4h]Tu*;3TI bdا%9hIJS 0@P,;0RL0`feb̌ZԴDnJ#ˈ&6-%۪vRJŦs29nu!1r9C=+]Y}Ex9S)_UQMYH)DJV(M1 X"%)0Uʻ۳1$J)JU++,S] Lhipi՘.+ ֙mSu:dʧ,fӷdrWWk;-r]dymUu؝DݻNg.v0ZSJ`0žZ&2h#{N `0;V]ܖX̆DRC1<ӱJRdE)SCi/aπӰ]"3hqrU?;I8jΩ^_tR1UfeMLJdh5%l-Mljm,XQQR$im Z͵$I[2Fƶf3MLj(MSHF)c2* E$BZJR([hQ0652Yۡ+̴c5P{ c|^tɼKƶHZqJF絛cYx'ژjuU&N]DzR<-=CےbS 2ڛ6l5^CzLc)NC$y^D!ۼz}h7>M#zd#pxRxKL _Ojhu:z^G@>4Ĵ|92i\J?ɖOK1ʦqJYQO^|:t1[$?wnws0p0$(`ȓyPxobx5~1x7|sfMx3F4𛸮ۘ2i,DE"M#0i[jRR# Ec& R_#^䬝׆YR>rS&-ZUQ1ab%s}MćT}5T7s6kQ_%R֏lcc,ap]NOtI~<%LcE}n[CLcL44jl )m52c,͕_EJ:eX5#=풺2&0&pu^'1uܿ~'=j`NQ'_EFsjY(4giPi5tѯƹEk@E֊aJ)HlلR(!o~W/;Qs0)CGzj:g?q||5 Xf+8Y# )O~W }φ*I맇穮%X9"Ă(%E#!wEĬGgn+I7qRu6b!8^6α t:VW;턁0 ^Y&-I^͏ Vh7vɆ 95$I5mp]u-i{cRO@'fg~rM+I3%i̞$}<׹ICъWeVQdw7Ilu:)JR&4ueQmfM2 f1mXUF%Fm\#C_9O?[*wp^ߎy̶ӽ9ͨ8T?&c-~3f:YŖ4n(VđUߑ 9E0,a} =pjھ/<ٵ쾱ǔ|ґUbd1 ?={bM MɢXΧd{bvUKb[_#&*V4^g+1ᔑ*dLRyVEr#̫x\zh3k~WK c6f>.J<ҙs ! ʶ-`I(k+uZ-A2s-ৣ?cliC͘}J)C(JOYzIt}I11Æ1Æ/gJɥr`,`.ombme;0l=|Lv^8E{td3)1K m;irJVvr9uC#aM%[K9Ig-gVg3$tRʖ9bNLRNYqQCCQ7k#thw4rpQ0Цy)'CI/*CR+#<='ٲpL4)NSNs 8;#[VXݎӎ9]Iǜa4s.KmG#DzȰ/JVh]74Vjm 1JV{n*ņ,gkt}Paly-3,=L(0ŠQL %{OY)IY+pvIζӈԌqY 5n$E IED@RdS3B;I\ծyLdu(`ha(0 Nv6P}U|̸W\iy,8(ra(0 Nv6Ptwuc5f-jņ;DGG. ЪR:$u=x q>%|J98cTiӴ<5Lw{/0!?CI1lBtےL1qRT='0N+ ZVʱ"j+DQ, ,RkM y<*R}i*UU))rzoYiÒ  a]z+akvԤ(0aLaHϐ+M*tC*aFDS1Df!*O`eMju,eM %1MUbj&`͗@ܠ41D7!dJVN5]bBp=*sa8%p¼N'!)XÄK40֥sva/X`X/HأѠbʪ4QD%@|"gYM*Kê+!Z@k5mKѸ1VFZ1,m b,G:U0TqX 0$(hQ(lG864l٤zFFM 6nM^Rv]P] 9/| Oԥ5&|DtH hSbSdϊBO.b'`fEY4c TR,NC+G %d ^[d2 WW9($ˊkc>HEr腟5[DDDD@DDDDDADDDDDDDDDDDDDADDDDDDDDQ"" #DDDDDADADDEdɓ&LtJF`%|^rbO^ST%~b ,:z]POOy)N}SYTsr7`Sʵࢇ;ۤ%{Ǣ0vRGVJtTiiyz&j3P0^b2M%1,l1Y'cm'6sW$] J%&ۄCT’ˬI$]Y0צjNPawӺ;#N)U]S'Srmbk3KXW;94*Z7nכL%+")n*1kYXܱDJoC2؄]E;LZPv1.sůSWeV$l1ɾc^53MTL^ tNŋaL ;480…$:Tt)000rhJCf-F05.GG0vv#RcUӫws-f`G2LU',>$Ƅ6sO#a|k˨h=mGN:ڄKQCD &cjˠ5ep|wSGKI֒5DՊ%KޤkZkF)5)Mk[|ժbV+0sZE35ḇhYʹRۈ:|7|xv YkEիƵ| 3:Y~_ۦL\ d|{|z+ԹTˣtR%2KJ K`.Xfј>];װ{ c1c1 aJRhLug˯)]ewep^YIyfRQ4 h Ud2˪"[ UӖ\PuE$\iْbf2m\Tf&Ja1K4UƑơ.ԵGGX6v.5;+WC9jͩ.9f:CN(Q$$JYu >𨞪CLJ5KQՓMlvi̥֜twWbu&P"~&>Qbu:M4лNB'UXdx5. Tdr͋i#Gr^ƌcf͓SScO;ByOH ~mb omkWʿ&]\b0”Ot enYP5*dRT-* v1aqӢB*Ce3mWS}cG>v_RxjWIC4#9 aZCbap^)Ԣs4L c+;iW5:0}I_+a:Je, [% 3kͥ~Nc<&kɜ}=.69G}W%ӎ]t2~9;F 35=G{ƌ8NNs2j(JSԣYŊL)H4a0N(\Grod;G٨'t-'raa\&s_S[%+=TcyQ V)J;w?*?1( 0S8Wsc<)1_@}5J)5^CÅ-|ګb^ 4TwRjSQ^#|0JHr&xO~sVI'~3Vڵbcxa\1qίM,N)s;Gks|͔)JRmS.bx+F'᭕Χ7l5!iWJ<өI)[u OR/RF^m-ڥZd +iTriTkLS2T6YM&6{͓Rt{,5yg W3oBk-mà a`MS1 Ke6k`j10RR)R+c[9,,1)J)JQ)E()JS 0)ɁHMDO+δѫ5ll׭2c0VikN T:HÇ cR5MقCMMuf CTZ,z/uOJF02=UBAǨcVt~OSyG)IJRWD/2:9^\m=zs,|*B(y4/Az ʘ5SJffZjڵ7̻MeU0UhRHoqIe?Aɦ~339.G/}1 Fg 0jU txCď%;, tTIՁ Ct$jHA| DRH#m~#F5<|sTZXF5RoA%8*$|A00y5{l =}_&`1'Dj?S89,j%eEhiXCA1cڶ3V.JU*S<%xȻ:bAbddamEnpi\GdPpdˤE(%JǰJtsJH'b,棚_ȋ4ag JDP?٧G/WS&u$g*ZGh aMU: u:'" A\8 'ETs qb̜0ڝ P,%)0(dUc2bRYdN:7v&إXRe=&&AT'ݚ^m+17gSg${= `ցDtY6қBi*GE2^w5)ooZHIr0,rL2JQbq0JdgL|%EI"^hHQLB^sIaNԅI0QO,Vq5Ff|FP*': ,Q0Tzt;*:6"m U inߨ/ # , :$MTnmcw#r.pPq?}g?bxq y7g̖>oo&+FH8 &2b vb9TU[YF":D@F>'EɲfheWSJ Gon G4h zLt"8v qC JSVۤMMK4>B0UHH( GE0Mq2vNG'ply;IGCE)hè8󓃓gb4x0zpaGsH$w8ѵmfhbF(dʃJ(Zbjq=Ƀi#ELuA]J4{۷"N ԋƾ!q[|d%UvCAXQg)FcGr)8(h04RMu4Sz;ѣ y7rUMHLpa1NDHm1E:nIQ b$RAHb (2dE{XLgNlvNH4]5ϬbGY!p:!CûvKM^tU뉪/zGa,oK#u׵m k%H;|"{qY :4&0<05D"WVݼG6<ů_o|ਃs88<03RS!#G>;Oیh΁>N3OAJ4hS.݇_UTU<#v;jt=aaDvuI9.ItF-TkΚc]ku mؙ ESHɴȐ_Oo7'#Jj@qLp K.tT$-qZ&Mt S 0 aS)0L0RaL0*/a/Zz^['eYQʱ)|f{ڑF>!@o, #mwy =/'5W} m6mjfݯ3֯ww0#I6Y :NiE?/W{1ZC] 5{+]a֙tԘ2/њ(xks\CFD C-llԚۿvHzaRFl R4lcԞsM?){)Y[6_?Y̰!=/X)ĽKUr\sL3K2dp$xXli=e$f̉jM̵)c,cMVgrVnqܕ"ٵ 0ACT3Sf6 ttt)F4Iх. hR4h&4e2eXaNUWpL28T8<:^qfIZ9G!7J$¹U e5XkœdL(&EFBdTjX6 8cY 5ITj(ȻfJ.w6u8ITTIT4(uߟqTK֟b7 PԂĈW/|gڱZa.iCY.8VT+W&Â;監 hc2,&z gevNz+9d4 )&&0u\',ӆɫf5Xjpz=)FSaL4R+wtkK``j`ָ%k-yhl̬dm-Nbka6o_*ɲOhdCMC?fgW3jWYSl=f_ dK[ilI%b ,$hw!S8C%Cb"vcp>VWjΞO:Th{M}<ԞͥYd_Bjde,z5jض=̷MeZ<*]rU)#\s9GzULb9km /kj%q%t8L҇~]ն.dfˍ P;ws;<|f5bl<Ǣεk̥dWdjV_^lYƷt-tsVKQ tgkOh`4Tutw=c-]uqs33-PS,kZ˜SYbl0T9lzl|)#99)JR)JSm35jjcTRIiZ{sHVw}|Sү#+2W_v$ ՘s N5H+SVM&\K5'Xe-b4^C0|N&C"KʋjrlgUKW[|GОG.H!Ҫ}J}l?uj,զ6klCPd̫jEE,LmV&afMkXeS[-m^c;a{~$9]Nf&ҏfaNBy#1^?%>U,^v>8W Jz>筁0fG}4̾\̤o&ɪKи1VUQBQB[.edf(/7 5G,[3yvؕ|4Wq$~!_2O|躺_D%OÖaߞ )]-cE9i4 Os>HCBJiU/\d~]p3~k]gk>݊qVukV55kN={WKG0tc1,cK1c)JR)l$։SUflec7^xP~!a!~/,q&)q%?g#N^W)+m&FCk)UYlulTJ;"7cMMjnyW7⩥#cMjqH,VeʭCu2̸": yCJz/5xw(sFM6u:*:i{7O"hÃpSgS'j:4ObiTa nGUK&O;&dz잇!u {?\wz}yKCL4jaP.tZf0SfE)hFҠOR)O0;=D}ARIO2G}ト|gaIKJ>;1AY&SY<|_TP??`7@@jz"zO)~@4 TIC4Aj4@@@*HD=LjmOI2zjBT$P$f7?y$ִS0˟rXEԦK%ai[3*n%DZ٤7;p״.2vj>DtcD _u9sk'޹,@P{p-k*'T-t'`\aojZI' ff3SŰͅ_WkSt/{߁}VYd74iV]LԔlk[k% G$ˆ ޑ[ʯuZw}G[)ågdFnİWu M'fʯ#"zҴOG[ޓY=9s#f`z!s MkekkRbuMLh)E#gBzrf5؁Fuj7@,95U9a4 1Ae Ea $^fc5eU6zdYGv=΄:͆sik[#d.G(p\i/u=_JdaVx }&tM*}bEpp*<Ғ&lo+Zڙzf$RfY8.L͏cbtr<i,d܏zs:gwEUIf\|U)ꣴܑN$˗C@