222 lines
7.4 KiB
PHP
222 lines
7.4 KiB
PHP
|
<?php
|
||
|
require_once (__DIR__. '/../dbutils.php');
|
||
|
|
||
|
class Sorter {
|
||
|
var $dbutils;
|
||
|
|
||
|
function __construct() {
|
||
|
$this->dbutils = new DbUtils();
|
||
|
}
|
||
|
|
||
|
public function initSortCurrentProductTable($pdo) {
|
||
|
// first find all product types
|
||
|
$sql = "SELECT id FROM %prodtype% WHERE removed is null";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute();
|
||
|
$alltypes = $stmt->fetchAll();
|
||
|
|
||
|
foreach($alltypes as $aType) {
|
||
|
$typeid = $aType["id"];
|
||
|
|
||
|
// now sort inside this prodtype
|
||
|
$sql = "SELECT id FROM %products% WHERE removed is null AND category=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($typeid));
|
||
|
$allprods = $stmt->fetchAll();
|
||
|
|
||
|
$s = 0;
|
||
|
|
||
|
foreach($allprods as $aProd) {
|
||
|
$prodid = $aProd["id"];
|
||
|
$sql = "UPDATE %products% SET sorting=? WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($s,$prodid));
|
||
|
$s++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function getMaxprodSortOfType($pdo,$typeid) {
|
||
|
$sql = "SELECT MAX(sorting) as maxsort FROM %products% WHERE removed is null AND category=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($typeid));
|
||
|
$el = $stmt->fetchObject();
|
||
|
return(intval($el->maxsort));
|
||
|
}
|
||
|
|
||
|
private function getTypeidOfProd($pdo,$prodid) {
|
||
|
$sql = "SELECT category from %products% WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($prodid));
|
||
|
$el = $stmt->fetchObject();
|
||
|
$typeid = $el->category;
|
||
|
return $typeid;
|
||
|
}
|
||
|
|
||
|
|
||
|
public function setMaxSortingForProdId($pdo,$id) {
|
||
|
$typeid = $this->getTypeidOfProd($pdo, $id);
|
||
|
|
||
|
$maxsorting = ($this->getMaxprodSortOfType($pdo, $typeid) + 1);
|
||
|
|
||
|
$sql = "UPDATE %products% SET sorting=? WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($maxsorting,$id));
|
||
|
}
|
||
|
|
||
|
private function getSortingOfProduct($pdo,$prodid) {
|
||
|
$sql = "SELECT sorting FROM %products% WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($prodid));
|
||
|
$el = $stmt->fetchObject();
|
||
|
return (intval($el->sorting));
|
||
|
}
|
||
|
|
||
|
public function sortup($pdo,$prodid) {
|
||
|
try {
|
||
|
// which sorting has the comment to delete?
|
||
|
$sorting = $this->getSortingOfProduct($pdo, $prodid);
|
||
|
|
||
|
if ($sorting < 0) {
|
||
|
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
|
||
|
return;
|
||
|
}
|
||
|
if ($sorting == 0) {
|
||
|
// finished
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$typeid = $this->getTypeidOfProd($pdo, $prodid);
|
||
|
|
||
|
// get comment before
|
||
|
$sql = "SELECT id FROM %products% WHERE sorting=? AND category=? AND removed is null";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($sorting - 1,$typeid));
|
||
|
$row = $stmt->fetchObject();
|
||
|
$previousId = $row->id;
|
||
|
|
||
|
// change these two prods in their ordering
|
||
|
$sql = "UPDATE %products% SET sorting=? WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($sorting,$previousId));
|
||
|
|
||
|
$sql = "UPDATE %products% SET sorting=? WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($sorting-1,$prodid));
|
||
|
}
|
||
|
catch (PDOException $e) {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function sortdown($pdo,$prodid) {
|
||
|
try {
|
||
|
// which sorting has the comment to delete?
|
||
|
$sorting = $this->getSortingOfProduct($pdo, $prodid);
|
||
|
|
||
|
if ($sorting < 0) {
|
||
|
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// is it at end of list?
|
||
|
$typeid = intval($this->getTypeidOfProd($pdo, $prodid));
|
||
|
$maxSorting = $this->getMaxprodSortOfType($pdo, $typeid);
|
||
|
|
||
|
if (($maxSorting == 0) || ($maxSorting == $sorting)) {
|
||
|
// finished
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// get prod afterwards
|
||
|
$sql = "SELECT id FROM %products% WHERE sorting=? AND category=? AND removed is null";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($sorting + 1,$typeid));
|
||
|
$row = $stmt->fetchObject();
|
||
|
$nextId = $row->id;
|
||
|
|
||
|
// change these two prods in their ordering
|
||
|
$sql = "UPDATE %products% SET sorting=? WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($sorting,$nextId));
|
||
|
|
||
|
$sql = "UPDATE %products% SET sorting=? WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($sorting+1,$prodid));
|
||
|
}
|
||
|
catch (PDOException $e) {
|
||
|
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function delproduct($pdo,$prodid) {
|
||
|
try {
|
||
|
// which sorting has the prod to delete?
|
||
|
$sorting = $this->getSortingOfProduct($pdo, $prodid);
|
||
|
$typeid = intval($this->getTypeidOfProd($pdo, $prodid));
|
||
|
|
||
|
if ($sorting < 0) {
|
||
|
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// delete the prod
|
||
|
$sql = "UPDATE %products% SET removed=?,sorting=? WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array(1,null,$prodid));
|
||
|
|
||
|
// TODO: HIST!!!
|
||
|
|
||
|
// subtract all sortings by one higher then the deleted sorting index
|
||
|
$sql = "SELECT id,sorting FROM %products% WHERE sorting>? AND removed is null AND category=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($sorting,$typeid));
|
||
|
|
||
|
$result = $stmt->fetchAll();
|
||
|
|
||
|
foreach($result as $row) {
|
||
|
$theId = $row['id'];
|
||
|
$theSort = intval($row['sorting'])-1;
|
||
|
$sql = "UPDATE %products% SET sorting=? WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($theSort,$theId));
|
||
|
}
|
||
|
}
|
||
|
catch (PDOException $e) {
|
||
|
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function resortAfterProduct($pdo,$prodid) {
|
||
|
try {
|
||
|
// which sorting has the prod to delete?
|
||
|
$sorting = $this->getSortingOfProduct($pdo, $prodid);
|
||
|
$typeid = intval($this->getTypeidOfProd($pdo, $prodid));
|
||
|
|
||
|
if ($sorting < 0) {
|
||
|
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// subtract all sortings by one higher then the deleted sorting index
|
||
|
$sql = "SELECT id,sorting FROM %products% WHERE sorting>? AND removed is null AND category=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($sorting,$typeid));
|
||
|
|
||
|
$result = $stmt->fetchAll();
|
||
|
|
||
|
foreach($result as $row) {
|
||
|
$theId = $row['id'];
|
||
|
$theSort = intval($row['sorting'])-1;
|
||
|
$sql = "UPDATE %products% SET sorting=? WHERE id=?";
|
||
|
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
|
||
|
$stmt->execute(array($theSort,$theId));
|
||
|
}
|
||
|
}
|
||
|
catch (PDOException $e) {
|
||
|
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|