/**
 * Activate a plugin
 *
 * @param string $plugin Plugin filename (full or relative to plugins directory)
 * @return mixed string if error or true if success
 */
function yourls_activate_plugin($plugin)
{
    // validate file
    $plugin = yourls_plugin_basename($plugin);
    $plugindir = yourls_sanitize_filename(YOURLS_PLUGINDIR);
    if (!yourls_validate_plugin_file($plugindir . '/' . $plugin)) {
        return 'Not a valid plugin file';
    }
    // check not activated already
    global $ydb;
    if (yourls_has_active_plugins() && in_array($plugin, $ydb->plugins)) {
        return 'Plugin already activated';
    }
    // attempt activation. TODO: uber cool fail proof sandbox like in WP.
    ob_start();
    include YOURLS_PLUGINDIR . '/' . $plugin;
    if (ob_get_length() > 0) {
        // there was some output: error
        $output = ob_get_clean();
        return 'Plugin generated expected output. Error was: <br/><pre>' . $output . '</pre>';
    }
    // so far, so good: update active plugin list
    $ydb->plugins[] = $plugin;
    yourls_update_option('active_plugins', $ydb->plugins);
    yourls_do_action('activated_plugin', $plugin);
    yourls_do_action('activated_' . $plugin);
    return true;
}
Beispiel #2
0
<?php

define('YOURLS_ADMIN', true);
require_once dirname(dirname(__FILE__)) . '/includes/load-yourls.php';
yourls_maybe_require_auth();
// Handle plugin administration pages
if (isset($_GET['page']) && !empty($_GET['page'])) {
    yourls_plugin_admin_page($_GET['page']);
}
// Handle activation/deactivation of plugins
if (isset($_GET['action'])) {
    // Check nonce
    yourls_verify_nonce('manage_plugins', $_REQUEST['nonce']);
    // Check plugin file is valid
    if (isset($_GET['plugin']) && yourls_validate_plugin_file(YOURLS_PLUGINDIR . '/' . $_GET['plugin'] . '/plugin.php')) {
        global $ydb;
        // Activate / Deactive
        switch ($_GET['action']) {
            case 'activate':
                $result = yourls_activate_plugin($_GET['plugin'] . '/plugin.php');
                if ($result === true) {
                    yourls_redirect(yourls_admin_url('plugins.php?success=activated'), 302);
                }
                break;
            case 'deactivate':
                $result = yourls_deactivate_plugin($_GET['plugin'] . '/plugin.php');
                if ($result === true) {
                    yourls_redirect(yourls_admin_url('plugins.php?success=deactivated'), 302);
                }
                break;
            default: