1<?php
2/**
3 * Copyright 2017 Facebook, Inc.
4 *
5 * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6 * use, copy, modify, and distribute this software in source code or binary
7 * form for use in connection with the web services and APIs provided by
8 * Facebook.
9 *
10 * As with any software that integrates with the Facebook platform, your use
11 * of this software is subject to the Facebook Developer Principles and
12 * Policies [http://developers.facebook.com/policy/]. This copyright notice
13 * shall be included in all copies or substantial portions of the software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
22 *
23 */
24namespace Facebook\PersistentData;
25
26use InvalidArgumentException;
27
28class PersistentDataFactory
29{
30    private function __construct()
31    {
32        // a factory constructor should never be invoked
33    }
34
35    /**
36     * PersistentData generation.
37     *
38     * @param PersistentDataInterface|string|null $handler
39     *
40     * @throws InvalidArgumentException If the persistent data handler isn't "session", "memory", or an instance of Facebook\PersistentData\PersistentDataInterface.
41     *
42     * @return PersistentDataInterface
43     */
44    public static function createPersistentDataHandler($handler)
45    {
46        if (!$handler) {
47            return session_status() === PHP_SESSION_ACTIVE
48                ? new FacebookSessionPersistentDataHandler()
49                : new FacebookMemoryPersistentDataHandler();
50        }
51
52        if ($handler instanceof PersistentDataInterface) {
53            return $handler;
54        }
55
56        if ('session' === $handler) {
57            return new FacebookSessionPersistentDataHandler();
58        }
59        if ('memory' === $handler) {
60            return new FacebookMemoryPersistentDataHandler();
61        }
62
63        throw new InvalidArgumentException('The persistent data handler must be set to "session", "memory", or be an instance of Facebook\PersistentData\PersistentDataInterface');
64    }
65}
66