Completed
Push — master ( 701c1d...a14c1c )
by Nazar
04:37
created

Any::get_any_permissions()   B

Complexity

Conditions 6
Paths 4

Size

Total Lines 36
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 22
CRAP Score 6.0208

Importance

Changes 0
Metric Value
cc 6
eloc 26
nc 4
nop 2
dl 0
loc 36
ccs 22
cts 24
cp 0.9167
crap 6.0208
rs 8.439
c 0
b 0
f 0
1
<?php
2
/**
3
 * @package   CleverStyle Framework
4
 * @author    Nazar Mokrynskyi <[email protected]>
5
 * @copyright Copyright (c) 2013-2016, Nazar Mokrynskyi
6
 * @license   MIT License, see license.txt
7
 */
8
namespace cs\Permission;
9
use
10
	cs\Cache;
11
12
/**
13
 * Class Any with common methods for User and Group classes
14
 *
15
 * @property Cache $cache
16
 *
17
 * @method \cs\DB\_Abstract db()
18
 * @method \cs\DB\_Abstract db_prime()
19
 */
20
trait Any {
21
	/**
22
	 * @param int    $id
23
	 * @param string $type
24
	 *
25
	 * @return int[]|false
26
	 */
27 4
	protected function get_any_permissions ($id, $type) {
28 4
		$id = (int)$id;
29 4
		if (!$id) {
30
			return false;
31
		}
32
		switch ($type) {
33 4
			case 'user':
34 2
				$table = '[prefix]users_permissions';
35 2
				break;
36 2
			case 'group':
37 2
				$table = '[prefix]groups_permissions';
38 2
				break;
39
			default:
40
				return false;
41
		}
42 4
		return $this->cache->get(
43 4
			"permissions/$id",
44 4
			function () use ($id, $table) {
45 4
				$permissions       = false;
46 4
				$permissions_array = $this->db()->qfa(
47
					"SELECT
48
						`permission`,
49
						`value`
50 4
					FROM `$table`
51 4
					WHERE `id` = '$id'"
52
				);
53 4
				if (is_array($permissions_array)) {
54 4
					$permissions = [];
55 4
					foreach ($permissions_array as $permission) {
56 2
						$permissions[$permission['permission']] = (int)(bool)$permission['value'];
57
					}
58
				}
59 4
				return $permissions;
60 4
			}
61
		);
62
	}
63
	/**
64
	 * @param array  $data
65
	 * @param int    $id
66
	 * @param string $type
67
	 *
68
	 * @return bool
69
	 */
70 2
	protected function set_any_permissions ($data, $id, $type) {
71 2
		$id = (int)$id;
72 2
		if (!is_array($data) || empty($data) || !$id) {
73
			return false;
74
		}
75
		switch ($type) {
76 2
			case 'user':
77
				$table = '[prefix]users_permissions';
78
				break;
79 2
			case 'group':
80 2
				$table = '[prefix]groups_permissions';
81 2
				break;
82
			default:
83
				return false;
84
		}
85 2
		$insert_update = [];
86 2
		$delete        = [];
87 2
		foreach ($data as $permission => $value) {
88 2
			if ($value == -1) {
89 2
				$delete[] = (int)$permission;
90
			} else {
91 2
				$insert_update[] = [$permission, (int)(bool)$value];
92
			}
93
		}
94 2
		unset($permission, $value);
95 2
		$return = true;
96 2
		if ($delete) {
97 2
			$delete = implode(', ', $delete);
98 2
			$return = (bool)$this->db_prime()->q(
99 2
				"DELETE FROM `$table`
100
				WHERE
101 2
					`id`			= '$id' AND
102 2
					`permission`	IN ($delete)"
103
			);
104
		}
105 2
		unset($delete);
106 2
		if ($insert_update) {
107
			$return =
108 2
				$return &&
109 2
				$this->db_prime()->insert(
110 2
					"REPLACE INTO `$table`
111
						(
112
							`id`,
113
							`permission`,
114
							`value`
115
						) VALUES (
116 2
							'$id',
117
							'%d',
118
							'%d'
119 2
						)",
120
					$insert_update
121
				);
122
		}
123
		unset(
124 2
			$insert_update,
125 2
			$this->cache->{"permissions/$id"}
126
		);
127 2
		if ($type == 'group') {
128 2
			unset(Cache::instance()->{'users/permissions'});
129
		}
130 2
		return (bool)$return;
131
	}
132
	/**
133
	 * @param int    $id
134
	 * @param string $type
135
	 *
136
	 * @return bool
137
	 */
138 4
	protected function del_any_permissions_all ($id, $type) {
139 4
		$id = (int)$id;
140 4
		if (!$id) {
141
			return false;
142
		}
143
		switch ($type) {
144 4
			case 'user':
145 2
				$table = '[prefix]users_permissions';
146 2
				break;
147 2
			case 'group':
148 2
				$table = '[prefix]groups_permissions';
149 2
				break;
150
			default:
151
				return false;
152
		}
153 4
		$return = $this->db_prime()->q(
154 4
			"DELETE FROM `$table`
155 4
			WHERE `id` = '$id'"
156
		);
157 4
		if ($return) {
158 4
			unset($this->cache->{"permissions/$id"});
159 4
			if ($type == 'group') {
160 2
				unset(Cache::instance()->{'users/permissions'});
161
			}
162 4
			return true;
163
		}
164
		return false;
165
	}
166
}
167