Test Failed
Push — master ( c5de53...cf76ff )
by Mikael
02:00
created

View2::set()   B

Complexity

Conditions 6
Paths 17

Size

Total Lines 32
Code Lines 22

Duplication

Lines 32
Ratio 100 %

Importance

Changes 0
Metric Value
cc 6
eloc 22
nc 17
nop 4
dl 32
loc 32
rs 8.439
c 0
b 0
f 0
1
<?php
2
3
namespace Anax\View;
4
5
use \Anax\View\ViewRenderFile2 as ViewRenderFile;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Anax\View\ViewRenderFile.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
6
use \Anax\View\Exception;
7
8
/**
9
 * A view connected to a template file, supporting Anax DI.
10
 */
11 View Code Duplication
class View2
0 ignored issues
show
Duplication introduced by
This class seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
12
{
13
    /**
14
     * @var $template     Template file or array
15
     * @var $templateData Data to send to template file
16
     * @var $sortOrder    For sorting views
17
     * @var $type         Type of view
18
     */
19
    private $template;
20
    private $templateData = [];
21
    private $sortOrder;
22
    private $type;
23
24
25
26
    /**
27
     * Set values for the view.
28
     *
29
     * @param array|string $template the template file, or array
30
     * @param array        $data     variables to make available to the
31
     *                               view, default is empty
32
     * @param integer      $sort     which order to display the views,
33
     *                               if suitable
34
     * @param string       $type     which type of view
35
     *
36
     * @return self
37
     */
38
    public function set($template, $data = [], $sort = 0, $type = "file")
39
    {
40
        if (is_array($template)) {
41
            if (isset($template["callback"])) {
42
                $type = "callback";
43
                $this->template = $template;
44
            } else {
45
                $this->template = $template["template"];
46
            }
47
48
            $this->templateData = isset($template["data"])
49
                ? $template["data"]
50
                : $data;
51
52
            $this->sortOrder = isset($template["sort"])
53
                ? $template["sort"]
54
                : $sort;
55
56
            $this->type = isset($template["type"])
57
                ? $template["type"]
58
                : $type;
59
60
            return;
61
        }
62
63
        $this->template     = $template;
64
        $this->templateData = $data;
65
        $this->sortOrder    = $sort;
66
        $this->type         = $type;
67
68
        return $this;
69
    }
70
71
72
73
    /**
74
     * Render the view.
75
     *
76
     * @param object $di optional with access to the framework resources.
77
     *
78
     * @return void
79
     */
80
    public function render($di = null)
81
    {
82
        switch ($this->type) {
83
            case "file":
84
                if ($di->has("viewRenderFile")) {
85
                    $viewRender = $di->get("viewRenderFile");
86
                } else {
87
                    $viewRender = new ViewRenderFile($di);
88
                }
89
                $viewRender->render($this->template, $this->templateData);
90
                break;
91
92
            case "callback":
93
                if (!isset($this->template["callback"]) || !is_callable($this->template["callback"])) {
94
                    throw new Exception("View missing callback.");
95
                }
96
97
                echo call_user_func($this->template["callback"]);
98
99
                break;
100
101
            case "string":
102
                echo $this->template;
103
104
                break;
105
106
            default:
107
                throw new Exception("Not a valid template type: {$this->type}");
108
        }
109
    }
110
111
112
113
    /**
114
     * Give the sort order for this view.
115
     *
116
     * @return int
117
     */
118
    public function sortOrder()
119
    {
120
        return $this->sortOrder;
121
    }
122
}
123