From 1a2344f2debc2b7f25a0f4ca068d06bb030304d0 Mon Sep 17 00:00:00 2001 From: int2001 Date: Wed, 25 Jun 2025 06:21:48 +0000 Subject: [PATCH] Logic for act/deact/all implemented --- application/controllers/Usermode.php | 16 +++++++++ application/models/Usermodes.php | 51 ++++++++++++++++++++-------- 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/application/controllers/Usermode.php b/application/controllers/Usermode.php index 45ec3ac99..148dd68aa 100644 --- a/application/controllers/Usermode.php +++ b/application/controllers/Usermode.php @@ -44,4 +44,20 @@ class Usermode extends CI_Controller { return; } + public function activateAll() { + $this->load->model('usermodes'); + $this->usermodes->activateAll(); + header('Content-Type: application/json'); + echo json_encode(array('message' => 'OK')); + return; + } + + public function deactivateAll() { + $this->load->model('usermodes'); + $this->usermodes->deactivateAll(); + header('Content-Type: application/json'); + echo json_encode(array('message' => 'OK')); + return; + } + } diff --git a/application/models/Usermodes.php b/application/models/Usermodes.php index a5fa2044c..08e1e7962 100644 --- a/application/models/Usermodes.php +++ b/application/models/Usermodes.php @@ -12,7 +12,7 @@ class Usermodes extends CI_Model { $retmodes=[]; foreach ($modes->result() as $row) { if (count($usermodes)>0) { - if (in_array($row->mode.'/'.($row_submode ?? ''), $usermodes)) { + if (in_array($row->mode.'~'.($row->submode ?? ''), $usermodes)) { $row->active=1; } else { $row->active=0; @@ -32,14 +32,14 @@ class Usermodes extends CI_Model { $modes=$this->db->get('adif_modes'); $retmodes=[]; foreach ($modes->result() as $row) { - if (count($usermodes)>0) { - if (in_array($row->mode.'/'.($row_submode ?? ''), $usermodes)) { + if (count($usermodes)>0) { // Something explicitly allowed, push it to array + if (in_array($row->mode.'~'.($row->submode ?? ''), $usermodes)) { $row->active=1; $retmodes[]=$row; } else { $row->active=0; } - } else { + } else { // Default-Status? Nothing in array: So everything is allowed $retmodes[]=$row; } } @@ -55,22 +55,43 @@ class Usermodes extends CI_Model { } function activate($id) { - // Clean ID $clean_id = $this->security->xss_clean($id); - $options_object = $this->user_options_model->get_options('usermodes', array('option_name' => 'enabled_usermodes', 'option_key' => 'json_modes'))->result(); - $usermodes = json_decode($options_object[0]->option_value ?? '[]'); - $mode2act=$this->mode($id)->result()->mode.'/'.($this->mode($id)->result()->submode ?? ''); - return $mode2act; + $mode2act=$this->mode($clean_id)->result()[0]->mode.'~'.($this->mode($clean_id)->result()[0]->submode ?? ''); + + $modes=[]; + $raw_modes=$this->all(); + foreach ($raw_modes as $row) { + if (($row->id == $clean_id) || ($row->active == 1)) { + $modes[]=$row->mode.'~'.($row->submode ?? ''); + } + } + $this->user_options_model->set_option('usermodes', 'enabled_usermodes', array('json_modes' => json_encode($modes))); + return true; } function deactivate($id) { - // Clean ID $clean_id = $this->security->xss_clean($id); - $data = array( - 'active' => '0', - ); - $this->db->where('id', $clean_id); - $this->db->update('adif_modes', $data); + $mode2act=$this->mode($clean_id)->result()[0]->mode.'~'.($this->mode($clean_id)->result()[0]->submode ?? ''); + + $modes=[]; + $raw_modes=$this->all(); + foreach ($raw_modes as $row) { + if (($row->id != $clean_id) && ($row->active == 1)) { + $modes[]=$row->mode.'~'.($row->submode ?? ''); + } + } + $this->user_options_model->set_option('usermodes', 'enabled_usermodes', array('json_modes' => json_encode($modes))); + return true; + } + + function activateAll() { + // Clean ID + $this->user_options_model->set_option('usermodes', 'enabled_usermodes', array('json_modes' => '[]')); // Empty/Nothing is default (prevents migration) + return true; + } + + function deactivateAll() { + $this->user_options_model->set_option('usermodes', 'enabled_usermodes', array('json_modes' => '[""]')); // Put at least one senseless element to array, to deactivate all on userlevel return true; } }