summaryrefslogtreecommitdiffstats
path: root/library/Businessprocess/Renderer/Breadcrumb.php
blob: 56c41aa3bd90a32707ee5d9482494737a039c955 (plain)
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
<?php

namespace Icinga\Module\Businessprocess\Renderer;

use Icinga\Module\Businessprocess\BpNode;
use Icinga\Module\Businessprocess\Renderer\TileRenderer\NodeTile;
use Icinga\Module\Businessprocess\Web\Url;
use ipl\Html\BaseHtmlElement;
use ipl\Html\Html;

class Breadcrumb extends BaseHtmlElement
{
    protected $tag = 'ul';

    protected $defaultAttributes = array(
        'class'            => 'breadcrumb',
        'data-base-target' => '_main'
    );

    /**
     * @param Renderer $renderer
     * @return static
     */
    public static function create(Renderer $renderer)
    {
        $bp = $renderer->getBusinessProcess();
        $breadcrumb = new static;
        $bpUrl = $renderer->getBaseUrl();
        if ($bpUrl->getParam('action') === 'delete') {
            $bpUrl->remove('action');
        }

        $breadcrumb->add(Html::tag('li')->add(
            Html::tag(
                'a',
                [
                    'href'  => Url::fromPath('businessprocess'),
                    'title' => mt('businessprocess', 'Show Overview')
                ],
                Html::tag('i', ['class' => 'icon icon-home'])
            )
        ));
        $breadcrumb->add(Html::tag('li')->add(
            Html::tag('a', ['href' => $bpUrl], $bp->getTitle())
        ));
        $path = $renderer->getCurrentPath();

        $parts = array();
        while ($nodeName = array_pop($path)) {
            $node = $bp->getNode($nodeName);
            $renderer->setParentNode($node);
            array_unshift(
                $parts,
                static::renderNode($node, $path, $renderer)
            );
        }
        $breadcrumb->add($parts);

        return $breadcrumb;
    }

    /**
     * @param BpNode $node
     * @param array $path
     * @param Renderer $renderer
     *
     * @return NodeTile
     */
    protected static function renderNode(BpNode $node, $path, Renderer $renderer)
    {
        // TODO: something more generic than NodeTile?
        $renderer = clone($renderer);
        $renderer->lock()->setIsBreadcrumb();
        $p = new NodeTile($renderer, $node, $path);
        $p->setTag('li');
        return $p;
    }
}