Check for implicit conversion of array to boolean.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | |||
4 | class PermissionProviderFactory extends Object |
||
5 | { |
||
6 | public function CreateDefaultMember($email, $firstName = '', $surname = '', $password = '') |
||
7 | { |
||
8 | $filter = array('Email' => $email); |
||
9 | $member = DataObject::get_one( |
||
10 | 'Member', |
||
11 | $filter, |
||
12 | $cacheDataObjectGetOne = false |
||
13 | ); |
||
14 | if (!$member) { |
||
15 | $member = Member::create($filter); |
||
16 | } |
||
17 | if (!$firstName) { |
||
18 | $firstName = 'Default'; |
||
19 | } |
||
20 | if (!$surname) { |
||
21 | $surname = 'User'; |
||
22 | } |
||
23 | |||
24 | $member->FirstName = $firstName; |
||
25 | $member->Surname = $surname; |
||
26 | $member->write(); |
||
27 | if ($password) { |
||
28 | $member->changePassword($password); |
||
29 | } |
||
30 | return $member; |
||
31 | } |
||
32 | |||
33 | /** |
||
34 | * set up a group with permissions, roles, etc... |
||
35 | * also note that this class implements PermissionProvider. |
||
36 | * |
||
37 | * @param string $code code for the group - will always be converted to lowercase |
||
38 | * @param string $name title for the group |
||
39 | * @param Group | String $parentGroup group object that is the parent of the group. You can also provide a string (name / title of group) |
||
40 | * @param string $permissionCode Permission Code for the group (e.g. CMS_DO_THIS_OR_THAT) |
||
41 | * @param string $roleTitle Role Title - e.g. Store Manager |
||
42 | * @param array $permissionArray Permission Array - list of permission codes applied to the group |
||
43 | * @param Member | String $member Default Member added to the group (e.g. [email protected]). You can also provide an email address |
||
44 | */ |
||
45 | public function CreateGroup($code, $name, $parentGroup = null, $permissionCode = '', $roleTitle = '', $permissionArray = array(), $member = null) |
||
46 | { |
||
47 | if (! $permissionArray) { |
||
0 ignored issues
–
show
|
|||
48 | $permissionArray = array(); |
||
49 | } |
||
50 | if (! is_array($permissionArray)) { |
||
51 | user_error('Permission Array expects null or an array... currently: '.print_r($permissionArray, 1)); |
||
52 | } |
||
53 | //changing to lower case seems to be very important |
||
54 | //unidentified bug so far |
||
55 | $code = strtolower($code); |
||
56 | if (!$code) { |
||
57 | user_error("Can't create a group without a $code ($name)"); |
||
58 | } |
||
59 | if (!$name) { |
||
60 | user_error("Can't create a group without a $name ($code)"); |
||
61 | } |
||
62 | $filterArrayForGroup = array('Code' => $code); |
||
63 | $groupDataList = Group::get()->filter($filterArrayForGroup); |
||
64 | $groupCount = $groupDataList->count(); |
||
65 | $groupStyle = 'updated'; |
||
66 | if ($groupCount > 1) { |
||
67 | user_error("There is more than one group with the $name ($code) Code"); |
||
68 | } |
||
69 | if ($groupCount == 0) { |
||
70 | $group = Group::create($filterArrayForGroup); |
||
71 | $groupStyle = 'created'; |
||
72 | } else { |
||
73 | $group = $groupDataList->First(); |
||
74 | } |
||
75 | $group->Locked = 1; |
||
76 | $group->Title = $name; |
||
77 | $parentGroupStyle = 'updated'; |
||
78 | if ($parentGroup) { |
||
79 | DB::alteration_message('adding parent group'); |
||
80 | if (is_string($parentGroup)) { |
||
81 | $parentGroupName = $parentGroup; |
||
82 | $parentGroup = DataObject::get_one( |
||
83 | 'Group', |
||
84 | array('Title' => $parentGroupName), |
||
85 | $cacheDataObjectGetOne = false |
||
86 | ); |
||
87 | if (!$parentGroup) { |
||
88 | $parentGroup = Group::create(); |
||
89 | $parentGroupStyle = 'created'; |
||
90 | $parentGroup->Title = $parentGroupName; |
||
91 | $parentGroup->write(); |
||
92 | DB::alteration_message("$parentGroupStyle $parentGroupName", $parentGroupStyle); |
||
93 | } |
||
94 | } |
||
95 | if ($parentGroup) { |
||
96 | $group->ParentID = $parentGroup->ID; |
||
97 | } |
||
98 | } |
||
99 | $group->write(); |
||
100 | DB::alteration_message("$groupStyle $name ($code) group", $groupStyle); |
||
101 | $doubleGroups = Group::get() |
||
102 | ->filter(array('Code' => $code)) |
||
103 | ->exclude(array('ID' => $group->ID)); |
||
104 | if ($doubleGroups->count()) { |
||
105 | DB::alteration_message($doubleGroups->count().' groups with the same name', 'deleted'); |
||
106 | $realMembers = $group->Members(); |
||
107 | foreach ($doubleGroups as $doubleGroup) { |
||
108 | $fakeMembers = $doubleGroup->Members(); |
||
109 | foreach ($fakeMembers as $fakeMember) { |
||
110 | DB::alteration_message('adding customers: '.$fakeMember->Email, 'created'); |
||
111 | $realMembers->add($fakeMember); |
||
112 | } |
||
113 | DB::alteration_message('deleting double group ', 'deleted'); |
||
114 | $doubleGroup->delete(); |
||
115 | } |
||
116 | } |
||
117 | if ($permissionCode) { |
||
118 | $permissionCodeCount = DB::query("SELECT * FROM \"Permission\" WHERE \"GroupID\" = '".$group->ID."' AND \"Code\" LIKE '".$permissionCode."'")->numRecords(); |
||
119 | if ($permissionCodeCount == 0) { |
||
120 | DB::alteration_message('granting '.$name." permission code $permissionCode ", 'created'); |
||
121 | Permission::grant($group->ID, $permissionCode); |
||
122 | } else { |
||
123 | DB::alteration_message($name." permission code $permissionCode already granted"); |
||
124 | } |
||
125 | } |
||
126 | //we unset it here to avoid confusion with the |
||
127 | //other codes we use later on |
||
128 | $permissionArray[] = $permissionCode; |
||
129 | unset($permissionCode); |
||
130 | if ($roleTitle) { |
||
131 | $permissionRoleCount = PermissionRole::get() |
||
132 | ->Filter(array('Title' => $roleTitle)) |
||
133 | ->Count(); |
||
134 | if ($permissionRoleCount > 1) { |
||
135 | db::alteration_message("There is more than one Permission Role with title $roleTitle ($permissionRoleCount)", 'deleted'); |
||
136 | $permissionRolesFirst = DataObject::get_one( |
||
137 | 'PermissionRole', |
||
138 | array('Title' => $roleTitle), |
||
139 | $cacheDataObjectGetOne = false |
||
140 | ); |
||
141 | $permissionRolesToDelete = PermissionRole::get() |
||
142 | ->Filter(array('Title' => $roleTitle)) |
||
143 | ->Exclude(array('ID' => $permissionRolesFirst->ID)); |
||
144 | foreach ($permissionRolesToDelete as $permissionRoleToDelete) { |
||
145 | db::alteration_message("DELETING double permission role $roleTitle", 'deleted'); |
||
146 | $permissionRoleToDelete->delete(); |
||
147 | } |
||
148 | } |
||
149 | elseif ($permissionRoleCount == 1) { |
||
150 | //do nothing |
||
151 | DB::alteration_message("$roleTitle role in place"); |
||
152 | } else { |
||
153 | DB::alteration_message("adding $roleTitle role", 'created'); |
||
154 | $permissionRole = PermissionRole::create(); |
||
155 | $permissionRole->Title = $roleTitle; |
||
156 | $permissionRole->OnlyAdminCanApply = true; |
||
157 | $permissionRole->write(); |
||
158 | } |
||
159 | $permissionRole = DataObject::get_one( |
||
160 | 'PermissionRole', |
||
161 | array('Title' => $roleTitle), |
||
162 | $cacheDataObjectGetOne = false |
||
163 | ); |
||
164 | if ($permissionRole) { |
||
165 | if (is_array($permissionArray) && count($permissionArray)) { |
||
166 | DB::alteration_message('working with '.implode(', ', $permissionArray)); |
||
167 | foreach ($permissionArray as $permissionRoleCode) { |
||
168 | $permissionRoleCodeObject = DataObject::get_one( |
||
169 | 'PermissionRoleCode', |
||
170 | array('Code' => $permissionRoleCode, 'RoleID' => $permissionRole->ID), |
||
171 | $cacheDataObjectGetOne = false |
||
172 | ); |
||
173 | $permissionRoleCodeObjectCount = PermissionRoleCode::get() |
||
174 | ->Filter(array('Code' => $permissionRoleCode, 'RoleID' => $permissionRole->ID)) |
||
175 | ->Count(); |
||
176 | if ($permissionRoleCodeObjectCount > 1) { |
||
177 | $permissionRoleCodeObjectsToDelete = PermissionRoleCode::get() |
||
178 | ->Filter(array('Code' => $permissionRoleCode, 'RoleID' => $permissionRole->ID)) |
||
179 | ->Exclude(array('ID' => $permissionRoleCodeObject->ID)); |
||
180 | foreach ($permissionRoleCodeObjectsToDelete as $permissionRoleCodeObjectToDelete) { |
||
181 | db::alteration_message("DELETING double permission code $permissionRoleCode for ".$permissionRole->Title, 'deleted'); |
||
182 | $permissionRoleCodeObjectToDelete->delete(); |
||
183 | } |
||
184 | db::alteration_message('There is more than one Permission Role Code in '.$permissionRole->Title." with Code = $permissionRoleCode ($permissionRoleCodeObjectCount)", 'deleted'); |
||
185 | } |
||
186 | elseif ($permissionRoleCodeObjectCount == 1) { |
||
187 | //do nothing |
||
188 | } else { |
||
189 | $permissionRoleCodeObject = PermissionRoleCode::create(); |
||
190 | $permissionRoleCodeObject->Code = $permissionRoleCode; |
||
191 | $permissionRoleCodeObject->RoleID = $permissionRole->ID; |
||
192 | } |
||
193 | DB::alteration_message('adding '.$permissionRoleCodeObject->Code.' to '.$permissionRole->Title); |
||
194 | $permissionRoleCodeObject->write(); |
||
195 | } |
||
196 | } |
||
197 | if ($group && $permissionRole) { |
||
198 | if (DB::query('SELECT COUNT(*) FROM Group_Roles WHERE GroupID = '.$group->ID.' AND PermissionRoleID = '.$permissionRole->ID)->value() == 0) { |
||
199 | db::alteration_message('ADDING '.$permissionRole->Title.' permission role to '.$group->Title.' group', 'created'); |
||
200 | $existingGroups = $permissionRole->Groups(); |
||
201 | $existingGroups->add($group); |
||
202 | } else { |
||
203 | db::alteration_message('CHECKED '.$permissionRole->Title.' permission role to '.$group->Title.' group'); |
||
204 | } |
||
205 | } else { |
||
206 | db::alteration_message('ERROR: missing group or permissionRole', 'deleted'); |
||
207 | } |
||
208 | } |
||
209 | } |
||
210 | if ($member) { |
||
211 | if (is_string($member)) { |
||
212 | $email = $member; |
||
213 | $member = $this->CreateDefaultMember($email, $code, $name); |
||
214 | } |
||
215 | if ($member) { |
||
216 | DB::alteration_message(' adding member '.$member->Email.' to group '.$group->Title, 'created'); |
||
217 | $member->Groups()->add($group); |
||
218 | } |
||
219 | } else { |
||
220 | DB::alteration_message('No need to add user'); |
||
221 | } |
||
222 | } |
||
223 | } |
||
224 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.