ASong2U_Web/wp-content/plugins/buddypress/bp-forums/bbpress/bb-includes/functions.bb-meta.php

941 lines
24 KiB
PHP

<?php
/* Options/Meta */
/* Internal */
function bb_sanitize_meta_key( $key )
{
return preg_replace( '|[^a-z0-9_]|i', '', $key );
}
/**
* Adds and updates meta data in the database
*
* @internal
*/
function bb_update_meta( $object_id = 0, $meta_key, $meta_value, $type, $global = false )
{
global $bbdb;
if ( !is_numeric( $object_id ) || empty( $object_id ) && !$global ) {
return false;
}
$cache_object_id = $object_id = (int) $object_id;
switch ( $type ) {
case 'option':
$object_type = 'bb_option';
break;
case 'user' :
global $wp_users_object;
$id = $object_id;
$return = $wp_users_object->update_meta( compact( 'id', 'meta_key', 'meta_value' ) );
if ( is_wp_error( $return ) ) {
return false;
}
return $return;
break;
case 'forum' :
$object_type = 'bb_forum';
break;
case 'topic' :
$object_type = 'bb_topic';
break;
case 'post' :
$object_type = 'bb_post';
break;
default :
$object_type = $type;
break;
}
$meta_key = bb_sanitize_meta_key( $meta_key );
$meta_tuple = compact( 'object_type', 'object_id', 'meta_key', 'meta_value', 'type' );
$meta_tuple = apply_filters( 'bb_update_meta', $meta_tuple );
extract( $meta_tuple, EXTR_OVERWRITE );
$meta_value = $_meta_value = maybe_serialize( $meta_value );
$meta_value = maybe_unserialize( $meta_value );
$cur = $bbdb->get_row( $bbdb->prepare( "SELECT * FROM `$bbdb->meta` WHERE `object_type` = %s AND `object_id` = %d AND `meta_key` = %s", $object_type, $object_id, $meta_key ) );
if ( !$cur ) {
$bbdb->query( $bbdb->prepare(
"INSERT INTO `$bbdb->meta` ( `object_type`, `object_id`, `meta_key`, `meta_value` ) VALUES( %s, %d, %s, %s )
ON DUPLICATE KEY UPDATE `meta_value` = VALUES( `meta_value` )",
$object_type, $object_id, $meta_key, $_meta_value
) );
} elseif ( $cur->meta_value != $meta_value ) {
$bbdb->update( $bbdb->meta, array( 'meta_value' => $_meta_value), array( 'object_type' => $object_type, 'object_id' => $object_id, 'meta_key' => $meta_key ) );
}
if ( $object_type === 'bb_option' ) {
$cache_object_id = $meta_key;
wp_cache_delete( $cache_object_id, 'bb_option_not_set' );
}
wp_cache_delete( $cache_object_id, $object_type );
if ( !$cur ) {
return true;
}
}
/**
* Deletes meta data from the database
*
* @internal
*/
function bb_delete_meta( $object_id = 0, $meta_key, $meta_value, $type, $global = false )
{
global $bbdb;
if ( !is_numeric( $object_id ) || empty( $object_id ) && !$global ) {
return false;
}
$cache_object_id = $object_id = (int) $object_id;
switch ( $type ) {
case 'option':
$object_type = 'bb_option';
break;
case 'user':
global $wp_users_object;
$id = $object_id;
return $wp_users_object->delete_meta( compact( 'id', 'meta_key', 'meta_value' ) );
break;
case 'forum':
$object_type = 'bb_forum';
break;
case 'topic':
$object_type = 'bb_topic';
break;
case 'post':
$object_type = 'bb_post';
break;
default:
$object_type = $type;
break;
}
$meta_key = bb_sanitize_meta_key( $meta_key );
$meta_tuple = compact( 'object_type', 'object_id', 'meta_key', 'meta_value', 'type' );
$meta_tuple = apply_filters( 'bb_delete_meta', $meta_tuple );
extract( $meta_tuple, EXTR_OVERWRITE );
$meta_value = maybe_serialize( $meta_value );
if ( empty( $meta_value ) ) {
$meta_sql = $bbdb->prepare( "SELECT `meta_id` FROM `$bbdb->meta` WHERE `object_type` = %s AND `object_id` = %d AND `meta_key` = %s", $object_type, $object_id, $meta_key );
} else {
$meta_sql = $bbdb->prepare( "SELECT `meta_id` FROM `$bbdb->meta` WHERE `object_type` = %s AND `object_id` = %d AND `meta_key` = %s AND `meta_value` = %s", $object_type, $object_id, $meta_key, $meta_value );
}
if ( !$meta_id = $bbdb->get_var( $meta_sql ) ) {
return false;
}
$bbdb->query( $bbdb->prepare( "DELETE FROM `$bbdb->meta` WHERE `meta_id` = %d", $meta_id ) );
if ( $object_type == 'bb_option' ) {
$cache_object_id = $meta_key;
wp_cache_delete( $cache_object_id, 'bb_option_not_set' );
}
wp_cache_delete( $cache_object_id, $object_type );
return true;
}
/**
* Adds an objects meta data to the object
*
* This is the only function that should add to user / topic - NOT bbdb::prepared
*
* @internal
*/
function bb_append_meta( $object, $type )
{
global $bbdb;
switch ( $type ) {
case 'user':
global $wp_users_object;
return $wp_users_object->append_meta( $object );
break;
case 'forum':
$object_id_column = 'forum_id';
$object_type = 'bb_forum';
$slug = 'forum_slug';
break;
case 'topic':
$object_id_column = 'topic_id';
$object_type = 'bb_topic';
$slug = 'topic_slug';
break;
case 'post':
$object_id_column = 'post_id';
$object_type = 'bb_post';
$slug = false;
break;
}
if ( is_array( $object ) && count( $object ) ) {
$trans = array();
foreach ( array_keys( $object ) as $i ) {
$trans[$object[$i]->$object_id_column] =& $object[$i];
}
$ids = array_map( 'intval', array_keys( $trans ) );
$query_ids = array();
$cached_objects = array();
$position = 0;
foreach ( $ids as $_id ) {
if ( false !== $_cached_object = wp_cache_get( $_id, $object_type ) ) {
$cached_objects[$position] = $_cached_object;
} else {
$query_ids[$position] = $_id;
}
$position++;
}
if ( !count( $query_ids ) ) {
return $cached_objects;
}
$_query_ids = $query_ids;
sort( $_query_ids );
$_query_ids = join( ',', $_query_ids );
if ( $metas = $bbdb->get_results( "SELECT `object_id`, `meta_key`, `meta_value` FROM `$bbdb->meta` WHERE `object_type` = '$object_type' AND `object_id` IN ($_query_ids) /* bb_append_meta */" ) ) {
usort( $metas, '_bb_append_meta_sort' );
foreach ( $metas as $meta ) {
$trans[$meta->object_id]->{$meta->meta_key} = maybe_unserialize( $meta->meta_value );
if ( strpos($meta->meta_key, $bbdb->prefix) === 0 ) {
$trans[$meta->object_id]->{substr($meta->meta_key, strlen($bbdb->prefix))} = maybe_unserialize( $meta->meta_value );
}
}
}
foreach ( $query_ids as $position => $i ) {
$cached_objects[$position] = $trans[$i];
wp_cache_add( $i, $trans[$i], $object_type );
if ( $slug ) {
wp_cache_add( $trans[$i]->$slug, $i, 'bb_' . $slug );
}
}
if ( !count( $cached_objects ) ) {
return $object;
}
ksort( $cached_objects );
return $cached_objects;
} elseif ( $object ) {
if ( false !== $cached_object = wp_cache_get( $object->$object_id_column, $object_type ) ) {
return $cached_object;
}
if ( $metas = $bbdb->get_results( $bbdb->prepare( "SELECT `object_id`, `meta_key`, `meta_value` FROM `$bbdb->meta` WHERE `object_type` = '$object_type' AND `object_id` = %d /* bb_append_meta */", $object->$object_id_column ) ) ) {
usort( $metas, '_bb_append_meta_sort' );
foreach ( $metas as $meta ) {
$object->{$meta->meta_key} = maybe_unserialize( $meta->meta_value );
if ( strpos( $meta->meta_key, $bbdb->prefix ) === 0 ) {
$object->{substr( $meta->meta_key, strlen( $bbdb->prefix ) )} = $object->{$meta->meta_key};
}
}
}
if ( $object->$object_id_column ) {
wp_cache_add( $object->$object_id_column, $object, $object_type );
if ( $slug ) {
wp_cache_add( $object->$slug, $object->$object_id_column, 'bb_' . $slug );
}
}
return $object;
}
}
/**
* Sorts meta keys by length to ensure $appended_object->{$bbdb->prefix} key overwrites $appended_object->key as desired
*
* @internal
*/
function _bb_append_meta_sort( $a, $b )
{
return strlen( $a->meta_key ) - strlen( $b->meta_key );
}
/* Options */
/**
* Echoes the requested bbPress option by calling bb_get_option()
*
* @param string The option to be echoed
* @return void
*/
function bb_option( $option )
{
echo apply_filters( 'bb_option_' . $option, bb_get_option( $option ) );
}
/**
* Returns the requested bbPress option from the meta table or the $bb object
*
* @param string The option to be echoed
* @return mixed The value of the option
*/
function bb_get_option( $option )
{
// Allow plugins to short-circuit options.
if ( false !== $r = apply_filters( 'bb_pre_get_option_' . $option, false, $option ) ) {
return $r;
}
global $bb;
switch ( $option ) {
case 'site_id':
if ( isset( $bb->site_id ) && is_numeric( $bb->site_id ) ) {
$r = (int) $bb->site_id;
} else {
$r = 1;
}
break;
case 'language':
$r = str_replace( '_', '-', bb_get_locale() );
break;
case 'text_direction':
global $bb_locale;
$r = $bb_locale->text_direction;
break;
case 'version':
return '1.1'; // Don't filter
break;
case 'bb_db_version' :
return '2471'; // Don't filter
break;
case 'html_type':
$r = 'text/html';
break;
case 'charset':
$r = 'UTF-8';
break;
case 'bb_table_prefix':
case 'table_prefix':
global $bbdb;
return $bbdb->prefix; // Don't filter;
break;
case 'url':
$option = 'uri';
default:
if ( isset( $bb->$option ) ) {
$r = $bb->$option;
if ( $option === 'mod_rewrite' ) {
if ( is_bool( $r ) ) {
$r = (int) $r;
}
}
break;
}
$r = bb_get_option_from_db( $option );
if ( !$r ) {
switch ( $option ) {
case 'name':
$r = __( 'Please give me a name!' );
break;
case 'wp_table_prefix' :
global $wp_table_prefix; // This global is deprecated
return $wp_table_prefix; // Don't filter;
break;
case 'mod_rewrite':
$r = 0;
break;
case 'page_topics':
$r = 30;
break;
case 'edit_lock':
$r = 60;
break;
case 'gmt_offset':
$r = 0;
break;
case 'uri_ssl':
$r = preg_replace( '|^http://|i', 'https://', bb_get_option( 'uri' ) );
break;
case 'throttle_time':
$r = 30;
break;
case 'email_login':
$r = false;
break;
}
}
break;
}
return apply_filters( 'bb_get_option_' . $option, $r, $option );
}
/**
* Retrieves and returns the requested bbPress option from the meta table
*
* @param string The option to be echoed
* @return void
*/
function bb_get_option_from_db( $option )
{
global $bbdb;
$option = bb_sanitize_meta_key( $option );
if ( wp_cache_get( $option, 'bb_option_not_set' ) ) {
$r = null;
} elseif ( false !== $_r = wp_cache_get( $option, 'bb_option' ) ) {
$r = $_r;
} else {
if ( BB_INSTALLING ) {
$bbdb->suppress_errors();
}
$row = $bbdb->get_row( $bbdb->prepare( "SELECT `meta_value` FROM `$bbdb->meta` WHERE `object_type` = 'bb_option' AND `meta_key` = %s", $option ) );
if ( BB_INSTALLING ) {
$bbdb->suppress_errors( false );
}
if ( is_object( $row ) ) {
$r = maybe_unserialize( $row->meta_value );
} else {
$r = null;
}
}
if ( $r === null ) {
wp_cache_set( $option, true, 'bb_option_not_set' );
} else {
wp_cache_set( $option, $r, 'bb_option' );
}
return apply_filters( 'bb_get_option_from_db_' . $option, $r, $option );
}
function bb_form_option( $option )
{
echo bb_get_form_option( $option );
}
function bb_get_form_option( $option )
{
return esc_attr( bb_get_option( $option ) );
}
// Don't use the return value; use the API. Only returns options stored in DB.
function bb_cache_all_options()
{
$base_options = array(
'site_id',
'bb_db_version',
'name',
'description',
'uri_ssl',
'from_email',
'bb_auth_salt',
'bb_secure_auth_salt',
'bb_logged_in_salt',
'bb_nonce_salt',
'page_topics',
'edit_lock',
'bb_active_theme',
'active_plugins',
'mod_rewrite',
'datetime_format',
'date_format',
'avatars_show',
'avatars_default',
'avatars_rating',
'wp_table_prefix',
'user_bbdb_name',
'user_bbdb_user',
'user_bbdb_password',
'user_bbdb_host',
'user_bbdb_charset',
'user_bbdb_collate',
'custom_user_table',
'custom_user_meta_table',
'wp_siteurl',
'wp_home',
'cookiedomain',
'usercookie',
'passcookie',
'authcookie',
'cookiepath',
'sitecookiepath',
'secure_auth_cookie',
'logged_in_cookie',
'admin_cookie_path',
'core_plugins_cookie_path',
'user_plugins_cookie_path',
'wp_admin_cookie_path',
'wp_plugins_cookie_path',
'wordpress_mu_primary_blog_id',
'enable_loginless',
'enable_subscriptions',
'enable_xmlrpc',
'enable_pingback',
'throttle_time',
'bb_xmlrpc_allow_user_switching',
'bp_bbpress_cron',
'email_login',
'static_title',
'plugin_cookie_paths',
'wp_roles_map',
'gmt_offset',
'timezone_string',
'name_link_profile',
'bp_bbpress_cron_check',
);
// Check that these aren't already in the cache
$query_options = array();
foreach ( $base_options as $base_option ) {
if ( isset( $bb->$base_option ) ) {
continue;
}
if ( wp_cache_get( $base_option, 'bb_option_not_set' ) ) {
continue;
}
if ( false === wp_cache_get( $base_option, 'bb_option' ) ) {
$query_options[] = $base_option;
wp_cache_set( $base_option, true, 'bb_option_not_set' );
}
}
if ( !count( $query_options ) ) {
// It's all in cache
return true;
}
$query_keys = "('" . join( "','", $query_options ) . "')";
global $bbdb;
$results = $bbdb->get_results( "SELECT `meta_key`, `meta_value` FROM `$bbdb->meta` WHERE `object_type` = 'bb_option' AND `meta_key` IN $query_keys;" );
if ( count( $base_options ) === count( $query_options ) && ( !$results || !is_array( $results ) || !count( $results ) ) ) {
// Let's assume that the options haven't been populated from the old topicmeta table
if ( !BB_INSTALLING && ( !defined( 'BB_DO_NOT_UPGRADE_TOPICMETA' ) || !BB_DO_NOT_UPGRADE_TOPICMETA ) ) {
$topicmeta_exists = $bbdb->query( "SELECT * FROM $bbdb->topicmeta LIMIT 1" );
if ($topicmeta_exists) {
require_once( BB_PATH . 'bb-admin/includes/defaults.bb-schema.php' );
// Create the meta table
$bbdb->query( $bb_queries['meta'] );
// Copy options
$bbdb->query( "INSERT INTO `$bbdb->meta` (`meta_key`, `meta_value`) SELECT `meta_key`, `meta_value` FROM `$bbdb->topicmeta` WHERE `topic_id` = 0;" );
// Copy topic meta
$bbdb->query( "INSERT INTO `$bbdb->meta` (`object_id`, `meta_key`, `meta_value`) SELECT `topic_id`, `meta_key`, `meta_value` FROM `$bbdb->topicmeta` WHERE `topic_id` != 0;" );
// Entries with an object_id are topic meta at this stage
$bbdb->query( "UPDATE `$bbdb->meta` SET `object_type` = 'bb_topic' WHERE `object_id` != 0" );
}
unset( $topicmeta_exists );
return bb_cache_all_options();
}
return false;
} else {
foreach ( $results as $options ) {
wp_cache_delete( $options->meta_key, 'bb_option_not_set' );
wp_cache_set( $options->meta_key, maybe_unserialize( $options->meta_value ), 'bb_option' );
}
}
return true;
}
// Can store anything but NULL.
function bb_update_option( $option, $value )
{
return bb_update_meta( 0, $option, $value, 'option', true );
}
function bb_delete_option( $option, $value = '' )
{
return bb_delete_meta( 0, $option, $value, 'option', true );
}
/**
* Delete a transient
*
* @since 1.0
* @package bbPress
* @subpackage Transient
*
* @param string $transient Transient name. Expected to not be SQL-escaped
* @return bool true if successful, false otherwise
*/
function bb_delete_transient( $transient )
{
global $_bb_using_ext_object_cache, $bbdb;
if ( $_bb_using_ext_object_cache ) {
return wp_cache_delete( $transient, 'transient' );
} else {
$transient = '_transient_' . $bbdb->escape( $transient );
return bb_delete_option( $transient );
}
}
/**
* Get the value of a transient
*
* If the transient does not exist or does not have a value, then the return value
* will be false.
*
* @since 1.0
* @package bbPress
* @subpackage Transient
*
* @param string $transient Transient name. Expected to not be SQL-escaped
* @return mixed Value of transient
*/
function bb_get_transient( $transient )
{
global $_bb_using_ext_object_cache, $bbdb;
if ( $_bb_using_ext_object_cache ) {
$value = wp_cache_get( $transient, 'transient' );
} else {
$transient_option = '_transient_' . $bbdb->escape( $transient );
$transient_timeout = '_transient_timeout_' . $bbdb->escape( $transient );
$timeout = bb_get_option( $transient_timeout );
if ( $timeout && $timeout < time() ) {
bb_delete_option( $transient_option );
bb_delete_option( $transient_timeout );
return false;
}
$value = bb_get_option( $transient_option );
}
return apply_filters( 'transient_' . $transient, $value );
}
/**
* Set/update the value of a transient
*
* You do not need to serialize values, if the value needs to be serialize, then
* it will be serialized before it is set.
*
* @since 1.0
* @package bbPress
* @subpackage Transient
*
* @param string $transient Transient name. Expected to not be SQL-escaped
* @param mixed $value Transient value.
* @param int $expiration Time until expiration in seconds, default 0
* @return bool False if value was not set and true if value was set.
*/
function bb_set_transient( $transient, $value, $expiration = 0 )
{
global $_bb_using_ext_object_cache, $bbdb;
if ( $_bb_using_ext_object_cache ) {
return wp_cache_set( $transient, $value, 'transient', $expiration );
} else {
$transient_timeout = '_transient_timeout_' . $bbdb->escape( $transient );
$transient = '_transient_' . $bbdb->escape( $transient );
if ( 0 != $expiration ) {
bb_update_option( $transient_timeout, time() + $expiration );
}
return bb_update_option( $transient, $value );
}
}
/* User meta */
function bb_get_usermeta( $user_id, $meta_key )
{
if ( !$user = bb_get_user( $user_id ) ) {
return;
}
$meta_key = bb_sanitize_meta_key( $meta_key );
if ( !isset( $user->$meta_key ) ) {
return;
}
return $user->$meta_key;
}
function bb_update_usermeta( $user_id, $meta_key, $meta_value )
{
return bb_update_meta( $user_id, $meta_key, $meta_value, 'user' );
}
// $meta_value defaults to null to conform to BackPress' WP_User::delete_meta()
function bb_delete_usermeta( $user_id, $meta_key, $meta_value = null )
{
return bb_delete_meta( $user_id, $meta_key, $meta_value, 'user' );
}
/**
* Saves and restores user interface settings stored in a cookie.
*
* Checks if the current user-settings cookie is updated and stores it. When no
* cookie exists (different browser used), adds the last saved cookie restoring
* the settings.
*
* @package bbPress
* @subpackage Meta
* @since 1.0
*/
function bb_user_settings()
{
if ( !defined( 'BB_IS_ADMIN' ) || !BB_IS_ADMIN ) {
return;
}
if ( defined( 'DOING_AJAX' ) ) {
return;
}
if ( !$user = bb_get_current_user() ) {
return;
}
$settings = bb_get_usermeta( $user->ID, 'bb_user_settings' );
if ( isset( $_COOKIE['bb-user-settings-' . $user->ID] ) ) {
$cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['bb-user-settings-' . $user->ID] );
if ( !empty( $cookie ) && strpos( $cookie, '=' ) ) {
if ( $cookie == $settings ) {
return;
}
$last_time = (int) bb_get_usermeta( $user->ID, 'bb_user_settings_time' );
$saved = isset( $_COOKIE['bb-user-settings-time-' . $user->ID] ) ? preg_replace( '/[^0-9]/', '', $_COOKIE['bb-user-settings-time-' . $user->ID] ) : 0;
if ( $saved > $last_time ) {
bb_update_usermeta( $user->ID, 'bb_user_settings', $cookie );
bb_update_usermeta( $user->ID, 'bb_user_settings_time', time() - 5 );
return;
}
}
}
setcookie( 'bb-user-settings-' . $user->ID, $settings, time() + 31536000, $bb->cookiepath );
setcookie( 'bb-user-settings-time-' . $user->ID, time(), time() + 31536000, $bb->cookiepath );
}
/**
* Retrieve user interface setting value based on setting name.
*
* @package bbPress
* @subpackage Meta
* @since 1.0
*
* @param string $name The name of the setting.
* @param string $default Optional default value to return when $name is not set.
* @return mixed the last saved user setting or the default value/false if it doesn't exist.
*/
function bb_get_user_setting( $name, $default = false )
{
$arr = bb_get_all_user_settings();
return isset( $arr[$name] ) ? $arr[$name] : $default;
}
/**
* Adds or updates a user interface setting value based on setting name.
*
* @package bbPress
* @subpackage Meta
* @since 1.0
*
* @param string $name The name of the setting.
* @param string $value The value of the setting.
*/
function bb_update_user_setting( $name, $value )
{
if ( is_null( $value ) || $value === '' ) {
return;
}
if ( !$user = bb_get_current_user() ) {
return;
}
$name = (string) $name;
$name = preg_replace( '/[^A-Za-z0-9_]/', '', $name );
$value = (string) $value;
$value = preg_replace( '/[^A-Za-z0-9_]/', '', $value );
$arr = bb_get_all_user_settings();
$arr[$name] = $value;
foreach ( $arr as $k => $v ) {
$settings .= $k . '=' . $v . '&';
}
$settings = rtrim( $settings, '&' );
bb_update_usermeta( $user->ID, 'bb_user_settings', $settings );
setcookie( 'bb-user-settings-' . $user->ID, $settings, time() + 31536000, $bb->cookiepath );
}
/**
* Delete user interface settings.
*
* Deleting settings would reset them to the defaults.
*
* @package bbPress
* @subpackage Meta
* @since 1.0
*
* @param mixed $names The name or array of names of the setting to be deleted.
*/
function bb_delete_user_setting( $names )
{
$arr = bb_get_all_user_settings();
$names = (array) $names;
if ( !$user = bb_get_current_user() ) {
return;
}
foreach ( $names as $name ) {
if ( isset( $arr[$name] ) ) {
unset( $arr[$name] );
$settings = '';
}
}
if ( isset( $settings ) ) {
foreach ( $arr as $k => $v ) {
$settings .= $k . '=' . $v . '&';
}
$settings = rtrim( $settings, '&' );
bb_update_usermeta( $user->ID, 'bb_user_settings', $settings );
setcookie( 'bb-user-settings-' . $user->ID, $settings, time() + 31536000, $bb->cookiepath );
}
}
/**
* Retrieve all user interface settings.
*
* @package bbPress
* @subpackage Meta
* @since 1.0
*
* @return array the last saved user settings or empty array.
*/
function bb_get_all_user_settings()
{
if ( ! $user = bb_get_current_user() ) {
return array();
}
$arr = array();
if ( isset( $_COOKIE['bb-user-settings-' . $user->ID] ) ) {
$cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['bb-user-settings-' . $user->ID] );
if ( $cookie && strpos( $cookie, '=' ) ) { // the '=' cannot be 1st char
parse_str( $cookie, $arr );
}
} elseif ( isset( $user->bb_user_settings ) && is_string( $user->bb_user_settings ) ) {
parse_str( $user->bb_user_settings, $arr );
}
return $arr;
}
/**
* Delete the user settings of the current user.
*
* @package bbPress
* @subpackage Meta
* @since 1.0
*/
function bb_delete_all_user_settings()
{
if ( !$user = bb_get_current_user() ) {
return;
}
bb_delete_usermeta( $user->ID, 'bb_user_settings' );
setcookie( 'bb-user-settings-' . $user->ID, ' ', time() - 31536000, $bb->cookiepath );
}
/* Forum meta */
function bb_get_forummeta( $forum_id, $meta_key )
{
if ( !$forum = bb_get_forum( $forum_id ) ) {
return;
}
$meta_key = bb_sanitize_meta_key( $meta_key );
if ( !isset( $forum->$meta_key ) ) {
return;
}
return $forum->$meta_key;
}
function bb_update_forummeta( $forum_id, $meta_key, $meta_value )
{
return bb_update_meta( $forum_id, $meta_key, $meta_value, 'forum' );
}
function bb_delete_forummeta( $forum_id, $meta_key, $meta_value = '' )
{
return bb_delete_meta( $forum_id, $meta_key, $meta_value, 'forum' );
}
/* Topic meta */
function bb_get_topicmeta( $topic_id, $meta_key )
{
if ( !$topic = get_topic( $topic_id ) ) {
return;
}
$meta_key = bb_sanitize_meta_key( $meta_key );
if ( !isset($topic->$meta_key) ) {
return;
}
return $topic->$meta_key;
}
function bb_update_topicmeta( $topic_id, $meta_key, $meta_value )
{
return bb_update_meta( $topic_id, $meta_key, $meta_value, 'topic' );
}
function bb_delete_topicmeta( $topic_id, $meta_key, $meta_value = '' )
{
return bb_delete_meta( $topic_id, $meta_key, $meta_value, 'topic' );
}
/* Post meta */
function bb_get_postmeta( $post_id, $meta_key )
{
if ( !$post = bb_get_post( $post_id ) ) {
return;
}
$meta_key = bb_sanitize_meta_key( $meta_key );
if ( !isset( $post->$meta_key ) ) {
return;
}
return $post->$meta_key;
}
function bb_update_postmeta( $post_id, $meta_key, $meta_value )
{
return bb_update_meta( $post_id, $meta_key, $meta_value, 'post' );
}
function bb_delete_postmeta( $post_id, $meta_key, $meta_value = '' )
{
return bb_delete_meta( $post_id, $meta_key, $meta_value, 'post' );
}