Make WordPress Core


Ignore:
Timestamp:
08/20/2007 10:50:04 PM (17 years ago)
Author:
ryan
Message:

bookmark sanitizer funcs and default filter cleanup. see #4546

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/bookmark.php

    r5897 r5906  
    11<?php
    22
    3 function get_bookmark($bookmark_id, $output = OBJECT) {
     3function get_bookmark($bookmark_id, $output = OBJECT, $filter = 'raw') {
    44    global $wpdb;
    55
     
    88    $link->link_category = wp_get_link_cats($bookmark_id);
    99
     10    $link = sanitize_bookmark($link, $filter);
     11   
    1012    if ( $output == OBJECT ) {
    1113        return $link;
     
    1719        return $link;
    1820    }
     21}
     22
     23function get_bookmark_field( $field, $bookmark, $context = 'display' ) {
     24    $bookmark = (int) $bookmark;
     25    $bookmark = get_bookmark( $bookmark );
     26
     27    if ( is_wp_error($bookmark) )
     28        return $bookmark;
     29
     30    if ( !is_object($bookmark) )
     31        return '';
     32
     33    if ( !isset($bookmark->$field) )
     34        return '';
     35
     36    return sanitize_bookmark_field($field, $bookmark->$field, $bookmark->link_id, $context);
    1937}
    2038
     
    143161}
    144162
     163function sanitize_bookmark($bookmark, $context = 'display') {
     164    $fields = array('link_id', 'link_url', 'link_name', 'link_image', 'link_target', 'link_category',
     165        'link_description', 'link_visible', 'link_owner', 'link_rating', 'link_updated',
     166        'link_rel', 'link_notes', 'link_rss', );
     167
     168    $do_object = false;
     169    if ( is_object($bookmark) )
     170        $do_object = true;
     171
     172    foreach ( $fields as $field ) {
     173        if ( $do_object )
     174            $bookmark->$field = sanitize_bookmark_field($field, $bookmark->$field, $bookmark->link_id, $context);
     175        else
     176            $bookmark[$field] = sanitize_bookmark_field($field, $bookmark[$field], $bookmark['link_id'], $context);
     177    }
     178
     179    return $bookmark;
     180}
     181
     182function sanitize_bookmark_field($field, $value, $bookmark_id, $context) {
     183    $int_fields = array('link_id', 'link_rating');
     184    if ( in_array($field, $int_fields) )
     185        $value = (int) $value;
     186
     187    $yesno = array('link_visible');
     188    if ( in_array($field, $yesno) )
     189        $value = preg_replace('/[^YNyn]/', '', $value);
     190
     191    if ( 'link_target' == $field ) {
     192        $targets = array('_top', '_blank');
     193        if ( ! in_array($value, $targets) )
     194            $value = '';       
     195    }
     196
     197    if ( 'raw' == $context )
     198        return $value;
     199
     200    if ( 'edit' == $context ) {
     201        $format_to_edit = array('link_notes');
     202        $value = apply_filters("edit_$field", $value, $bookmark_id);
     203
     204        if ( in_array($field, $format_to_edit) ) {
     205            $value = format_to_edit($value);
     206        } else {
     207            $value = attribute_escape($value);
     208        }
     209    } else if ( 'db' == $context ) {
     210        $value = apply_filters("pre_$field", $value);
     211    } else {
     212        // Use display filters by default.
     213        $value = apply_filters($field, $value, $bookmark_id, $context);
     214    }
     215
     216    if ( 'attribute' == $context )
     217        $value = attribute_escape($value);
     218    else if ( 'js' == $context )
     219        $value = js_escape($value);
     220
     221    return $value;
     222}
     223
    145224function delete_get_bookmark_cache() {
    146225    wp_cache_delete( 'get_bookmarks', 'bookmark' );
Note: See TracChangeset for help on using the changeset viewer.