| @@ -49,8 +49,16 @@ | ||
| 49 | 49 | foreach ($this->extensions as $key => $extension) { |
| 50 | 50 | $status = isset($settings[$key]) ? $settings[$key] : $extension['status']; |
| 51 | 51 | $extension['status'] = $status; |
| 52 | 52 | |
| 53 | + $parent_key = isset($extension['parent']) ? $extension['parent'] : ''; | |
| 54 | + | |
| 55 | + if ( ! empty( $parent_key ) ) { | |
| 56 | + $parent_status = isset($settings[$parent_key]) ? $settings[$parent_key] : $this->extensions[$parent_key]['status']; | |
| 57 | + | |
| 58 | + $extension['status'] = $status === 'on' && $parent_status === 'on' ? 'on' : 'off'; | |
| 59 | + } | |
| 60 | + | |
| 53 | 61 | $slug = isset($extension['slug']) ? $extension['slug'] : ''; |
| 54 | 62 | $deps = isset($extension['deps']) ? $extension['deps'] : []; |
| 55 | 63 | |
| 56 | 64 | if ($extension['type'] === 'module' && !empty($deps)) { |
| @@ -64,13 +72,13 @@ | ||
| 64 | 72 | $extension['status'] = 'activate'; |
| 65 | 73 | } |
| 66 | 74 | } elseif (in_array($extension['type'], ['plugin', 'addon'])) { |
| 67 | 75 | if (!PluginManager::is_installed($slug)) { |
| 68 | - $extension['status'] = 'upgrade'; | |
| 76 | + $extension['status'] = 'install'; | |
| 69 | 77 | } elseif (!PluginManager::is_activated($slug)) { |
| 70 | - $extension['status'] = 'install'; | |
| 78 | + $extension['status'] = 'activate'; | |
| 71 | 79 | } else { |
| 72 | - $extension['status'] = 'activate'; | |
| 80 | + $extension['status'] = 'deactivate'; | |
| 73 | 81 | } |
| 74 | 82 | } elseif ($extension['type'] === 'arraytics-plugin') { |
| 75 | 83 | if (!PluginManager::is_activated($slug)) { |
| 76 | 84 | $extension['status'] = 'install'; |
| @@ -121,8 +129,18 @@ | ||
| 121 | 129 | * @return array|null |
| 122 | 130 | */ |
| 123 | 131 | public function find($key) { |
| 124 | 132 | return isset($this->extensions[$key]) ? $this->extensions[$key] : null; |
| 133 | + } | |
| 134 | + | |
| 135 | + /** | |
| 136 | + * Find the parent of a given extension. | |
| 137 | + * | |
| 138 | + * @param string $key The extension key. | |
| 139 | + * @return array|null | |
| 140 | + */ | |
| 141 | + public function find_parent($key) { | |
| 142 | + return isset($this->extensions[$key]['parent']) ? $this->extensions[$key]['parent'] : null; | |
| 125 | 143 | } |
| 126 | 144 | |
| 127 | 145 | /** |
| 128 | 146 | * Get the current option name used for storing extension settings. |