Added access controls for encounter categories
[openemr.git] / library / acl_upgrade_fx.php
blob696f7cdb8addc049c089924c4cfc414b676b90dc
1 <?php
2 /**
3 * Upgrading functions of access controls.
5 * Functions to allow safe access control modifications
6 * during upgrading.
8 * Copyright (C) 2012 Brady Miller <brady.g.miller@gmail.com>
10 * LICENSE: This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version 2
13 * of the License, or (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://opensource.org/licenses/gpl-license.php>.
21 * @package OpenEMR
22 * @author Brady Miller <brady.g.miller@gmail.com>
23 * @link http://www.open-emr.org
26 // Making global to be accessed in subsequent function scopes
27 global $versionService;
28 $versionService = new \services\VersionService();
30 /**
31 * Returns the current access control version.
33 * @return integer The current access control version.
35 function get_acl_version()
37 global $versionService;
38 $version = $versionService->fetch();
39 return $version->getAcl();
42 /**
43 * Records the access control version.
45 * @param integer $acl_version access control version
47 function set_acl_version($acl_version)
49 global $versionService;
50 $version = $versionService->fetch();
51 $version->setAcl($acl_version);
52 $response = $versionService->update($version);
53 return $response;
56 /**
57 * Function will return an array that contains the ACL ID number. It will also check to ensure
58 * the ACL exist and is not duplicated.
60 * @param string $title Title of group.
61 * @param string $return_value What the acl returns), usually 'write' or 'addonly'
62 * @return array An array that contains the ACL ID number.
64 function getAclIdNumber($title, $return_value)
66 global $gacl;
67 $temp_acl_id_array = $gacl->search_acl(false, false, false, false, $title, false, false, false, $return_value);
68 switch (count($temp_acl_id_array)) {
69 case 0:
70 echo "<B>ERROR</B>, '$title' group '$return_value' ACL does not exist.</BR>";
71 break;
72 case 1:
73 echo "'$title' group '$return_value' ACL is present.</BR>";
74 break;
75 default:
76 echo "<B>ERROR</B>, Multiple '$title' group '$return_value' ACLs are present.</BR>";
77 break;
79 return $temp_acl_id_array;
82 /**
83 * Function will add an ACL (if doesn't already exist).
84 * It will also place the acl in the group, or will CREATE a new group.
85 * It will return the ID number of the acl (created or old)
87 * @param string $title Title of group.
88 * @param string $name name of acl
89 * @param string $return_value What the acl returns, usually 'write' or 'addonly'
90 * @param string $note description of acl
91 * @return array ID number of the acl (created or old)
93 function addNewACL($title, $name, $return_value, $note)
95 global $gacl;
96 $temp_acl_id_array = $gacl->search_acl(false, false, false, false, $title, false, false, false, $return_value);
97 switch (count($temp_acl_id_array)) {
98 case 0:
99 $group_id = $gacl->get_group_id($name, $title, 'ARO');
100 if ($group_id) {
101 //group already exist, so just create acl
102 $temp_acl_id = $gacl->add_acl(array("placeholder"=>array("filler")), null, array($group_id), null, null, 1, 1, $return_value, $note);
103 if ($temp_acl_id) {
104 echo "The '$title' group already exist.</BR>";
105 echo "The '$title' group '$return_value' ACL has been successfully added.</BR>";
106 $temp_acl_id_array = array($temp_acl_id);
108 else {
109 echo "The '$title' group already exist.</BR>";
110 echo "<B>ERROR</B>, Unable to create the '$title' group '$return_value' ACL.</BR>";
113 else {
114 //create group, then create acl
115 $parent_id = $gacl->get_root_group_id();
116 $aro_id = $gacl->add_group($name, $title, $parent_id, 'ARO');
117 $temp_acl_id = $gacl->add_acl(array("placeholder"=>array("filler")), null, array($aro_id), null, null, 1, 1, $return_value, $note);
118 if ($aro_id ) {
119 echo "The '$title' group has been successfully added.</BR>";
121 else {
122 echo "<B>ERROR</B>, Unable to create the '$title' group.</BR>";
124 if ($temp_acl_id) {
125 echo "The '$title' group '$return_value' ACL has been successfully added.</BR>";
126 $temp_acl_id_array = array($temp_acl_id);
128 else {
129 echo "<B>ERROR</B>, Unable to create the '$title' group '$return_value' ACL.</BR>";
132 break;
133 case 1:
134 echo "'$title' group '$return_value' ACL already exist.</BR>";
135 break;
137 default:
138 echo "<B>ERROR</B>, Multiple '$title' group '$return_value' ACLs are present.</BR>";
139 break;
141 return $temp_acl_id_array;
145 * Function to add an object section.
146 * It will check to ensure the object section doesn't already exist.
148 * @param string $name identifier of section
149 * @param string $title Title o object.
151 function addObjectSectionAcl($name, $title)
153 global $gacl;
154 if ($gacl->get_object_section_section_id($title, $name, 'ACO')) {
155 echo "The '$title' object section already exist.</BR>";
157 else {
158 $tmp_boolean = $gacl->add_object_section($title , $name, 10, 0, 'ACO');
159 if ($tmp_boolean) {
160 echo "The '$title' object section has been successfully added.</BR>";
162 else {
163 echo "<B>ERROR</B>,unable to create the '$title' object section.</BR>";
166 return;
171 * Function to add an object.
172 * It will check to ensure the object doesn't already exist.
174 * @param string $section_name Identifier of section
175 * @param string $section_title Title of section
176 * @param string $object_name Identifier of object
177 * @param string $object_title Title of object
179 function addObjectAcl($section_name, $section_title, $object_name, $object_title)
181 global $gacl;
182 if ($gacl->get_object_id($section_name, $object_name, 'ACO')) {
183 echo "The '$object_title' object in the '$section_title' section already exist.</BR>";
185 else {
186 $tmp_boolean = $gacl->add_object($section_name, $object_title, $object_name, 10, 0, 'ACO');
187 if ($tmp_boolean) {
188 echo "The '$object_title' object in the '$section_title' section has been successfully added.</BR>";
190 else {
191 echo "<B>ERROR</B>,unable to create the '$object_title' object in the '$section_title' section.</BR>";
194 return;
198 * Function to add an object and set the 'order' variable.
199 * It will check to ensure the object doesn't already exist.
201 * @param string $section_name Identifier of section
202 * @param string $section_title Title of section
203 * @param string $object_name Identifier of object
204 * @param string $object_title Title of object
205 * @param string $order_number number to determine order in list. used in sensitivities to order the choices in openemr
207 function addObjectAclWithOrder($section_name, $section_title, $object_name, $object_title, $order_number)
209 global $gacl;
210 if ($gacl->get_object_id($section_name, $object_name, 'ACO')) {
211 echo "The '$object_title' object in the '$section_title' section already exist.</BR>";
213 else {
214 $tmp_boolean = $gacl->add_object($section_name, $object_title, $object_name, $order_number, 0, 'ACO');
215 if ($tmp_boolean) {
216 echo "The '$object_title' object in the '$section_title' section has been successfully added.</BR>";
218 else {
219 echo "<B>ERROR</B>,unable to create the '$object_title' object in the '$section_title' section.</BR>";
222 return;
226 * Function to edit an object and set the 'order' variable.
227 * It will check to ensure the object doesn't already exist, and hasn't been upgraded yet.
229 * @param string $section_name Identifier of section
230 * @param string $section_title Title of section
231 * @param string $object_name Identifier of object
232 * @param string $object_title Title of object
233 * @param string $order_number number to determine order in list. used in sensitivities to order the choices in openemr
235 function editObjectAcl($section_name, $section_title, $object_name, $object_title, $order_number)
237 global $gacl;
238 $tmp_objectID = $gacl->get_object_id($section_name, $object_name, 'ACO');
239 if ($tmp_objectID) {
240 $tmp_object = $gacl->get_object_data($tmp_objectID, 'ACO');
241 if ($tmp_object[0][2] == $order_number &&
242 $tmp_object[0][0] == $section_name &&
243 $tmp_object[0][1] == $object_name &&
244 $tmp_object[0][3] == $object_title) {
245 echo "The '$object_title' object in the '$section_title' section has already been updated.</BR>";
247 else {
248 $tmp_boolean = $gacl->edit_object($tmp_objectID, $section_name, $object_title, $object_name, $order_number, 0, 'ACO');
249 if ($tmp_boolean) {
250 echo "The '$object_title' object in the '$section_title' section has been successfully updated.</BR>";
252 else {
253 echo "<B>ERROR</B>,unable to update the '$object_title' object in the '$section_title' section.</BR>";
257 else {
258 echo "<B>ERROR</B>, the '$object_title' object in the '$section_title' section does not exist.</BR>";
260 return;
264 * Update the ACL.
265 * It will check to ensure the ACL hasn't already been updated.
267 * @param array $array_acl_id_number Array containing hopefully one element, which is an integer, and is identifier of acl to be updated.
268 * @param string $group_title Title of group.
269 * @param string $object_section_name Identifier of section
270 * @param string $object_section_title Title of section
271 * @param string $object_name Identifier of object
272 * @param string $object_title Title of object
273 * @param string $acl_return_value What the acl returns (string), usually 'write', 'addonly', 'wsome' or 'view'
275 function updateAcl($array_acl_id_number, $group_title, $section_name, $section_title, $object_name, $object_title, $return_value)
277 global $gacl;
278 $tmp_array = $gacl->search_acl($section_name, $object_name, false, false, $group_title, false, false, false, $return_value);
279 switch (count($tmp_array)) {
280 case 0:
281 $tmp_boolean = @$gacl->append_acl($array_acl_id_number[0], null, null, null, null, array($section_name=>array($object_name)));
282 if ($tmp_boolean){
283 echo "Successfully placed the '$object_title' object of the '$section_title' section into the '$group_title' group '$return_value' ACL.</BR>";
285 else {
286 echo "<B>ERROR</B>,unable to place the '$object_title' object of the '$section_title' section into the '$group_title' group '$return_value' ACL.</BR>";
288 break;
289 case 1:
290 echo "The '$object_title' object of the '$section_title' section is already found in the '$group_title' group '$return_value' ACL.</BR>";
291 break;
292 default:
293 echo "<B>ERROR</B>, Multiple '$group_title' group '$return_value' ACLs with the '$object_title' object of the '$section_title' section are present.</BR>";
294 break;
296 return;