<?php

function add_link()
{
    return edit_link();
}
function edit_link($link_id = 0)
{
    if (!current_user_can('manage_links')) {
        wp_die('<h1>' . __('You need a higher level of permission.') . '</h1>' . '<p>' . __('Sorry, you are not allowed to edit the links for this site.') . '</p>', 403);
    }
    $_POST['link_url'] = esc_html($_POST['link_url']);
    $_POST['link_url'] = esc_url($_POST['link_url']);
    $_POST['link_name'] = esc_html($_POST['link_name']);
    $_POST['link_image'] = esc_html($_POST['link_image']);
    $_POST['link_rss'] = esc_url($_POST['link_rss']);
    if (!isset($_POST['link_visible']) || 'N' !== $_POST['link_visible']) {
        $_POST['link_visible'] = 'Y';
    }
    if (!empty($link_id)) {
        $_POST['link_id'] = $link_id;
        return wp_update_link($_POST);
    } else {
        return wp_insert_link($_POST);
    }
}
function get_default_link_to_edit()
{
    $link = new stdClass();
    if (isset($_GET['linkurl'])) {
        $link->link_url = esc_url(wp_unslash($_GET['linkurl']));
    } else {
        $link->link_url = '';
    }
    if (isset($_GET['name'])) {
        $link->link_name = esc_attr(wp_unslash($_GET['name']));
    } else {
        $link->link_name = '';
    }
    $link->link_visible = 'Y';
    return $link;
}
function wp_delete_link($link_id)
{
    global $wpdb;
    do_action('delete_link', $link_id);
    wp_delete_object_term_relationships($link_id, 'link_category');
    $wpdb->delete($wpdb->links, array('link_id' => $link_id));
    do_action('deleted_link', $link_id);
    clean_bookmark_cache($link_id);
    return true;
}
function wp_get_link_cats($link_id = 0)
{
    $cats = wp_get_object_terms($link_id, 'link_category', array('fields' => 'ids'));
    return array_unique($cats);
}
function get_link_to_edit($link)
{
    return get_bookmark($link, OBJECT, 'edit');
}
function wp_insert_link($linkdata, $wp_error = false)
{
    global $wpdb;
    $defaults = array('link_id' => 0, 'link_name' => '', 'link_url' => '', 'link_rating' => 0);
    $parsed_args = wp_parse_args($linkdata, $defaults);
    $parsed_args = wp_unslash(sanitize_bookmark($parsed_args, 'db'));
    $link_id = $parsed_args['link_id'];
    $link_name = $parsed_args['link_name'];
    $link_url = $parsed_args['link_url'];
    $update = false;
    if (!empty($link_id)) {
        $update = true;
    }
    if ('' === trim($link_name)) {
        if ('' !== trim($link_url)) {
            $link_name = $link_url;
        } else {
            return 0;
        }
    }
    if ('' === trim($link_url)) {
        return 0;
    }
    $link_rating = !empty($parsed_args['link_rating']) ? $parsed_args['link_rating'] : 0;
    $link_image = !empty($parsed_args['link_image']) ? $parsed_args['link_image'] : '';
    $link_target = !empty($parsed_args['link_target']) ? $parsed_args['link_target'] : '';
    $link_visible = !empty($parsed_args['link_visible']) ? $parsed_args['link_visible'] : 'Y';
    $link_owner = !empty($parsed_args['link_owner']) ? $parsed_args['link_owner'] : get_current_user_id();
    $link_notes = !empty($parsed_args['link_notes']) ? $parsed_args['link_notes'] : '';
    $link_description = !empty($parsed_args['link_description']) ? $parsed_args['link_description'] : '';
    $link_rss = !empty($parsed_args['link_rss']) ? $parsed_args['link_rss'] : '';
    $link_rel = !empty($parsed_args['link_rel']) ? $parsed_args['link_rel'] : '';
    $link_category = !empty($parsed_args['link_category']) ? $parsed_args['link_category'] : array();
    if (!is_array($link_category) || 0 === count($link_category)) {
        $link_category = array(get_option('default_link_category'));
    }
    if ($update) {
        if (false === $wpdb->update($wpdb->links, compact('link_url', 'link_name', 'link_image', 'link_target', 'link_description', 'link_visible', 'link_owner', 'link_rating', 'link_rel', 'link_notes', 'link_rss'), compact('link_id'))) {
            if ($wp_error) {
                return new WP_Error('db_update_error', __('Could not update link in the database.'), $wpdb->last_error);
            } else {
                return 0;
            }
        }
    } else {
        if (false === $wpdb->insert($wpdb->links, compact('link_url', 'link_name', 'link_image', 'link_target', 'link_description', 'link_visible', 'link_owner', 'link_rating', 'link_rel', 'link_notes', 'link_rss'))) {
            if ($wp_error) {
                return new WP_Error('db_insert_error', __('Could not insert link into the database.'), $wpdb->last_error);
            } else {
                return 0;
            }
        }
        $link_id = (int) $wpdb->insert_id;
    }
    wp_set_link_cats($link_id, $link_category);
    if ($update) {
        do_action('edit_link', $link_id);
    } else {
        do_action('add_link', $link_id);
    }
    clean_bookmark_cache($link_id);
    return $link_id;
}
function wp_set_link_cats($link_id = 0, $link_categories = array())
{
    if (!is_array($link_categories) || 0 === count($link_categories)) {
        $link_categories = array(get_option('default_link_category'));
    }
    $link_categories = array_map('intval', $link_categories);
    $link_categories = array_unique($link_categories);
    wp_set_object_terms($link_id, $link_categories, 'link_category');
    clean_bookmark_cache($link_id);
}
function wp_update_link($linkdata)
{
    $link_id = (int) $linkdata['link_id'];
    $link = get_bookmark($link_id, ARRAY_A);
    $link = wp_slash($link);
    if (isset($linkdata['link_category']) && is_array($linkdata['link_category']) && count($linkdata['link_category']) > 0) {
        $link_cats = $linkdata['link_category'];
    } else {
        $link_cats = $link['link_category'];
    }
    $linkdata = array_merge($link, $linkdata);
    $linkdata['link_category'] = $link_cats;
    return wp_insert_link($linkdata);
}
function wp_link_manager_disabled_message()
{
    global $pagenow;
    if (!in_array($pagenow, array('link-manager.php', 'link-add.php', 'link.php'), true)) {
        return;
    }
    add_filter('pre_option_link_manager_enabled', '__return_true', 100);
    $really_can_manage_links = current_user_can('manage_links');
    remove_filter('pre_option_link_manager_enabled', '__return_true', 100);
    if ($really_can_manage_links && current_user_can('install_plugins')) {
        $link = network_admin_url('plugin-install.php?tab=search&amp;s=Link+Manager');
        wp_die(sprintf(__('If you are looking to use the link manager, please install the <a href="%s">Link Manager</a> plugin.'), $link));
    }
    wp_die(__('Sorry, you are not allowed to edit the links for this site.'));
}