| Server IP : 85.158.181.41 / Your IP : 216.73.217.12 Web Server : Apache System : Linux cloud9-vm129 6.1.178+1-ph #ph SMP PREEMPT_DYNAMIC Wed Jul 29 09:00:54 UTC 2026 x86_64 User : moncbefd ( 1024) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/moncbefd/www.moneta.at/system/classes/orders/ |
Upload File : |
<?php
/* --------------------------------------------------------------
OrdersStatusModel.inc.php 2014-11-05
Gambio GmbH
http://www.gambio.de
Copyright (c) 2014 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
class OrdersStatusModel extends BaseClass
{
const MAX_NAME_LENGTH = 32;
/* @var $orders_status_id int */
protected $orders_status_id;
/* @var $orders_status_names array */
protected $orders_status_names;
/** initializes OrderStatusModel instance, optionally using database data identified by orders_status_id */
public function __construct($p_orders_status_id = null)
{
if(!is_null($p_orders_status_id))
{
$this->set_('orders_status_id', (int)$p_orders_status_id);
$this->load();
}
}
/** load data belonging to the currently set orders_status_id */
public function load()
{
if(is_null($this->orders_status_id))
{
throw new OrdersStatusModelInvalidIDException();
}
$load_query =
'SELECT
*
FROM
orders_status
WHERE
orders_status_id = \':orders_status_id\'';
$load_query = strtr($load_query, array(':orders_status_id' => (int)$this->orders_status_id));
$load_result = xtc_db_query($load_query, 'db_link', false);
while($load_row = xtc_db_fetch_array($load_result))
{
$this->setStatusName($load_row['orders_status_name'], (int)$load_row['language_id']);
}
}
/** load data identified by status name
@param $p_orders_status_name string
@param $p_language_id int/null
*/
public function loadByName($p_orders_status_name, $p_language_id = null)
{
if(mb_strlen($p_orders_status_name) > self::MAX_NAME_LENGTH)
{
throw new OrderStatusModelNameTooLongException();
}
$orders_status_id = $this->findOrdersStatusIDByName($p_orders_status_name, $p_language_id);
$this->orders_status_id = $orders_status_id;
$this->load();
}
/** find orders_status_id corresponding to a given status name
Search can optionally be limited to one language by giving a language_id.
@param $p_orders_status_name string
@param $p_languages_id int/null
@return int language_id
@throws OrdersStatusModelStatusNotFoundException
*/
public function findOrdersStatusIDByName($p_orders_status_name, $p_language_id = null)
{
$find_query =
'SELECT
orders_status_id
FROM
orders_status
WHERE
orders_status_name = \':orders_status_name\'';
if(!is_null($p_language_id))
{
$find_query .= ' AND language_id = \':language_id\'';
}
$find_query = strtr($find_query,
array(
':orders_status_name' => xtc_db_input($p_orders_status_name),
':language_id' => (int)$p_language_id,
)
);
$find_result = xtc_db_query($find_query);
$orders_status_id = null;
while($find_row = xtc_db_fetch_array($find_result))
{
$orders_status_id = $find_row['orders_status_id'];
}
if($orders_status_id === null)
{
throw new OrdersStatusModelStatusNotFoundException();
}
return $orders_status_id;
}
/** save OrdersStatus to database
If orders_status_id is not set, a new status will be created.
@return int orders_status_id
*/
public function save()
{
if(is_null($this->orders_status_id))
{
// create new OrdersStatus
$this->orders_status_id = $this->findNextOrdersStatusID();
}
$replace_query =
'REPLACE INTO
orders_status
SET
orders_status_id = \':orders_status_id\',
language_id = \':language_id\',
orders_status_name = \':orders_status_name\'';
foreach($this->orders_status_names as $language_id => $orders_status_name)
{
$current_query = strtr($replace_query,
array(
':orders_status_id' => (int)$this->orders_status_id,
':language_id' => (int)$language_id,
':orders_status_name' => xtc_db_input($orders_status_name),
)
);
xtc_db_query($current_query);
}
return $this->orders_status_id;
}
/** sets orders_status_id for this status
@param $p_orders_status_id int
*/
public function set_orders_status_id($p_orders_status_id)
{
$this->orders_status_id = (int)$p_orders_status_id;
}
/** sets name for status
@param $p_name string
@param $p_language_id int
*/
public function setStatusName($p_name, $p_language_id)
{
if(mb_strlen($p_name) > self::MAX_NAME_LENGTH)
{
throw new OrderStatusModelNameTooLongException();
}
$this->orders_status_names[(int)$p_language_id] = $p_name;
}
/** returns the name (textual representation) for the OrdersStatus
If $p_language_id is null, the session's default language will be used
@param $p_language_id int/null
*/
public function getStatusName($p_language_id = null)
{
if(is_null($p_language_id))
{
$p_language_id = $_SESSION['languages_id'];
}
if(!isset($this->orders_status_names[(int)$p_language_id]))
{
throw new OrdersStatusModelNameNotFoundException('orders_status_name for language '.(int)$p_language_id.' not available');
}
return $this->orders_status_names[(int)$p_language_id];
}
/** finds lowest unused orders_status_id
@return int
*/
public function findNextOrdersStatusID()
{
$next_id = null;
$max_query =
'SELECT
MAX(orders_status_id) AS max_id
FROM
orders_status';
$max_result = xtc_db_query($max_query, 'db_link', false);
while($max_row = xtc_db_fetch_array($max_result))
{
$next_id = $max_row['max_id'];
}
$next_id = $next_id + 1;
return $next_id;
}
/** deletes this status
Throws OrdersStatusModelStatusInUseException if this status is still referenced by any order
*/
public function delete()
{
if($this->isInUse())
{
throw new OrdersStatusModelStatusInUseException();
}
$delete_query =
'DELETE FROM orders_status
WHERE orders_status_id = \':orders_status_id\'';
$delete_query = strtr($delete_query, array(':orders_status_id' => (int)$this->orders_status_id));
xtc_db_query($delete_query);
$this->orders_status_id = null;
}
/** returns whether or not this status is currently in use by an order */
public function isInUse()
{
$num_uses = 0;
$orders_query =
'SELECT
COUNT(*) AS num_uses
FROM
orders
WHERE
orders_status = \':orders_status_id\'';
$orders_query = strtr($orders_query, array(':orders_status_id' => (int)$this->orders_status_id));
$orders_result = xtc_db_query($orders_query);
while($orders_row = xtc_db_fetch_array($orders_result))
{
$num_uses += (int)$orders_row['num_uses'];
}
$orders_status_history_query =
'SELECT
COUNT(*) AS num_uses
FROM
orders_status_history
WHERE
orders_status_id = \':orders_status_id\'';
$orders_status_history_query = strtr($orders_status_history_query, array(':orders_status_id' => (int)$this->orders_status_id));
$orders_status_history_result = xtc_db_query($orders_status_history_query);
while($orders_status_history_row = xtc_db_fetch_array($orders_status_history_result))
{
$num_uses += $$orders_status_history_row['num_uses'];
}
if($num_uses > 0)
{
$isInUse = true;
}
else
{
$isInUse = false;
}
return $isInUse;
}
}
class OrdersStatusModelException extends Exception {
public function __construct($message = '')
{
parent::__construct($message);
}
}
class OrdersStatusModelInvalidIDException extends OrdersStatusModelException {}
class OrdersStatusModelStatusNotFoundException extends OrdersStatusModelException {}
class OrdersStatusModelNameNotFoundException extends OrdersStatusModelException {}
class OrderStatusModelNameTooLongException extends OrdersStatusModelException {}
class OrdersStatusModelStatusInUseException extends OrdersStatusModelException {}