PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 4.0
Advanced Access Manager – Access Governance for WordPress v4.0
6.8.4 6.8.5 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13 6.9.14 6.9.15 6.9.16 6.9.17 6.9.18 6.9.19 6.9.2 6.9.20 6.9.21 6.9.22 6.9.23 6.9.24 6.9.25 6.9.26 6.9.27 6.9.28 6.9.29 6.9.3 6.9.30 6.9.31 6.9.32 6.9.33 6.9.34 6.9.35 6.9.36 6.9.37 6.9.38 6.9.39 6.9.4 6.9.41 6.9.42 6.9.43 6.9.44 6.9.45 6.9.46 6.9.47 6.9.48 6.9.49 6.9.5 6.9.51 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.0-alpha.6 7.0.0-alpha.7 7.0.0-beta.1 7.0.0-rc1 7.0.0-rc2 7.0.0-rc3 7.0.1 7.0.10 7.0.11 7.0.2 7.0.3 7.0.4 7.0.5 7.0.6 7.0.7 7.0.8 7.0.9 7.1.0 7.1.1 trunk 3.0 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.5 4.7.6 4.8 4.8.1 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.5.1 4.9.5.2 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1 5.1.1 5.10 5.11 5.2 5.2.1 5.2.5 5.2.6 5.2.7 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.5 5.5.1 5.5.2 5.6 5.6.1 5.6.1.1 5.7 5.7.1 5.7.2 5.7.3 5.8 5.8.1 5.8.2 5.8.3 5.9 5.9.1 5.9.1.1 5.9.2 5.9.2.1 5.9.3 5.9.4 5.9.5 5.9.6 5.9.6.1 5.9.6.2 5.9.6.3 5.9.7 5.9.7.1 5.9.7.2 5.9.7.3 5.9.8 5.9.8.1 5.9.9 5.9.9.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.2.0 6.2.1 6.2.2 6.3.0 6.3.1 6.3.2 6.3.3 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.6.0 6.6.1 6.6.2 6.6.3 6.6.4 6.7.0 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.8.0 6.8.1 6.8.2 6.8.3
advanced-access-manager / Application / Extension / Repository.php
advanced-access-manager / Application / Extension Last commit date
Compatibility.php 9 years ago List.php 9 years ago Repository.php 9 years ago Server.php 9 years ago
Repository.php
295 lines
1 <?php
2
3 /**
4 * ======================================================================
5 * LICENSE: This file is subject to the terms and conditions defined in *
6 * file 'license.txt', which is part of this source code package. *
7 * ======================================================================
8 */
9
10 /**
11 * Extension Repository
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Extension_Repository {
17
18 /**
19 * Extension status: installed
20 *
21 * Extension has been installed and is up to date
22 */
23 const STATUS_INSTALLED = 'installed';
24
25 /**
26 * License violation
27 *
28 * Extension is inactive
29 */
30 const STATUS_INACTIVE = 'inactive';
31
32 /**
33 * Extension status: download
34 *
35 * Extension is not installed and either needs to be purchased or
36 * downloaded for free.
37 */
38 const STATUS_DOWNLOAD = 'download';
39
40 /**
41 * Extension status: update
42 *
43 * New version of the extension has been detected.
44 */
45 const STATUS_UPDATE = 'update';
46
47 /**
48 * Single instance of itself
49 *
50 * @var AAM_Extension_Repository
51 *
52 * @access private
53 * @static
54 */
55 private static $_instance = null;
56
57 /**
58 * Extension list
59 *
60 * @var array
61 *
62 * @access protected
63 */
64 protected $list = array();
65
66 /**
67 * Constructor
68 *
69 * @return void
70 *
71 * @access protected
72 */
73 protected function __construct() {}
74
75 /**
76 * Get single instance of itself
77 *
78 * @param AAM $parent
79 *
80 * @return AAM_Extension_Repository
81 *
82 * @access public
83 * @static
84 */
85 public static function getInstance() {
86 if (is_null(self::$_instance)) {
87 self::$_instance = new self;
88 }
89
90 return self::$_instance;
91 }
92
93 /**
94 * Load active extensions
95 *
96 * @return void
97 *
98 * @access public
99 */
100 public function load($dir = null) {
101 $basedir = (is_null($dir) ? $this->getBasedir() : $dir);
102
103 //since release 3.4 some extensions get intergreated into core
104 AAM_Core_Compatibility::initExtensions();
105
106 if (file_exists($basedir)) {
107 //iterate through each active extension and load it
108 foreach (scandir($basedir) as $extension) {
109 if (!in_array($extension, array('.', '..'))) {
110 $this->bootstrapExtension($basedir . '/' . $extension);
111 }
112 }
113 //Very important hook for cases when there is extensions dependancy.
114 //For example AAM Plus Package depends on AAM Utitlities properties
115 do_action('aam-post-extensions-load');
116 }
117 }
118
119 /**
120 * Bootstrap the Extension
121 *
122 * In case of any errors, the output can be found in console
123 *
124 * @param string $path
125 *
126 * @return void
127 * @access protected
128 */
129 protected function bootstrapExtension($path) {
130 $bootstrap = "{$path}/bootstrap.php";
131
132 if (file_exists($bootstrap)) { //bootstrap the extension
133 require($bootstrap);
134 }
135 }
136
137 /**
138 * Check extension list
139 *
140 */
141 public function check() {
142 $list = AAM_Core_Compatibility::getExtensionList();
143
144 foreach(AAM_Extension_Server::check() as $id => $item) {
145 if ($item->violation === true) {
146 $list[$id]['status'] = self::STATUS_INACTIVE;
147 } elseif (version_compare(constant($id), $item->version) === -1) {
148 $list[$id]['status'] = self::STATUS_UPDATE;
149 } else {
150 $list[$id]['status'] = self::STATUS_INSTALLED;
151 }
152 }
153
154 AAM_Core_API::updateOption('aam-extensions', $list);
155 }
156
157 /**
158 * Store the license key
159 *
160 * This is important to have just for the update extension purposes
161 *
162 * @param stdClass $package
163 * @param string $license
164 *
165 * @return void
166 *
167 * @access public
168 */
169 public function storeLicense($package, $license) {
170 //retrieve the installed list of extensions
171 $list = AAM_Core_Compatibility::getExtensionList();
172
173 $list[$package->id] = array(
174 'license' => $license,
175 'status' => self::STATUS_INSTALLED,
176 );
177
178 //update the extension list
179 AAM_Core_API::updateOption('aam-extensions', $list);
180 }
181
182
183 /**
184 * Add new extension
185 *
186 * @param blob $zip
187 *
188 * @return boolean
189 * @access public
190 */
191 public function add($zip) {
192 $filepath = $this->getBasedir() . '/' . uniqid('aam_');
193 $result = false;
194
195 if (file_put_contents($filepath, $zip)) { //unzip the archive
196 WP_Filesystem(false, false, true); //init filesystem
197 $result = unzip_file($filepath, $this->getBasedir());
198 if (!is_wp_error($result)) {
199 $result = true;
200 }
201 @unlink($filepath); //remove the working archive
202 }
203
204 return $result;
205 }
206
207 /**
208 * Get extension version
209 *
210 * @param string $id
211 *
212 * @return string|null
213 *
214 * @access public
215 */
216 public function getVersion($id) {
217 return (defined($id) ? constant($id) : null);
218 }
219
220 /**
221 * Get extension list
222 *
223 * @return array
224 *
225 * @access public
226 */
227 public function getList() {
228 if (empty($this->list)) {
229 $list = require dirname(__FILE__) . '/List.php';
230 $index = AAM_Core_Compatibility::getExtensionList();
231
232 foreach ($list as &$item) {
233 $id = $item['id'];
234
235 if (isset($index[$id])) {
236 $item['status'] = $index[$id]['status'];
237 } elseif (defined($id)) {
238 $item['status'] = self::STATUS_INSTALLED;
239 } else {
240 $item['status'] = self::STATUS_DOWNLOAD;
241 }
242
243 if (empty($item['license'])) {
244 if (!empty($index[$id]['license'])) {
245 $item['license'] = $index[$id]['license'];
246 } else {
247 $item['license'] = 0;
248 }
249 }
250 }
251
252 $this->list = $list;
253 }
254
255 return $this->list;
256 }
257
258 /**
259 * Check extension directory
260 *
261 * @return boolean|sstring
262 *
263 * @access public
264 *
265 * @global type $wp_filesystem
266 */
267 public function checkDirectory() {
268 $error = false;
269 $basedir = $this->getBasedir();
270
271 if (!file_exists($basedir)) {
272 if (!@mkdir($basedir, fileperms(ABSPATH) & 0777 | 0755, true)) {
273 $error = sprintf(__('Failed to create %s', AAM_KEY), $basedir);
274 }
275 } elseif (!is_writable($basedir)) {
276 $error = sprintf(
277 __('Directory %s is not writable', AAM_KEY), $basedir
278 );
279 }
280
281 return $error;
282 }
283
284 /**
285 * Get base directory
286 *
287 * @return string
288 *
289 * @access public
290 */
291 public function getBasedir() {
292 return AAM_Core_Config::get('extention.directory', AAM_EXTENSION_BASE);
293 }
294
295 }