EVOLUTION-MANAGER
Edit File: ResourceIteratorApplyBatched.php
<?php namespace DuplicatorPro\Guzzle\Service\Resource; defined("ABSPATH") or die(""); use DuplicatorPro\Guzzle\Common\AbstractHasDispatcher; use DuplicatorPro\Guzzle\Batch\BatchBuilder; use DuplicatorPro\Guzzle\Batch\BatchSizeDivisor; use DuplicatorPro\Guzzle\Batch\BatchClosureTransfer; use DuplicatorPro\Guzzle\Common\Version; /** * Apply a callback to the contents of a {@see ResourceIteratorInterface} * @deprecated Will be removed in a future version and is no longer maintained. Use the Batch\ abstractions instead. * @codeCoverageIgnore */ class ResourceIteratorApplyBatched extends AbstractHasDispatcher { /** @var callable|array */ protected $callback; /** @var ResourceIteratorInterface */ protected $iterator; /** @var integer Total number of sent batches */ protected $batches = 0; /** @var int Total number of iterated resources */ protected $iterated = 0; public static function getAllEvents() { return array( // About to send a batch of requests to the callback 'iterator_batch.before_batch', // Finished sending a batch of requests to the callback 'iterator_batch.after_batch', // Created the batch object 'iterator_batch.created_batch' ); } /** * @param ResourceIteratorInterface $iterator Resource iterator to apply a callback to * @param array|callable $callback Callback method accepting the resource iterator * and an array of the iterator's current resources */ public function __construct(ResourceIteratorInterface $iterator, $callback) { $this->iterator = $iterator; $this->callback = $callback; Version::warn(__CLASS__ . ' is deprecated'); } /** * Apply the callback to the contents of the resource iterator * * @param int $perBatch The number of records to group per batch transfer * * @return int Returns the number of iterated resources */ public function apply($perBatch = 50) { $this->iterated = $this->batches = $batches = 0; $that = $this; $it = $this->iterator; $callback = $this->callback; $batch = BatchBuilder::factory() ->createBatchesWith(new BatchSizeDivisor($perBatch)) ->transferWith(new BatchClosureTransfer(function (array $batch) use ($that, $callback, &$batches, $it) { $batches++; $that->dispatch('iterator_batch.before_batch', array('iterator' => $it, 'batch' => $batch)); call_user_func_array($callback, array($it, $batch)); $that->dispatch('iterator_batch.after_batch', array('iterator' => $it, 'batch' => $batch)); })) ->autoFlushAt($perBatch) ->build(); $this->dispatch('iterator_batch.created_batch', array('batch' => $batch)); foreach ($this->iterator as $resource) { $this->iterated++; $batch->add($resource); } $batch->flush(); $this->batches = $batches; return $this->iterated; } /** * Get the total number of batches sent * * @return int */ public function getBatchCount() { return $this->batches; } /** * Get the total number of iterated resources * * @return int */ public function getIteratedCount() { return $this->iterated; } }