diff --git a/application/models/Module_model.php b/application/models/Module_model.php index 7fc9077..f418299 100755 --- a/application/models/Module_model.php +++ b/application/models/Module_model.php @@ -164,10 +164,25 @@ public function getModulesByPermissionSlug($permissionSlug){ $this->load->model('Module_model'); $selectedPermission = $this->Module_model->getPermissionBySlug($permissionSlug); + // An unknown slug yields no permission at all; without this the line below + // dereferences null. No permission means no modules. + if(!$selectedPermission){ + return array(); + } + $query = $this->db->query('SELECT * FROM modules;'); $results = $query->result(); $resultArray = array(); foreach($results as $resultItem){ + // modules.permission_ids is NULL for at least one row (module 8, + // 'Szerviz kategoriak') on every environment. Passing null to explode() + // is deprecated in PHP 8.1 and emits a notice. A module with no + // permissions is visible to nobody, so skipping it keeps the previous + // behaviour - explode(',', null) returned array('') which matched nothing. + if($resultItem->permission_ids === null || $resultItem->permission_ids === ''){ + continue; + } + $permissionIdsArray = explode(',', $resultItem->permission_ids); if(in_array($selectedPermission->permission_id, $permissionIdsArray)){ $resultArray[] = $resultItem;