web/wp-includes/bookmark.php
changeset 194 32102edaa81b
parent 136 bde1974c263b
child 204 09a1c134465b
--- a/web/wp-includes/bookmark.php	Thu Sep 16 15:45:36 2010 +0000
+++ b/web/wp-includes/bookmark.php	Mon Nov 19 18:26:13 2012 +0100
@@ -7,12 +7,12 @@
  */
 
 /**
- * Retrieve Bookmark data based on ID
+ * Retrieve Bookmark data
  *
  * @since 2.1.0
  * @uses $wpdb Database Object
  *
- * @param int $bookmark_id
+ * @param mixed $bookmark
  * @param string $output Optional. Either OBJECT, ARRAY_N, or ARRAY_A constant
  * @param string $filter Optional, default is 'raw'.
  * @return array|object Type returned depends on $output value.
@@ -33,7 +33,7 @@
 			$_bookmark = & $GLOBALS['link'];
 		} elseif ( ! $_bookmark = wp_cache_get($bookmark, 'bookmark') ) {
 			$_bookmark = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->links WHERE link_id = %d LIMIT 1", $bookmark));
-			$_bookmark->link_category = array_unique( wp_get_object_terms($_bookmark->link_id, 'link_category', 'fields=ids') );
+			$_bookmark->link_category = array_unique( wp_get_object_terms($_bookmark->link_id, 'link_category', array('fields' => 'ids')) );
 			wp_cache_add($_bookmark->link_id, $_bookmark, 'bookmark');
 		}
 	}
@@ -80,21 +80,6 @@
 }
 
 /**
- * Retrieve bookmark data based on ID.
- *
- * @since 2.0.0
- * @deprecated Use get_bookmark()
- * @see get_bookmark()
- *
- * @param int $bookmark_id ID of link
- * @param string $output Either OBJECT, ARRAY_N, or ARRAY_A
- * @return object|array
- */
-function get_link($bookmark_id, $output = OBJECT, $filter = 'raw') {
-	return get_bookmark($bookmark_id, $output, $filter);
-}
-
-/**
  * Retrieves the list of bookmarks
  *
  * Attempts to retrieve from the cache first based on MD5 hash of arguments. If
@@ -116,9 +101,9 @@
  *		links marked as 'invisible'.
  * 'show_updated' - Default is 0 (integer). Will show the time of when the
  *		bookmark was last updated.
- * 'include' - Default is empty string (string). Include other categories
+ * 'include' - Default is empty string (string). Include bookmark ID(s)
  *		separated by commas.
- * 'exclude' - Default is empty string (string). Exclude other categories
+ * 'exclude' - Default is empty string (string). Exclude bookmark ID(s)
  *		separated by commas.
  *
  * @since 2.1.0
@@ -228,19 +213,35 @@
 
 	$orderby = strtolower($orderby);
 	$length = '';
-	switch ($orderby) {
+	switch ( $orderby ) {
 		case 'length':
 			$length = ", CHAR_LENGTH(link_name) AS length";
 			break;
 		case 'rand':
 			$orderby = 'rand()';
 			break;
+		case 'link_id':
+			$orderby = "$wpdb->links.link_id";
+			break;
 		default:
-			$orderby = "link_" . $orderby;
+			$orderparams = array();
+			foreach ( explode(',', $orderby) as $ordparam ) {
+				$ordparam = trim($ordparam);
+				$keys = array( 'link_id', 'link_name', 'link_url', 'link_visible', 'link_rating', 'link_owner', 'link_updated', 'link_notes' );
+				if ( in_array( 'link_' . $ordparam, $keys ) )
+					$orderparams[] = 'link_' . $ordparam;
+				elseif ( in_array( $ordparam, $keys ) )
+					$orderparams[] = $ordparam;
+			}
+			$orderby = implode(',', $orderparams);
 	}
 
-	if ( 'link_id' == $orderby )
-		$orderby = "$wpdb->links.link_id";
+	if ( empty( $orderby ) )
+		$orderby = 'link_name';
+
+	$order = strtoupper( $order );
+	if ( '' !== $order && !in_array( $order, array( 'ASC', 'DESC' ) ) )
+		$order = 'ASC';
 
 	$visible = '';
 	if ( $hide_invisible )
@@ -321,29 +322,35 @@
  * @return mixed The filtered value
  */
 function sanitize_bookmark_field($field, $value, $bookmark_id, $context) {
-	$int_fields = array('link_id', 'link_rating');
-	if ( in_array($field, $int_fields) )
+	switch ( $field ) {
+	case 'link_id' : // ints
+	case 'link_rating' :
 		$value = (int) $value;
-
-	$yesno = array('link_visible');
-	if ( in_array($field, $yesno) )
+		break;
+	case 'link_category' : // array( ints )
+		$value = array_map('absint', (array) $value);
+		// We return here so that the categories aren't filtered.
+		// The 'link_category' filter is for the name of a link category, not an array of a link's link categories
+		return $value;
+		break;
+	case 'link_visible' : // bool stored as Y|N
 		$value = preg_replace('/[^YNyn]/', '', $value);
-
-	if ( 'link_target' == $field ) {
+		break;
+	case 'link_target' : // "enum"
 		$targets = array('_top', '_blank');
 		if ( ! in_array($value, $targets) )
 			$value = '';
+		break;
 	}
 
 	if ( 'raw' == $context )
 		return $value;
 
 	if ( 'edit' == $context ) {
-		$format_to_edit = array('link_notes');
 		$value = apply_filters("edit_$field", $value, $bookmark_id);
 
-		if ( in_array($field, $format_to_edit) ) {
-			$value = format_to_edit($value);
+		if ( 'link_notes' == $field ) {
+			$value = esc_html( $value ); // textarea_escaped
 		} else {
 			$value = esc_attr($value);
 		}
@@ -352,13 +359,13 @@
 	} else {
 		// Use display filters by default.
 		$value = apply_filters($field, $value, $bookmark_id, $context);
+
+		if ( 'attribute' == $context )
+			$value = esc_attr($value);
+		else if ( 'js' == $context )
+			$value = esc_js($value);
 	}
 
-	if ( 'attribute' == $context )
-		$value = esc_attr($value);
-	else if ( 'js' == $context )
-		$value = esc_js($value);
-
 	return $value;
 }
 
@@ -368,9 +375,8 @@
  * @since 2.7.0
  * @uses wp_cache_delete() Deletes the contents of 'get_bookmarks'
  */
-function clean_bookmark_cache($bookmark_id) {
+function clean_bookmark_cache( $bookmark_id ) {
 	wp_cache_delete( $bookmark_id, 'bookmark' );
 	wp_cache_delete( 'get_bookmarks', 'bookmark' );
+	clean_object_term_cache( $bookmark_id, 'link');
 }
-
-?>