|
|
<?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 = mysqli_init();
|
|
|
|
|
|
if(Configuration::$mysqlSSL)
|
|
|
{
|
|
|
DBLink::$sqlLink->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
|
|
|
DBLink::$sqlLink->ssl_set(NULL, NULL, Configuration::$mysqlSslCertificatePath, NULL, NULL);
|
|
|
}
|
|
|
DBLink::$sqlLink->real_connect(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;
|
|
|
}
|
|
|
|
|
|
?>
|