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; }