From 6f852fedc00f03254507f6713b79faf224b04b7f Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:20:17 +0200 Subject: [PATCH 001/308] Update config.php --- application/config/config.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/application/config/config.php b/application/config/config.php index d58b43ea..818f5bf0 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -54,7 +54,7 @@ */ define('DB_TYPE', 'mysql'); define('DB_HOST', '127.0.0.1'); -define('DB_NAME', 'mini'); -define('DB_USER', 'root'); -define('DB_PASS', 'your_password'); -define('DB_CHARSET', 'utf8'); \ No newline at end of file +define('DB_NAME', 'u230474653_mini'); +define('DB_USER', 'u230474653_Parker92'); +define('DB_PASS', 'Parker92700%'); +define('DB_CHARSET', 'utf8'); From b60c3c08b4f2ed3fbb3d9a45771b92351dcf132f Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:31:56 +0200 Subject: [PATCH 002/308] Update model.php --- application/model/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/application/model/model.php b/application/model/model.php index 1432bb55..1c078cdd 100644 --- a/application/model/model.php +++ b/application/model/model.php @@ -2,6 +2,7 @@ class Model { + public db; /** * @param object $db A PDO database connection */ From 85da7ba7fa7c15dcd14a25c2603e4da613ea205c Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:32:51 +0200 Subject: [PATCH 003/308] Update model.php --- application/model/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/model/model.php b/application/model/model.php index 1c078cdd..36dbd6ee 100644 --- a/application/model/model.php +++ b/application/model/model.php @@ -2,7 +2,7 @@ class Model { - public db; + public $db; /** * @param object $db A PDO database connection */ From 684ea4c3e397fe665e79f5896f751332afca87a7 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:54:41 +0200 Subject: [PATCH 004/308] Update application.php --- application/core/application.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/core/application.php b/application/core/application.php index 306b856f..3b4ed3ab 100644 --- a/application/core/application.php +++ b/application/core/application.php @@ -47,7 +47,7 @@ public function __construct() } } else { - if (strlen($this->url_action) == 0) { + if (strlen($this->url_action ?? '') == 0) { // no action defined: call the default index() method of a selected controller $this->url_controller->index(); } From d51dd663610ccc2be928e6f5f72436b724473bd1 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:57:04 +0200 Subject: [PATCH 005/308] Update application.php --- application/core/application.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/core/application.php b/application/core/application.php index 3b4ed3ab..c0708b8a 100644 --- a/application/core/application.php +++ b/application/core/application.php @@ -36,7 +36,7 @@ public function __construct() $this->url_controller = new $this->url_controller(); // check for method: does such a method exist in the controller ? - if (method_exists($this->url_controller, $this->url_action)) { + if (method_exists($this->url_controller, ($this->url_action ?? ''))) { if (!empty($this->url_params)) { // Call the method and pass arguments to it From 308a6d743fd7c3076d4715d3ff15e8384c9f4930 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:58:52 +0200 Subject: [PATCH 006/308] Delete _vagrant directory --- _vagrant/Vagrantfile | 23 ------------- _vagrant/bootstrap.sh | 77 ------------------------------------------- 2 files changed, 100 deletions(-) delete mode 100644 _vagrant/Vagrantfile delete mode 100644 _vagrant/bootstrap.sh diff --git a/_vagrant/Vagrantfile b/_vagrant/Vagrantfile deleted file mode 100644 index f4ca3651..00000000 --- a/_vagrant/Vagrantfile +++ /dev/null @@ -1,23 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! -VAGRANTFILE_API_VERSION = "2" - -Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| - - # Every Vagrant virtual environment requires a box to build off of. - # We use the latest Ubuntu 20.04 - config.vm.box = "ubuntu/focal64" - - # Create a private network, which allows host-only access to the machine using a specific IP. - config.vm.network "private_network", ip: "192.168.33.44" - - # Share an additional folder to the guest VM. The first argument is the path on the host to the actual folder. - # The second argument is the path on the guest to mount the folder. - config.vm.synced_folder "./", "/var/www/html" - - # Define the bootstrap file: A (shell) script that runs after first setup of your box (= provisioning) - config.vm.provision :shell, path: "bootstrap.sh" - -end diff --git a/_vagrant/bootstrap.sh b/_vagrant/bootstrap.sh deleted file mode 100644 index b08b1aad..00000000 --- a/_vagrant/bootstrap.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env bash - -# Use single quotes instead of double quotes to make it work with special-character passwords -PASSWORD='12345678' -PROJECTFOLDER='myproject' - -sudo apt-get update -sudo apt-get -y upgrade - -# installs Apache 2.x -sudo apt-get install -y apache2 -# install PHP 7.4 -sudo apt-get install -y php - -sudo debconf-set-selections <<< "mysql-server mysql-server/root_password password $PASSWORD" -sudo debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $PASSWORD" -sudo apt-get -y install mysql-server -sudo apt-get install php-mysql - -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/dbconfig-install boolean true" -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/app-password-confirm password $PASSWORD" -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/mysql/admin-pass password $PASSWORD" -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/mysql/app-pass password $PASSWORD" -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2" -sudo apt-get -y install phpmyadmin - -# Create project folder, written in 3 single mkdir-statements to make sure this runs everywhere without problems -#sudo mkdir "/var/www" -#sudo mkdir "/var/www/html" -sudo mkdir "/var/www/html/${PROJECTFOLDER}" - -# setup hosts file -VHOST=$(cat < - DocumentRoot "/var/www/html/${PROJECTFOLDER}/public" - - AllowOverride All - Require all granted - - -EOF -) -echo "${VHOST}" > /etc/apache2/sites-available/000-default.conf - -# enable mod_rewrite -sudo a2enmod rewrite - -# restart apache -service apache2 restart - -# remove default apache index.html -sudo rm "/var/www/html/index.html" - -# install git -sudo apt-get -y install git - -# git clone MINI -sudo git clone https://github.com/panique/mini "/var/www/html/${PROJECTFOLDER}" - -# install Composer (not necessary by default) -#curl -s https://getcomposer.org/installer | php -#mv composer.phar /usr/local/bin/composer - -# go to project folder, load Composer packages (not necessary by default) -#cd "/var/www/html/${PROJECTFOLDER}" -#composer install --dev - -# run SQL statements from MINI folder -sudo mysql -h "localhost" -u "root" "-p${PASSWORD}" < "/var/www/html/${PROJECTFOLDER}/_install/01-create-database.sql" -sudo mysql -h "localhost" -u "root" "-p${PASSWORD}" < "/var/www/html/${PROJECTFOLDER}/_install/02-create-table-song.sql" -sudo mysql -h "localhost" -u "root" "-p${PASSWORD}" < "/var/www/html/${PROJECTFOLDER}/_install/03-insert-demo-data-into-table-song.sql" - -# put the password into the application's config. This is quite hardcore, but why not :) -sudo sed -i "s/your_password/${PASSWORD}/" "/var/www/html/${PROJECTFOLDER}/application/config/config.php" - -# final feedback -echo "Voila! Open the project by putting 192.168.33.44 inside your browser!" From f8996303cbb105d339c4cc334e741fe8e2418025 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:59:33 +0200 Subject: [PATCH 007/308] Delete _install/mini-logo.png --- _install/mini-logo.png | Bin 63178 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 _install/mini-logo.png diff --git a/_install/mini-logo.png b/_install/mini-logo.png deleted file mode 100644 index fe869b504fcb8b6c9ab04fd611e538eb9ad7a121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63178 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 XewZ4(?yS#Wfj?_YJByM}y-)rH@grhN From e31a84da06312415d88005d8fddad45e0a695eac Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:01:41 +0200 Subject: [PATCH 008/308] Delete composer.json --- composer.json | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 composer.json diff --git a/composer.json b/composer.json deleted file mode 100644 index 1c691f5f..00000000 --- a/composer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "panique/mini", - "type": "project", - "description": "An extremely simple naked PHP application", - "keywords": ["skeleton", "boilerplate", "naked", "barebone", "application"], - "homepage": "https://github.com/panique/mini", - "license": "MIT", - "authors": [ - { - "name": "Panique", - "role": "Developer" - } - ], - "support": { - "issues": "https://github.com/panique/mini/issues", - "source": "https://github.com/panique/mini" - }, - "require": { - "php": ">=5.3.0" - } -} From 9d39e8b9eb03592f2f74d1a67020efd58a1d778b Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:06:17 +0200 Subject: [PATCH 009/308] Update problem.php --- application/controller/problem.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/application/controller/problem.php b/application/controller/problem.php index 6fa45b06..5b0826c7 100644 --- a/application/controller/problem.php +++ b/application/controller/problem.php @@ -1,9 +1,6 @@ Date: Wed, 9 Oct 2024 08:53:59 +0000 Subject: [PATCH 010/308] jj --- application/controller/songs.php | 39 +++++++++++++++++-- application/model/model.php | 11 ++++++ application/view/songs/index.php | 64 ++++++++++++++++++++------------ public/css/style.css | 17 +++++++++ 4 files changed, 104 insertions(+), 27 deletions(-) diff --git a/application/controller/songs.php b/application/controller/songs.php index 4a9560f0..78557f18 100644 --- a/application/controller/songs.php +++ b/application/controller/songs.php @@ -15,6 +15,38 @@ class Songs extends Controller * PAGE: index * This method handles what happens when you move to http://yourproject/songs/index */ + public function index($pPage) + { + // Nombre d'éléments par page + $limit = 10; + // if we have an id of a song that should be deleted + $page = 0; + + // Obtenez la page actuelle à partir du paramètre, ou définissez-la à 1 si non définie + if (isset($pPage)) { + $page = (int)$pPage; + } else { + $page = 1; + } + + $offset = ($page - 1) * $limit; + + // Obtenez le nombre total de chansons + $totalSongs = $this->model->getAmountOfSongs(); + + // Calcul du nombre total de pages + $totalPages = ceil($totalSongs / $limit); + + // Obtenez les chansons pour la page actuelle + $songs = $this->model->getPaginatedSongs($limit, $offset); + + + // load views. within the views we can echo out $songs and $amount_of_songs easily + require APP . 'view/_templates/header.php'; + require APP . 'view/songs/index.php'; + require APP . 'view/_templates/footer.php'; + } + /* public function index() { // getting all songs and amount of songs @@ -26,7 +58,7 @@ public function index() require APP . 'view/songs/index.php'; require APP . 'view/_templates/footer.php'; } - +*/ /** * ACTION: addSong * This method handles what happens when you move to http://yourproject/songs/addsong @@ -68,7 +100,7 @@ public function deleteSong($song_id) header('location: ' . URL . 'songs/index'); } - /** + /** * ACTION: editSong * This method handles what happens when you move to http://yourproject/songs/editsong * @param int $song_id Id of the to-edit song @@ -92,7 +124,7 @@ public function editSong($song_id) header('location: ' . URL . 'songs/index'); } } - + /** * ACTION: updateSong * This method handles what happens when you move to http://yourproject/songs/updatesong @@ -124,5 +156,4 @@ public function ajaxGetStats() // simply echo out something. A supersimple API would be possible by echoing JSON here echo $amount_of_songs; } - } diff --git a/application/model/model.php b/application/model/model.php index 36dbd6ee..168613ae 100644 --- a/application/model/model.php +++ b/application/model/model.php @@ -15,6 +15,17 @@ function __construct($db) } } + public function getPaginatedSongs($limit, $offset) + { + $sql = "SELECT id, artist, track, link FROM songs LIMIT :limit OFFSET :offset"; + $query = $this->db->prepare($sql); + $query->bindValue(':limit', $limit, PDO::PARAM_INT); + $query->bindValue(':offset', $offset, PDO::PARAM_INT); + $query->execute(); + return $query->fetchAll(); + } + + /** * Get all songs from database */ diff --git a/application/view/songs/index.php b/application/view/songs/index.php index 061efb1f..8f9c3aae 100644 --- a/application/view/songs/index.php +++ b/application/view/songs/index.php @@ -27,31 +27,49 @@

List of songs (data from first model)

- - - - - - - - - - - - - - - - - + + + + + + - + + + + + + + + + + + + + +
IdArtistTrackLinkDELETEEDIT
id)) echo htmlspecialchars($song->id, ENT_QUOTES, 'UTF-8'); ?>artist)) echo htmlspecialchars($song->artist, ENT_QUOTES, 'UTF-8'); ?>track)) echo htmlspecialchars($song->track, ENT_QUOTES, 'UTF-8'); ?> - link)) { ?> - link, ENT_QUOTES, 'UTF-8'); ?> - - deleteeditIdArtistTrackLinkDELETEEDIT
id)) echo htmlspecialchars($song->id, ENT_QUOTES, 'UTF-8'); ?>artist)) echo htmlspecialchars($song->artist, ENT_QUOTES, 'UTF-8'); ?>track)) echo htmlspecialchars($song->track, ENT_QUOTES, 'UTF-8'); ?> + link)) { ?> + link, ENT_QUOTES, 'UTF-8'); ?> + + deleteedit
- + \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css index 226f609c..39a043f8 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -88,3 +88,20 @@ body { .footer a { color: #454545; } + +.pagination a { + margin: 0 5px; + padding: 8px 16px; + background-color: #f1f1f1; + text-decoration: none; + color: #333; +} + +.pagination a.active { + background-color: #4CAF50; + color: white; +} + +.pagination a:hover { + background-color: #ddd; +} From 3e8f2a72a44026b0fd0ebe0908d8474fe67d7aa2 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 08:56:07 +0000 Subject: [PATCH 011/308] hh --- application/controller/songs.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controller/songs.php b/application/controller/songs.php index 78557f18..c4f1eafc 100644 --- a/application/controller/songs.php +++ b/application/controller/songs.php @@ -15,7 +15,7 @@ class Songs extends Controller * PAGE: index * This method handles what happens when you move to http://yourproject/songs/index */ - public function index($pPage) + public function index($pPage=1) { // Nombre d'éléments par page $limit = 10; From bab0a33853b7d7c21cd60a2c380f3beb8d1be1bf Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 08:57:41 +0000 Subject: [PATCH 012/308] jj --- application/model/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/model/model.php b/application/model/model.php index 168613ae..c5e9e25b 100644 --- a/application/model/model.php +++ b/application/model/model.php @@ -17,7 +17,7 @@ function __construct($db) public function getPaginatedSongs($limit, $offset) { - $sql = "SELECT id, artist, track, link FROM songs LIMIT :limit OFFSET :offset"; + $sql = "SELECT id, artist, track, link FROM song LIMIT :limit OFFSET :offset"; $query = $this->db->prepare($sql); $query->bindValue(':limit', $limit, PDO::PARAM_INT); $query->bindValue(':offset', $offset, PDO::PARAM_INT); From d4eb2e2f13b0917c40eea8acd9f67ec1e20cdd7e Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:37:13 +0000 Subject: [PATCH 013/308] hhh --- application/controller/songs.php | 159 -------------------- application/controller/tracabiltySheets.php | 147 ++++++++++++++++++ application/model/model.php | 46 +++--- application/view/_templates/header.php | 2 +- application/view/songs/edit.php | 18 --- application/view/songs/index.php | 75 --------- application/view/tracabiltySheets/edit.php | 18 +++ application/view/tracabiltySheets/index.php | 75 +++++++++ 8 files changed, 264 insertions(+), 276 deletions(-) delete mode 100644 application/controller/songs.php create mode 100644 application/controller/tracabiltySheets.php delete mode 100644 application/view/songs/edit.php delete mode 100644 application/view/songs/index.php create mode 100644 application/view/tracabiltySheets/edit.php create mode 100644 application/view/tracabiltySheets/index.php diff --git a/application/controller/songs.php b/application/controller/songs.php deleted file mode 100644 index c4f1eafc..00000000 --- a/application/controller/songs.php +++ /dev/null @@ -1,159 +0,0 @@ -model->getAmountOfSongs(); - - // Calcul du nombre total de pages - $totalPages = ceil($totalSongs / $limit); - - // Obtenez les chansons pour la page actuelle - $songs = $this->model->getPaginatedSongs($limit, $offset); - - - // load views. within the views we can echo out $songs and $amount_of_songs easily - require APP . 'view/_templates/header.php'; - require APP . 'view/songs/index.php'; - require APP . 'view/_templates/footer.php'; - } - /* - public function index() - { - // getting all songs and amount of songs - $songs = $this->model->getAllSongs(); - $amount_of_songs = $this->model->getAmountOfSongs(); - - // load views. within the views we can echo out $songs and $amount_of_songs easily - require APP . 'view/_templates/header.php'; - require APP . 'view/songs/index.php'; - require APP . 'view/_templates/footer.php'; - } -*/ - /** - * ACTION: addSong - * This method handles what happens when you move to http://yourproject/songs/addsong - * IMPORTANT: This is not a normal page, it's an ACTION. This is where the "add a song" form on songs/index - * directs the user after the form submit. This method handles all the POST data from the form and then redirects - * the user back to songs/index via the last line: header(...) - * This is an example of how to handle a POST request. - */ - public function addSong() - { - // if we have POST data to create a new song entry - if (isset($_POST["submit_add_song"])) { - // do addSong() in model/model.php - $this->model->addSong($_POST["artist"], $_POST["track"], $_POST["link"]); - } - - // where to go after song has been added - header('location: ' . URL . 'songs/index'); - } - - /** - * ACTION: deleteSong - * This method handles what happens when you move to http://yourproject/songs/deletesong - * IMPORTANT: This is not a normal page, it's an ACTION. This is where the "delete a song" button on songs/index - * directs the user after the click. This method handles all the data from the GET request (in the URL!) and then - * redirects the user back to songs/index via the last line: header(...) - * This is an example of how to handle a GET request. - * @param int $song_id Id of the to-delete song - */ - public function deleteSong($song_id) - { - // if we have an id of a song that should be deleted - if (isset($song_id)) { - // do deleteSong() in model/model.php - $this->model->deleteSong($song_id); - } - - // where to go after song has been deleted - header('location: ' . URL . 'songs/index'); - } - - /** - * ACTION: editSong - * This method handles what happens when you move to http://yourproject/songs/editsong - * @param int $song_id Id of the to-edit song - */ - public function editSong($song_id) - { - // if we have an id of a song that should be edited - if (isset($song_id)) { - // do getSong() in model/model.php - $song = $this->model->getSong($song_id); - - // in a real application we would also check if this db entry exists and therefore show the result or - // redirect the user to an error page or similar - - // load views. within the views we can echo out $song easily - require APP . 'view/_templates/header.php'; - require APP . 'view/songs/edit.php'; - require APP . 'view/_templates/footer.php'; - } else { - // redirect user to songs index page (as we don't have a song_id) - header('location: ' . URL . 'songs/index'); - } - } - - /** - * ACTION: updateSong - * This method handles what happens when you move to http://yourproject/songs/updatesong - * IMPORTANT: This is not a normal page, it's an ACTION. This is where the "update a song" form on songs/edit - * directs the user after the form submit. This method handles all the POST data from the form and then redirects - * the user back to songs/index via the last line: header(...) - * This is an example of how to handle a POST request. - */ - public function updateSong() - { - // if we have POST data to create a new song entry - if (isset($_POST["submit_update_song"])) { - // do updateSong() from model/model.php - $this->model->updateSong($_POST["artist"], $_POST["track"], $_POST["link"], $_POST['song_id']); - } - - // where to go after song has been added - header('location: ' . URL . 'songs/index'); - } - - /** - * AJAX-ACTION: ajaxGetStats - * TODO documentation - */ - public function ajaxGetStats() - { - $amount_of_songs = $this->model->getAmountOfSongs(); - - // simply echo out something. A supersimple API would be possible by echoing JSON here - echo $amount_of_songs; - } -} diff --git a/application/controller/tracabiltySheets.php b/application/controller/tracabiltySheets.php new file mode 100644 index 00000000..4054765b --- /dev/null +++ b/application/controller/tracabiltySheets.php @@ -0,0 +1,147 @@ +model->getAmountOfTracabiltySheets(); + + // Calcul du nombre total de pages + $totalPages = ceil($totalTracabiltySheets / $limit); + + // Obtenez les chansons pour la page actuelle + $tracabiltySheets = $this->model->getPaginatedTracabiltySheets($limit, $offset); + + + // load views. within the views we can echo out $tracabiltySheets and $amount_of_tracabiltySheets easily + require APP . 'view/_templates/header.php'; + require APP . 'view/tracabiltySheets/index.php'; + require APP . 'view/_templates/footer.php'; + } + + /** + * ACTION: addTracabiltySheet + * This method handles what happens when you move to http://yourproject/tracabiltySheets/addTracabiltySheet + * IMPORTANT: This is not a normal page, it's an ACTION. This is where the "add a tracabiltySheet" form on tracabiltySheets/index + * directs the user after the form submit. This method handles all the POST data from the form and then redirects + * the user back to tracabiltySheets/index via the last line: header(...) + * This is an example of how to handle a POST request. + */ + public function addTracabiltySheet() + { + // if we have POST data to create a new tracabiltySheet entry + if (isset($_POST["submit_add_tracabiltySheet"])) { + // do addTracabiltySheet() in model/model.php + $this->model->addTracabiltySheet($_POST["artist"], $_POST["track"], $_POST["link"]); + } + + // where to go after tracabiltySheet has been added + header('location: ' . URL . 'tracabiltySheet/index'); + } + + /** + * ACTION: deleteTracabiltySheet + * This method handles what happens when you move to http://yourproject/tracabiltySheets/deleteTracabiltySheet + * IMPORTANT: This is not a normal page, it's an ACTION. This is where the "delete a tracabiltySheet" button on tracabiltySheets/index + * directs the user after the click. This method handles all the data from the GET request (in the URL!) and then + * redirects the user back to tracabiltySheets/index via the last line: header(...) + * This is an example of how to handle a GET request. + * @param int $tracabiltySheet_id Id of the to-delete racabiltySheet + */ + public function deleteTracabiltySheet($tracabiltySheet_id) + { + // if we have an id of a song that should be deleted + if (isset($tracabiltySheet_id)) { + // do deleteTracabiltySheet() in model/model.php + $this->model->deleteSong($tracabiltySheet_id); + } + + // where to go after TracabiltySheet has been deleted + header('location: ' . URL . 'tracabiltySheets/index'); + } + + /** + * ACTION: editTracabiltySheet + * This method handles what happens when you move to http://yourproject/tracabiltySheets/editTracabiltySheet + * @param int $tracabiltySheet_id Id of the to-edit tracabiltySheet + */ + public function editTracabiltySheet($tracabiltySheet_id) + { + // if we have an id of a tracabiltySheet that should be edited + if (isset($tracabiltySheet_id)) { + // do getTracabiltySheet() in model/model.php + $tracabiltySheet = $this->model->getTracabiltySheet($tracabiltySheet_id); + + // in a real application we would also check if this db entry exists and therefore show the result or + // redirect the user to an error page or similar + + // load views. within the views we can echo out $tracabiltySheet easily + require APP . 'view/_templates/header.php'; + require APP . 'view/tracabiltySheets/edit.php'; + require APP . 'view/_templates/footer.php'; + } else { + // redirect user to tracabiltySheets index page (as we don't have a tracabiltySheet_id) + header('location: ' . URL . 'tracabiltySheets/index'); + } + } + + /** + * ACTION: updateTracabiltySheet + * This method handles what happens when you move to http://yourproject/tracabiltySheets/updateTracabiltySheet + * IMPORTANT: This is not a normal page, it's an ACTION. This is where the "update a tracabiltySheet" form on tracabiltySheets/edit + * directs the user after the form submit. This method handles all the POST data from the form and then redirects + * the user back to tracabiltySheets/index via the last line: header(...) + * This is an example of how to handle a POST request. + */ + public function updateTracabiltySheet() + { + // if we have POST data to create a new tracabiltySheet entry + if (isset($_POST["submit_update_tracabiltySheet"])) { + // do updateTracabiltySheet() from model/model.php + $this->model->updateTracabiltySheet($_POST["artist"], $_POST["track"], $_POST["link"], $_POST['tracabiltySheet_id']); + } + + // where to go after tracabiltySheet has been added + header('location: ' . URL . 'tracabiltySheets/index'); + } + + /** + * AJAX-ACTION: ajaxGetStats + * TODO documentation + */ + public function ajaxGetStats() + { + $amount_of_tracabiltySheets = $this->model->getAmountOfTracabiltySheets(); + + // simply echo out something. A supersimple API would be possible by echoing JSON here + echo $amount_of_tracabiltySheets; + } +} diff --git a/application/model/model.php b/application/model/model.php index c5e9e25b..36f6634a 100644 --- a/application/model/model.php +++ b/application/model/model.php @@ -15,7 +15,7 @@ function __construct($db) } } - public function getPaginatedSongs($limit, $offset) + public function getPaginatedTracabiltySheets($limit, $offset) { $sql = "SELECT id, artist, track, link FROM song LIMIT :limit OFFSET :offset"; $query = $this->db->prepare($sql); @@ -27,9 +27,9 @@ public function getPaginatedSongs($limit, $offset) /** - * Get all songs from database + * Get all tracabiltySheets from database */ - public function getAllSongs() + public function getAlltracabiltySheets() { $sql = "SELECT id, artist, track, link FROM song"; $query = $this->db->prepare($sql); @@ -43,7 +43,7 @@ public function getAllSongs() } /** - * Add a song to database + * Add a tracabiltySheet to database * TODO put this explanation into readme and remove it from here * Please note that it's not necessary to "clean" our input in any way. With PDO all input is escaped properly * automatically. We also don't use strip_tags() etc. here so we keep the input 100% original (so it's possible @@ -53,7 +53,7 @@ public function getAllSongs() * @param string $track Track * @param string $link Link */ - public function addSong($artist, $track, $link) + public function addTracabiltySheet($artist, $track, $link) { $sql = "INSERT INTO song (artist, track, link) VALUES (:artist, :track, :link)"; $query = $this->db->prepare($sql); @@ -66,16 +66,16 @@ public function addSong($artist, $track, $link) } /** - * Delete a song in the database + * Delete a tracabiltySheet in the database * Please note: this is just an example! In a real application you would not simply let everybody * add/update/delete stuff! - * @param int $song_id Id of song + * @param int $tracabiltySheet_id Id of tracabiltySheet */ - public function deleteSong($song_id) + public function deleteTracabiltySheet($tracabiltySheet_id) { - $sql = "DELETE FROM song WHERE id = :song_id"; + $sql = "DELETE FROM song WHERE id = :tracabiltySheet_id"; $query = $this->db->prepare($sql); - $parameters = array(':song_id' => $song_id); + $parameters = array(':tracabiltySheet_id' => $tracabiltySheet_id); // useful for debugging: you can see the SQL behind above construction by using: // echo '[ PDO DEBUG ]: ' . Helper::debugPDO($sql, $parameters); exit(); @@ -84,13 +84,13 @@ public function deleteSong($song_id) } /** - * Get a song from database + * Get a tracabiltySheet from database */ - public function getSong($song_id) + public function getTracabiltySheet($tracabiltySheet_id) { - $sql = "SELECT id, artist, track, link FROM song WHERE id = :song_id LIMIT 1"; + $sql = "SELECT id, artist, track, link FROM song WHERE id = :tracabiltySheet_id LIMIT 1"; $query = $this->db->prepare($sql); - $parameters = array(':song_id' => $song_id); + $parameters = array(':tracabiltySheet_id' => $tracabiltySheet_id); // useful for debugging: you can see the SQL behind above construction by using: // echo '[ PDO DEBUG ]: ' . Helper::debugPDO($sql, $parameters); exit(); @@ -102,7 +102,7 @@ public function getSong($song_id) } /** - * Update a song in database + * Update a tracabiltySheet in database * // TODO put this explaination into readme and remove it from here * Please note that it's not necessary to "clean" our input in any way. With PDO all input is escaped properly * automatically. We also don't use strip_tags() etc. here so we keep the input 100% original (so it's possible @@ -111,13 +111,13 @@ public function getSong($song_id) * @param string $artist Artist * @param string $track Track * @param string $link Link - * @param int $song_id Id + * @param int $tracabiltySheet_id Id */ - public function updateSong($artist, $track, $link, $song_id) + public function updateTracabiltySheet($artist, $track, $link, $tracabiltySheet_id) { - $sql = "UPDATE song SET artist = :artist, track = :track, link = :link WHERE id = :song_id"; + $sql = "UPDATE song SET artist = :artist, track = :track, link = :link WHERE id = :tracabiltySheet_id"; $query = $this->db->prepare($sql); - $parameters = array(':artist' => $artist, ':track' => $track, ':link' => $link, ':song_id' => $song_id); + $parameters = array(':artist' => $artist, ':track' => $track, ':link' => $link, ':tracabiltySheet_id' => $tracabiltySheet_id); // useful for debugging: you can see the SQL behind above construction by using: // echo '[ PDO DEBUG ]: ' . Helper::debugPDO($sql, $parameters); exit(); @@ -127,15 +127,15 @@ public function updateSong($artist, $track, $link, $song_id) /** * Get simple "stats". This is just a simple demo to show - * how to use more than one model in a controller (see application/controller/songs.php for more) + * how to use more than one model in a controller (see application/controller/tracabiltySheets.php for more) */ - public function getAmountOfSongs() + public function getAmountOfTracabiltySheets() { - $sql = "SELECT COUNT(id) AS amount_of_songs FROM song"; + $sql = "SELECT COUNT(id) AS amount_of_tracabiltySheets FROM song"; $query = $this->db->prepare($sql); $query->execute(); // fetch() is the PDO method that get exactly one result - return $query->fetch()->amount_of_songs; + return $query->fetch()->amount_of_tracabiltySheets; } } diff --git a/application/view/_templates/header.php b/application/view/_templates/header.php index 584121f5..51f6f41a 100644 --- a/application/view/_templates/header.php +++ b/application/view/_templates/header.php @@ -24,5 +24,5 @@ home subpage subpage 2 - songs + tracabiltySheets diff --git a/application/view/songs/edit.php b/application/view/songs/edit.php deleted file mode 100644 index fad95cfc..00000000 --- a/application/view/songs/edit.php +++ /dev/null @@ -1,18 +0,0 @@ -
-

You are in the View: application/view/song/edit.php (everything in this box comes from that file)

- -
-

Edit a song

-
- - - - - - - - -
-
-
- diff --git a/application/view/songs/index.php b/application/view/songs/index.php deleted file mode 100644 index 8f9c3aae..00000000 --- a/application/view/songs/index.php +++ /dev/null @@ -1,75 +0,0 @@ -
-

You are in the View: application/view/song/index.php (everything in this box comes from that file)

- -
-

Add a song

-
- - - - - - - -
-
- -
-

Amount of songs (data from second model)

-
- -
-

Amount of songs (via AJAX)

-
- -
-
-

List of songs (data from first model)

- - - - - - - - - - - - - - - - - - - - - - - - - -
IdArtistTrackLinkDELETEEDIT
id)) echo htmlspecialchars($song->id, ENT_QUOTES, 'UTF-8'); ?>artist)) echo htmlspecialchars($song->artist, ENT_QUOTES, 'UTF-8'); ?>track)) echo htmlspecialchars($song->track, ENT_QUOTES, 'UTF-8'); ?> - link)) { ?> - link, ENT_QUOTES, 'UTF-8'); ?> - - deleteedit
-
-
\ No newline at end of file diff --git a/application/view/tracabiltySheets/edit.php b/application/view/tracabiltySheets/edit.php new file mode 100644 index 00000000..a188e0d8 --- /dev/null +++ b/application/view/tracabiltySheets/edit.php @@ -0,0 +1,18 @@ +
+

