Completed
Pull Request — master (#7)
by
unknown
04:38
created

CollectionFactory   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 5
Bugs 1 Features 3
Metric Value
wmc 7
c 5
b 1
f 3
lcom 1
cbo 2
dl 0
loc 67
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 2
A has() 0 4 1
B factory() 0 27 4
1
<?php
2
/**
3
 * SocialConnect project
4
 * @author: Patsura Dmitry https://github.com/ovr <[email protected]>
5
 */
6
7
namespace SocialConnect\Auth\Provider;
8
9
use LogicException;
10
use SocialConnect\Auth\Provider\OAuth1\AbstractProvider as OAuth1AbstractProvider;
11
use SocialConnect\Auth\Provider\OAuth2\AbstractProvider as OAuth2AbstractProvider;
12
use SocialConnect\Auth\Service;
13
14
/**
15
 * Class Factory
16
 * @package SocialConnect\Auth\Provider
17
 */
18
class CollectionFactory implements FactoryInterface
19
{
20
    /**
21
     * @var array
22
     */
23
    protected $providers = [
24
        'facebook' => '\SocialConnect\Facebook\Provider',
25
        'github' => '\SocialConnect\Github\Provider',
26
        'instagram' => '\SocialConnect\Instagram\Provider',
27
        'twitter' => '\SocialConnect\Twitter\Provider',
28
        'google' => '\SocialConnect\Google\Provider',
29
        'vk' => '\SocialConnect\Vk\Provider',
30
    ];
31
32
    /**
33
     * @param array $providers
34
     */
35
    public function __construct(array $providers = null)
36
    {
37
        if ($providers) {
38
            $this->providers = $providers;
39
        }
40
    }
41
42
    /**
43
     * @param $id
44
     * @return bool
45
     */
46
    public function has($id)
47
    {
48
        return isset($this->providers[$id]);
49
    }
50
51
    /**
52
     * @param string $id
53
     * @param array $parameters
54
     * @param Service $service
55
     * @return OAuth1AbstractProvider|OAuth2AbstractProvider
56
     */
57
    public function factory($id, array $parameters, Service $service)
58
    {
59
        $consumer = new Consumer($parameters['applicationId'], $parameters['applicationSecret']);
60
61
        $id = strtolower($id);
62
63
        if (!isset($this->providers[$id])) {
64
            throw new LogicException('Provider with $id = ' . $id . ' doest not exist');
65
        }
66
67
        $providerClassName = $this->providers[$id];
68
69
        /**
70
         * @var $provider AbstractBaseProvider
71
         */
72
        $provider = new $providerClassName($service, $consumer);
73
74
        if (isset($parameters['scope'])) {
75
            $provider->setScope($parameters['scope']);
76
        }
77
78
        if (isset($parameters['fields'])) {
79
            $provider->setFields($parameters['fields']);
80
        }
81
82
        return $provider;
83
    }
84
}
85