You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1896 lines
54 KiB

<?php
/*
Shopping list created by Jens Schrรถder
See https://server47.de for more information.
*/
// ini_set('display_errors', 0);
// error_reporting(0);
error_reporting(E_ALL & E_NOTICE);
ini_set("display_errors","on");
require_once("shoppingListConfig.php");
$justCreatedProductId = null;
$iconDelete = "โŒ";
$iconSave = "๐Ÿ’พ";
/*
โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„
โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ
โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„ โ–ˆ โ–„โ–„โ–„โ–„โ–„โ–ˆ โ–„โ–„โ–„โ–„โ–„โ–ˆ โ–„โ–„โ–„โ–ˆ โ–„โ–„โ–„โ–„โ–„โ–ˆ
โ–ˆ โ–„โ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–ˆโ–„โ–„โ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–„โ–„
โ–ˆ โ–ˆ โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–„โ–„ โ–ˆโ–„โ–„โ–„โ–„โ–„ โ–ˆ โ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„ โ–ˆ
โ–ˆ โ–ˆโ–„โ–„โ–ˆ โ–ˆ โ–„ โ–ˆโ–„โ–„โ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–„โ–„โ–ˆ โ–ˆ โ–ˆโ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–ˆ โ–ˆ
โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–ˆ โ–ˆโ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆ
โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„ โ–„โ–„ โ–„ โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„ โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„
โ–ˆ โ–ˆโ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ
โ–ˆ โ–„ โ–ˆ โ–„โ–„โ–„โ–ˆ โ–„โ–„โ–„โ–ˆ โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–ˆโ–„ โ–„โ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–„โ–„โ–„โ–„โ–„โ–ˆ
โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆโ–„โ–„โ–„โ–„โ–„
โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–„โ–„โ–„โ–ˆ โ–„โ–„โ–„โ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–„ โ–ˆโ–„โ–„โ–„โ–„โ–„ โ–ˆ
โ–ˆ โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆโ–„โ–„โ–„โ–„โ–„โ–ˆ โ–ˆ
โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆโ–„โ–ˆ โ–ˆโ–„โ–„โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–ˆ โ–ˆโ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆ
*/
class DBLink
{
static $sqlLink = null;
public static function getDbLink()
{
if(DBLink::$sqlLink == null)
{
DBLink::$sqlLink = new mysqli(Configuration::$mysqlserver, Configuration::$mysqluser, Configuration::$mysqlpw, Configuration::$mysqldb, Configuration::$mysqlPort);
// Verbindung รผberprรผfen
if (mysqli_connect_errno())
{
printf("Database connection error:%s\n", mysqli_connect_error());
exit();
}
}
return DBLink::$sqlLink;
}
}
if(isset($_GET['command']))
{
if($_GET['command'] == "printProductList" || $_GET['command'] == "printRhasspyProductList")
{
displayProductList();
exit(0);
}
else if($_GET['command'] == "printUnitList")
{
displayUnitList();
exit(0);
}
}
class Unit
{
private $id;
private $name;
private $abbreviation;
private $isDefault;
private $isDummy;
private $isPiece;
public function setID($id)
{
$this->id = $id;
}
public function getID()
{
return $this->id;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
public function setAbbreviation($abbreviation)
{
$this->abbreviation = $abbreviation;
}
public function getAbbreviation()
{
return $this->abbreviation;
}
public function setDefault($isDefault)
{
$this->isDefault = $isDefault;
}
public function isDefault()
{
return $this->isDefault;
}
public function setDummy($isDummy)
{
$this->isDummy = $isDummy;
}
public function isDummy()
{
return $this->isDummy;
}
public function setPiece($isPiece)
{
$this->isPiece = $isPiece;
}
public function isPiece()
{
return $this->isPiece;
}
public function getMainName()
{
$unitNamesArray = explode(";", $name);
return $unitNamesArray[0];
}
private function ensurePlausibility()
{
$SQL_commands = "";
if($this->isDefault())
$SQL_commands .= "UPDATE units SET isDefault=0 WHERE NOT id=".$this->getID().";";
if($this->isDummy())
$SQL_commands .= "UPDATE units SET isDummy=0 WHERE NOT id=".$this->getID().";";
if(strlen($SQL_commands) > 0)
{
$mysqli_result = DBLink::getDbLink()->query($SQL_commands);
if ($mysqli_result)
return true;
return false;
}
else
return true;
}
public static function getById($unitId)
{
$allUnits = Unit::getAllUnits();
foreach($allUnits as $unit)
{
if($unit->getID() === $unitId)
{
return $unit;
}
}
return null;
}
public function create()
{
$SQL_command = "INSERT INTO units (name, abbreviation, isDefault, isDummy, isPiece) VALUES (\"".$this->getName()."\", \"".$this->getAbbreviation()."\", ";
if($this->isDefault())
$SQL_command .= "1, ";
else
$SQL_command .= "0, ";
if($this->isDummy())
$SQL_command .= "1, ";
else
$SQL_command .= "0, ";
if($this->isPiece())
$SQL_command .= "1)";
else
$SQL_command .= "0)";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
{
$this->ensurePlausibility();
$this->setID(DBLink::getDbLink()->insert_id);
return true;
}
return false;
}
public function change()
{
$SQL_command = "UPDATE units SET name=\"".$this->getName()."\", abbreviation=\"".$this->getAbbreviation()."\", ";
if($this->isDefault())
$SQL_command .= "isDefault=1, ";
else
$SQL_command .= "isDefault=0, ";
if($this->isDummy())
$SQL_command .= "isDummy=1, ";
else
$SQL_command .= "isDummy=0, ";
if($this->isPiece())
$SQL_command .= "isPiece=1";
else
$SQL_command .= "isPiece=0";
$SQL_command .= " WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
{
$this->ensurePlausibility();
return true;
}
return false;
}
public function delete()
{
$SQL_command = "DELETE FROM units WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
return true;
return false;
}
public function getUsage()
{
$SQL_command = "SELECT COUNT(listId) as entryAmount FROM listEntries WHERE unit=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($row = mysqli_fetch_object($mysqli_result))
return $row->entryAmount;
return 0;
}
public static function getAllUnits()
{
$SQL_command = "SELECT * FROM units ORDER BY units.name ASC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
$returnList = array();
while ($row = mysqli_fetch_object($mysqli_result))
{
$newUnit = new Unit();
$newUnit->setID($row->id);
$newUnit->setName($row->name);
$newUnit->setAbbreviation($row->abbreviation);
$newUnit->setDefault($row->isDefault == 1);
$newUnit->setDummy($row->isDummy == 1);
$newUnit->setPiece($row->isPiece == 1);
$returnList[] = $newUnit;
}
return $returnList;
}
}
class StoreType
{
private $id;
private $name;
private static $storeTypesCache = null;
public function setID($id)
{
$this->id = $id;
}
public function getID()
{
return $this->id;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
public static function getById($storeTypeId)
{
$allStoreTypes = StoreType::getAllStoreTypes();
foreach($allStoreTypes as $storeType)
{
if($storeType->getID() === $storeTypeId)
{
return $storeType;
}
}
return null;
}
public function create()
{
$SQL_command = "INSERT INTO storeTypes (name) VALUES (\"".$this->getName()."\")";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
{
$this->setID(DBLink::getDbLink()->insert_id);
return true;
}
return false;
}
public function change()
{
$SQL_command = "UPDATE storeTypes SET name=\"".$this->getName()."\" WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
return true;
return false;
}
public function delete()
{
$SQL_command = "DELETE FROM storeTypes WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
return true;
return false;
}
public function getUsage()
{
$SQL_command = "SELECT COUNT(name) as entryAmount FROM products WHERE storeTypeId=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($row = mysqli_fetch_object($mysqli_result))
return $row->entryAmount;
return 0;
}
public static function getAllStoreTypes()
{
if(StoreType::$storeTypesCache == null)
{
$SQL_command = "SELECT * FROM storeTypes ORDER BY storeTypes.name ASC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
StoreType::$storeTypesCache = array();
while ($row = mysqli_fetch_object($mysqli_result))
{
$newStoreType = new StoreType();
$newStoreType->setID($row->id);
$newStoreType->setName($row->name);
StoreType::$storeTypesCache[] = $newStoreType;
}
}
return StoreType::$storeTypesCache;
}
}
class Product
{
private $id;
private $name;
private $synonyms;
private $storeType;
private static $productsCache = null;
public function setID($id)
{
$this->id = $id;
}
public function getID()
{
return $this->id;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
public function setSynonyms($synonyms)
{
$this->synonyms = $synonyms;
}
public function getSynonyms()
{
return $this->synonyms;
}
public function setStoreType(StoreType $storeType)
{
$this->storeType = $storeType;
}
public function getStoreType()
{
return $this->storeType;
}
public static function getById($productId)
{
$allProducts = Product::getAllProducts();
foreach($allProducts as $product)
{
if($product->getID() === $productId)
{
return $product;
}
}
return null;
}
public function create()
{
$syns = "NULL";
if($this->getSynonyms() != null || strlen($this->getSynonyms()) > 0)
$syns = "\"".$this->getSynonyms()."\"";
$SQL_command = "INSERT INTO products (name, synonyms, storeTypeId) VALUES (\"".$this->getName()."\", ".$syns.", ".$this->getStoreType()->getID().")";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
{
$this->setID(DBLink::getDbLink()->insert_id);
return true;
}
return false;
}
public function change()
{
$syns = "NULL";
if($this->getSynonyms() != null || strlen($this->getSynonyms()) > 0)
$syns = "\"".$this->getSynonyms()."\"";
$SQL_command = "UPDATE products SET name=\"".$this->getName()."\", synonyms=".$syns.", storeTypeId=".$this->getStoreType()->getID()." WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
{
return true;
}
return false;
}
public function delete()
{
$SQL_command = "DELETE FROM products WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
return true;
return false;
}
public function getUsage()
{
$SQL_command = "SELECT COUNT(listId) as entryAmount FROM listEntries WHERE productId=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($row = mysqli_fetch_object($mysqli_result))
return $row->entryAmount;
return 0;
}
public static function getAllProducts()
{
if(Product::$productsCache == null)
{
/* $productsAmount = 500;
$SQL_command = "SELECT COUNT(name) as productsAmount FROM products";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if($row = mysqli_fetch_object($mysqli_result))
$amount = $row->productsAmount;
*/
$SQL_command = "SELECT * FROM products ORDER BY products.name ASC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
// Product::$productsCache = new SplFixedArray($productsAmount);
Product::$productsCache = array();
// $index = 0;
while ($row = mysqli_fetch_object($mysqli_result))
{
$newProduct = new Product();
$newProduct->setID($row->id);
$newProduct->setName($row->name);
$newProduct->setSynonyms($row->synonyms);
$newProduct->setStoreType(StoreType::getById($row->storeTypeId));
Product::$productsCache[] = $newProduct;
// Product::$productsCache[$index] = $newProduct;
// $index++;
}
}
return Product::$productsCache;
}
}
class ShoppingListEntry
{
private $parentList;
private $product;
private $amount;
private $unit;
public function setParentList($parentList)
{
$this->parentList = $parentList;
}
public function getParentList()
{
return $this->parentList;
}
public function setProduct(Product $product)
{
$this->product = $product;
}
public function getProduct()
{
return $this->product;
}
public function setAmount($amount)
{
$this->amount = $amount;
}
public function getAmount()
{
return $this->amount;
}
public function setUnit(Unit $unit)
{
$this->unit = $unit;
}
public function getUnit()
{
return $this->unit;
}
public function create()
{
$syns = "NULL";
if($this->getSynonyms() != null || strlen($this->getSynonyms()) > 0)
$syns = "\"".$this->getSynonyms()."\"";
$SQL_command = "INSERT INTO products (name, synonyms, storeTypeId) VALUES (\"".$this->getName()."\", ".$syns.", ".$this->getStoreType()->getID().")";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
{
$this->setID(DBLink::getDbLink()->insert_id);
return true;
}
return false;
}
public function change()
{
$syns = "NULL";
if($this->getSynonyms() != null || strlen($this->getSynonyms()) > 0)
$syns = "\"".$this->getSynonyms()."\"";
$SQL_command = "UPDATE products SET name=\"".$this->getName()."\", synonyms=".$syns.", storeTypeId=".$this->getStoreType()->getID()." WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
{
return true;
}
return false;
}
public function delete()
{
$SQL_command = "DELETE FROM products WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
return true;
return false;
}
public function getUsage()
{
$SQL_command = "SELECT COUNT(listId) as entryAmount FROM listEntries WHERE productId=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($row = mysqli_fetch_object($mysqli_result))
return $row->entryAmount;
return 0;
}
public static function getAllProducts()
{
if(Product::$productsCache == null)
{
/* $productsAmount = 500;
$SQL_command = "SELECT COUNT(name) as productsAmount FROM products";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if($row = mysqli_fetch_object($mysqli_result))
$amount = $row->productsAmount;
*/
$SQL_command = "SELECT * FROM products ORDER BY products.name ASC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
// Product::$productsCache = new SplFixedArray($productsAmount);
Product::$productsCache = array();
// $index = 0;
while ($row = mysqli_fetch_object($mysqli_result))
{
$newProduct = new Product();
$newProduct->setID($row->id);
$newProduct->setName($row->name);
$newProduct->setSynonyms($row->synonyms);
$newProduct->setStoreType(StoreType::getById($row->storeTypeId));
Product::$productsCache[] = $newProduct;
// Product::$productsCache[$index] = $newProduct;
// $index++;
}
}
return Product::$productsCache;
}
public static function entryCombinationExists($productId, $unitId)
{
$SQL_command = "SELECT COUNT(listId) as entryAmount FROM listEntries WHERE listId=(SELECT id FROM `lists` ORDER BY creationTime DESC LIMIT 1) AND productId=".$productId." AND unit=".$unitId;
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($row = mysqli_fetch_object($mysqli_result))
{
if($row->entryAmount > 0)
return true;
}
return false;
}
}
class ShoppingList
{
private $id;
private $creationTime;
private $comment;
private $entries = array();
private static $listsCache = null;
public function setID($id)
{
$this->id = $id;
}
public function getID()
{
return $this->id;
}
public function setCreationTime($cTime)
{
$this->creationTime = $cTime;
}
public function getCreationTime()
{
return $this->creationTime;
}
public function setComment($comment)
{
$this->comment = $comment;
}
public function getComment()
{
return $this->comment;
}
public function setEntries($entries)
{
$this->entries = $entries;
}
public function getEntries()
{
return $this->entries;
}
public function create()
{
if($this->getCreationTime() == null || $this->getCreationTime() == 0 || strlen($this->getCreationTime()) == 0)
$this->setCreationTime(round(microtime(true) * 1000));
$comment = "NULL";
if($this->getComment() != null || strlen($this->getComment()) > 0)
$comment = "\"".$this->getComment()."\"";
$SQL_command = "INSERT INTO lists (creationTime, comment) VALUES (".$this->getCreationTime().", ".$comment.")";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
{
$this->setID(DBLink::getDbLink()->insert_id);
return true;
}
return false;
}
public function change()
{
$comment = "NULL";
if($this->getComment() != null || strlen($this->getComment()) > 0)
$comment = "\"".$this->getComment()."\"";
$SQL_command = "UPDATE lists SET creationTime=\"".$this->getCreationTime()."\", comment=".$comment." WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
{
return true;
}
return false;
}
public function delete()
{
$SQL_command = "DELETE FROM lists WHERE id=".$this->getID();
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($mysqli_result)
return true;
return false;
}
public static function getAllLists()
{
if(ShoppingList::$listsCache == null)
{
$SQL_command = "SELECT * FROM lists ORDER BY lists.creationTime DESC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
ShoppingList::$listsCache = array();
while ($row = mysqli_fetch_object($mysqli_result))
{
$newList = new ShoppingList();
$newList->setID($row->id);
$newList->setCreationTime($row->creationTime);
$newList->setComment($row->comment);
$SQL_command_inner = "SELECT * FROM listEntries WHERE listId=".$newList->getID();
$mysqli_result_inner = DBLink::getDbLink()->query($SQL_command_inner);
while ($row_inner = mysqli_fetch_object($mysqli_result_inner))
{
$newListEntry = new ShoppingListEntry();
$newListEntry->setParentList($newList);
$newListEntry->setProduct(Product::getById($row_inner->productId));
$newListEntry->setAmount($row_inner->amount);
$newListEntry->setUnit(Unit::getById($row_inner->unit));
$newList->getEntries()[] = $newListEntry;
}
ShoppingList::$listsCache[] = $newList;
}
}
return ShoppingList::$listsCache;
}
public static function oneListExists()
{
$SQL_command = "SELECT COUNT(id) as listAmount FROM lists";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($row = mysqli_fetch_object($mysqli_result))
{
if($row->listAmount > 0)
return true;
}
return false;
}
public static function twoListsExist()
{
$SQL_command = "SELECT COUNT(id) as listAmount FROM lists";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($row = mysqli_fetch_object($mysqli_result))
{
if($row->listAmount > 1)
return true;
}
return false;
}
}
/*
โ–„โ–„ โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„ โ–„โ–„ โ–„
โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ
โ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ
โ–ˆ โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆ
โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„ โ–ˆ
โ–ˆ โ–ˆโ–ˆโ–„โ–ˆโ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ
โ–ˆโ–„โ–ˆ โ–ˆโ–„โ–ˆโ–„โ–ˆ โ–ˆโ–„โ–„โ–ˆโ–„โ–„โ–„โ–ˆโ–„โ–ˆ โ–ˆโ–„โ–„โ–ˆ
โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„ โ–„โ–„
โ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆ โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ
โ–ˆ โ–„ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„ โ–ˆ โ–„โ–„โ–„โ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆ
โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–ˆโ–„โ–„โ–ˆโ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–ˆโ–„โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–ˆ
โ–ˆ โ–„โ–„โ–„โ–ˆ โ–„โ–„ โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„โ–„ โ–ˆ โ–ˆ โ–ˆ
โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆโ–„โ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆโ–ˆโ–„โ–ˆโ–ˆ โ–ˆ
โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–ˆโ–„โ–ˆ โ–ˆโ–„โ–„โ–ˆโ–„โ–ˆ โ–ˆโ–„โ–ˆ
โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„โ–„โ–„ โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ–„ โ–„
โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆ
โ–ˆ โ–„โ–„โ–„โ–ˆ โ–ˆ โ–ˆ โ–„ โ–ˆ โ–ˆโ–ˆ โ–ˆโ–ˆ โ–ˆ
โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ
โ–ˆ โ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–ˆ โ–ˆ โ–ˆ
โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–ˆ โ–„ โ–ˆ
โ–ˆโ–„โ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆโ–„โ–„โ–ˆ โ–ˆโ–„โ–„โ–ˆ
*/
?>
<html>
<head>
<title>Shopping list</title>
<style type="text/css">
body
{
font-family: Arial, Geneva, Helvetica, sans-serif;
}
details
{
padding-top: 15px;
padding-left: 15px;
}
table
{
border-collapse:separate;
border-spacing:10px 10px;
}โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹
.smallButton
{
font-size:10px;;
height:5000em;
width:5000em;
}
</style>
<script language="javascript" type="text/javascript">
var detailsElements = [];
function checkCreateProduct()
{
var storeTypeId = document.forms["createProductForm"]["productStoreTypeId"].value;
if (storeTypeId == "" || storeTypeId == "0")
{
alert("Store type must be selected");
return false;
}
return true;
}
function checkAddProductToList()
{
var storeTypeId = document.forms["addProductToListForm"]["productId"].value;
if (storeTypeId == "" || storeTypeId == "0")
{
alert("Product must be selected");
return false;
}
return true;
}
function addHidden(theForm, key, value)
{
// Create a hidden input element, and append it to the form:
var input = document.createElement('input');
input.type = 'hidden';
input.id = key; // 'the key/name of the attribute/field that is sent to the server
input.name = key; // 'the key/name of the attribute/field that is sent to the server
input.value = value;
theForm.appendChild(input);
}
function addToggleStates(formId)
{
addHidden(formId, "openDetailsElements", detailsElements.join(";"));
}
function rememberToggleState(detailsElement)
{
if(detailsElement.open)
{
if(!detailsElements.includes(detailsElement.id))
{
detailsElements.push(detailsElement.id);
}
}
else
{
for (var i = detailsElements.length - 1; i >= 0; i--)
{
if (detailsElements[i] === detailsElement.id)
{
detailsElements.splice(i, 1);
}
}
}
}
</script>
</head>
<body>
<?php
if(isset($_POST['command']))
$command = $_POST['command'];
$listId = null;
if(isset($command))
{
switch($command)
{
case "addToList":
$productId = $_POST['productId'];
$amount = $_POST['amountToAdd'];
$unitId = $_POST['unitToAdd'];
addToList($productId, $amount, $unitId);
break;
case "removeFromList":
$productId = $_POST['productToRemove'];
$listId = $_POST['listId'];
$amount = $_POST['productAmountToRemove'];
$unit = $_POST['productUnitToRemove'];
removeFromList($productId, $listId, $amount, $unit);
break;
case "displayShoppingList":
displayShoppingList();
break;
case "createNewShoppingList":
$newList = new ShoppingList();
if($newList->create())
echo "New shopping list has been created.";
else
echo "New shopping list could not be created: ".mysqli_error(DBLink::getDbLink());
break;
case "manageList":
$listId = $_POST['oldListId'];
$subCommand = $_POST['bSubmit'];
GLOBAL $iconDelete;
if($subCommand == $iconDelete)
{
removeShoppingList($listId);
$listId = null;
}
break;
case "createProduct":
$p = new Product();
if(strpos($_POST['productName'], ";") !== false)
{
$terms = explode(";", $_POST['productName']);
$p->setName(trim($terms[0]));
$syns = "";
for($i=1; $i<count($terms); $i++)
{
$currentWord = trim($terms[$i]);
if(strlen($currentWord) > 0)
$syns .= ";".$currentWord;
}
$syns = ltrim($syns, ';');
$p->setSynonyms($syns);
}
else
$p->setName($_POST['productName']);
if(isset($_POST['productStoreTypeId']) && (int)$_POST['productStoreTypeId'] > 0)
{
$p->setStoreType(StoreType::getById($_POST['productStoreTypeId']));
if($p->create())
{
echo "Product has been created.";
$justCreatedProductId = $p->getID();
}
else
echo "Product could not be created: ".mysqli_error(DBLink::getDbLink());
}
else
echo "Store type was not set.";
break;
case "manageProduct":
$p = new Product();
$p->setID($_POST['oldProductId']);
if(strpos($_POST['productName'], ";") !== false)
{
$terms = explode(";", $_POST['productName']);
$p->setName(trim($terms[0]));
$syns = "";
for($i=1; $i<count($terms); $i++)
{
$currentWord = trim($terms[$i]);
if(strlen($currentWord) > 0)
$syns .= ";".$currentWord;
}
$syns = ltrim($syns, ';');
$p->setSynonyms($syns);
}
else
$p->setName($_POST['productName']);
$p->setStoreType(StoreType::getById($_POST['productStoreTypeId']));
GLOBAL $iconDelete;
GLOBAL $iconSave;
$subCommand = $_POST['bSubmit'];
if($subCommand == $iconDelete)
{
if($p->delete())
echo "Product has been deleted.";
else
echo "Product could not be deleted: ".mysqli_error(DBLink::getDbLink());
}
else if($subCommand == $iconSave)
{
if($p->change())
echo "Product has been changed.";
else
echo "Product could not be changed: ".mysqli_error(DBLink::getDbLink());
}
else
echo "Invalid command.";
break;
case "createStoreType":
$st = new StoreType();
$st->setName($_POST['storeTypeName']);
if($st->create())
echo "Store type has been created.";
else
echo "Store type could not be created: ".mysqli_error(DBLink::getDbLink());
break;
case "manageStoreType":
$st = new StoreType();
$st->setID($_POST['oldStoreTypeId']);
$st->setName($_POST['storeTypeName']);
GLOBAL $iconDelete;
GLOBAL $iconSave;
$subCommand = $_POST['bSubmit'];
if($subCommand == $iconDelete)
{
if($st->delete())
echo "Store type has been deleted.";
else
echo "Store type could not be deleted: ".mysqli_error(DBLink::getDbLink());
}
else if($subCommand == $iconSave)
{
if($st->change())
echo "Store type has been changed.";
else
echo "Store type could not be changed: ".mysqli_error(DBLink::getDbLink());
}
else
echo "Invalid command.";
break;
case "createUnit":
$u = new Unit();
$u->setName($_POST['unitName']);
$u->setAbbreviation($_POST['unitAbbreviation']);
$u->setDefault(isset($_POST['unitIsDefault']));
$u->setDummy(isset($_POST['unitIsDummy']));
$u->setPiece(isset($_POST['unitIsPiece']));
if($u->create())
echo "Unit has been created.";
else
echo "Unit could not be created.";
break;
case "manageUnit":
$u = new Unit();
$u->setID($_POST['oldUnitId']);
$u->setName($_POST['unitName']);
$u->setAbbreviation($_POST['unitAbbreviation']);
$u->setDefault(isset($_POST['unitIsDefault']));
$u->setDummy(isset($_POST['unitIsDummy']));
$u->setPiece(isset($_POST['unitIsPiece']));
GLOBAL $iconDelete;
GLOBAL $iconSave;
$subCommand = $_POST['bSubmit'];
if($subCommand == $iconDelete)
{
if($u->delete())
echo "Unit has been deleted.";
else
echo "Unit could not be deleted.";
}
else if($subCommand == $iconSave)
{
if($u->change())
echo "Unit has been changed.";
else
echo "Unit could not be changed.";
}
else
echo "Invalid command.";
break;
case "trainRhasspy":
if(triggerRhasspyTraining())
echo "Rhasspy training has completed successfully.";
else
echo "Rhasspy training has failed.";
break;
}
}
displayShoppingList($listId, $justCreatedProductId);
showDataMaintenance();
echo "</body></html>";
mysqli_close(DBLink::getDbLink());
function addToList($productId, $amount, $unitId)
{
if($productId > 0 && $amount != 0 && isset($unitId) && strlen($unitId) > 0)
{
if(!ShoppingList::oneListExists())
createList();
if(!ShoppingListEntry::entryCombinationExists($productId, $unitId))
{
$SQL_command = "INSERT IGNORE INTO listEntries (listId, productId, amount, unit) VALUES ((SELECT id FROM `lists` ORDER BY creationTime DESC LIMIT 1), ".$productId.", ".$amount.", ".$unitId.")";
if (DBLink::getDbLink()->query($SQL_command))
echo "Product added to list.<br>";
else
echo "Product could not be added to list.<br>";
}
else
{
/*
update command that adds the amount to the already existing amount
if amount is negative -> subtract from existing amount. if resulting amount <= 0 ->
*/
$SQL_command = "SELECT amount FROM listEntries WHERE listId=(SELECT id FROM `lists` ORDER BY creationTime DESC LIMIT 1) AND productId=".$productId." AND unit=".$unitId;
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
if ($row = mysqli_fetch_object($mysqli_result))
{
if($row->amount + $amount > 0)
{
$SQL_command = "UPDATE listEntries set amount=".($row->amount + $amount)." WHERE listId=(SELECT id FROM `lists` ORDER BY creationTime DESC LIMIT 1) AND productId=".$productId." AND unit=".$unitId;
if (DBLink::getDbLink()->query($SQL_command))
echo "Product added to existing entry on list.<br>";
else
echo "Product could not be added to existing entry on list.<br>";
}
else
{
$SQL_command = "DELETE FROM listEntries WHERE listId=(SELECT id FROM `lists` ORDER BY creationTime DESC LIMIT 1) AND productId=".$productId." AND unit=".$unitId;
if (DBLink::getDbLink()->query($SQL_command))
echo "Product removed from list as too many pieces of this item have been removed.<br>";
else
echo "Product could not be removed from list (too many pieces of this item have been removed).<br>";
}
}
}
}
else
echo "Specifiy product, amount and unit.";
}
function removeFromList($productId, $listId, $amount, $unitId)
{
if($productId > 0 && $amount != null && $unitId > 0)
{
if(ShoppingList::oneListExists())
{
$SQL_command = "DELETE FROM listEntries WHERE listId=".$listId." AND productId=".$productId." AND amount=".$amount." AND unit=".$unitId;
if (DBLink::getDbLink()->query($SQL_command))
echo "Product removed from list.<br>";
else
echo "Product could not be removed from list.<br>";
}
}
else
echo "Select a product.";
}
function displayShoppingList($listId, $justCreatedProductId)
{
echo " <h2>Shopping list</h2>
<form id=\"addProductToListForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this); return checkAddProductToList();\">
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"addToList\" />
<select name=\"productId\" id=\"productId\">
<option value=\"0\">Select product to add</option>
";
foreach(Product::getAllProducts() as $product)
{
$currentId = (int)$product->getID();
if(isset($justCreatedProductId) && $justCreatedProductId != null && $justCreatedProductId === $currentId)
echo "<option value=\"".$product->getID()."\" name=\"".$product->getName()."\" selected=\"selected\">".$product->getName()."</option>";
else
echo "<option value=\"".$product->getID()."\" name=\"".$product->getName()."\">".$product->getName()."</option>";
}
echo " </select>
<input type=\"number\" step=\"any\" id=\"amountToAdd\" name=\"amountToAdd\" value=\"1.0\" required />
<select name=\"unitToAdd\" id=\"unitToAdd\">
<option value=\"0\">Select unit to add</option>
";
$SQL_command = "SELECT * FROM `units` ORDER BY name ASC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
while ($row = mysqli_fetch_object($mysqli_result))
{
$currentId = (int)$row->id;
$unitArray = explode(";", $row->name);
if($row->isDefault == 1 || (isset($justCreatedUnitId) && $justCreatedUnitId === $currentId))
echo "<option value=\"".$row->id."\" selected=\"selected\">".$unitArray[0]."</option>";
else
echo "<option value=\"".$row->id."\">".$unitArray[0]."</option>";
}
echo " </select>
<input type=\"submit\" value=\"add\" />
</form>";
if(ShoppingList::oneListExists())
{
$list_SQL_command;
if(isset($listId))
{
$list_SQL_command = "SELECT * FROM lists WHERE id=".$listId;
}
else
{
$list_SQL_command = "SELECT * FROM lists ORDER BY creationTime DESC LIMIT 0,1";
$SQL_command_listId = "SELECT id FROM lists ORDER BY creationTime DESC LIMIT 0,1";
$mysqli_result = DBLink::getDbLink()->query($SQL_command_listId);
if ($row = mysqli_fetch_object($mysqli_result))
$listId = $row->id;
}
$mysqli_result = DBLink::getDbLink()->query($list_SQL_command);
if ($row = mysqli_fetch_object($mysqli_result))
{
echo "This list was created on ".date("l, d.m.Y", ($row->creationTime)/1000)." at ".date("G:i:s", ($row->creationTime)/1000)."<br />";
if(isset($row->comment) && strlen($row->comment) > 0)
echo "<i>".$row->comment."</i><br />";
echo "<br />";
}
$SQL_command = "SELECT * FROM listEntries
INNER JOIN products ON listEntries.productId=products.id
INNER JOIN storeTypes ON products.storeTypeId = storeTypes.id
INNER JOIN units ON units.id = listEntries.unit
WHERE listEntries.listId=".$listId." ORDER BY storeTypes.name, products.name ASC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
$lastShop="";
$found = false;
while ($row = mysqli_fetch_array($mysqli_result))
{
if(!$found)
$found = true;
if(isset($lastShop) && $lastShop != "" && $row[9] != $lastShop)
echo "</table>";
if(!isset($lastShop) || $row[9] != $lastShop)
{
$lastShop = $row[9];
echo "<h3>".$lastShop."</h3>";
echo "<table border=\"0\">";
}
echo "<tr>";
if($row[14] == 1)
echo "<td style=\"vertical-align:top;\" colspan=\"3\">".$row[5]."</td>";
else
echo "
<td style=\"vertical-align:top;\">".$row[2]."</td>
<td style=\"vertical-align:top;\">".$row[12]."</td>
<td style=\"vertical-align:top;\">".$row[5]."</td>";
GLOBAL $iconDelete;
echo "
<td style=\"vertical-align:top;\">
<form id=\"removeItemFromListForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this)\">
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"removeFromList\" />
<input type=\"hidden\" id=\"listId\" name=\"listId\" value=\"".$listId."\" />
<input type=\"hidden\" id=\"productToRemove\" name=\"productToRemove\" value=\"".$row[1]."\" />
<input type=\"hidden\" id=\"productAmountToRemove\" name=\"productAmountToRemove\" value=\"".$row[2]."\" />
<input type=\"hidden\" id=\"productUnitToRemove\" name=\"productUnitToRemove\" value=\"".$row[10]."\" />
<input class=\"smallButton\" type=\"submit\" value=\"".$iconDelete."\" />
</form>
</td>
</tr>";
}
if($found)
echo "</table>";
else
echo "<i>No entries in this list, yet.</i>";
}
else
echo "<i>No list exists, yet.</i>";
}
function showDataMaintenance()
{
echo "<hr />";
$detailsName = "detailsMaintenance";
$openString = "";
if(isset($_POST['openDetailsElements']) && in_array($detailsName, explode(";", $_POST['openDetailsElements'])))
$openString = " open=\"\"";
echo "<details id=\"".$detailsName."\"".$openString." ontoggle=\"rememberToggleState(this)\">
<summary>
<strong>Data maintenance</strong>
</summary>";
echo " <h2>Data maintenance</h2>";
$detailsName = "detailsLists";
$openString = "";
if(isset($_POST['openDetailsElements']) && in_array($detailsName, explode(";", $_POST['openDetailsElements'])))
$openString = " open=\"\"";
echo " <details id=\"".$detailsName."\"".$openString." ontoggle=\"rememberToggleState(this)\">
<summary>
<strong>Manage shopping lists</strong>
</summary>
<h3>Create new list</h3>
<form id=\"createNewListForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"if(!confirm('Are you sure you want to create a new list?')){return false;} else { addToggleStates(this) }\">
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"createNewShoppingList\" />
<input type=\"submit\" value=\"๐Ÿ—Ž\" style=\"font-size : 25px;\" />
</form>";
if(ShoppingList::twoListsExist())
{
$SQL_command = "SELECT * FROM lists ORDER BY creationTime DESC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
echo "<h3>Show specific list</h3>";
echo "<form id=\"manageListForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this)\">
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"manageList\" />
<select name=\"oldListId\" id=\"oldListId\">";
$selected = " selected=\"selected\"";
foreach(ShoppingList::getAllLists() as $list)
{
echo "<option value=\"".$list->getID()."\" name=\"".$list->getID()."\"".$selected.">List created on ".date("l, d.m.Y", ($list->getCreationTime())/1000)." at ".date("G:i:s", ($list->getCreationTime())/1000);
if(strlen($selected) > 0)
$selected = "";
if($list->getComment() != null && strlen($list->getComment()) > 0)
echo "<i>(".$list->getComment().")</i>";
echo "</option>";
}
GLOBAL $iconDelete;
echo "
</select>
<input type=\"submit\" name=\"bSubmit\" value=\"".$iconDelete."\" onClick=\"if(!confirm('Are you sure you want to delete this list?')){return false;}\"/>
<input type=\"submit\" name=\"bSubmit\" value=\"show\" />
</form>";
}
echo "</details>";
$detailsName = "detailsRhasspy";
$openString = "";
if(isset($_POST['openDetailsElements']) && in_array($detailsName, explode(";", $_POST['openDetailsElements'])))
$openString = " open=\"\"";
echo " <details id=\"".$detailsName."\"".$openString." ontoggle=\"rememberToggleState(this)\">
<summary>
<strong>Manage Rhasspy</strong>
</summary>
<h3>Train Rhasspy</h3>
WARNING: This can take up to 2 minutes.<br><br>
<form id=\"trainRhasspyForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this)\">
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"trainRhasspy\" />
<input type=\"submit\" value=\"๐Ÿš‚\" style=\"font-size : 25px;\" />
</form>
</details>";
$detailsName = "detailsManageProducts";
$openString = "";
if(isset($_POST['openDetailsElements']) && in_array($detailsName, explode(";", $_POST['openDetailsElements'])))
$openString = " open=\"\"";
GLOBAL $iconSave;
echo "
<details id=\"".$detailsName."\"".$openString." ontoggle=\"rememberToggleState(this)\">
<summary>
<strong>Manage products</strong>
</summary>
<h4>Create new product</h4>
<form id=\"createProductForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this); return checkCreateProduct()\">
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"createProduct\" />
<input type=\"text\" id=\"productName\" name=\"productName\" required />
<select name=\"productStoreTypeId\" id=\"productStoreTypeId\">
<option value=\"0\">Select store type</option>
";
$SQL_command = "SELECT id, name FROM storeTypes ORDER BY name ASC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
while ($row = mysqli_fetch_object($mysqli_result))
{
echo "<option value=\"".$row->id."\">".$row->name."</option>";
}
echo " </select>
<input type=\"submit\" value=\"".$iconSave."\" />
</form>
<font size=\"2\">You can enter synonyms. Separate all terms with semikolons.</font>
";
$allProducts = Product::getAllProducts();
if(count($allProducts) > 0)
echo " <h4>Manage existing products</h4>
<table border=\"0\">
<tr>
<th>Product name</th>
<th>Synonyms</th>
<th>Store type</th>
</tr>";
GLOBAL $iconDelete;
GLOBAL $iconSave;
foreach($allProducts as $p)
{
echo "<tr>
<form id=\"manageProductForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this)\">
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"manageProduct\" />
<td><input type=\"text\" size=\"20\" id=\"productName\" name=\"productName\" value=\"".$p->getName()."\" required /></td>
<td><input type=\"text\" size=\"20\" id=\"productSynonyms\" name=\"productSynonyms\" value=\"".$p->getSynonyms()."\" /></td>
<td>
<select name=\"productStoreTypeId\" id=\"productStoreTypeId\">
";
foreach(StoreType::getAllStoreTypes() as $storeType)
{
if($storeType->getID() === $p->getStoreType()->getID())
echo "<option value=\"".$storeType->getID()."\" name=\"".$storeType->getName()."\" selected=\"selected\">".$storeType->getName()."</option>";
else
echo "<option value=\"".$storeType->getID()."\" name=\"".$storeType->getName()."\" >".$storeType->getName()."</option>";
}
echo " </select></td>
<input type=\"hidden\" id=\"oldProductId\" name=\"oldProductId\" value=\"".$p->getID()."\" />
";
$usageAmount = $p->getUsage();
$deletionWarning = "Are you sure you want to delete this product?";
if($usageAmount > 0)
$deletionWarning = "Are you sure you want to delete this product? It is still in use by ".$usageAmount." list entries. If you delete the product it will be removed from all shopping lists as well.";
echo "
<td><input type=\"submit\" name=\"bSubmit\" value=\"".$iconDelete."\" onClick=\"if(!confirm('".$deletionWarning."')){return false;}\" /></td>
<td><input type=\"submit\" name=\"bSubmit\" value=\"".$iconSave."\" /></td>
</form>
</tr>";
}
if(count($allProducts) > 0)
echo "</table>";
echo "
</details>";
$detailsName = "detailsManageUnits";
$openString = "";
if(isset($_POST['openDetailsElements']) && in_array($detailsName, explode(";", $_POST['openDetailsElements'])))
$openString = " open=\"\"";
echo "
<details id=\"".$detailsName."\"".$openString." ontoggle=\"rememberToggleState(this)\">
<summary>
<strong>Manage units</strong>
</summary>
<h4>Create new unit</h4>
<form id=\"createUnitForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this)\">
<table border=\"0\">
<tr><td>Unit name</td><td><input type=\"text\" id=\"unitName\" name=\"unitName\" required /></td></tr>
<tr><td>Unit abbreviation</td><td><input type=\"text\" id=\"unitAbbreviation\" name=\"unitAbbreviation\" /></td></tr>
<tr><td>Is default?</td><td><input type=\"checkbox\" id=\"unitIsDefault\" name=\"unitIsDefault\" /></td></tr>
<tr><td>Is dummy?</td><td><input type=\"checkbox\" id=\"unitIsDummy\" name=\"unitIsDummy\" /></td></tr>
<tr><td>Is piece?</td><td><input type=\"checkbox\" id=\"unitIsPiece\" name=\"unitIsPiece\" /></td></tr>
</table>
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"createUnit\" />
<input type=\"submit\" value=\"Create unit\" />
</form>";
$allUnits = Unit::getAllUnits();
if(count($allUnits) > 0)
echo " <h4>Manage existing units</h4>
<table border=\"0\">
<tr>
<th>Unit name</th>
<th>Abbreviation</th>
<th>is default?</th>
<th>is dummy?</th>
<th>is piece?</th>
</tr>";
GLOBAL $iconDelete;
GLOBAL $iconSave;
foreach($allUnits as $u)
{
echo "<tr>
<form id=\"manageUnitForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this)\">
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"manageUnit\" />
<td><input type=\"text\" size=\"20\" id=\"unitName\" name=\"unitName\" value=\"".$u->getName()."\" required /></td>
<td><input type=\"text\" size=\"5\" id=\"unitAbbreviation\" name=\"unitAbbreviation\" value=\"".$u->getAbbreviation()."\" /></td>
<td><input type=\"checkbox\" id=\"unitIsDefault\" name=\"unitIsDefault\", value=\"unitIsDefault\""; if ($u->isDefault()) echo " checked"; echo " /></td>
<td><input type=\"checkbox\" id=\"unitIsDummy\" name=\"unitIsDummy\", value=\"unitIsDummy\""; if ($u->isDummy()) echo " checked"; echo " /></td>
<td><input type=\"checkbox\" id=\"unitIsPiece\" name=\"unitIsPiece\", value=\"unitIsPiece\""; if ($u->isPiece()) echo " checked"; echo " /></td>
<input type=\"hidden\" id=\"oldUnitId\" name=\"oldUnitId\" value=\"".$u->getID()."\" />
";
$usageAmount = $u->getUsage();
$deletionWarning = "Are you sure you want to delete this unit?";
if($usageAmount > 0)
$deletionWarning = "Are you sure you want to delete this unit? It is still in use by ".$usageAmount." list entries. If you delete the unit those entries will all be removed as well.";
echo "
<td><input type=\"submit\" name=\"bSubmit\" value=\"".$iconDelete."\" onClick=\"if(!confirm('".$deletionWarning."')){return false;}\" /></td>
<td><input type=\"submit\" name=\"bSubmit\" value=\"".$iconSave."\" /></td>
</form>
</tr>";
}
if(count($allUnits) > 0)
echo "</table>";
echo "
</details>";
$detailsName = "detailsManageStoreTypes";
$openString = "";
if(isset($_POST['openDetailsElements']) && in_array($detailsName, explode(";", $_POST['openDetailsElements'])))
$openString = " open=\"\"";
GLOBAL $iconSave;
echo "
<details id=\"".$detailsName."\"".$openString." ontoggle=\"rememberToggleState(this)\">
<summary>
<strong>Manage store types</strong>
</summary>
<h4>Create new store type</h4>
<form id=\createStoreTypeForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this)\">
<table border=\"0\">
<tr><td>Store type name</td><td><input type=\"text\" id=\"storeTypeName\" name=\"storeTypeName\" required /></td><td><input type=\"submit\" value=\"".$iconSave."\" /></td></tr>
</table>
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"createStoreType\" />
</form>";
$allStoreTypes = StoreType::getAllStoreTypes();
if(count($allStoreTypes) > 0)
{
echo " <h4>Manage existing store types</h4>
<table border=\"0\">
<tr>
<th>Store type name</th>
</tr>";
}
GLOBAL $iconDelete;
GLOBAL $iconSave;
foreach($allStoreTypes as $st)
{
echo "<tr>
<form id=\"manageStoreTypeForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onSubmit=\"addToggleStates(this)\">
<input type=\"hidden\" id=\"command\" name=\"command\" value=\"manageStoreType\" />
<td><input type=\"text\" size=\"20\" id=\"unitStoreType\" name=\"storeTypeName\" value=\"".$st->getName()."\" required /></td>
<input type=\"hidden\" id=\"oldStoreTypeId\" name=\"oldStoreTypeId\" value=\"".$st->getID()."\" />
";
$usageAmount = $st->getUsage();
$deletionFunction = "if(!confirm('Are you sure you want to delete this store type?')){return false;}";
if($usageAmount > 0)
$deletionFunction = "alert('You cannot currently delete this store type. This is still your place to buy ".$usageAmount." products.'); return false;";
echo "
<td><input type=\"submit\" name=\"bSubmit\" value=\"".$iconDelete."\" onClick=\"".$deletionFunction."\" /></td>
<td><input type=\"submit\" name=\"bSubmit\" value=\"".$iconSave."\" /></td>
</form>
</tr>";
}
if(count($allStoreTypes) > 0)
echo "</table>";
echo "
</details>";
echo "
</details>";
}
function displayProductList()
{
/* $SQL_command = "SELECT name, synonyms FROM products ORDER BY products.name ASC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
$lastShop="";
while ($row = mysqli_fetch_array($mysqli_result))
{
if(is_null($row[1]))
echo $row[0]."\n";
else
echo "(".str_replace(";", "|", $row[1])."|".$row[0]."):".$row[0]."\n";
}*/
foreach(Product::getAllProducts() as $product)
{
if($product->getSynonyms() == null && strlen($product->getSynonyms()) == 0)
echo $product->getName()."\n";
else
// echo "(".str_replace(";", "|", $product->getSynonyms())."):".$product->getName()."\n";
echo "(".str_replace(";", "|", $product->getSynonyms())."|".$product->getName()."):".$product->getName()."\n";
}
}
function displayUnitList()
{
/*$SQL_command = "SELECT name FROM units ORDER BY name ASC";
$mysqli_result = DBLink::getDbLink()->query($SQL_command);
while ($row = mysqli_fetch_object($mysqli_result))
{
$unitArray = explode(";", $row->name);
if(count($unitArray) == 1)
echo $unitArray[0]."\n";
else
{
$tbp = "";
for($i=1; $i<count($unitArray); $i++)
$tbp .= $unitArray[$i]."|";
$tbp = trim($tbp, "|");
echo "(".$tbp."):".$unitArray[0]."\n";
}
}*/
foreach(Unit::getAllUnits() as $unit)
{
$unitArray = explode(";", $unit->getName());
if(count($unitArray) == 1)
echo $unitArray[0]."\n";
else
{
$tbp = "";
for($i=1; $i<count($unitArray); $i++)
$tbp .= $unitArray[$i]."|";
$tbp = trim($tbp, "|");
echo "(".$tbp."):".$unitArray[0]."\n";
}
}
}
function removeShoppingList($listId)
{
$date = new DateTime();
$SQL_command = "DELETE FROM lists WHERE id=".$listId;
if (DBLink::getDbLink()->query($SQL_command))
echo "List has been deleted.<br>";
else
echo "Error deleting list.<br>";
}
function triggerRhasspyTraining()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, Configuration::$rhasspyMasterUrl."/api/train");
curl_setopt($ch, CURLOPT_POST, 1);
//curl_setopt($ch, CURLOPT_POSTFIELDS, "postvar1=value1&postvar2=value2&postvar3=value3");
curl_setopt($ch, CURLOPT_POSTFIELDS, ""); // Send empty data to force POST
// In real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
// Further processing ...
if (strpos($server_output, 'Training completed') !== false)
{
return true;
}
return false;
}
?>