File "area.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/admin/helpers/src/task/model/area.php
File size: 6.85 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikBooking
* @subpackage core
* @author E4J s.r.l.
* @copyright Copyright (C) 2025 E4J s.r.l. All Rights Reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
* @link https://vikwp.com
*/
// No direct access
defined('ABSPATH') or die('No script kiddies please!');
/**
* Task model area implementation.
*
* @since 1.18.0 (J) - 1.8.0 (WP)
*/
final class VBOTaskModelArea
{
/**
* Proxy for immediately accessing the object.
*
* @return VBOTaskModelArea
*/
public static function getInstance()
{
return new static;
}
/**
* Class constructor.
*/
public function __construct()
{}
/**
* Item loading implementation.
*
* @param mixed $pk An optional primary key value to load the row by,
* or an associative array of fields to match.
*
* @return object|null The record object on success, null otherwise.
*/
public function getItem($pk)
{
$dbo = JFactory::getDbo();
$q = $dbo->getQuery(true)
->select('*')
->from($dbo->qn('#__vikbooking_tm_areas'));
if (is_array($pk)) {
foreach ($pk as $column => $value) {
$q->where($dbo->qn($column) . ' = ' . $dbo->q($value));
}
} else {
$q->where($dbo->qn('id') . ' = ' . (int) $pk);
}
$dbo->setQuery($q, 0, 1);
return $dbo->loadObject();
}
/**
* Items loading implementation.
*
* @param array $clauses List of associative columns to filter
* (column => [operator, value])
* @param int $start Query limit start.
* @param int $lim Query limit value.
* @param array $cols Optional list of columns to fetch.
*
* @return array List of record objects.
*/
public function getItems(array $clauses = [], $start = 0, $lim = 0, array $cols = [])
{
$dbo = JFactory::getDbo();
$q = $dbo->getQuery(true);
if (!$cols) {
$q->select('*');
} else {
$q->select(array_map([$dbo, 'qn'], $cols));
}
$q->from($dbo->qn('#__vikbooking_tm_areas'));
foreach ($clauses as $column => $data) {
if (!is_array($data) || !isset($data['value'])) {
continue;
}
if (is_array($data['value'])) {
// default to "IN" for a list of integers
$q->where($dbo->qn($column) . ' IN (' . implode(', ', array_map('intval', $data['value'])) . ')');
} else {
// singular fetching value
$q->where($dbo->qn($column) . ' ' . ($data['operator'] ?? '=') . ' ' . $dbo->q($data['value']));
}
}
$q->order($dbo->qn('name') . ' ASC');
$q->order($dbo->qn('id') . ' ASC');
$dbo->setQuery($q, $start, $lim);
return $dbo->loadObjectList();
}
/**
* Returns a list of area/project IDs to which the given assignee ID is assigned.
*
* @param int $assigneeId The operator ID.
*
* @return array List of supported area IDs or empty array.
*/
public function getAssigneeItems(int $assigneeId)
{
$areaIds = [];
foreach ($this->getItems() as $areaRecord) {
$area = VBOTaskArea::getInstance((array) $areaRecord);
$areaAssignees = $area->getOperatorIds();
if (!$areaAssignees || in_array($assigneeId, $areaAssignees)) {
// push supported area/project
$areaIds[] = $area->getID();
}
}
return $areaIds;
}
/**
* Stores a new task area record.
*
* @param array|object $record The record to store.
*
* @return int|null The new record ID or null.
*/
public function save($record)
{
$dbo = JFactory::getDbo();
$record = (object) $record;
if (is_array(($record->settings ?? null)) || is_object(($record->settings ?? null))) {
$record->settings = json_encode($record->settings);
}
if (is_array(($record->tags ?? null))) {
// parse all tags, even custom ones, into a list of IDs
$record->tags = json_encode(VBOTaskModelColortag::getInstance()->parseIds($record->tags));
}
if (is_array(($record->status_enums ?? null))) {
$record->status_enums = json_encode($record->status_enums);
}
$dbo->insertObject('#__vikbooking_tm_areas', $record, 'id');
return $record->id ?? null;
}
/**
* Updates an existing task area record.
*
* @param array|object $record The record details to update.
*
* @return bool
*/
public function update($record)
{
$dbo = JFactory::getDbo();
$record = (object) $record;
if (empty($record->id)) {
return false;
}
if (is_array(($record->settings ?? null)) || is_object(($record->settings ?? null))) {
$record->settings = json_encode($record->settings);
}
if (is_array(($record->tags ?? null))) {
// parse all tags, even custom ones, into a list of IDs
$record->tags = json_encode(VBOTaskModelColortag::getInstance()->parseIds($record->tags));
}
if (is_array(($record->status_enums ?? null))) {
$record->status_enums = json_encode(array_values(array_filter($record->status_enums)));
}
return (bool) $dbo->updateObject('#__vikbooking_tm_areas', $record, 'id');
}
/**
* Deletes a task area record.
*
* @param array|int $id The record(s) to delete.
*
* @return bool
*/
public function delete($id)
{
$dbo = JFactory::getDbo();
if (!is_array($id)) {
$id = (array) $id;
}
$id = array_map('intval', $id);
if (!$id) {
return false;
}
$dbo->setQuery(
$dbo->getQuery(true)
->delete($dbo->qn('#__vikbooking_tm_areas'))
->where($dbo->qn('id') . ' IN (' . implode(', ', $id) . ')')
);
$dbo->execute();
$result = (bool) $dbo->getAffectedRows();
if ($result) {
// fetch all the tasks assigned to the deleted areas
$dbo->setQuery(
$dbo->getQuery(true)
->select($dbo->qn('id'))
->from($dbo->qn('#__vikbooking_tm_tasks'))
->where($dbo->qn('id_area') . ' IN (' . implode(', ', $id) . ')')
);
// delete all the tasks found on cascade
VBOTaskModelTask::getInstance()->delete($dbo->loadColumn());
}
return $result;
}
}