Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

MockArraySessionStorage.php

Zuletzt modifiziert: 09.10.2024, 12:59 - Dateigröße: 5.26 KiB


 001  <?php
 002   
 003  /*
 004   * This file is part of the Symfony package.
 005   *
 006   * (c) Fabien Potencier <fabien@symfony.com>
 007   *
 008   * For the full copyright and license information, please view the LICENSE
 009   * file that was distributed with this source code.
 010   */
 011   
 012  namespace Symfony\Component\HttpFoundation\Session\Storage;
 013   
 014  use Symfony\Component\HttpFoundation\Session\SessionBagInterface;
 015   
 016  /**
 017   * MockArraySessionStorage mocks the session for unit tests.
 018   *
 019   * No PHP session is actually started since a session can be initialized
 020   * and shutdown only once per PHP execution cycle.
 021   *
 022   * When doing functional testing, you should use MockFileSessionStorage instead.
 023   *
 024   * @author Fabien Potencier <fabien@symfony.com>
 025   * @author Bulat Shakirzyanov <mallluhuct@gmail.com>
 026   * @author Drak <drak@zikula.org>
 027   */
 028  class MockArraySessionStorage implements SessionStorageInterface
 029  {
 030      /**
 031       * @var string
 032       */
 033      protected $id = '';
 034   
 035      /**
 036       * @var string
 037       */
 038      protected $name;
 039   
 040      /**
 041       * @var bool
 042       */
 043      protected $started = false;
 044   
 045      /**
 046       * @var bool
 047       */
 048      protected $closed = false;
 049   
 050      /**
 051       * @var array
 052       */
 053      protected $data = array();
 054   
 055      /**
 056       * @var MetadataBag
 057       */
 058      protected $metadataBag;
 059   
 060      /**
 061       * @var array
 062       */
 063      protected $bags;
 064   
 065      /**
 066       * Constructor.
 067       *
 068       * @param string      $name    Session name
 069       * @param MetadataBag $metaBag MetadataBag instance.
 070       */
 071      public function __construct($name = 'MOCKSESSID', MetadataBag $metaBag = null)
 072      {
 073          $this->name = $name;
 074          $this->setMetadataBag($metaBag);
 075      }
 076   
 077      /**
 078       * Sets the session data.
 079       *
 080       * @param array $array
 081       */
 082      public function setSessionData(array $array)
 083      {
 084          $this->data = $array;
 085      }
 086   
 087      /**
 088       * {@inheritdoc}
 089       */
 090      public function start()
 091      {
 092          if ($this->started && !$this->closed) {
 093              return true;
 094          }
 095   
 096          if (empty($this->id)) {
 097              $this->id = $this->generateId();
 098          }
 099   
 100          $this->loadSession();
 101   
 102          return true;
 103      }
 104   
 105      /**
 106       * {@inheritdoc}
 107       */
 108      public function regenerate($destroy = false, $lifetime = null)
 109      {
 110          if (!$this->started) {
 111              $this->start();
 112          }
 113   
 114          $this->metadataBag->stampNew($lifetime);
 115          $this->id = $this->generateId();
 116   
 117          return true;
 118      }
 119   
 120      /**
 121       * {@inheritdoc}
 122       */
 123      public function getId()
 124      {
 125          return $this->id;
 126      }
 127   
 128      /**
 129       * {@inheritdoc}
 130       */
 131      public function setId($id)
 132      {
 133          if ($this->started) {
 134              throw new \LogicException('Cannot set session ID after the session has started.');
 135          }
 136   
 137          $this->id = $id;
 138      }
 139   
 140      /**
 141       * {@inheritdoc}
 142       */
 143      public function getName()
 144      {
 145          return $this->name;
 146      }
 147   
 148      /**
 149       * {@inheritdoc}
 150       */
 151      public function setName($name)
 152      {
 153          $this->name = $name;
 154      }
 155   
 156      /**
 157       * {@inheritdoc}
 158       */
 159      public function save()
 160      {
 161          if (!$this->started || $this->closed) {
 162              throw new \RuntimeException("Trying to save a session that was not started yet or was already closed");
 163          }
 164          // nothing to do since we don't persist the session data
 165          $this->closed = false;
 166          $this->started = false;
 167      }
 168   
 169      /**
 170       * {@inheritdoc}
 171       */
 172      public function clear()
 173      {
 174          // clear out the bags
 175          foreach ($this->bags as $bag) {
 176              $bag->clear();
 177          }
 178   
 179          // clear out the session
 180          $this->data = array();
 181   
 182          // reconnect the bags to the session
 183          $this->loadSession();
 184      }
 185   
 186      /**
 187       * {@inheritdoc}
 188       */
 189      public function registerBag(SessionBagInterface $bag)
 190      {
 191          $this->bags[$bag->getName()] = $bag;
 192      }
 193   
 194      /**
 195       * {@inheritdoc}
 196       */
 197      public function getBag($name)
 198      {
 199          if (!isset($this->bags[$name])) {
 200              throw new \InvalidArgumentException(sprintf('The SessionBagInterface %s is not registered.', $name));
 201          }
 202   
 203          if (!$this->started) {
 204              $this->start();
 205          }
 206   
 207          return $this->bags[$name];
 208      }
 209   
 210      /**
 211       * {@inheritdoc}
 212       */
 213      public function isStarted()
 214      {
 215          return $this->started;
 216      }
 217   
 218      /**
 219       * Sets the MetadataBag.
 220       *
 221       * @param MetadataBag $bag
 222       */
 223      public function setMetadataBag(MetadataBag $bag = null)
 224      {
 225          if (null === $bag) {
 226              $bag = new MetadataBag();
 227          }
 228   
 229          $this->metadataBag = $bag;
 230      }
 231   
 232      /**
 233       * Gets the MetadataBag.
 234       *
 235       * @return MetadataBag
 236       */
 237      public function getMetadataBag()
 238      {
 239          return $this->metadataBag;
 240      }
 241   
 242      /**
 243       * Generates a session ID.
 244       *
 245       * This doesn't need to be particularly cryptographically secure since this is just
 246       * a mock.
 247       *
 248       * @return string
 249       */
 250      protected function generateId()
 251      {
 252          return sha1(uniqid(mt_rand()));
 253      }
 254   
 255      protected function loadSession()
 256      {
 257          $bags = array_merge($this->bags, array($this->metadataBag));
 258   
 259          foreach ($bags as $bag) {
 260              $key = $bag->getStorageKey();
 261              $this->data[$key] = isset($this->data[$key]) ? $this->data[$key] : array();
 262              $bag->initialize($this->data[$key]);
 263          }
 264   
 265          $this->started = true;
 266          $this->closed = false;
 267      }
 268  }
 269