Completed
Push — master ( 1df25f...8ce6b0 )
by Carsten
19:27 queued 09:21
created

PdoAllPermissions::count()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
namespace Germania\Permissions;
3
4
use Psr\Log\LoggerInterface;
5
use Psr\Log\LoggerAwareTrait;
6
use Psr\Log\NullLogger;
7
8
class PdoAllPermissions implements \Countable, \IteratorAggregate
9
{
10
11
    use LoggerAwareTrait;
12
13
    /**
14
     * @var \PDOStatement
15
     */
16
    public $stmt;
17
18
    /**
19
     * @var Array
20
     */
21
    public $permissions = array();
22
23
    /**
24
     * @var string
25
     */
26
    public $permissions_table = "permissions";
27
28
    /**
29
     * @var string
30
     */
31
    public $permissions_roles_table = "permissions_roles";
32
33
    /**
34
     * @var Seperator string for roles in SELECT statement
35
     */
36
    protected $separator = ",";
37
38
39
    /**
40
     * @param \PDO                 $pdo                      PDO instance
41
     * @param string               $permissions_table        Permissions table name
42
     * @param string               $permissions_roles_table  Permissions and roles assignments table
43
     * @param LoggerInterface|null $logger                   Optional: PSR-3 Logger
44
     */
45
    public function __construct( \PDO $pdo, $permissions_table, $permissions_roles_table, LoggerInterface $logger = null )
46
    {
47
        $this->setLogger( $logger ?: new NullLogger );
48
49
        // Prerequisites
50
        $this->permissions_table       = $permissions_table;
51
        $this->permissions_roles_table = $permissions_roles_table;
52
53
        // Read pages and allowed roles
54
        $sql =  "SELECT
55
        -- Select name twice here because of UNIQUE
56
        P.permission_name AS name,
57
        P.permission_name AS name,
58
        P.permission_description AS description,
59
        P.info AS info,
60
        GROUP_CONCAT(Pmm.role_id ORDER BY role_id ASC SEPARATOR '{$this->separator}') AS assigned_roles
61
62
        FROM {$this->permissions_table} P
63
        LEFT JOIN {$this->permissions_roles_table} Pmm
64
        ON P.id = Pmm.permission_id
65
66
        GROUP BY name";
67
68
        // Prepare business
69
        $this->stmt = $pdo->prepare( $sql );
70
71
        $this->stmt->execute();
72
73
        $this->permissions = $this->stmt->fetchAll( \PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC);
74
    }
75
76
    /**
77
     * @return int
78
     */
79
    public function count()
80
    {
81
        return count( $this->permissions );
82
    }
83
84
    /**
85
     * @return ArrayIterator
86
     */
87
    public function getIterator()
88
    {
89
        return new \ArrayIterator( $this->permissions );
90
    }
91
}
92