wp/wp-admin/includes/bookmark.php
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
equal deleted inserted replaced
-1:000000000000 0:d970ebf37754
       
     1 <?php
       
     2 /**
       
     3  * WordPress Bookmark Administration API
       
     4  *
       
     5  * @package WordPress
       
     6  * @subpackage Administration
       
     7  */
       
     8 
       
     9 /**
       
    10  * Add a link to using values provided in $_POST.
       
    11  *
       
    12  * @since 2.0.0
       
    13  *
       
    14  * @return int|WP_Error Value 0 or WP_Error on failure. The link ID on success.
       
    15  */
       
    16 function add_link() {
       
    17 	return edit_link();
       
    18 }
       
    19 
       
    20 /**
       
    21  * Update or insert a link using values provided in $_POST.
       
    22  *
       
    23  * @since 2.0.0
       
    24  *
       
    25  * @param int $link_id Optional. ID of the link to edit.
       
    26  * @return int|WP_Error Value 0 or WP_Error on failure. The link ID on success.
       
    27  */
       
    28 function edit_link( $link_id = 0 ) {
       
    29 	if ( !current_user_can( 'manage_links' ) )
       
    30 		wp_die( __( 'Cheatin&#8217; uh?' ) );
       
    31 
       
    32 	$_POST['link_url'] = esc_html( $_POST['link_url'] );
       
    33 	$_POST['link_url'] = esc_url($_POST['link_url']);
       
    34 	$_POST['link_name'] = esc_html( $_POST['link_name'] );
       
    35 	$_POST['link_image'] = esc_html( $_POST['link_image'] );
       
    36 	$_POST['link_rss'] = esc_url($_POST['link_rss']);
       
    37 	if ( !isset($_POST['link_visible']) || 'N' != $_POST['link_visible'] )
       
    38 		$_POST['link_visible'] = 'Y';
       
    39 
       
    40 	if ( !empty( $link_id ) ) {
       
    41 		$_POST['link_id'] = $link_id;
       
    42 		return wp_update_link( $_POST );
       
    43 	} else {
       
    44 		return wp_insert_link( $_POST );
       
    45 	}
       
    46 }
       
    47 
       
    48 /**
       
    49  * Retrieve the default link for editing.
       
    50  *
       
    51  * @since 2.0.0
       
    52  *
       
    53  * @return object Default link
       
    54  */
       
    55 function get_default_link_to_edit() {
       
    56 	$link = new stdClass;
       
    57 	if ( isset( $_GET['linkurl'] ) )
       
    58 		$link->link_url = esc_url( wp_unslash( $_GET['linkurl'] ) );
       
    59 	else
       
    60 		$link->link_url = '';
       
    61 
       
    62 	if ( isset( $_GET['name'] ) )
       
    63 		$link->link_name = esc_attr( wp_unslash( $_GET['name'] ) );
       
    64 	else
       
    65 		$link->link_name = '';
       
    66 
       
    67 	$link->link_visible = 'Y';
       
    68 
       
    69 	return $link;
       
    70 }
       
    71 
       
    72 /**
       
    73  * Delete link specified from database.
       
    74  *
       
    75  * @since 2.0.0
       
    76  *
       
    77  * @param int $link_id ID of the link to delete
       
    78  * @return bool True
       
    79  */
       
    80 function wp_delete_link( $link_id ) {
       
    81 	global $wpdb;
       
    82 	/**
       
    83 	 * Fires before a link is deleted.
       
    84 	 *
       
    85 	 * @since 2.0.0
       
    86 	 *
       
    87 	 * @param int $link_id ID of the link to delete.
       
    88 	 */
       
    89 	do_action( 'delete_link', $link_id );
       
    90 
       
    91 	wp_delete_object_term_relationships( $link_id, 'link_category' );
       
    92 
       
    93 	$wpdb->delete( $wpdb->links, array( 'link_id' => $link_id ) );
       
    94 	/**
       
    95 	 * Fires after a link has been deleted.
       
    96 	 *
       
    97 	 * @since 2.2.0
       
    98 	 *
       
    99 	 * @param int $link_id ID of the deleted link.
       
   100 	 */
       
   101 	do_action( 'deleted_link', $link_id );
       
   102 
       
   103 	clean_bookmark_cache( $link_id );
       
   104 
       
   105 	return true;
       
   106 }
       
   107 
       
   108 /**
       
   109  * Retrieves the link categories associated with the link specified.
       
   110  *
       
   111  * @since 2.1.0
       
   112  *
       
   113  * @param int $link_id Link ID to look up
       
   114  * @return array The requested link's categories
       
   115  */
       
   116 function wp_get_link_cats( $link_id = 0 ) {
       
   117 
       
   118 	$cats = wp_get_object_terms( $link_id, 'link_category', array('fields' => 'ids') );
       
   119 
       
   120 	return array_unique( $cats );
       
   121 }
       
   122 
       
   123 /**
       
   124  * Retrieve link data based on ID.
       
   125  *
       
   126  * @since 2.0.0
       
   127  *
       
   128  * @param int $link_id ID of link to retrieve
       
   129  * @return object Link for editing
       
   130  */
       
   131 function get_link_to_edit( $link_id ) {
       
   132 	return get_bookmark( $link_id, OBJECT, 'edit' );
       
   133 }
       
   134 
       
   135 /**
       
   136  * This function inserts/updates links into/in the database.
       
   137  *
       
   138  * @since 2.0.0
       
   139  *
       
   140  * @param array $linkdata Elements that make up the link to insert.
       
   141  * @param bool $wp_error Optional. If true return WP_Error object on failure.
       
   142  * @return int|WP_Error Value 0 or WP_Error on failure. The link ID on success.
       
   143  */
       
   144 function wp_insert_link( $linkdata, $wp_error = false ) {
       
   145 	global $wpdb;
       
   146 
       
   147 	$defaults = array( 'link_id' => 0, 'link_name' => '', 'link_url' => '', 'link_rating' => 0 );
       
   148 
       
   149 	$linkdata = wp_parse_args( $linkdata, $defaults );
       
   150 	$linkdata = sanitize_bookmark( $linkdata, 'db' );
       
   151 
       
   152 	extract( wp_unslash( $linkdata ), EXTR_SKIP );
       
   153 
       
   154 	$update = false;
       
   155 
       
   156 	if ( !empty( $link_id ) )
       
   157 		$update = true;
       
   158 
       
   159 	if ( trim( $link_name ) == '' ) {
       
   160 		if ( trim( $link_url ) != '' ) {
       
   161 			$link_name = $link_url;
       
   162 		} else {
       
   163 			return 0;
       
   164 		}
       
   165 	}
       
   166 
       
   167 	if ( trim( $link_url ) == '' )
       
   168 		return 0;
       
   169 
       
   170 	if ( empty( $link_rating ) )
       
   171 		$link_rating = 0;
       
   172 
       
   173 	if ( empty( $link_image ) )
       
   174 		$link_image = '';
       
   175 
       
   176 	if ( empty( $link_target ) )
       
   177 		$link_target = '';
       
   178 
       
   179 	if ( empty( $link_visible ) )
       
   180 		$link_visible = 'Y';
       
   181 
       
   182 	if ( empty( $link_owner ) )
       
   183 		$link_owner = get_current_user_id();
       
   184 
       
   185 	if ( empty( $link_notes ) )
       
   186 		$link_notes = '';
       
   187 
       
   188 	if ( empty( $link_description ) )
       
   189 		$link_description = '';
       
   190 
       
   191 	if ( empty( $link_rss ) )
       
   192 		$link_rss = '';
       
   193 
       
   194 	if ( empty( $link_rel ) )
       
   195 		$link_rel = '';
       
   196 
       
   197 	// Make sure we set a valid category
       
   198 	if ( ! isset( $link_category ) || 0 == count( $link_category ) || !is_array( $link_category ) ) {
       
   199 		$link_category = array( get_option( 'default_link_category' ) );
       
   200 	}
       
   201 
       
   202 	if ( $update ) {
       
   203 		if ( false === $wpdb->update( $wpdb->links, compact('link_url', 'link_name', 'link_image', 'link_target', 'link_description', 'link_visible', 'link_rating', 'link_rel', 'link_notes', 'link_rss'), compact('link_id') ) ) {
       
   204 			if ( $wp_error )
       
   205 				return new WP_Error( 'db_update_error', __( 'Could not update link in the database' ), $wpdb->last_error );
       
   206 			else
       
   207 				return 0;
       
   208 		}
       
   209 	} else {
       
   210 		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') ) ) {
       
   211 			if ( $wp_error )
       
   212 				return new WP_Error( 'db_insert_error', __( 'Could not insert link into the database' ), $wpdb->last_error );
       
   213 			else
       
   214 				return 0;
       
   215 		}
       
   216 		$link_id = (int) $wpdb->insert_id;
       
   217 	}
       
   218 
       
   219 	wp_set_link_cats( $link_id, $link_category );
       
   220 
       
   221 	if ( $update ) {
       
   222 		/**
       
   223 		 * Fires after a link was updated in the database.
       
   224 		 *
       
   225 		 * @since 2.0.0
       
   226 		 *
       
   227 		 * @param int $link_id ID of the link that was updated.
       
   228 		 */
       
   229 		do_action( 'edit_link', $link_id );
       
   230 	} else {
       
   231 		/**
       
   232 		 * Fires after a link was added to the database.
       
   233 		 *
       
   234 		 * @since 2.0.0
       
   235 		 *
       
   236 		 * @param int $link_id ID of the link that was added.
       
   237 		 */
       
   238 		do_action( 'add_link', $link_id );
       
   239 	}
       
   240 	clean_bookmark_cache( $link_id );
       
   241 
       
   242 	return $link_id;
       
   243 }
       
   244 
       
   245 /**
       
   246  * Update link with the specified link categories.
       
   247  *
       
   248  * @since 2.1.0
       
   249  *
       
   250  * @param int $link_id ID of link to update
       
   251  * @param array $link_categories Array of categories to
       
   252  */
       
   253 function wp_set_link_cats( $link_id = 0, $link_categories = array() ) {
       
   254 	// If $link_categories isn't already an array, make it one:
       
   255 	if ( !is_array( $link_categories ) || 0 == count( $link_categories ) )
       
   256 		$link_categories = array( get_option( 'default_link_category' ) );
       
   257 
       
   258 	$link_categories = array_map( 'intval', $link_categories );
       
   259 	$link_categories = array_unique( $link_categories );
       
   260 
       
   261 	wp_set_object_terms( $link_id, $link_categories, 'link_category' );
       
   262 
       
   263 	clean_bookmark_cache( $link_id );
       
   264 }
       
   265 
       
   266 /**
       
   267  * Update a link in the database.
       
   268  *
       
   269  * @since 2.0.0
       
   270  *
       
   271  * @param array $linkdata Link data to update.
       
   272  * @return int|WP_Error Value 0 or WP_Error on failure. The updated link ID on success.
       
   273  */
       
   274 function wp_update_link( $linkdata ) {
       
   275 	$link_id = (int) $linkdata['link_id'];
       
   276 
       
   277 	$link = get_bookmark( $link_id, ARRAY_A );
       
   278 
       
   279 	// Escape data pulled from DB.
       
   280 	$link = wp_slash( $link );
       
   281 
       
   282 	// Passed link category list overwrites existing category list if not empty.
       
   283 	if ( isset( $linkdata['link_category'] ) && is_array( $linkdata['link_category'] )
       
   284 			 && 0 != count( $linkdata['link_category'] ) )
       
   285 		$link_cats = $linkdata['link_category'];
       
   286 	else
       
   287 		$link_cats = $link['link_category'];
       
   288 
       
   289 	// Merge old and new fields with new fields overwriting old ones.
       
   290 	$linkdata = array_merge( $link, $linkdata );
       
   291 	$linkdata['link_category'] = $link_cats;
       
   292 
       
   293 	return wp_insert_link( $linkdata );
       
   294 }
       
   295 
       
   296 /**
       
   297  * @since 3.5.0
       
   298  * @access private
       
   299  */
       
   300 function wp_link_manager_disabled_message() {
       
   301 	global $pagenow;
       
   302 	if ( 'link-manager.php' != $pagenow && 'link-add.php' != $pagenow && 'link.php' != $pagenow )
       
   303 		return;
       
   304 
       
   305 	add_filter( 'pre_option_link_manager_enabled', '__return_true', 100 );
       
   306 	$really_can_manage_links = current_user_can( 'manage_links' );
       
   307 	remove_filter( 'pre_option_link_manager_enabled', '__return_true', 100 );
       
   308 
       
   309 	if ( $really_can_manage_links && current_user_can( 'install_plugins' ) ) {
       
   310 		$link = network_admin_url( 'plugin-install.php?tab=search&amp;s=Link+Manager' );
       
   311 		wp_die( sprintf( __( 'If you are looking to use the link manager, please install the <a href="%s">Link Manager</a> plugin.' ), $link ) );
       
   312 	}
       
   313 
       
   314 	wp_die( __( 'You do not have sufficient permissions to edit the links for this site.' ) );
       
   315 }
       
   316 add_action( 'admin_page_access_denied', 'wp_link_manager_disabled_message' );