forked from ProcessMaker/processmaker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPackageManager.php
More file actions
137 lines (118 loc) · 3.72 KB
/
PackageManager.php
File metadata and controls
137 lines (118 loc) · 3.72 KB
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
130
131
132
133
134
135
136
137
<?php
namespace ProcessMaker\Managers;
use File;
class PackageManager
{
private $packages;
public function __construct()
{
$this->packages = [];
}
/**
* Register package
*
* @param $name string name of package
*/
public function addPackage($name)
{
$this->packages[$name] = [];
}
/**
* List packages
*/
public function listPackages()
{
$list = array_keys($this->packages);
sort($list);
return $list;
}
/**
* Verify if package is registered
* @param $name
* @return bool
*/
public function isRegistered($name)
{
return isset($this->packages[$name]);
}
/**
* Remove package
*
* @param $name
*/
public function remove($name)
{
unset($this->packages[$name]);
}
/**
* Get all json translations registered from packages
*
* @return array
*/
public function getJsonTranslationsRegistered() : array
{
return app()->translator->getLoader()->jsonPaths();
}
/**
* Look into current packages and create a language file for each one
*
* @param $code The language code to create a language file of
*/
public function createLanguageFile($code)
{
// Get current packages
$packages = $this->getJsonTranslationsRegistered();
foreach ($packages as $package) {
if (!file_exists("{$package}/en.json")) {
return;
} else {
// If language does not exist, clone en.json without values
if (!file_exists("{$package}/{$code}.json")) {
$enJson = file_get_contents("{$package}/en.json");
$data = json_decode($enJson, true);
// Clear values from array
foreach ($data as $key => &$value) {
$value = '';
}
// Get empty file with only keys, empty values
$baseFile = json_encode($data, JSON_PRETTY_PRINT);
// Create file in package
file_put_contents("{$package}/{$code}.json", $baseFile);
// save new language backup
if (File::exists("{$package}.orig")) {
file_put_contents("{$package}.orig/{$code}.json", $baseFile);
}
//Add files gitignore
if (File::exists(base_path('resources') . '/.gitignore')) {
copy(base_path('resources') . '/.gitignore', $package . '/../.gitignore');
}
if (File::exists(lang_path() . '/.gitignore')) {
copy(lang_path() . '/.gitignore', $package . '/.gitignore');
}
}
}
}
}
/**
* Delete a language file form all currently installed packages
*
* @param $code The language code of which to delete the language file
*/
public function deleteLanguageFile($code)
{
// Get current packages
$packages = $this->getJsonTranslationsRegistered();
foreach ($packages as $package) {
// Check if file exists in package
if (File::exists("{$package}/{$code}.json")) {
// Delete file
File::delete("{$package}/{$code}.json");
}
// Check if file exists in package lang.orig
if (File::exists(str_replace('/lang/', '/lang.orig/', "{$package}/{$code}.json"))) {
// Delete file
File::delete(str_replace('/lang/', '/lang.orig/', "{$package}/{$code}.json"));
}
}
}
}