1
|
|
|
<?php |
2
|
|
|
/* |
3
|
|
|
* Copyright (c) Arnaud Ligny <[email protected]> |
4
|
|
|
* |
5
|
|
|
* For the full copyright and license information, please view the LICENSE |
6
|
|
|
* file that was distributed with this source code. |
7
|
|
|
*/ |
8
|
|
|
|
9
|
|
|
namespace Cecil\Step; |
10
|
|
|
|
11
|
|
|
use Cecil\Util; |
12
|
|
|
use Symfony\Component\Finder\Finder; |
13
|
|
|
|
14
|
|
|
/** |
15
|
|
|
* Copy static files to site root. |
16
|
|
|
*/ |
17
|
|
|
class StaticCopy extends AbstractStep |
18
|
|
|
{ |
19
|
|
|
const TMP_DIR = '.cecil'; |
20
|
|
|
private $count = 0; |
21
|
|
|
|
22
|
|
|
/** |
23
|
|
|
* {@inheritdoc} |
24
|
|
|
*/ |
25
|
|
|
public function init($options) |
26
|
|
|
{ |
27
|
|
|
// reset output directory |
28
|
|
|
Util::getFS()->remove($this->config->getOutputPath()); |
29
|
|
|
Util::getFS()->mkdir($this->config->getOutputPath()); |
30
|
|
|
|
31
|
|
|
$this->process = true; |
32
|
|
|
} |
33
|
|
|
|
34
|
|
|
/** |
35
|
|
|
* {@inheritdoc} |
36
|
|
|
*/ |
37
|
|
|
public function process() |
38
|
|
|
{ |
39
|
|
|
call_user_func_array($this->builder->getMessageCb(), ['COPY', 'Copying static files']); |
40
|
|
|
|
41
|
|
|
// copy content of '<theme>/static/' dir if exists |
42
|
|
|
if ($this->config->hasTheme()) { |
43
|
|
|
$themes = array_reverse($this->config->getTheme()); |
44
|
|
|
foreach ($themes as $theme) { |
45
|
|
|
$themeStaticDir = $this->config->getThemeDirPath($theme, 'static'); |
46
|
|
|
$this->copy($themeStaticDir); |
47
|
|
|
} |
48
|
|
|
} |
49
|
|
|
|
50
|
|
|
// copy content of 'static/' dir if exists |
51
|
|
|
$staticDir = $this->builder->getConfig()->getStaticPath(); |
52
|
|
|
$this->copy($staticDir, null, $this->config->get('static.exclude')); |
53
|
|
|
|
54
|
|
|
// copy temporary images files |
55
|
|
|
$tmpDirImages = $this->config->getDestinationDir().'/'.self::TMP_DIR.'/images'; |
56
|
|
|
if ($this->copy($tmpDirImages, 'images')) { |
57
|
|
|
Util::getFS()->remove($tmpDirImages); |
58
|
|
|
} |
59
|
|
|
|
60
|
|
|
call_user_func_array($this->builder->getMessageCb(), ['COPY_PROGRESS', 'Start copy', 0, $this->count]); |
61
|
|
|
call_user_func_array($this->builder->getMessageCb(), ['COPY_PROGRESS', 'Copied', $this->count, $this->count]); |
62
|
|
|
} |
63
|
|
|
|
64
|
|
|
/** |
65
|
|
|
* Copy (mirror) files. |
66
|
|
|
* |
67
|
|
|
* @param string $from |
68
|
|
|
* @param string|null $to |
69
|
|
|
* @param array $exclude |
70
|
|
|
* |
71
|
|
|
* @return bool |
72
|
|
|
*/ |
73
|
|
|
private function copy(string $from, string $to = null, array $exclude = []): bool |
|
|
|
|
74
|
|
|
{ |
75
|
|
|
if (Util::getFS()->exists($from)) { |
76
|
|
|
$finder = new Finder(); |
77
|
|
|
$finder->files()->in($from); |
78
|
|
|
if (is_array($exclude)) { |
79
|
|
|
$finder->files()->notName($this->config->get('static.exclude'))->in($from); |
80
|
|
|
} |
81
|
|
|
$this->count += $finder->count(); |
82
|
|
|
Util::getFS()->mirror( |
83
|
|
|
$from, |
84
|
|
|
$this->config->getOutputPath().(isset($to) ? '/'.$to : ''), |
85
|
|
|
$finder, |
86
|
|
|
['override' => true] |
87
|
|
|
); |
88
|
|
|
|
89
|
|
|
return true; |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
return false; |
93
|
|
|
} |
94
|
|
|
} |
95
|
|
|
|
This check examines a number of code elements and verifies that they conform to the given naming conventions.
You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.