<?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 driver collector implementation.
*
* @since 1.18.0 (J) - 1.8.0 (WP)
*/
final class VBOTaskDrivercollector
{
/**
* @var array
*/
private $created = [];
/**
* @var array
*/
private $modified = [];
/**
* @var array
*/
private $cancelled = [];
/**
* Proxy to construct the object.
*
* @return VBOTaskDrivercollector
*/
public static function getInstance()
{
return new static();
}
/**
* Class constructor.
*/
public function __construct()
{
$this->reset();
}
/**
* Resets the task collector pools.
*
* @return VBOTaskDrivercollector
*/
public function reset()
{
$this->created = [];
$this->modified = [];
$this->cancelled = [];
return $this;
}
/**
* Returns a list of the task pools.
*
* @param bool $filter If true, only the non-empty pools will be returned.
*
* @return array
*/
public function getAll(bool $filter = false)
{
if ($filter) {
return array_merge(
array_filter($this->created),
array_filter($this->modified),
array_filter($this->cancelled)
);
}
return [
$this->created,
$this->modified,
$this->cancelled,
];
}
/**
* Returns the newly created tasks pool.
*
* @return array
*/
public function getCreated()
{
return $this->created;
}
/**
* Returns the modified tasks pool, which
* can include cancelled and created tasks.
*
* @return array
*/
public function getModified()
{
if (!$this->modified && ($this->getCreated() || $this->getCancelled())) {
// some tasks were created or deleted, but not directly modified
return $this->getAll(true);
}
return $this->modified;
}
/**
* Returns the cancelled tasks pool.
*
* @return array
*/
public function getCancelled()
{
return $this->cancelled;
}
/**
* Registers a new task within the collector pool.
*
* @param array $task The task information to register.
* @param string $type The type of task to register.
*
* @return bool
*/
public function register(array $task, string $type = 'created')
{
if (!strcasecmp($type, 'created')) {
$this->created[] = $task;
return true;
}
if (!strcasecmp($type, 'modified')) {
$this->modified[] = $task;
return true;
}
if (!strcasecmp($type, 'cancelled')) {
$this->cancelled[] = $task;
return true;
}
return false;
}
}