Example #1
0
 public static function activatePlugin($pluginName)
 {
     $activePlugins = self::getActivePluginNames();
     if (in_array($pluginName, $activePlugins)) {
         //already activated
         return true;
     }
     $pluginRecord = self::getPluginRecord($pluginName);
     $config = Model::getPluginConfig($pluginName);
     if (!$config) {
         throw new \Ip\Exception(ipFile('Plugin/' . esc($pluginName) . '/Setup/plugin.json') . ' doesn\'t exist or is incorrect');
     }
     if (empty($config['name']) || $config['name'] !== $pluginName) {
         throw new \Ip\Exception('Plugin name setting in ' . ipFile('Plugin/' . esc($pluginName) . '/Setup/plugin.json') . " doesn't match the folder name.");
     }
     if (empty($config['version'])) {
         throw new \Ip\Exception('Missing plugin version number in ' . ipFile('Plugin/' . esc($pluginName) . '/Setup/plugin.json') . " file.");
     }
     if (!empty($pluginRecord['version']) && (double) $pluginRecord['version'] > (double) $config['version']) {
         throw new \Ip\Exception\Plugin\Setup("You can't downgrade the plugin. Please remove the plugin completely and reinstall if you want to use older version.");
     }
     self::executeSqlIfExists(ipFile('Plugin/' . esc($pluginName) . '/Setup/activate.sql'));
     $workerClass = 'Plugin\\' . $pluginName . '\\Setup\\Worker';
     if (class_exists($workerClass) && method_exists($workerClass, 'activate')) {
         $worker = new $workerClass($config['version']);
         $worker->activate();
     }
     if (!empty($config['title'])) {
         $pluginTitle = $config['title'];
     } else {
         $pluginTitle = $pluginName;
     }
     $keys = array('name' => $pluginName);
     $values = array('title' => $pluginTitle, 'isActive' => 1, 'version' => $config['version']);
     IpDb()->upsert('plugin', $keys, $values);
     // set default plugin options
     if (!empty($config['options'])) {
         static::importDefaultOptions($pluginName, $config['options']);
     }
     ipLog()->info('Ip.pluginActivated: {plugin} {version} activated.', array('plugin' => $pluginName, 'version' => $config['version']));
     ipEvent('ipPluginActivated', array('name' => $pluginName, 'version' => $config['version']));
     return null;
 }