Command/ProgressContainerAwareCommand.php
author ymh <ymh.work@gmail.com>
Fri, 26 Sep 2014 10:04:40 +0200
changeset 136 f209fcb0df6c
parent 42 0e57c730bb18
permissions -rwxr-xr-x
Added tag V00.18 for changeset ab728cb3632c

<?php
/*
 * This file is part of the WikiTagBundle package.
 *
 * (c) IRI <http://www.iri.centrepompidou.fr/>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace IRI\Bundle\WikiTagBundle\Command;

use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;

abstract class ProgressContainerAwareCommand extends ContainerAwareCommand
{
    protected function showProgress(OutputInterface $output, $current, $total, $label, $width)
    {
        $percent = (floatval($current)/floatval($total)) * 100.0;
        $marks = intval(floor(floatval($width) * ($percent / 100.0) ));
        $spaces = $width - $marks;
        
        $status_bar="\r[";
        $status_bar.=str_repeat("=", $marks);
        if($marks<$width){
            $status_bar.=">";
            $status_bar.=str_repeat(" ", $spaces);
        } else {
            $status_bar.="=";
        }
        
        $disp=str_pad(number_format($percent, 0),3, " ", STR_PAD_LEFT);
        
        $label = str_pad(substr($label,0,50), 50, " ");
        $current_str = str_pad($current, strlen("$total"), " ", STR_PAD_LEFT);
        
        $status_bar.="] $disp%  $current_str/$total : $label";
        
        $output->write("$status_bar  ");
        
        if($current == $total) {
            $output->writeln("");
        }
    }
    
}