From a512a984aaf24e4b576a20966595078e037acdad Mon Sep 17 00:00:00 2001
From: Andreas <6977712+AndreasK79@users.noreply.github.com>
Date: Mon, 9 Aug 2021 13:13:41 +0200
Subject: [PATCH 1/4] [Custom CSS Theme Support] Added support for fetching
list of themes from database.
---
application/controllers/User.php | 6 ++++++
application/models/User_model.php | 8 ++++++++
application/views/user/add.php | 15 +++++++++------
application/views/user/edit.php | 15 +++++++++------
4 files changed, 32 insertions(+), 12 deletions(-)
diff --git a/application/controllers/User.php b/application/controllers/User.php
index 976ea38e9..97059f73e 100644
--- a/application/controllers/User.php
+++ b/application/controllers/User.php
@@ -42,6 +42,9 @@ class User extends CI_Controller {
$this->form_validation->set_rules('user_locator', 'Locator', 'required');
$this->form_validation->set_rules('user_timezone', 'Timezone', 'required');
+ // Get themes list
+ $data['themes'] = $this->user_model->getThemes();
+
// Get timezones
$data['timezones'] = $this->user_model->timezones();
@@ -158,6 +161,9 @@ class User extends CI_Controller {
$this->form_validation->set_rules('user_locator', 'Locator', 'required|xss_clean');
$this->form_validation->set_rules('user_timezone', 'Timezone', 'required');
+ // Get themes list
+ $data['themes'] = $this->user_model->getThemes();
+
// Get timezones
$data['timezones'] = $this->user_model->timezones();
diff --git a/application/models/User_model.php b/application/models/User_model.php
index ab368d511..ece9bc8c4 100644
--- a/application/models/User_model.php
+++ b/application/models/User_model.php
@@ -370,6 +370,14 @@ class User_Model extends CI_Model {
return $ts;
}
+ // FUNCTION: array getThemes()
+ // Returns a list of themes
+ function getThemes() {
+ $result = $this->db->query('SELECT * FROM themes order by name');
+
+ return $result->result();
+ }
+
// FUNCTION: bool _auth($password, $hash)
// Checks a password against the stored hash
private function _auth($password, $hash) {
diff --git a/application/views/user/add.php b/application/views/user/add.php
index 7157053fe..f6b9f09b5 100644
--- a/application/views/user/add.php
+++ b/application/views/user/add.php
@@ -111,12 +111,15 @@
diff --git a/application/views/user/edit.php b/application/views/user/edit.php
index 3b879e719..20f7c3794 100644
--- a/application/views/user/edit.php
+++ b/application/views/user/edit.php
@@ -94,12 +94,15 @@
From 5995b169c62c2bbdaa224bdbd5ff73e34b42ae45 Mon Sep 17 00:00:00 2001
From: Andreas <6977712+AndreasK79@users.noreply.github.com>
Date: Mon, 9 Aug 2021 13:26:04 +0200
Subject: [PATCH 2/4] [Custom CSS Theme Support] Added migration script for
creating the theme table
---
application/config/migration.php | 2 +-
application/migrations/071_theme_table.php | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
create mode 100644 application/migrations/071_theme_table.php
diff --git a/application/config/migration.php b/application/config/migration.php
index 5b216f923..227bc690e 100644
--- a/application/config/migration.php
+++ b/application/config/migration.php
@@ -21,7 +21,7 @@ $config['migration_enabled'] = TRUE;
| be upgraded / downgraded to.
|
*/
-$config['migration_version'] = 70;
+$config['migration_version'] = 71;
/*
|--------------------------------------------------------------------------
diff --git a/application/migrations/071_theme_table.php b/application/migrations/071_theme_table.php
new file mode 100644
index 000000000..9bcf6ce8b
--- /dev/null
+++ b/application/migrations/071_theme_table.php
@@ -0,0 +1,21 @@
+db->query("create table themes (id integer not null auto_increment, name varchar(256) not null, foldername varchar(256) not null, primary key (id)) ENGINE=myisam DEFAULT CHARSET=utf8;");
+ $this->db->query("INSERT INTO themes (name, foldername) values ('Blue','blue');");
+ $this->db->query("INSERT INTO themes (name, foldername) values ('Cosmo','cosmo');");
+ $this->db->query("INSERT INTO themes (name, foldername) values ('Cyborg (Dark)','cyborg');");
+ $this->db->query("INSERT INTO themes (name, foldername) values ('Darkly (Dark)','darkly');");
+ $this->db->query("INSERT INTO themes (name, foldername) values ('Default','default');");
+ $this->db->query("INSERT INTO themes (name, foldername) values ('Superhero (Dark)','superhero');");
+ }
+
+ public function down(){
+ $this->db->query("");
+
+ }
+}
From d24eeafcdf5271773bf9b59a0b16138c3215fe59 Mon Sep 17 00:00:00 2001
From: Andreas <6977712+AndreasK79@users.noreply.github.com>
Date: Mon, 9 Aug 2021 14:29:53 +0200
Subject: [PATCH 3/4] [Custom CSS Theme Support] Added user interface for
add/edit/delete theme
---
application/controllers/Themes.php | 89 +++++++++++++++++++
application/models/Themes_model.php | 56 ++++++++++++
application/views/interface_assets/footer.php | 65 ++++++++++++++
application/views/interface_assets/header.php | 4 +
application/views/themes/add.php | 38 ++++++++
application/views/themes/edit.php | 50 +++++++++++
application/views/themes/index.php | 51 +++++++++++
7 files changed, 353 insertions(+)
create mode 100644 application/controllers/Themes.php
create mode 100644 application/models/Themes_model.php
create mode 100644 application/views/themes/add.php
create mode 100644 application/views/themes/edit.php
create mode 100644 application/views/themes/index.php
diff --git a/application/controllers/Themes.php b/application/controllers/Themes.php
new file mode 100644
index 000000000..2420e6896
--- /dev/null
+++ b/application/controllers/Themes.php
@@ -0,0 +1,89 @@
+lang->load('contesting');
+
+ $this->load->model('user_model');
+ if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
+ }
+
+ public function index()
+ {
+ $this->load->model('Themes_model');
+
+ $data['themes'] = $this->Themes_model->getThemes();
+
+ // Render Page
+ $data['page_title'] = "Themes";
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('themes/index.php');
+ $this->load->view('interface_assets/footer');
+ }
+
+ public function add()
+ {
+ $this->load->model('Themes_model');
+ $this->load->library('form_validation');
+
+ $this->form_validation->set_rules('name', 'Theme Name', 'required');
+ $this->form_validation->set_rules('foldername', 'Folder Name', 'required');
+
+ if ($this->form_validation->run() == FALSE)
+ {
+ $data['page_title'] = "Create Theme";
+ $this->load->view('themes/add', $data);
+ }
+ else
+ {
+ $this->Themes_model->add();
+ }
+ }
+
+ public function edit($id)
+ {
+ $this->load->library('form_validation');
+
+ $this->load->model('Themes_model');
+
+ $item_id_clean = $this->security->xss_clean($id);
+
+ $data['theme'] = $this->Themes_model->theme($item_id_clean);
+
+ $data['page_title'] = "Edit Theme";
+
+ $this->form_validation->set_rules('name', 'Theme Name', 'required');
+ $this->form_validation->set_rules('foldername', 'Folder Name', 'required');
+
+ if ($this->form_validation->run() == FALSE)
+ {
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('themes/edit');
+ $this->load->view('interface_assets/footer');
+ }
+ else
+ {
+ $this->Themes_model->edit($item_id_clean);
+
+ $data['notice'] = "Theme ".$this->security->xss_clean($this->input->post('name', true))." Updated";
+
+ redirect('themes');
+ }
+ }
+
+ public function delete() {
+ $id = $this->input->post('id');
+ $this->load->model('Themes_model');
+ $this->Themes_model->delete($id);
+ }
+}
diff --git a/application/models/Themes_model.php b/application/models/Themes_model.php
new file mode 100644
index 000000000..8f34435c5
--- /dev/null
+++ b/application/models/Themes_model.php
@@ -0,0 +1,56 @@
+db->query('SELECT * FROM themes order by name');
+
+ return $result->result();
+ }
+
+ function delete($id) {
+ // Clean ID
+ $clean_id = $this->security->xss_clean($id);
+
+ // Delete Theme
+ $this->db->delete('themes', array('id' => $clean_id));
+ }
+
+ function add() {
+ $data = array(
+ 'name' => xss_clean($this->input->post('name', true)),
+ 'foldername' => xss_clean($this->input->post('foldername', true)),
+ );
+
+ $this->db->insert('themes', $data);
+ }
+
+
+ function theme($id) {
+ // Clean ID
+ $clean_id = $this->security->xss_clean($id);
+
+ $sql = "SELECT * FROM themes where id =" . $clean_id;
+
+ $data = $this->db->query($sql);
+
+ return ($data->row());
+ }
+
+ function edit($id) {
+ $data = array(
+ 'name' => xss_clean($this->input->post('name', true)),
+ 'foldername' => xss_clean($this->input->post('foldername', true)),
+ );
+
+ $this->db->where('id', $id);
+ $this->db->update('themes', $data);
+ }
+}
diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php
index c8195c332..d6a6e15d3 100644
--- a/application/views/interface_assets/footer.php
+++ b/application/views/interface_assets/footer.php
@@ -2025,6 +2025,71 @@ function deleteQsl(id) {
+uri->segment(1) == "themes") { ?>
+
+
uri->segment(1) == "qslprint") { ?>