-
Notifications
You must be signed in to change notification settings - Fork 0
/
CombineResourceAbstract.php
129 lines (115 loc) · 2.96 KB
/
CombineResourceAbstract.php
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
/*
* This file is part of the vSymfo package.
*
* website: www.vision-web.pl
* (c) Rafał Mikołajun <rafal@vision-web.pl>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace vSymfo\Component\Document;
use vSymfo\Component\Document\Resources\Interfaces\CombineResourceInterface;
use vSymfo\Core\File\Interfaces\CombineFilesInterface;
/**
* Pojedynczy złączony zasób
*
* @author Rafał Mikołajun <rafal@vision-web.pl>
* @package vSymfo Component
* @subpackage Document
*/
abstract class CombineResourceAbstract extends ResourceAbstract implements CombineResourceInterface
{
/**
* Czy kompilować?
* @var bool
*/
protected $isCombine = false;
/**
* Obiekt do złączania plików
* @var null|CombineFilesInterface
*/
protected $combine = null;
/**
* @param string name
* @param array $source
* @param array $options
*/
public function __construct($name, array $source, array $options = array())
{
$options = $this->defaults($options);
parent::__construct($name, $source, $options);
$this->isCombine = (bool)$options['combine'];
}
/**
* Domyślne opcje konstruktora
*
* @param array $options
*
* @return array
*/
protected function defaults(array $options)
{
return array_merge(
array(
'combine' => false,
)
, $options
);
}
/**
* Ustawia nazwę zasobu
*
* @param string $name
*
* @throws \InvalidArgumentException
*/
public function setName($name)
{
if (is_string($name) && preg_match('/^[a-zA-Z1-9_-]*$/', $name)) {
$this->name = $name;
} else {
throw new \InvalidArgumentException('Invalid resource name: '.(string)$name);
}
if (!empty($this->combine)) {
$this->combine->setOutputFileName($name);
}
}
/**
* Ustawia obiekt służący do złączania plików
*
* @param CombineFilesInterface $combine
*
* @return void
*/
public function setCombineObject(CombineFilesInterface $combine)
{
$this->combine = $combine;
}
/**
* @return false|CombineFilesInterface
*/
public function getCombineObject()
{
return $this->combine === null ? false : $this->combine;
}
/**
* Podaj tablicę adresów URL do zasobów
*
* @return array
*/
public function getUrl()
{
if (!$this->isCombine || empty($this->combine)) {
return parent::getUrl();
}
// generuj listę tylko jeden raz
if ($this->urls === null) {
$this->combine->combine();
$this->urls = array(
$this->urlManager->url($this->combine->getPath(true), false)
);
}
return $this->urls;
}
}