Integration.php
97 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP\Integrations; |
| 4 | |
| 5 | use Error; |
| 6 | use IAWPSCOPED\Illuminate\Support\Collection; |
| 7 | use IAWPSCOPED\Illuminate\Support\Str; |
| 8 | /** @internal */ |
| 9 | class Integration |
| 10 | { |
| 11 | private array $attributes; |
| 12 | public function __construct(array $attributes) |
| 13 | { |
| 14 | // An integration can only belong to a plugin or a theme, not both. |
| 15 | if (isset($attributes['plugin']) && isset($attributes['theme'])) { |
| 16 | throw new Error('An integration cannot define both "plugin" and "theme"'); |
| 17 | } |
| 18 | $this->attributes = $attributes; |
| 19 | } |
| 20 | public function name() : string |
| 21 | { |
| 22 | return $this->attributes['name']; |
| 23 | } |
| 24 | public function description() : string |
| 25 | { |
| 26 | return $this->attributes['description']; |
| 27 | } |
| 28 | public function feature_page_url() |
| 29 | { |
| 30 | if ($this->is_ecommerce_plugin()) { |
| 31 | return 'https://independentwp.com/features/woocommerce-analytics/'; |
| 32 | } elseif ($this->is_form_plugin()) { |
| 33 | return 'https://independentwp.com/features/form-tracking/'; |
| 34 | } |
| 35 | } |
| 36 | public function label() |
| 37 | { |
| 38 | if ($this->is_ecommerce_plugin()) { |
| 39 | return 'eCommerce'; |
| 40 | } elseif ($this->is_form_plugin()) { |
| 41 | return 'Form'; |
| 42 | } |
| 43 | } |
| 44 | public function icon() : string |
| 45 | { |
| 46 | if (\array_key_exists('filename', $this->attributes)) { |
| 47 | return \IAWPSCOPED\iawp_icon($this->attributes['filename']); |
| 48 | } |
| 49 | $file = $this->name(); |
| 50 | $file = Str::replace(' ', '_', $file); |
| 51 | $file = Str::lower($file); |
| 52 | return \IAWPSCOPED\iawp_icon($file); |
| 53 | } |
| 54 | public function activated() : bool |
| 55 | { |
| 56 | return $this->activated_plugin() || $this->activated_theme(); |
| 57 | } |
| 58 | public function is_ecommerce_plugin() : bool |
| 59 | { |
| 60 | return $this->attributes['category'] === 'ecommerce'; |
| 61 | } |
| 62 | public function is_form_plugin() : bool |
| 63 | { |
| 64 | return $this->attributes['category'] === 'form'; |
| 65 | } |
| 66 | public function html() : string |
| 67 | { |
| 68 | return \IAWPSCOPED\iawp_blade()->run('integrations.integration', ['integration' => $this]); |
| 69 | } |
| 70 | private function activated_plugin() : bool |
| 71 | { |
| 72 | if (!isset($this->attributes['plugin'])) { |
| 73 | return \false; |
| 74 | } |
| 75 | $slugs = $this->attributes['plugin']; |
| 76 | if (\is_string($slugs)) { |
| 77 | $slugs = [$slugs]; |
| 78 | } |
| 79 | return Collection::make($slugs)->contains(function ($slug) { |
| 80 | return \is_plugin_active($slug); |
| 81 | }); |
| 82 | } |
| 83 | private function activated_theme() : bool |
| 84 | { |
| 85 | if (!isset($this->attributes['theme'])) { |
| 86 | return \false; |
| 87 | } |
| 88 | $themes = $this->attributes['theme']; |
| 89 | if (\is_string($themes)) { |
| 90 | $themes = [$themes]; |
| 91 | } |
| 92 | return Collection::make($themes)->contains(function ($slug) { |
| 93 | return \strtolower(\get_template()) === \strtolower($slug); |
| 94 | }); |
| 95 | } |
| 96 | } |
| 97 |