Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
87.50% covered (warning)
87.50%
7 / 8
CRAP
97.78% covered (success)
97.78%
44 / 45
Loop
0.00% covered (danger)
0.00%
0 / 1
87.50% covered (warning)
87.50%
7 / 8
12
97.78% covered (success)
97.78%
44 / 45
 setParentLoop
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 getLoopStack
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 resetLoopStack
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 setItems
0.00% covered (danger)
0.00%
0 / 1
2.00
93.33% covered (success)
93.33%
14 / 15
 __get
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 before
100.00% covered (success)
100.00%
1 / 1
4
100.00% covered (success)
100.00%
15 / 15
 after
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
<?php
/**
 * Represents the $loop variable in the foreach directive. Handles all data.
 */
namespace Radic\BladeExtensions\Helpers;
/**
 * Represents the $loop variable in the foreach directive. Handles all data.
 *
 * @package        Radic\BladeExtensions
 * @subpackage     Helpers
 * @version        2.1.0
 * @author         Robin Radic
 * @license        MIT License - http://radic.mit-license.org
 * @copyright      2011-2015, Robin Radic - Radic Technologies
 * @link           http://robin.radic.nl/blade-extensions
 *
 */
class Loop
{
    /**
     * The array that is being iterated
     *
     * @var array
     */
    protected $items = [];
    /**
     * The data for the current $loop item
     *
     * @var array
     */
    protected $data;
    /**
     * The parent loop, if any
     *
     * @var Loop
     */
    protected $parentLoop;
    protected $loopFactory;
    /**
     * Sets the parent loop
     *
     * @param Loop $parentLoop
     * {@inheritdocs}
     */
    public function setParentLoop(Loop $parentLoop)
    {
        $this->parentLoop     = $parentLoop;
        $this->data['parent'] = $parentLoop;
    }
    /**
     * Returns the full loop stack of the LoopFactory
     *
     * @return array
     */
    public function getLoopStack()
    {
        return $this->loopFactory->getStack();
    }
    /**
     * Resets the loop stack of the LoopFactory
     */
    public function resetLoopStack()
    {
        $this->loopFactory->reset();
    }
    /**
     * Instantiates the class
     *
     * @param array $items The array that's being iterated
     */
    public function __construct(LoopFactory $loopFactory, $items)
    {
        $this->loopFactory = $loopFactory;
        $this->setItems($items);
    }
    /**
     * Sets the array to monitor
     *
     * @param array $items The array that's being iterated
     */
    public function setItems($items)
    {
        if (isset($data)) {
            return;
        }
        $this->items = $items;
        $total       = count($items);
        $this->data  = array(
            'index1'    => 1,
            'index'     => 0,
            'revindex1' => $total,
            'revindex'  => $total - 1,
            'first'     => true,
            'last'      => false,
            'odd'       => false,
            'even'      => true,
            'length'    => $total
        );
    }
    /**
     * Magic method to access the loop data properties
     *
     * @param $key
     * @return mixed
     */
    public function __get($key)
    {
        return $this->data[$key];
    }
    /**
     * To be called first in a loop before anything else
     */
    public function before()
    {
        if ($this->data['index'] % 2 == 0) {
            $this->data['odd']  = false;
            $this->data['even'] = true;
        } else {
            $this->data['odd']  = true;
            $this->data['even'] = false;
        }
        if ($this->data['index'] == 0) {
            $this->data['first'] = true;
        } else {
            $this->data['first'] = false;
        }
        if ($this->data['revindex'] == 0) {
            $this->data['last'] = true;
        } else {
            $this->data['last'] = false;
        }
    }
    /**
     * To be called last in a loop after everything else
     */
    public function after()
    {
        $this->data['index']++;
        $this->data['index1']++;
        $this->data['revindex']--;
        $this->data['revindex1']--;
    }
}