1<?php
2/*
3 * This file is part of the PHP_CodeCoverage package.
4 *
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
6 *
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
9 */
10
11/**
12 * Renders a PHP_CodeCoverage_Report_Node_Directory node.
13 *
14 * @since Class available since Release 1.1.0
15 */
16class PHP_CodeCoverage_Report_HTML_Renderer_Directory extends PHP_CodeCoverage_Report_HTML_Renderer
17{
18    /**
19     * @param PHP_CodeCoverage_Report_Node_Directory $node
20     * @param string                                 $file
21     */
22    public function render(PHP_CodeCoverage_Report_Node_Directory $node, $file)
23    {
24        $template = new Text_Template($this->templatePath . 'directory.html', '{{', '}}');
25
26        $this->setCommonTemplateVariables($template, $node);
27
28        $items = $this->renderItem($node, true);
29
30        foreach ($node->getDirectories() as $item) {
31            $items .= $this->renderItem($item);
32        }
33
34        foreach ($node->getFiles() as $item) {
35            $items .= $this->renderItem($item);
36        }
37
38        $template->setVar(
39            array(
40                'id'    => $node->getId(),
41                'items' => $items
42            )
43        );
44
45        $template->renderTo($file);
46    }
47
48    /**
49     * @param  PHP_CodeCoverage_Report_Node $item
50     * @param  bool                         $total
51     * @return string
52     */
53    protected function renderItem(PHP_CodeCoverage_Report_Node $item, $total = false)
54    {
55        $data = array(
56            'numClasses'                   => $item->getNumClassesAndTraits(),
57            'numTestedClasses'             => $item->getNumTestedClassesAndTraits(),
58            'numMethods'                   => $item->getNumMethods(),
59            'numTestedMethods'             => $item->getNumTestedMethods(),
60            'linesExecutedPercent'         => $item->getLineExecutedPercent(false),
61            'linesExecutedPercentAsString' => $item->getLineExecutedPercent(),
62            'numExecutedLines'             => $item->getNumExecutedLines(),
63            'numExecutableLines'           => $item->getNumExecutableLines(),
64            'testedMethodsPercent'         => $item->getTestedMethodsPercent(false),
65            'testedMethodsPercentAsString' => $item->getTestedMethodsPercent(),
66            'testedClassesPercent'         => $item->getTestedClassesAndTraitsPercent(false),
67            'testedClassesPercentAsString' => $item->getTestedClassesAndTraitsPercent()
68        );
69
70        if ($total) {
71            $data['name'] = 'Total';
72        } else {
73            if ($item instanceof PHP_CodeCoverage_Report_Node_Directory) {
74                $data['name'] = sprintf(
75                    '<a href="%s/index.html">%s</a>',
76                    $item->getName(),
77                    $item->getName()
78                );
79
80                $data['icon'] = '<span class="glyphicon glyphicon-folder-open"></span> ';
81            } else {
82                $data['name'] = sprintf(
83                    '<a href="%s.html">%s</a>',
84                    $item->getName(),
85                    $item->getName()
86                );
87
88                $data['icon'] = '<span class="glyphicon glyphicon-file"></span> ';
89            }
90        }
91
92        return $this->renderItemTemplate(
93            new Text_Template($this->templatePath . 'directory_item.html', '{{', '}}'),
94            $data
95        );
96    }
97}
98