Spaces:
No application file
No application file
File size: 2,757 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
<?php
namespace Mautic\LeadBundle\Helper;
use Mautic\CoreBundle\Helper\ProgressBarHelper;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Output\OutputInterface;
class Progress
{
/**
* Total number of items representing 100%.
*
* @var int
*/
protected $total = 0;
/**
* Currently proccessed items.
*
* @var int
*/
protected $done = 0;
/**
* @var ProgressBar|null
*/
protected $bar;
public function __construct(
protected ?OutputInterface $output = null
) {
}
/**
* Returns count of all items.
*
* @return int
*/
public function getTotal()
{
return $this->total;
}
/**
* Set total value.
*
* @param int $total
*
* @return Progress
*/
public function setTotal($total)
{
$this->total = (int) $total;
if ($this->output) {
$this->bar = ProgressBarHelper::init($this->output, $this->total);
$this->bar->start();
}
return $this;
}
/**
* Returns count of processed items.
*
* @return int
*/
public function getDone()
{
return $this->done;
}
/**
* Set total value.
*
* @return Progress
*/
public function setDone($done)
{
$this->done = (int) $done;
if ($this->bar) {
$this->bar->setProgress($this->done);
if ($this->isFinished()) {
$this->bar->finish();
$this->output->writeln('');
}
}
return $this;
}
/**
* Increase done count by 1.
*
* @return Progress
*/
public function increase()
{
$this->setDone($this->done + 1);
return $this;
}
/**
* Checked if the progress is 100 or more %.
*/
public function isFinished(): bool
{
return $this->done >= $this->total;
}
/**
* Bind Progress from simple array.
*
* @return Progress
*/
public function bindArray(array $progress)
{
if (isset($progress[0])) {
$this->setDone($progress[0]);
}
if (isset($progress[1])) {
$this->setTotal($progress[1]);
}
return $this;
}
/**
* Convert this object to a simple array.
*/
public function toArray(): array
{
return [
$this->done,
$this->total,
];
}
/**
* Counts percentage of the progress.
*
* @return int
*/
public function toPercent()
{
return ($this->total) ? ceil(($this->done / $this->total) * 100) : 100;
}
}
|