2006-06-04 22:12:59 -04:00
< ? php
2007-08-20 18:50:04 -04:00
function get_bookmark ( $bookmark_id , $output = OBJECT , $filter = 'raw' ) {
2006-06-04 22:12:59 -04:00
global $wpdb ;
2007-09-27 03:34:15 -04:00
$link = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->links WHERE link_id = %d LIMIT 1 " , $bookmark_id ));
2007-12-04 18:59:16 -05:00
$link -> link_category = array_unique ( wp_get_object_terms ( $link -> link_id , 'link_category' , 'fields=ids' ) );
2006-06-04 22:12:59 -04:00
2007-08-20 18:50:04 -04:00
$link = sanitize_bookmark ( $link , $filter );
2007-09-03 19:19:20 -04:00
2006-06-04 22:12:59 -04:00
if ( $output == OBJECT ) {
return $link ;
} elseif ( $output == ARRAY_A ) {
return get_object_vars ( $link );
} elseif ( $output == ARRAY_N ) {
return array_values ( get_object_vars ( $link ));
} else {
return $link ;
}
}
2007-08-20 18:50:04 -04:00
function get_bookmark_field ( $field , $bookmark , $context = 'display' ) {
$bookmark = ( int ) $bookmark ;
$bookmark = get_bookmark ( $bookmark );
if ( is_wp_error ( $bookmark ) )
return $bookmark ;
if ( ! is_object ( $bookmark ) )
return '' ;
if ( ! isset ( $bookmark -> $field ) )
return '' ;
return sanitize_bookmark_field ( $field , $bookmark -> $field , $bookmark -> link_id , $context );
}
2006-06-04 22:12:59 -04:00
// Deprecate
function get_link ( $bookmark_id , $output = OBJECT ) {
2006-11-24 17:55:28 -05:00
return get_bookmark ( $bookmark_id , $output );
2006-06-04 22:12:59 -04:00
}
function get_bookmarks ( $args = '' ) {
global $wpdb ;
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
$defaults = array (
2007-09-03 19:32:58 -04:00
'orderby' => 'name' , 'order' => 'ASC' ,
'limit' => - 1 , 'category' => '' ,
'category_name' => '' , 'hide_invisible' => 1 ,
'show_updated' => 0 , 'include' => '' ,
2007-05-10 23:10:05 -04:00
'exclude' => ''
);
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
$r = wp_parse_args ( $args , $defaults );
2007-06-14 18:45:40 -04:00
extract ( $r , EXTR_SKIP );
2006-06-04 22:12:59 -04:00
2006-11-23 12:04:05 -05:00
$key = md5 ( serialize ( $r ) );
if ( $cache = wp_cache_get ( 'get_bookmarks' , 'bookmark' ) )
if ( isset ( $cache [ $key ] ) )
return apply_filters ( 'get_bookmarks' , $cache [ $key ], $r );
2006-06-04 22:12:59 -04:00
$inclusions = '' ;
if ( ! empty ( $include ) ) {
$exclude = '' ; //ignore exclude, category, and category_name params if using include
$category = '' ;
$category_name = '' ;
$inclinks = preg_split ( '/[\s,]+/' , $include );
if ( count ( $inclinks ) ) {
foreach ( $inclinks as $inclink ) {
if ( empty ( $inclusions ))
$inclusions = ' AND ( link_id = ' . intval ( $inclink ) . ' ' ;
else
$inclusions .= ' OR link_id = ' . intval ( $inclink ) . ' ' ;
}
}
}
2006-11-24 17:55:28 -05:00
if ( ! empty ( $inclusions ))
2006-06-04 22:12:59 -04:00
$inclusions .= ')' ;
$exclusions = '' ;
if ( ! empty ( $exclude ) ) {
$exlinks = preg_split ( '/[\s,]+/' , $exclude );
if ( count ( $exlinks ) ) {
foreach ( $exlinks as $exlink ) {
if ( empty ( $exclusions ))
$exclusions = ' AND ( link_id <> ' . intval ( $exlink ) . ' ' ;
else
$exclusions .= ' AND link_id <> ' . intval ( $exlink ) . ' ' ;
}
}
}
2006-11-24 17:55:28 -05:00
if ( ! empty ( $exclusions ))
2006-06-04 22:12:59 -04:00
$exclusions .= ')' ;
2007-02-27 10:24:54 -05:00
2006-06-04 22:12:59 -04:00
if ( ! empty ( $category_name ) ) {
2007-09-03 19:32:58 -04:00
if ( $category = get_term_by ( 'name' , $category_name , 'link_category' ) )
2007-05-27 13:21:04 -04:00
$category = $category -> term_id ;
2006-06-04 22:12:59 -04:00
}
$category_query = '' ;
$join = '' ;
if ( ! empty ( $category ) ) {
$incategories = preg_split ( '/[\s,]+/' , $category );
if ( count ( $incategories ) ) {
foreach ( $incategories as $incat ) {
if ( empty ( $category_query ))
2007-05-27 13:21:04 -04:00
$category_query = ' AND ( tt.term_id = ' . intval ( $incat ) . ' ' ;
2006-06-04 22:12:59 -04:00
else
2007-05-27 13:21:04 -04:00
$category_query .= ' OR tt.term_id = ' . intval ( $incat ) . ' ' ;
2006-06-04 22:12:59 -04:00
}
}
}
if ( ! empty ( $category_query )) {
2007-05-27 13:21:04 -04:00
$category_query .= " ) AND taxonomy = 'link_category' " ;
2007-10-11 13:43:49 -04:00
$join = " INNER JOIN $wpdb->term_relationships AS tr ON ( $wpdb->links .link_id = tr.object_id) INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id " ;
2006-06-04 22:12:59 -04:00
}
2006-08-30 17:46:31 -04:00
if ( get_option ( 'links_recently_updated_time' )) {
$recently_updated_test = " , IF (DATE_ADD(link_updated, INTERVAL " . get_option ( 'links_recently_updated_time' ) . " MINUTE) >= NOW(), 1,0) as recently_updated " ;
2006-06-04 22:12:59 -04:00
} else {
$recently_updated_test = '' ;
}
if ( $show_updated ) {
$get_updated = " , UNIX_TIMESTAMP(link_updated) AS link_updated_f " ;
}
$orderby = strtolower ( $orderby );
$length = '' ;
switch ( $orderby ) {
case 'length' :
$length = " , CHAR_LENGTH(link_name) AS length " ;
break ;
case 'rand' :
$orderby = 'rand()' ;
break ;
default :
$orderby = " link_ " . $orderby ;
}
if ( 'link_id' == $orderby )
$orderby = " $wpdb->links .link_id " ;
$visible = '' ;
if ( $hide_invisible )
$visible = " AND link_visible = 'Y' " ;
$query = " SELECT * $length $recently_updated_test $get_updated FROM $wpdb->links $join WHERE 1=1 $visible $category_query " ;
$query .= " $exclusions $inclusions " ;
$query .= " ORDER BY $orderby $order " ;
if ( $limit != - 1 )
$query .= " LIMIT $limit " ;
$results = $wpdb -> get_results ( $query );
2006-11-23 12:04:05 -05:00
$cache [ $key ] = $results ;
2007-08-16 14:12:12 -04:00
wp_cache_set ( 'get_bookmarks' , $cache , 'bookmark' );
2006-11-23 12:04:05 -05:00
2006-06-04 22:12:59 -04:00
return apply_filters ( 'get_bookmarks' , $results , $r );
}
2007-08-20 18:50:04 -04:00
function sanitize_bookmark ( $bookmark , $context = 'display' ) {
$fields = array ( 'link_id' , 'link_url' , 'link_name' , 'link_image' , 'link_target' , 'link_category' ,
'link_description' , 'link_visible' , 'link_owner' , 'link_rating' , 'link_updated' ,
'link_rel' , 'link_notes' , 'link_rss' , );
$do_object = false ;
if ( is_object ( $bookmark ) )
$do_object = true ;
foreach ( $fields as $field ) {
if ( $do_object )
$bookmark -> $field = sanitize_bookmark_field ( $field , $bookmark -> $field , $bookmark -> link_id , $context );
else
2007-09-03 19:32:58 -04:00
$bookmark [ $field ] = sanitize_bookmark_field ( $field , $bookmark [ $field ], $bookmark [ 'link_id' ], $context );
2007-08-20 18:50:04 -04:00
}
return $bookmark ;
}
function sanitize_bookmark_field ( $field , $value , $bookmark_id , $context ) {
$int_fields = array ( 'link_id' , 'link_rating' );
if ( in_array ( $field , $int_fields ) )
$value = ( int ) $value ;
$yesno = array ( 'link_visible' );
if ( in_array ( $field , $yesno ) )
$value = preg_replace ( '/[^YNyn]/' , '' , $value );
if ( 'link_target' == $field ) {
$targets = array ( '_top' , '_blank' );
if ( ! in_array ( $value , $targets ) )
2007-09-03 19:32:58 -04:00
$value = '' ;
2007-08-20 18:50:04 -04:00
}
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 );
} else {
$value = attribute_escape ( $value );
}
} else if ( 'db' == $context ) {
$value = apply_filters ( " pre_ $field " , $value );
} else {
// Use display filters by default.
$value = apply_filters ( $field , $value , $bookmark_id , $context );
}
if ( 'attribute' == $context )
$value = attribute_escape ( $value );
else if ( 'js' == $context )
$value = js_escape ( $value );
return $value ;
}
2006-11-23 12:04:05 -05:00
function delete_get_bookmark_cache () {
wp_cache_delete ( 'get_bookmarks' , 'bookmark' );
}
add_action ( 'add_link' , 'delete_get_bookmark_cache' );
add_action ( 'edit_link' , 'delete_get_bookmark_cache' );
add_action ( 'delete_link' , 'delete_get_bookmark_cache' );
2007-05-27 13:45:31 -04:00
?>