예제 #1
0
 /**
  * Setting User role into database for the corresponding user and then load user role whenever that user is loaded.
  * @param array of integers $user_role User is defining their access permission through this user role
  */
 public function set_user_role($user_roles)
 {
     Logger::log("Enter: function User::add_user_role");
     if (!$this->is_active) {
         throw new PAException(OPERATION_NOT_PERMITTED, "User is already been deleted");
     }
     if (empty($user_roles)) {
         throw new PAException(REQUIRED_PARAMETERS_MISSING, "Required variable not specified");
     }
     // Inserting user roles for corresponding user_id.
     for ($i = 0; $i < count($user_roles); $i++) {
         $role_info = Roles::getRoleInfoByID((int) $user_roles[$i]['role_id']);
         $sql = 'SELECT * FROM {users_roles} WHERE user_id = ? AND role_id = ?';
         $data = array($this->user_id, $user_roles[$i]['role_id']);
         $res = Dal::query($sql, $data);
         $row = $res->fetchRow(DB_FETCHMODE_OBJECT);
         if (!empty($row) && is_object($row)) {
             // role exists - just update role extra info
             if (!empty($user_roles[$i]['extra'])) {
                 if ($role_info['type'] == 'group') {
                     $existing_extra = !empty($row->extra) ? unserialize($row->extra) : array();
                     $new_extra = unserialize($user_roles[$i]['extra']);
                     foreach ($new_extra['groups'] as $grp) {
                         if (empty($existing_extra['groups'])) {
                             $existing_extra['groups'] = array((int) $grp);
                         } else {
                             foreach ($existing_extra['groups'] as $_i => $_v) {
                                 $existing_extra['groups'][$_i] = (int) $_v;
                             }
                             if (!in_array((int) $grp, $existing_extra['groups'])) {
                                 array_push($existing_extra['groups'], (int) $grp);
                             }
                         }
                     }
                     $user_roles[$i]['extra'] = serialize($existing_extra);
                 }
                 $sql = 'UPDATE {users_roles} SET extra = ? WHERE user_id = ? AND role_id = ?';
                 $data = array($user_roles[$i]['extra'], $this->user_id, $user_roles[$i]['role_id']);
             }
         } else {
             // role does not exists - assign new role
             if (empty($user_roles[$i]['extra'])) {
                 // if extra info is empty - set default extras for new user role
                 $user_roles[$i]['extra'] = array('user' => true, 'network' => true, 'groups' => array());
             }
             $sql = 'INSERT into {users_roles} (user_id, role_id, extra) values (?, ?, ?)';
             $data = array($this->user_id, $user_roles[$i]['role_id'], $user_roles[$i]['extra']);
         }
         Dal::query($sql, $data);
     }
     Logger::log("Exit: function User::add_user_role");
 }
 public function importRolesInfo()
 {
     $roles = new Roles();
     $roles_data = array();
     $roles_info = $roles->get_multiple(null, DB_FETCHMODE_ASSOC);
     foreach ($roles_info as &$role) {
         $roles_data[] = Roles::getRoleInfoByID($role['id'], DB_FETCHMODE_ASSOC);
     }
     return $roles_data;
 }
 private function restoreRoleSettings($restore_roles, $_msg = null)
 {
     try {
         if (count($restore_roles) > 0) {
             $roles = new Roles();
             $roles_info = $roles->get_multiple(null);
             foreach ($roles_info as $_role) {
                 $role = $roles->get($_role->id);
                 if (is_object($role)) {
                     if (!$role->read_only) {
                         $roles->delete((int) $_role->id);
                     }
                 }
             }
             foreach ($restore_roles as $role) {
                 $_role = Roles::getRoleInfoByID($role['id'], $fetch_mode = DB_FETCHMODE_ASSOC);
                 if (isset($_role['id'])) {
                     // existing role, need to update only
                     $new_role = new Roles();
                     $new_role->id = $role['id'];
                     $new_role->description = $role['description'];
                     $new_role->name = $role['name'];
                     $new_role->type = $role['type'];
                     $new_role->update();
                     Roles::delete_role_tasks($new_role->id);
                     if (!empty($role['tasks'])) {
                         $tasks = array();
                         foreach ($role['tasks'] as $task) {
                             $tasks[] = $task['id'];
                         }
                         Roles::assign_tasks_to_role($tasks, $new_role->id);
                     }
                 } else {
                     $new_role = new Roles();
                     $new_role->description = $role['description'];
                     $new_role->name = $role['name'];
                     $role_id = $new_role->create();
                     if ($role_id && !empty($role['tasks'])) {
                         $tasks = array();
                         foreach ($role['tasks'] as $task) {
                             $tasks[] = $task['id'];
                         }
                         Roles::assign_tasks_to_role($tasks, $role_id);
                     }
                 }
             }
             $error_msg = $_msg ? $_msg : __('Default Roles settings sucessfully restored.');
         } else {
             $error_msg = __('There is no Roles data in default XML settings file.');
         }
     } catch (Exception $e) {
         $error = TRUE;
         $error_msg = $e->getMessage();
     }
     return $error_msg;
 }