You are in the View: application/view/tracabiltySheets/edit.php (everything in this box comes from that file)

+ +
+

Edit a tracabilty Sheet

+
+ + + + + + + + +
+
+
+ diff --git a/application/view/tracabiltySheets/index.php b/application/view/tracabiltySheets/index.php new file mode 100644 index 00000000..7cbb3acb --- /dev/null +++ b/application/view/tracabiltySheets/index.php @@ -0,0 +1,75 @@ +
+

You are in the View: application/view/tracabiltySheets/index.php (everything in this box comes from that file)

+ +
+

Add a tracabilty Sheet

+
+ + + + + + + +
+
+ +
+

Amount of Tracabilty Sheets (data from second model)

+
+ +
+

Amount of tracabilty Sheets (via AJAX)

+
+ +
+
+

List of tracabilty Sheets (data from first model)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
IdArtistTrackLinkDELETEEDIT
id)) echo htmlspecialchars($tracabiltySheet->id, ENT_QUOTES, 'UTF-8'); ?>artist)) echo htmlspecialchars($tracabiltySheet->artist, ENT_QUOTES, 'UTF-8'); ?>track)) echo htmlspecialchars($tracabiltySheet->track, ENT_QUOTES, 'UTF-8'); ?> + link)) { ?> + link, ENT_QUOTES, 'UTF-8'); ?> + + deleteedit
+
+
\ No newline at end of file From 9b2debfe06219d7933ad5997c56e8889103d0fb4 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:39:39 +0000 Subject: [PATCH 014/308] hhh --- application/controller/tracabiltySheets.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/controller/tracabiltySheets.php b/application/controller/tracabiltySheets.php index 4054765b..e0c3f4c7 100644 --- a/application/controller/tracabiltySheets.php +++ b/application/controller/tracabiltySheets.php @@ -13,7 +13,7 @@ class TracabiltySheets extends Controller { /** * PAGE: index - * This method handles what happens when you move to http://yourproject/songs/index + * This method handles what happens when you move to http://yourproject/tracabiltySheets/index */ public function index($pPage=1) { @@ -78,10 +78,10 @@ public function addTracabiltySheet() */ public function deleteTracabiltySheet($tracabiltySheet_id) { - // if we have an id of a song that should be deleted + // if we have an id of a tracabilty Sheet that should be deleted if (isset($tracabiltySheet_id)) { // do deleteTracabiltySheet() in model/model.php - $this->model->deleteSong($tracabiltySheet_id); + $this->model->deleteTracabiltySheet($tracabiltySheet_id); } // where to go after TracabiltySheet has been deleted From 4f9af1a068d7215040e29fc8a4afb36266d8e406 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:54:47 +0000 Subject: [PATCH 015/308] gg --- application/controller/tracabiltySheets.php | 38 +++++++++++++++------ application/model/model.php | 4 +-- application/view/tracabiltySheets/index.php | 2 +- public/js/application.js | 4 +-- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/application/controller/tracabiltySheets.php b/application/controller/tracabiltySheets.php index e0c3f4c7..1535fdbf 100644 --- a/application/controller/tracabiltySheets.php +++ b/application/controller/tracabiltySheets.php @@ -15,14 +15,30 @@ class TracabiltySheets extends Controller * PAGE: index * This method handles what happens when you move to http://yourproject/tracabiltySheets/index */ + + /** + * PAGE: index + * This method handles what happens when you move to http://yourproject/songs/index + */ + public function index() + { + // getting all songs and amount of songs + $songs = $this->model->getAllSongs(); + $amount_of_songs = $this->model->getAmountOfSongs(); + + // load views. within the views we can echo out $songs and $amount_of_songs easily + require APP . 'view/_templates/header.php'; + require APP . 'view/songs/index.php'; + require APP . 'view/_templates/footer.php'; + } public function index($pPage=1) { - // Nombre d'éléments par page + // Number of items per page $limit = 10; - // if we have an id of a tracabiltySheet that should be deleted + $page = 0; - // Obtenez la page actuelle à partir du paramètre, ou définissez-la à 1 si non définie + // Get the current page from the parameter, or set it to 1 if not defined if (isset($pPage)) { $page = (int)$pPage; } else { @@ -31,17 +47,17 @@ public function index($pPage=1) $offset = ($page - 1) * $limit; - // Obtenez le nombre total de chansons - $totalTracabiltySheets = $this->model->getAmountOfTracabiltySheets(); + // Get the total number of traceability sheets + $amountOfTracabiltySheets = $this->model->getAmountOfTracabiltySheets(); - // Calcul du nombre total de pages - $totalPages = ceil($totalTracabiltySheets / $limit); + // Calculate the total number of pages + $totalPages = ceil($amountOfTracabiltySheets / $limit); - // Obtenez les chansons pour la page actuelle + // Get the traceability sheets for the current page $tracabiltySheets = $this->model->getPaginatedTracabiltySheets($limit, $offset); - // load views. within the views we can echo out $tracabiltySheets and $amount_of_tracabiltySheets easily + // load views. within the views we can echo out $tracabiltySheets and $amountOfTracabiltySheets easily require APP . 'view/_templates/header.php'; require APP . 'view/tracabiltySheets/index.php'; require APP . 'view/_templates/footer.php'; @@ -139,9 +155,9 @@ public function updateTracabiltySheet() */ public function ajaxGetStats() { - $amount_of_tracabiltySheets = $this->model->getAmountOfTracabiltySheets(); + $amountOfTracabiltySheets = $this->model->getAmountOfTracabiltySheets(); // simply echo out something. A supersimple API would be possible by echoing JSON here - echo $amount_of_tracabiltySheets; + echo $amountOfTracabiltySheets; } } diff --git a/application/model/model.php b/application/model/model.php index 36f6634a..1c46d213 100644 --- a/application/model/model.php +++ b/application/model/model.php @@ -131,11 +131,11 @@ public function updateTracabiltySheet($artist, $track, $link, $tracabiltySheet_i */ public function getAmountOfTracabiltySheets() { - $sql = "SELECT COUNT(id) AS amount_of_tracabiltySheets FROM song"; + $sql = "SELECT COUNT(id) AS amountOfTracabiltySheets FROM song"; $query = $this->db->prepare($sql); $query->execute(); // fetch() is the PDO method that get exactly one result - return $query->fetch()->amount_of_tracabiltySheets; + return $query->fetch()->amountOfTracabiltySheets; } } diff --git a/application/view/tracabiltySheets/index.php b/application/view/tracabiltySheets/index.php index 7cbb3acb..4981881f 100644 --- a/application/view/tracabiltySheets/index.php +++ b/application/view/tracabiltySheets/index.php @@ -17,7 +17,7 @@

Amount of Tracabilty Sheets (data from second model)

- +

Amount of tracabilty Sheets (via AJAX)

diff --git a/public/js/application.js b/public/js/application.js index 35c28825..59101c4a 100644 --- a/public/js/application.js +++ b/public/js/application.js @@ -19,9 +19,9 @@ $(function() { $('#javascript-ajax-button').on('click', function(){ - // send an ajax-request to this URL: current-server.com/songs/ajaxGetStats + // send an ajax-request to this URL: current-server.com/tracabiltySheets/ajaxGetStats // "url" is defined in views/_templates/footer.php - $.ajax(url + "/songs/ajaxGetStats") + $.ajax(url + "/tracabiltySheets/ajaxGetStats") .done(function(result) { // this will be executed if the ajax-call was successful // here we get the feedback from the ajax-call (result) and show it in #javascript-ajax-result-box From fa23cb298a4700624ae641deaf694fe4177ef916 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:56:13 +0000 Subject: [PATCH 016/308] hh --- application/model/model.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/model/model.php b/application/model/model.php index 1c46d213..36f6634a 100644 --- a/application/model/model.php +++ b/application/model/model.php @@ -131,11 +131,11 @@ public function updateTracabiltySheet($artist, $track, $link, $tracabiltySheet_i */ public function getAmountOfTracabiltySheets() { - $sql = "SELECT COUNT(id) AS amountOfTracabiltySheets FROM song"; + $sql = "SELECT COUNT(id) AS amount_of_tracabiltySheets FROM song"; $query = $this->db->prepare($sql); $query->execute(); // fetch() is the PDO method that get exactly one result - return $query->fetch()->amountOfTracabiltySheets; + return $query->fetch()->amount_of_tracabiltySheets; } } From 2d301fef7f58b3349e3dfb45d220297b164f157f Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:57:34 +0000 Subject: [PATCH 017/308] hhh --- application/controller/tracabiltySheets.php | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/application/controller/tracabiltySheets.php b/application/controller/tracabiltySheets.php index 1535fdbf..6a7a13ba 100644 --- a/application/controller/tracabiltySheets.php +++ b/application/controller/tracabiltySheets.php @@ -16,21 +16,7 @@ class TracabiltySheets extends Controller * This method handles what happens when you move to http://yourproject/tracabiltySheets/index */ - /** - * PAGE: index - * This method handles what happens when you move to http://yourproject/songs/index - */ - public function index() - { - // getting all songs and amount of songs - $songs = $this->model->getAllSongs(); - $amount_of_songs = $this->model->getAmountOfSongs(); - - // load views. within the views we can echo out $songs and $amount_of_songs easily - require APP . 'view/_templates/header.php'; - require APP . 'view/songs/index.php'; - require APP . 'view/_templates/footer.php'; - } + public function index($pPage=1) { // Number of items per page From 53cde9445bf4582a564290771b784ded1f4e4123 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:03:03 +0000 Subject: [PATCH 018/308] hh --- application/controller/tracabiltySheets.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controller/tracabiltySheets.php b/application/controller/tracabiltySheets.php index 6a7a13ba..56db7d08 100644 --- a/application/controller/tracabiltySheets.php +++ b/application/controller/tracabiltySheets.php @@ -66,7 +66,7 @@ public function addTracabiltySheet() } // where to go after tracabiltySheet has been added - header('location: ' . URL . 'tracabiltySheet/index'); + header('location: ' . URL . 'tracabiltySheets/index'); } /** From e11d167d5636ccf62f9295024447fa5e4a45f891 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:59:33 +0000 Subject: [PATCH 019/308] hhh --- application/view/tracabiltySheets/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/view/tracabiltySheets/index.php b/application/view/tracabiltySheets/index.php index 4981881f..ffc6bd48 100644 --- a/application/view/tracabiltySheets/index.php +++ b/application/view/tracabiltySheets/index.php @@ -48,7 +48,7 @@ delete - edit + edit From bb8510f62209b97f956897831ecd603856b932f6 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:51:57 +0000 Subject: [PATCH 020/308] lll --- application/controller/tracabiltySheets.php | 19 ++++++++++++------ application/view/tracabiltySheets/index.php | 22 ++++++++++++++++----- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/application/controller/tracabiltySheets.php b/application/controller/tracabiltySheets.php index 56db7d08..0f4450b0 100644 --- a/application/controller/tracabiltySheets.php +++ b/application/controller/tracabiltySheets.php @@ -16,19 +16,26 @@ class TracabiltySheets extends Controller * This method handles what happens when you move to http://yourproject/tracabiltySheets/index */ - - public function index($pPage=1) + + public function index($pPage = 1, $pLimit = 10) { // Number of items per page + // Get the current page from the parameter, or set it to 1 if not defined $limit = 10; + if (isset($pLimit)) { + $limit = (int)$pLimit; + } - $page = 0; - + $page = 1; // Get the current page from the parameter, or set it to 1 if not defined if (isset($pPage)) { $page = (int)$pPage; - } else { - $page = 1; + } + + // if we have POST data to create a new tracabiltySheet entry + if (isset($_POST["submit_update_tracabiltySheet"])) { + $limit = $_POST["limit"]; + $page = $_POST["page"]; } $offset = ($page - 1) * $limit; diff --git a/application/view/tracabiltySheets/index.php b/application/view/tracabiltySheets/index.php index ffc6bd48..c4a0485d 100644 --- a/application/view/tracabiltySheets/index.php +++ b/application/view/tracabiltySheets/index.php @@ -54,21 +54,33 @@ +
+ + + + + +
From 1f8dc19acfb9edfcf6c2eea91e7e99c619ebcf6e Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Thu, 10 Oct 2024 18:06:38 +0000 Subject: [PATCH 021/308] hhh --- application/controller/tracabiltySheets.php | 18 ++++++------------ application/core/application.php | 9 +++++---- application/view/tracabiltySheets/index.php | 13 +++++-------- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/application/controller/tracabiltySheets.php b/application/controller/tracabiltySheets.php index 0f4450b0..f2c8fcfd 100644 --- a/application/controller/tracabiltySheets.php +++ b/application/controller/tracabiltySheets.php @@ -17,25 +17,19 @@ class TracabiltySheets extends Controller */ - public function index($pPage = 1, $pLimit = 10) + public function index($pPage = 1) { - // Number of items per page - // Get the current page from the parameter, or set it to 1 if not defined - $limit = 10; - if (isset($pLimit)) { - $limit = (int)$pLimit; - } - $page = 1; // Get the current page from the parameter, or set it to 1 if not defined if (isset($pPage)) { $page = (int)$pPage; } - // if we have POST data to create a new tracabiltySheet entry - if (isset($_POST["submit_update_tracabiltySheet"])) { - $limit = $_POST["limit"]; - $page = $_POST["page"]; + $limit = 10; + // Number of items per page + // Get the current page from the parameter, or set it to 1 if not defined + if (isset($_POST['limitListTracabilitySheet'])) { + $_SESSION['limitListTracabilitySheet'] = (int)$_POST['limitListTracabilitySheet']; } $offset = ($page - 1) * $limit; diff --git a/application/core/application.php b/application/core/application.php index c0708b8a..bad3fb01 100644 --- a/application/core/application.php +++ b/application/core/application.php @@ -17,6 +17,10 @@ class Application */ public function __construct() { + // Start the session if it is not already started + if (session_status() == PHP_SESSION_NONE) { + session_start(); + } // create array with URL parts in $url $this->splitUrl(); @@ -26,7 +30,6 @@ public function __construct() require APP . 'controller/home.php'; $page = new Home(); $page->index(); - } elseif (file_exists(APP . 'controller/' . $this->url_controller . '.php')) { // here we did check for controller: does such a controller exist ? @@ -45,13 +48,11 @@ public function __construct() // If no parameters are given, just call the method without parameters, like $this->home->method(); $this->url_controller->{$this->url_action}(); } - } else { if (strlen($this->url_action ?? '') == 0) { // no action defined: call the default index() method of a selected controller $this->url_controller->index(); - } - else { + } else { header('location: ' . URL . 'problem'); } } diff --git a/application/view/tracabiltySheets/index.php b/application/view/tracabiltySheets/index.php index c4a0485d..c6ea2f06 100644 --- a/application/view/tracabiltySheets/index.php +++ b/application/view/tracabiltySheets/index.php @@ -55,31 +55,28 @@
- - - - -
From 0475274f0075391e707840072cb731c3cc12109c Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Thu, 10 Oct 2024 18:28:26 +0000 Subject: [PATCH 022/308] gggg --- application/controller/tracabiltySheets.php | 10 ++++++++-- application/view/tracabiltySheets/index.php | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/application/controller/tracabiltySheets.php b/application/controller/tracabiltySheets.php index f2c8fcfd..e1e6ebe4 100644 --- a/application/controller/tracabiltySheets.php +++ b/application/controller/tracabiltySheets.php @@ -25,13 +25,19 @@ public function index($pPage = 1) $page = (int)$pPage; } - $limit = 10; - // Number of items per page + + // Number of items per page // Get the current page from the parameter, or set it to 1 if not defined if (isset($_POST['limitListTracabilitySheet'])) { $_SESSION['limitListTracabilitySheet'] = (int)$_POST['limitListTracabilitySheet']; } + if (isset($_SESSION['limitListTracabilitySheet'])) { + $limit = (int)$_SESSION['limitListTracabilitySheet']; + } else { + $limit = 10; + } + $offset = ($page - 1) * $limit; // Get the total number of traceability sheets diff --git a/application/view/tracabiltySheets/index.php b/application/view/tracabiltySheets/index.php index c6ea2f06..0a2fe67b 100644 --- a/application/view/tracabiltySheets/index.php +++ b/application/view/tracabiltySheets/index.php @@ -69,7 +69,7 @@ Suivant
-
+ + +
\ No newline at end of file From c5f191a52c48471cbda20868c8fb41142886f139 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Fri, 11 Oct 2024 09:52:57 +0000 Subject: [PATCH 027/308] test --- application/view/_templates/header.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/application/view/_templates/header.php b/application/view/_templates/header.php index 5d4ac9d7..71901933 100644 --- a/application/view/_templates/header.php +++ b/application/view/_templates/header.php @@ -14,6 +14,7 @@ + @@ -46,5 +47,15 @@ + \ No newline at end of file From 86da4ad226f2469046eecf46748709430c1df771 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Fri, 11 Oct 2024 09:55:29 +0000 Subject: [PATCH 028/308] hh --- application/view/_templates/header.php | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/application/view/_templates/header.php b/application/view/_templates/header.php index 71901933..4869f61c 100644 --- a/application/view/_templates/header.php +++ b/application/view/_templates/header.php @@ -47,15 +47,18 @@ - + \ No newline at end of file From 66a8dfa179084471bcb1f9e452bf4830b1a67170 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Fri, 11 Oct 2024 09:57:41 +0000 Subject: [PATCH 029/308] hh --- application/view/_templates/header.php | 27 +++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/application/view/_templates/header.php b/application/view/_templates/header.php index 4869f61c..cfbf16fc 100644 --- a/application/view/_templates/header.php +++ b/application/view/_templates/header.php @@ -42,23 +42,24 @@ + - + \ No newline at end of file From f08fd6614fd2b11a73b1c8944948ecc9c61238ab Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:00:44 +0000 Subject: [PATCH 030/308] hh --- application/view/_templates/footer.php | 33 +++++++++++++------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/application/view/_templates/footer.php b/application/view/_templates/footer.php index 55d677fa..6969840c 100644 --- a/application/view/_templates/footer.php +++ b/application/view/_templates/footer.php @@ -1,19 +1,20 @@ + + - - + + + - - - - - - - - - + + + + + + - + + \ No newline at end of file From e2021fc3b4ac19b667c1f456498dcbf4766bda6b Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:12:01 +0000 Subject: [PATCH 031/308] hh --- application/view/_templates/header.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/application/view/_templates/header.php b/application/view/_templates/header.php index cfbf16fc..037d5cb7 100644 --- a/application/view/_templates/header.php +++ b/application/view/_templates/header.php @@ -25,8 +25,9 @@ Parker - \ No newline at end of file From c9965a6f6f0af333d9d6320ee72a48f5caa7111e Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Fri, 11 Oct 2024 21:02:08 +0000 Subject: [PATCH 044/308] jjj --- application/core/application.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/core/application.php b/application/core/application.php index acf45aae..33689aaf 100644 --- a/application/core/application.php +++ b/application/core/application.php @@ -28,7 +28,7 @@ public function __construct() if (!$this->url_controller) { require APP . 'controller/tracabiltySheets.php'; - $page = new Home(); + $page = new TracabiltySheets(); $page->index(); } elseif (file_exists(APP . 'controller/' . $this->url_controller . '.php')) { // here we did check for controller: does such a controller exist ? From c9d37d9141532ed3fb3625fcbb1001fb69b1a3ce Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Fri, 11 Oct 2024 21:10:05 +0000 Subject: [PATCH 045/308] hhh --- application/view/tracabiltySheets/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/view/tracabiltySheets/index.php b/application/view/tracabiltySheets/index.php index 01a8b70b..46b61999 100644 --- a/application/view/tracabiltySheets/index.php +++ b/application/view/tracabiltySheets/index.php @@ -1,13 +1,13 @@ statusSheetOperator) { $operatorIcon = ''; } else { $operatorIcon = ''; } // Determine the correct icons for quality status -if ($statusSheetQuality) { +if ((bool)$tracabiltySheet->statusSheetQuality) { $qualityIcon = ''; } else { $qualityIcon = ''; From 78808331b0bb1c59ca5943d088ded499f5ea7370 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Fri, 11 Oct 2024 21:14:17 +0000 Subject: [PATCH 046/308] jjj --- application/view/tracabiltySheets/index.php | 32 ++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/application/view/tracabiltySheets/index.php b/application/view/tracabiltySheets/index.php index 46b61999..1711f919 100644 --- a/application/view/tracabiltySheets/index.php +++ b/application/view/tracabiltySheets/index.php @@ -1,19 +1,3 @@ -statusSheetOperator) { - $operatorIcon = ''; -} else { - $operatorIcon = ''; -} - -// Determine the correct icons for quality status -if ((bool)$tracabiltySheet->statusSheetQuality) { - $qualityIcon = ''; -} else { - $qualityIcon = ''; -} -?> -

Liste des fiches de tracabilité:

@@ -28,7 +12,23 @@

PN:partNumber, ENT_QUOTES, 'UTF-8'); ?>

Work Order:workOrder, ENT_QUOTES, 'UTF-8'); ?>

+ statusSheetOperator) { + $operatorIcon = ''; + } else { + $operatorIcon = ''; + } + // Determine the correct icons for quality status + if ((bool)$tracabiltySheet->statusSheetQuality) { + $qualityIcon = ''; + } else { + $qualityIcon = ''; + } + ?> +
From e4a36667425fd7063781521f9ee4cfd1fdf4d611 Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Fri, 11 Oct 2024 21:42:51 +0000 Subject: [PATCH 047/308] hh --- application/controller/tracabiltySheets.php | 2 +- application/model/model.php | 1 - application/view/tracabiltySheets/index.php | 108 ++++++++++---------- 3 files changed, 54 insertions(+), 57 deletions(-) diff --git a/application/controller/tracabiltySheets.php b/application/controller/tracabiltySheets.php index d7506931..595d7608 100644 --- a/application/controller/tracabiltySheets.php +++ b/application/controller/tracabiltySheets.php @@ -70,7 +70,7 @@ public function createTracabiltySheet() // load views. within the views we can echo out $tracabiltySheet easily require APP . 'view/_templates/header.php'; - require APP . 'view/tracabiltySheets/edit.php'; + require APP . 'view/tracabiltySheets/add.php'; require APP . 'view/_templates/footer.php'; } public function addTracabiltySheet() diff --git a/application/model/model.php b/application/model/model.php index f00e5226..37a3caed 100644 --- a/application/model/model.php +++ b/application/model/model.php @@ -25,7 +25,6 @@ public function getPaginatedTracabiltySheets($limit, $offset) return $query->fetchAll(); } - /** * Get all tracabiltySheets from database */ diff --git a/application/view/tracabiltySheets/index.php b/application/view/tracabiltySheets/index.php index 1711f919..66f1680f 100644 --- a/application/view/tracabiltySheets/index.php +++ b/application/view/tracabiltySheets/index.php @@ -1,70 +1,68 @@

Liste des fiches de tracabilité:

-
- -
-
- -

- SN: serialNumber, ENT_QUOTES, 'UTF-8'); ?> -

+ +
+
+ +

+ SN: serialNumber, ENT_QUOTES, 'UTF-8'); ?> +

- -

PN:partNumber, ENT_QUOTES, 'UTF-8'); ?>

-

Work Order:workOrder, ENT_QUOTES, 'UTF-8'); ?>

- +

PN:partNumber, ENT_QUOTES, 'UTF-8'); ?>

