Files
doitinpoland.com/wp-content/plugins/sitepress-multilingual-cms/classes/jobs/class-wpml-tm-jobs-collection.php
2023-09-12 21:41:04 +02:00

132 lines
2.7 KiB
PHP

<?php
class WPML_TM_Jobs_Collection implements IteratorAggregate, Countable {
/** @var WPML_TM_Job_Entity[] */
private $jobs = array();
public function __construct( array $jobs ) {
foreach ( $jobs as $job ) {
if ( $job instanceof WPML_TM_Job_Entity ) {
$this->add( $job );
}
}
}
/**
* @param WPML_TM_Job_Entity $job
*/
private function add( WPML_TM_Job_Entity $job ) {
$this->jobs[] = $job;
}
/**
* @param int $tp_id
*
* @return null|WPML_TM_Job_Entity
*/
public function get_by_tp_id( $tp_id ) {
foreach ( $this->jobs as $job ) {
if ( $tp_id === $job->get_tp_id() ) {
return $job;
}
}
return null;
}
/**
* @param callable $callback
*
* @return WPML_TM_Jobs_Collection
*/
public function filter( $callback ) {
return new WPML_TM_Jobs_Collection( array_filter( $this->jobs, $callback ) );
}
/**
* @param array|int $status
* @param bool $exclude
*
* @return WPML_TM_Jobs_Collection
*/
public function filter_by_status( $status, $exclude = false ) {
if ( ! is_array( $status ) ) {
$status = array( $status );
}
$result = array();
if ( $exclude ) {
foreach ( $this->jobs as $job ) {
if ( ! in_array( $job->get_status(), $status, true ) ) {
$result[] = $job;
}
}
} else {
foreach ( $this->jobs as $job ) {
if ( in_array( $job->get_status(), $status, true ) ) {
$result[] = $job;
}
}
}
return new WPML_TM_Jobs_Collection( $result );
}
/**
* @param callable $callback
* @param bool $return_job_collection
*
* @return array|WPML_TM_Jobs_Collection
*/
public function map( $callback, $return_job_collection = false ) {
$mapped_result = array_map( $callback, $this->jobs );
return $return_job_collection ? new WPML_TM_Jobs_Collection( $mapped_result ) : $mapped_result;
}
public function map_to_property( $property ) {
$method = 'get_' . $property;
$result = array();
foreach ( $this->jobs as $job ) {
if ( ! method_exists( $job, $method ) ) {
throw new InvalidArgumentException( 'Property ' . $property . ' does not exist' );
}
$result[] = $job->{$method}();
}
return $result;
}
/**
* @param $jobs
*
* @return WPML_TM_Jobs_Collection
*/
public function append( $jobs ) {
if ( $jobs instanceof WPML_TM_Jobs_Collection ) {
$jobs = $jobs->toArray();
}
return new WPML_TM_Jobs_Collection( array_merge( $this->jobs, $jobs ) );
}
/**
* @return ArrayIterator
*/
#[\ReturnTypeWillChange]
public function getIterator() {
return new ArrayIterator( $this->jobs );
}
public function toArray() {
return $this->jobs;
}
#[\ReturnTypeWillChange]
public function count() {
return count( $this->jobs );
}
}