]> 91.132.146.200 Git - emere.git/commitdiff
current status
authorBanana <mail@bananas-playground.net>
Sun, 25 Sep 2022 10:53:43 +0000 (12:53 +0200)
committerBanana <mail@bananas-playground.net>
Sun, 25 Sep 2022 10:53:43 +0000 (12:53 +0200)
TODO [new file with mode: 0644]
documentation/emere.sql [new file with mode: 0644]
webroot/config/config.php.default
webroot/lib/item.class.php
webroot/lib/itemInput.class.php [new file with mode: 0644]
webroot/lib/summoner.class.php
webroot/view/_head.php
webroot/view/item/item.html
webroot/view/item/item.php

diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..7f4f922
--- /dev/null
+++ b/TODO
@@ -0,0 +1 @@
+- FE languages like i18n support
diff --git a/documentation/emere.sql b/documentation/emere.sql
new file mode 100644 (file)
index 0000000..3c8614d
--- /dev/null
@@ -0,0 +1,158 @@
+-- phpMyAdmin SQL Dump
+-- version 5.2.0
+-- https://www.phpmyadmin.net/
+--
+-- Host: 127.0.0.1
+-- Generation Time: Sep 25, 2022 at 10:53 AM
+-- Server version: 8.0.27
+-- PHP Version: 8.1.8
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+START TRANSACTION;
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- Database: `emere`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `item`
+--
+
+CREATE TABLE `item` (
+  `id` int NOT NULL,
+  `fk_receipt` int NOT NULL,
+  `fk_market` int NOT NULL,
+  `fk_product` int NOT NULL,
+  `fk_list` int NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `list`
+--
+
+CREATE TABLE `list` (
+  `id` int NOT NULL,
+  `name` varchar(64) COLLATE utf8mb4_bin NOT NULL,
+  `description` varchar(255) COLLATE utf8mb4_bin NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `market`
+--
+
+CREATE TABLE `market` (
+  `id` int NOT NULL,
+  `name` varchar(128) COLLATE utf8mb4_bin NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `product`
+--
+
+CREATE TABLE `product` (
+  `id` int NOT NULL,
+  `name` varchar(128) COLLATE utf8mb4_bin NOT NULL,
+  `manufacturer` varchar(128) COLLATE utf8mb4_bin NOT NULL,
+  `weight` int NOT NULL,
+  `itemcount` int NOT NULL,
+  `price` int NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `receipt`
+--
+
+CREATE TABLE `receipt` (
+  `id` int NOT NULL,
+  `receiptdate` datetime NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+--
+-- Indexes for dumped tables
+--
+
+--
+-- Indexes for table `item`
+--
+ALTER TABLE `item`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- Indexes for table `list`
+--
+ALTER TABLE `list`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- Indexes for table `market`
+--
+ALTER TABLE `market`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- Indexes for table `product`
+--
+ALTER TABLE `product`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- Indexes for table `receipt`
+--
+ALTER TABLE `receipt`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- AUTO_INCREMENT for dumped tables
+--
+
+--
+-- AUTO_INCREMENT for table `item`
+--
+ALTER TABLE `item`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT;
+
+--
+-- AUTO_INCREMENT for table `list`
+--
+ALTER TABLE `list`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT;
+
+--
+-- AUTO_INCREMENT for table `market`
+--
+ALTER TABLE `market`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT;
+
+--
+-- AUTO_INCREMENT for table `product`
+--
+ALTER TABLE `product`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT;
+
+--
+-- AUTO_INCREMENT for table `receipt`
+--
+ALTER TABLE `receipt`
+  MODIFY `id` int NOT NULL AUTO_INCREMENT;
+COMMIT;
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
index ca79af877889d5e995e61c51dbd81e1f9e0f4e10..f0247abc2fd1e8242e2d37bc56c24a36f0fcbe89 100644 (file)
@@ -25,6 +25,12 @@ const QUERY_DEBUG = true;
 # timezone settings
 const TIMEZONE = 'Europe/Berlin';
 
+# lang settings for number inputs
+const NUMBER_INPUT_LANG = "de-DE";
+
+# lang setting
+const FE_LANG = "en";
+
 # path settings
 const PATH_ABSOLUTE = '/home/some/path/emere/';
 const PATH_LOGDIRECTORY = PATH_ABSOLUTE . '/log';
index fc067718b610a8301d68ac827bf10c20bb9bd2a3..a71e42645e2f5bd744743bc2325e4b3b9eb2a1be 100644 (file)
@@ -19,7 +19,8 @@
  */
 
 class Item {
-    /**
+
+       /**
      * The DB object
      *
      * @var mysqli
diff --git a/webroot/lib/itemInput.class.php b/webroot/lib/itemInput.class.php
new file mode 100644 (file)
index 0000000..ea84627
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * emere
+ *
+ * Copyright (C) 2022  Johannes 'Banana' Keßler
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Process the input data from adding or edit an item
+ */
+class ItemInput {
+       /**
+        * The DB object
+        *
+        * @var mysqli
+        */
+       private mysqli $_DB;
+
+       /**
+        * The data for this item
+        *
+        * @var array
+        */
+       private array $_data;
+
+       /**
+        * @param mysqli $databaseConnectionObject
+        */
+       public function __construct(mysqli $databaseConnectionObject) {
+               $this->_DB = $databaseConnectionObject;
+       }
+
+       /**
+        * Check for required fields, valid input and prepare the data
+        * @param array $data
+        * @return array
+        */
+       public function validateAndPrepare(array $data): array {
+               $status = true;
+               $error = array();
+
+
+               if(!empty($data)) {
+                       if(!isset($data['receiptdate']) || empty($data['receiptdate']) || !Summoner::validate($data['receiptdate'], 'datetime')) {
+                               $status = false;
+                               $error[] = array('receiptdata' => '');
+                       }
+               }
+
+               return array(
+                       'status' => $status,
+                       'error' => $error
+               );
+       }
+}
index 3da22f3d9eccffd831214ecbaaacbdacfcf84546..4b23730cf4244c7e8d41ac2db61dd10e7212e686 100644 (file)
@@ -66,7 +66,7 @@ class Summoner {
                 else {
                     return false;
                 }
-                break;
+                       break;
 
             case 'nospace':
                 // text without any whitespace and special chars
@@ -102,7 +102,16 @@ class Summoner {
                 $pattern = '/[\p{L}\p{N}\-_]/u';
                 break;
 
-            case 'text':
+                       case 'datetime':
+                               // based on the format eg. 2022-09-25T22:00
+                               $dt = DateTime::createFromFormat('Y-m-d\TH:i', $input);
+                               if ($dt !== false) {
+                                       return(checkdate($dt->format('m'), $dt->format('d'), $dt->format('Y')));
+                               }
+                       break;
+
+
+                       case 'text':
             default:
                 $pattern = '/[\p{L}\p{N}\p{P}\p{S}\p{Z}\p{M}\s]/u';
         }
index 6f75334c18cb08dc38f76d9b239afd8c0f13fea3..ee70071705c05f39364d2ca15a870ea377d9717e 100644 (file)
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html lang="en">
+<html lang="<?php echo FE_LANG; ?>">
 <head>
     <meta charset="utf-8">
     <title><?php echo Summoner::ifset($TemplateData,'pageTitle').' - '; ?>emere</title>
index 729a382537c1366fe107e180fed67484dd4e3d29..986385b3181a7637ff753b790328cbcbf4099d1e 100644 (file)
@@ -1,7 +1,7 @@
 <form method="post">
     <fieldset>
-        <label for="receipt">Receipt* <small>Just leave it blank to create a new based on data and market name.</small></label>
-        <input name="fdata[receipt]" id="receipt" type="text" list="receiptList" autocomplete="off" required
+        <label for="receipt">Receipt <small>Just leave it blank to create a new based on date and market name.</small></label>
+        <input name="fdata[receipt]" id="receipt" type="text" list="receiptList" autocomplete="off"
                value="<?php echo Summoner::ifset($TemplateData['editData'], 'receipt'); ?>" />
         <datalist id="receiptList">
             <option>Rewe</option>
         </datalist>
 
         <label for="weight">Weight(g)</label>
-        <input name="fdata[weight]" id="weight" type="number" autocomplete="off"
+        <input name="fdata[weight]" id="weight" type="number" autocomplete="off" lang="<?php echo NUMBER_INPUT_LANG; ?>"
                value="<?php echo Summoner::ifset($TemplateData['editData'], 'weight'); ?>"/>
 
         <label for="itemcount">Itemcount</label>
-        <input name="fdata[itemcount]" id="itemcount" type="number" autocomplete="off"
+        <input name="fdata[itemcount]" id="itemcount" type="number" autocomplete="off" lang="<?php echo NUMBER_INPUT_LANG; ?>"
                value="<?php echo Summoner::ifset($TemplateData['editData'], 'itemcount'); ?>"/>
 
         <label for="price">Price*</label>
         <input name="fdata[price]" id="price" type="number" autocomplete="off" required
+               lang="<?php echo NUMBER_INPUT_LANG; ?>" step="0.01"
                value="<?php echo Summoner::ifset($TemplateData['editData'], 'price'); ?>"/>
 
         <label for="catalog">Catalog</label>
index 930332f02dbbefaf7c072ae0cdf92db5296978c0..82d64c814638244fbc59b1d0eee45f9eb7dafab1 100644 (file)
@@ -1,6 +1,6 @@
 <?php
-require_once 'lib/item.class.php';
-$Item = new Item($DB);
+require_once 'lib/itemInput.class.php';
+$ItemInput = new ItemInput($DB);
 
 $_id = false;
 if(isset($_GET['id']) && !empty($_GET['id'])) {
@@ -24,6 +24,8 @@ if(isset($_POST['fdata']) && !empty($_POST['fdata']) && isset($_POST['submitForm
 
                var_dump($fdata);
 
+               $ItemInput->validateAndPrepare($fdata);
+
     } else {
         $TemplateData['message']['content'] = "Collection could not be loaded.";
         $TemplateData['message']['status'] = "error";