static function getManifestData($name) { if (\BearFramework\Addons::exists($name)) { $addonData = \BearFramework\Addons::get($name); $addonOptions = $addonData['options']; if (isset($addonOptions['bearCMS']) && is_array($addonOptions['bearCMS']) && isset($addonOptions['bearCMS']['manifest']) && is_string($addonOptions['bearCMS']['manifest'])) { $filename = $addonData['dir'] . '/' . $addonOptions['bearCMS']['manifest']; if (is_file($filename)) { $data = json_decode(file_get_contents($filename), true); if (isset($data['media']) && is_array($data['media'])) { foreach ($data['media'] as $i => $media) { if (isset($media['filename']) && is_string($media['filename'])) { $data['media'][$i]['filename'] = $addonData['dir'] . '/' . $media['filename']; } } } return $data; } } } return null; }
$context->assets->addDir('assets'); $app->container->set('bearCMS', \BearCMS::class); Options::set($app->addons->get('bearcms/bearframework-addon')['options']); $app->hooks->add('initialized', function () use($app) { // Load the CMS managed addons if (Options::hasFeature('ADDONS')) { $addons = InternalData\Addons::getList(); foreach ($addons as $addonData) { $addonID = $addonData['id']; $addonDir = Options::$addonsDir . DIRECTORY_SEPARATOR . $addonID . DIRECTORY_SEPARATOR; if (is_file($addonDir . 'autoload.php')) { include $addonDir . 'autoload.php'; } else { throw new Exception('Cannot find autoload.php file for ' . $addonID); } if (\BearFramework\Addons::exists($addonID)) { $_addonData = \BearFramework\Addons::get($addonID); $_addonOptions = $_addonData['options']; if (isset($_addonOptions['bearCMS']) && is_array($_addonOptions['bearCMS']) && isset($_addonOptions['bearCMS']['assetsDirs']) && is_array($_addonOptions['bearCMS']['assetsDirs'])) { foreach ($_addonOptions['bearCMS']['assetsDirs'] as $dir) { if (is_string($dir)) { $app->assets->addDir($addonDir . $dir); } } } if ($addonData['enabled']) { $app->addons->add($addonID, ['addedByBearCMS' => true]); } } else { throw new Exception('Addon ' . $addonID . ' not available'); }
/** * * @param string $directory * @param string $id * @throws \Exception * @throws \InvalidArgumentException */ public function update($directory, $id) { if (!is_string($directory)) { throw new \InvalidArgumentException(''); } if (!is_string($id)) { throw new \InvalidArgumentException(''); } if (\BearFramework\Addons::exists($id)) { $options = \BearFramework\Addons::getOptions($id); if (isset($options['releasesUrl'])) { $this->install($directory, $options['releasesUrl']); } } else { throw new \Exception('Addon does not exists'); } }
static function addAddon($data) { $app = App::$instance; if (isset($data['type']) && isset($data['value'])) { $filenameOrUrl = null; if ($data['type'] === 'url') { $filenameOrUrl = $data['value']; } elseif ($data['type'] === 'file') { $filename = $app->data->getFilename('.temp/bearcms/files/' . $data['value']); if (is_file($filename)) { $filenameOrUrl = $filename; } } try { $id = $app->maintenance->addons->getID($filenameOrUrl); } catch (\Exception $e) { return ['error' => 'invalidValue']; } if (\BearFramework\Addons::exists($id)) { $result = $app->data->get(['key' => 'bearcms/addons/addon/' . md5($id) . '.json', 'result' => ['key']]); if (!isset($result['key'])) { // Not managed by Bear CMS return ['error' => 'notManagedByBearCMS']; } } try { $context = $app->getContext(__FILE__); $id = $app->maintenance->addons->install($context->options['addonsDir'], $filenameOrUrl); return $id; } catch (\Exception $e) { return ['error' => 'invalidValue']; } } return null; }