Completed
Push — master ( 8bbcaa...068c90 )
by Nazar
04:59
created

Any::set_any_permissions()   C

Complexity

Conditions 8
Paths 72

Size

Total Lines 50
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 30
CRAP Score 8

Importance

Changes 0
Metric Value
cc 8
eloc 32
nc 72
nop 3
dl 0
loc 50
ccs 30
cts 30
cp 1
crap 8
rs 6.3636
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 Either `user` or `group`
24
	 *
25
	 * @return int[]|false
26
	 */
27 18
	protected function get_any_permissions ($id, $type) {
28 18
		$id    = (int)$id;
29 18
		$table = '[prefix]users_permissions';
30 18
		if ($type == 'group') {
31 16
			$table = '[prefix]groups_permissions';
32
		}
33 18
		return $this->cache->get(
34 18
			"permissions/$id",
35 18
			function () use ($id, $table) {
36 18
				$permissions       = false;
37 18
				$permissions_array = $this->db()->qfa(
38
					"SELECT
39
						`permission`,
40
						`value`
41 18
					FROM `$table`
42 18
					WHERE `id` = '$id'
43 18
					ORDER BY `permission` ASC"
44
				);
45 18
				if (is_array($permissions_array)) {
46 18
					$permissions = [];
47 18
					foreach ($permissions_array as $permission) {
48 4
						$permissions[$permission['permission']] = (int)(bool)$permission['value'];
49
					}
50
				}
51 18
				return $permissions;
52 18
			}
53
		);
54
	}
55
	/**
56
	 * @param array  $data
57
	 * @param int    $id
58
	 * @param string $type Either `user` or `group`
59
	 *
60
	 * @return bool
61
	 */
62 4
	protected function set_any_permissions (array $data, $id, $type) {
63 4
		$id    = (int)$id;
64 4
		$table = '[prefix]users_permissions';
65 4
		if ($type == 'group') {
66 4
			$table = '[prefix]groups_permissions';
67
		}
68 4
		$insert_update = [];
69 4
		$delete        = [];
70 4
		foreach ($data as $permission => $value) {
71 4
			if ($value == -1) {
72 4
				$delete[] = (int)$permission;
73
			} else {
74 4
				$insert_update[] = [$permission, (int)(bool)$value];
75
			}
76
		}
77 4
		unset($permission, $value);
78 4
		$return = true;
79 4
		if ($delete) {
80 4
			$delete = implode(', ', $delete);
81 4
			$return = (bool)$this->db_prime()->q(
82 4
				"DELETE FROM `$table`
83
				WHERE
84 4
					`id`			= '$id' AND
85 4
					`permission`	IN ($delete)"
86
			);
87
		}
88 4
		unset($delete);
89 4
		if ($insert_update) {
90
			$return =
91 4
				$return &&
92 4
				$this->db_prime()->insert(
93 4
					"REPLACE INTO `$table`
94
						(
95
							`id`,
96
							`permission`,
97
							`value`
98
						) VALUES (
99 4
							'$id',
100
							'%d',
101
							'%d'
102 4
						)",
103
					$insert_update
104
				);
105
		}
106 4
		$this->cache->del("permissions/$id");
107 4
		if ($type == 'group') {
108 4
			Cache::instance()->del('users/permissions');
109
		}
110 4
		return (bool)$return;
111
	}
112
	/**
113
	 * @param int    $id
114
	 * @param string $type Either `user` or `group`
115
	 *
116
	 * @return bool
117
	 */
118 20
	protected function del_any_permissions_all ($id, $type) {
119 20
		$id    = (int)$id;
120 20
		$table = '[prefix]users_permissions';
121 20
		if ($type == 'group') {
122 2
			$table = '[prefix]groups_permissions';
123
		}
124 20
		$return = $this->db_prime()->q(
125 20
			"DELETE FROM `$table`
126 20
			WHERE `id` = '$id'"
127
		);
128 20
		$this->cache->del("permissions/$id");
129 20
		if ($type == 'group') {
130 2
			Cache::instance()->del('users/permissions');
131
		}
132 20
		return (bool)$return;
133
	}
134
}
135