+

Work Order:workOrder, ENT_QUOTES, 'UTF-8'); ?>

+ statusSheetOperator) { - $operatorIcon = ''; - } else { - $operatorIcon = ''; - } + // Determine the correct icons for operator status + if ((bool)$tracabiltySheet->statusSheetOperator) { + $operatorIcon = ''; + } else { + $operatorIcon = ''; + } - // Determine the correct icons for quality status - if ((bool)$tracabiltySheet->statusSheetQuality) { - $qualityIcon = ''; - } else { - $qualityIcon = ''; - } - ?> - - -
-
-

- Operator Status: - - -

-
-
-

- Quality Status: - - -

-
+ // Determine the correct icons for quality status + if ((bool)$tracabiltySheet->statusSheetQuality) { + $qualityIcon = ''; + } else { + $qualityIcon = ''; + } + ?> + + +
+
+

+ Operator Status: + + +

+
+
+

+ Quality Status: + + +

+
- - - + + + - - + + - - - -
+
+ \ No newline at end of file From 54e3223ff0ef59ead8a7abb374b26b8917051edb Mon Sep 17 00:00:00 2001 From: Moz <43842362+Mozinor95320@users.noreply.github.com> Date: Sun, 13 Oct 2024 11:52:59 +0000 Subject: [PATCH 143/308] ff --- application/view/_templates/header.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/view/_templates/header.php b/application/view/_templates/header.php index f3d98e84..e712b987 100644 --- a/application/view/_templates/header.php +++ b/application/view/_templates/header.php @@ -50,11 +50,11 @@