PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.3.5
Advanced Access Manager – Access Governance for WordPress v5.3.5
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 / Backend / Feature / Extension / Manager.php
advanced-access-manager / Application / Backend / Feature / Extension Last commit date
Manager.php 8 years ago
Manager.php
222 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 * Backend extension manager
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Backend_Feature_Extension_Manager extends AAM_Backend_Feature_Abstract {
17
18 /**
19 *
20 * @var type
21 */
22 protected static $instance = null;
23
24 /**
25 *
26 */
27 public function render() {
28 require_once(dirname(__FILE__) . '/../../phtml/extensions.phtml');
29 }
30
31 /**
32 * Undocumented function
33 *
34 * @return void
35 */
36 public function check() {
37 AAM::cron();
38
39 return json_encode(array('status' => 'success'));
40 }
41
42 /**
43 * Install an extension
44 *
45 * @param string $storedLicense
46 *
47 * @return string
48 *
49 * @access public
50 */
51 public function install($storedLicense = null) {
52 $repo = AAM_Extension_Repository::getInstance();
53 $license = AAM_Core_Request::post('license', $storedLicense);
54
55 //download the extension from the server first
56 $package = AAM_Core_Server::download($license);
57
58 if (is_wp_error($package)) {
59 $manually = __('You may try to install extension manually.', AAM_KEY);
60 $response = array(
61 'status' => 'failure',
62 'error' => strip_tags($package->get_error_message()) . ' ' . $manually
63 );
64 }elseif ($error = $repo->checkDirectory()) {
65 $response = $this->installFailureResponse($error, $package);
66 $repo->storeLicense($package, $license);
67 } elseif (empty($package->content)) { //any unpredictable scenario
68 $response = array(
69 'status' => 'failure',
70 'error' => 'Download failure. Please try again or contact us.'
71 );
72 } else { //otherwise install the extension
73 $result = $repo->add(base64_decode($package->content));
74 if (is_wp_error($result)) {
75 $response = $this->installFailureResponse(
76 $result->get_error_message(), $package
77 );
78 } else {
79 $response = array('status' => 'success');
80 }
81 $repo->storeLicense($package, $license);
82 }
83
84 return json_encode($response);
85 }
86
87 /**
88 * Update the extension
89 *
90 * @return string
91 *
92 * @access public
93 */
94 public function update() {
95 $id = AAM_Core_Request::post('extension');
96 $licenses = AAM_Core_Compatibility::getLicenseList();
97
98 if (!empty($licenses[$id]['license'])) {
99 $response = $this->install($licenses[$id]['license']);
100 } else {
101 //fallback compatibility
102 $list = AAM_Extension_Repository::getInstance()->getList();
103 if (!empty($list[$id]['license'])) {
104 $response = $this->install($list[$id]['license']);
105 } else {
106 $response = json_encode(array(
107 'status' => 'failure',
108 'error' => __('Enter license key to update extension.', AAM_KEY)
109 ));
110 }
111 }
112
113 return $response;
114 }
115
116 /**
117 *
118 * @return type
119 */
120 public function deactivate() {
121 AAM_Extension_Repository::getInstance()->updateStatus(
122 AAM_Core_Request::post('extension'),
123 AAM_Extension_Repository::STATUS_INACTIVE
124 );
125
126 return json_encode(array('status' => 'success'));
127 }
128
129 /**
130 *
131 * @return type
132 */
133 public function activate() {
134 AAM_Extension_Repository::getInstance()->updateStatus(
135 AAM_Core_Request::post('extension'),
136 AAM_Extension_Repository::STATUS_INSTALLED
137 );
138
139 return json_encode(array('status' => 'success'));
140 }
141
142 /**
143 *
144 * @return type
145 */
146 public function fixDirectoryIssue() {
147 $dirname = AAM_Extension_Repository::getInstance()->getBasedir();
148 if (file_exists($dirname) === false) {
149 @mkdir($dirname, fileperms( ABSPATH ) & 0777 | 0755, true);
150 }
151
152 return json_encode(array(
153 'status' => (AAM_Extension_Repository::getInstance()->isWriteableDirectory() ? 'success' : 'failed')
154 ));
155 }
156
157 /**
158 *
159 * @param type $type
160 * @return type
161 */
162 public function getList($type) {
163 $response = array();
164
165 foreach(AAM_Extension_Repository::getInstance()->getList() as $item) {
166 if ($item['type'] == $type) {
167 $response[] = $item;
168 }
169 }
170
171 return $response;
172 }
173
174 /**
175 *
176 * @return type
177 */
178 public function canShowLicense() {
179 $result = true;
180
181 if (AAM_Core_API::capabilityExists('aam_display_license')) {
182 $result = !empty(AAM::getUser()->allcaps['aam_display_license']);
183 }
184
185 return $result;
186 }
187
188 /**
189 * Install extension failure response
190 *
191 * In case the file system fails, AAM allows to download the extension for
192 * manual installation
193 *
194 * @param string $error
195 * @param stdClass $package
196 *
197 * @return array
198 *
199 * @access protected
200 */
201 protected function installFailureResponse($error, $package) {
202 return array(
203 'status' => 'failure',
204 'error' => $error,
205 'title' => $package->title,
206 'content' => $package->content
207 );
208 }
209
210 /**
211 *
212 * @return AAM_Backend_Feature_Extension_Manager
213 */
214 public static function getInstance() {
215 if (is_null(self::$instance)) {
216 self::$instance = new self;
217 }
218
219 return self::$instance;
220 }
221
222 }