function duplicate_post_plugin_activation()
{
    $installed_version = duplicate_post_get_installed_version();
    if ($installed_version == duplicate_post_get_current_version()) {
        // do nothing
    } else {
        // delete old, obsolete options
        delete_option('duplicate_post_admin_user_level');
        delete_option('duplicate_post_create_user_level');
        delete_option('duplicate_post_view_user_level');
        // Add all options, nothing already installed
        add_option('duplicate_post_copy_user_level', '5', 'Default user level to copy posts');
    }
    // Update version number
    update_option('duplicate_post_version', duplicate_post_get_current_version());
}
function duplicate_post_plugin_upgrade()
{
    $installed_version = duplicate_post_get_installed_version();
    if (empty($installed_version)) {
        // first install
        // Add capability to admin and editors
        // Get default roles
        $default_roles = array(3 => 'editor', 8 => 'administrator');
        // Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
        foreach ($default_roles as $level => $name) {
            $role = get_role($name);
            if (!empty($role)) {
                $role->add_cap('copy_posts');
            }
        }
        add_option('duplicate_post_copytitle', '1');
        add_option('duplicate_post_copydate', '0');
        add_option('duplicate_post_copystatus', '0');
        add_option('duplicate_post_copyslug', '1');
        add_option('duplicate_post_copyexcerpt', '1');
        add_option('duplicate_post_copycontent', '1');
        add_option('duplicate_post_copypassword', '0');
        add_option('duplicate_post_copyattachments', '0');
        add_option('duplicate_post_copychildren', '0');
        add_option('duplicate_post_copycomments', '0');
        add_option('duplicate_post_taxonomies_blacklist', array());
        add_option('duplicate_post_blacklist', '');
        add_option('duplicate_post_types_enabled', array('post', 'page'));
        add_option('duplicate_post_show_row', '1');
        add_option('duplicate_post_show_adminbar', '1');
        add_option('duplicate_post_show_submitbox', '1');
    } else {
        if ($installed_version == duplicate_post_get_current_version()) {
            //re-install
            // do nothing
        } else {
            //upgrade form previous version
            // delete old, obsolete options
            delete_option('duplicate_post_admin_user_level');
            delete_option('duplicate_post_create_user_level');
            delete_option('duplicate_post_view_user_level');
            delete_option('dp_notice');
            $installed_version_numbers = explode('.', $installed_version);
            if ($installed_version_numbers[0] == 2) {
                // upgrading from 2.*
                /*
                 * Convert old userlevel option to new capability scheme
                 */
                // Get old duplicate_post_copy_user_level option
                $min_user_level = get_option('duplicate_post_copy_user_level');
                if (!empty($min_user_level)) {
                    // Get default roles
                    $default_roles = array(1 => 'contributor', 2 => 'author', 3 => 'editor', 8 => 'administrator');
                    // Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
                    foreach ($default_roles as $level => $name) {
                        $role = get_role($name);
                        if ($role && $min_user_level <= $level) {
                            $role->add_cap('copy_posts');
                        }
                    }
                    // delete old option
                    delete_option('duplicate_post_copy_user_level');
                }
                add_option('duplicate_post_copytitle', '1');
                add_option('duplicate_post_copydate', '0');
                add_option('duplicate_post_copystatus', '0');
                add_option('duplicate_post_copyslug', '1');
                add_option('duplicate_post_copyexcerpt', '1');
                add_option('duplicate_post_copycontent', '1');
                add_option('duplicate_post_copypassword', '0');
                add_option('duplicate_post_copyattachments', '0');
                add_option('duplicate_post_copychildren', '0');
                add_option('duplicate_post_copycomments', '0');
                add_option('duplicate_post_taxonomies_blacklist', array());
                add_option('duplicate_post_blacklist', '');
                add_option('duplicate_post_types_enabled', array('post', 'page'));
                add_option('duplicate_post_show_row', '1');
                add_option('duplicate_post_show_adminbar', '1');
                add_option('duplicate_post_show_submitbox', '1');
                // show notice about new features
                add_site_option('duplicate_post_show_notice', '1');
            } else {
                if ($installed_version_numbers[0] == 3) {
                    // upgrading from 3.*
                    // hide notice, we assume people already know of new features
                    delete_option('duplicate_post_show_notice', 0);
                    update_site_option('duplicate_post_show_notice', 0);
                }
            }
        }
    }
    // Update version number
    delete_option('duplicate_post_version');
    update_site_option('duplicate_post_version', duplicate_post_get_current_version());
}
function duplicate_post_plugin_upgrade()
{
    $installed_version = duplicate_post_get_installed_version();
    if (empty($installed_version)) {
        // first install
        // Add capability to admin and editors
        // Get default roles
        $default_roles = array(3 => 'editor', 8 => 'administrator');
        // Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
        foreach ($default_roles as $level => $name) {
            $role = get_role($name);
            if (!empty($role)) {
                $role->add_cap('copy_posts');
            }
        }
        add_option('duplicate_post_copyexcerpt', '1');
        add_option('duplicate_post_copyattachments', '0');
        add_option('duplicate_post_copychildren', '0');
        add_option('duplicate_post_copystatus', '0');
        add_option('duplicate_post_taxonomies_blacklist', array());
        add_option('duplicate_post_show_row', '1');
        add_option('duplicate_post_show_adminbar', '1');
        add_option('duplicate_post_show_submitbox', '1');
    } else {
        if ($installed_version == duplicate_post_get_current_version()) {
            //re-install
            // do nothing
        } else {
            //upgrade form previous version
            // delete old, obsolete options
            delete_option('duplicate_post_admin_user_level');
            delete_option('duplicate_post_create_user_level');
            delete_option('duplicate_post_view_user_level');
            delete_option('dp_notice');
            /*
             * Convert old userlevel option to new capability scheme
             */
            // Get old duplicate_post_copy_user_level option
            $min_user_level = get_option('duplicate_post_copy_user_level');
            if (!empty($min_user_level)) {
                // Get default roles
                $default_roles = array(1 => 'contributor', 2 => 'author', 3 => 'editor', 8 => 'administrator');
                // Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
                foreach ($default_roles as $level => $name) {
                    $role = get_role($name);
                    if ($role && $min_user_level <= $level) {
                        $role->add_cap('copy_posts');
                    }
                }
                // delete old option
                delete_option('duplicate_post_copy_user_level');
            }
            add_option('duplicate_post_copyexcerpt', '1');
            add_option('duplicate_post_copyattachments', '0');
            add_option('duplicate_post_copychildren', '0');
            add_option('duplicate_post_copystatus', '0');
            add_option('duplicate_post_taxonomies_blacklist', array());
            add_option('duplicate_post_show_row', '1');
            add_option('duplicate_post_show_adminbar', '1');
            add_option('duplicate_post_show_submitbox', '1');
        }
    }
    // Update version number
    update_option('duplicate_post_version', duplicate_post_get_current_version());
}