%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/higroup/wp-content/plugins/devmonsta/core/helpers/
Upload File :
Create Path :
Current File : /var/www/html/higroup/wp-content/plugins/devmonsta/core/helpers/meta.php

<?php
if ( !defined( 'DEVM' ) ) {
    die( 'Forbidden' );
}

function devm_add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique = false ) {

    /**
     * @var WPDB $wpdb
     */
    global $wpdb;

    if ( !$meta_type || !$meta_key || !is_numeric( $object_id ) ) {
        return false;
    }

    $object_id = absint( $object_id );

    if ( !$object_id ) {
        return false;
    }

    $table = _get_meta_table( $meta_type );

    if ( !$table ) {
        return false;
    }

    $column = sanitize_key( $meta_type . '_id' );

    $meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );

    /**
     * Filter whether to add metadata of a specific type.
     *
     * The dynamic portion of the hook, $meta_type, refers to the meta
     * object type (comment, post, or user). Returning a non-null value
     * will effectively short-circuit the function.
     *
     * @param null|bool $check Whether to allow adding metadata for the given type.
     * @param int $object_id Object ID.
     * @param string $meta_key Meta key.
     * @param mixed $meta_value Meta value. Must be serializable if non-scalar.
     * @param bool $unique Whether the specified meta key should be unique
     *                              for the object. Optional. Default false.
     */
    $check = apply_filters( "add_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $unique );

    if ( null !== $check ) {
        return $check;
    }

    if ( $unique && $wpdb->get_var( $wpdb->prepare(
        "SELECT COUNT(*) FROM $table WHERE meta_key = %s AND $column = %d LIMIT 1",
        $meta_key, $object_id ) )
    ) {
        return false;
    }

    $_meta_value = $meta_value;
    $meta_value  = maybe_serialize( $meta_value );

    /**
     * Fires immediately before meta of a specific type is added.
     *
     * The dynamic portion of the hook, $meta_type, refers to the meta
     * object type (comment, post, or user).
     *
     * @param int $object_id Object ID.
     * @param string $meta_key Meta key.
     * @param mixed $meta_value Meta value.
     */
    do_action( "add_{$meta_type}_meta", $object_id, $meta_key, $_meta_value );

    $result = $wpdb->insert( $table, [
        $column      => $object_id,
        'meta_key'   => $meta_key,
        'meta_value' => $meta_value,
    ] );

    if ( !$result ) {
        return false;
    }

    $mid = (int) $wpdb->insert_id;

    wp_cache_delete( $object_id, $meta_type . '_meta' );

    /**
     * Fires immediately after meta of a specific type is added.
     *
     * The dynamic portion of the hook, $meta_type, refers to the meta
     * object type (comment, post, or user).
     *
     * @param int $mid The meta ID after successful update.
     * @param int $object_id Object ID.
     * @param string $meta_key Meta key.
     * @param mixed $meta_value Meta value.
     */
    do_action( "added_{$meta_type}_meta", $mid, $object_id, $meta_key, $_meta_value );

    return $mid;
}

/**
 * Update metadata for the specified object. If no value already exists for the specified object
 * ID and metadata key, the metadata will be added.
 *
 * @uses $wpdb WordPress database object for queries.
 *
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
 * @param int $object_id ID of the object metadata is for
 * @param string $meta_key Metadata key
 * @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
 * @param mixed $prev_value Optional. If specified, only update existing metadata entries with
 *        the specified value. Otherwise, update all entries.
 *
 * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure.
 */
function devm_update_metadata( $meta_type, $object_id, $meta_key, $meta_value, $prev_value = '' ) {
    global $wpdb;

    if ( !$meta_type || !$meta_key || !is_numeric( $object_id ) ) {
        return false;
    }

    $object_id = absint( $object_id );

    if ( !$object_id ) {
        return false;
    }

    $table = _get_meta_table( $meta_type );

    if ( !$table ) {
        return false;
    }

    $column    = sanitize_key( $meta_type . '_id' );
    $id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';

    $passed_value = $meta_value;
    $meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );

    /**
     * Filter whether to update metadata of a specific type.
     *
     * The dynamic portion of the hook, $meta_type, refers to the meta
     * object type (comment, post, or user). Returning a non-null value
     * will effectively short-circuit the function.
     *
     * @param null|bool $check Whether to allow updating metadata for the given type.
     * @param int $object_id Object ID.
     * @param string $meta_key Meta key.
     * @param mixed $meta_value Meta value. Must be serializable if non-scalar.
     * @param mixed $prev_value Optional. If specified, only update existing
     *                              metadata entries with the specified value.
     *                              Otherwise, update all entries.
     */
    $check = apply_filters( "update_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $prev_value );

    if ( null !== $check ) {
        return (bool) $check;
    }

// Compare existing value to new value if no prev value given and the key exists only once.
    if ( empty( $prev_value ) ) {
        $old_value = get_metadata( $meta_type, $object_id, $meta_key );
        if ( count( $old_value ) == 1 ) {
            if ( $old_value[0] === $meta_value ) {
                return false;
            }

        }

    }

    if ( !$meta_id = $wpdb->get_var( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d LIMIT 1", $meta_key, $object_id ) ) ) {
        return devm_add_metadata( $meta_type, $object_id, $meta_key, $passed_value );
    }

    $_meta_value = $meta_value;
    $meta_value  = maybe_serialize( $meta_value );

    $data  = compact( 'meta_value' );
    $where = [ $column => $object_id, 'meta_key' => $meta_key ];

    if ( !empty( $prev_value ) ) {
        $prev_value          = maybe_serialize( $prev_value );
        $where['meta_value'] = $prev_value;
    }

    /**
     * Fires immediately before updating metadata of a specific type.
     *
     * The dynamic portion of the hook, $meta_type, refers to the meta
     * object type (comment, post, or user).
     *
     * @param int $meta_id ID of the metadata entry to update.
     * @param int $object_id Object ID.
     * @param string $meta_key Meta key.
     * @param mixed $meta_value Meta value.
     */
    do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );

    if ( 'post' == $meta_type ) {
        /**
         * Fires immediately before updating a post's metadata.
         *
         * @param int $meta_id ID of metadata entry to update.
         * @param int $object_id Object ID.
         * @param string $meta_key Meta key.
         * @param mixed $meta_value Meta value.
         */
        do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
    }

    $result = $wpdb->update( $table, $data, $where );
    if ( !$result ) {
        return false;
    }

    wp_cache_delete( $object_id, $meta_type . '_meta' );

    /**
     * Fires immediately after updating metadata of a specific type.
     *
     * The dynamic portion of the hook, $meta_type, refers to the meta
     * object type (comment, post, or user).
     *
     * @param int $meta_id ID of updated metadata entry.
     * @param int $object_id Object ID.
     * @param string $meta_key Meta key.
     * @param mixed $meta_value Meta value.
     */
    do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );

    if ( 'post' == $meta_type ) {
        /**
         * Fires immediately after updating a post's metadata.
         *
         * @param int $meta_id ID of updated metadata entry.
         * @param int $object_id Object ID.
         * @param string $meta_key Meta key.
         * @param mixed $meta_value Meta value.
         */
        do_action( 'updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
    }

    return true;
}

;

/**
 * Delete metadata for the specified object.
 *
 * @uses $wpdb WordPress database object for queries.
 *
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
 * @param int $object_id ID of the object metadata is for
 * @param string $meta_key Metadata key
 * @param mixed $meta_value Optional. Metadata value. Must be serializable if non-scalar. If specified, only delete metadata entries
 *        with this value. Otherwise, delete all entries with the specified meta_key.
 * @param bool $delete_all Optional, default is false. If true, delete matching metadata entries
 *        for all objects, ignoring the specified object_id. Otherwise, only delete matching
 *        metadata entries for the specified object_id.
 *
 * @return bool True on successful delete, false on failure.
 */
function devm_delete_metadata( $meta_type, $object_id, $meta_key, $meta_value = '', $delete_all = false ) {
    /**
     * @var WPDB $wpdb
     */
    global $wpdb;

    if ( !$meta_type || !$meta_key || !is_numeric( $object_id ) && !$delete_all ) {
        return false;
    }

    $object_id = absint( $object_id );
    if ( !$object_id && !$delete_all ) {
        return false;
    }

    $table = _get_meta_table( $meta_type );
    if ( !$table ) {
        return false;
    }

    $type_column = sanitize_key( $meta_type . '_id' );
    $id_column   = 'user' == $meta_type ? 'umeta_id' : 'meta_id';

    /**
     * Filter whether to delete metadata of a specific type.
     *
     * The dynamic portion of the hook, $meta_type, refers to the meta
     * object type (comment, post, or user). Returning a non-null value
     * will effectively short-circuit the function.
     *
     * @param null|bool $delete Whether to allow metadata deletion of the given type.
     * @param int $object_id Object ID.
     * @param string $meta_key Meta key.
     * @param mixed $meta_value Meta value. Must be serializable if non-scalar.
     * @param bool $delete_all Whether to delete the matching metadata entries
     *                              for all objects, ignoring the specified $object_id.
     *                              Default false.
     */
    $check = apply_filters( "delete_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $delete_all );
    if ( null !== $check ) {
        return (bool) $check;
    }

    $_meta_value = $meta_value;
    $meta_value  = maybe_serialize( $meta_value );

    $query = $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s", $meta_key );

    if ( !$delete_all ) {
        $query .= $wpdb->prepare( " AND $type_column = %d", $object_id );
    }

    if ( $meta_value ) {
        $query .= $wpdb->prepare( " AND meta_value = %s", $meta_value );
    }

    $meta_ids = $wpdb->get_col( $query );
    if ( !count( $meta_ids ) ) {
        return false;
    }

    if ( $delete_all ) {
        $object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s", $meta_key ) );
    }

    /**
     * Fires immediately before deleting metadata of a specific type.
     *
     * The dynamic portion of the hook, $meta_type, refers to the meta
     * object type (comment, post, or user).
     *
     * @param array $meta_ids An array of metadata entry IDs to delete.
     * @param int $object_id Object ID.
     * @param string $meta_key Meta key.
     * @param mixed $meta_value Meta value.
     */
    do_action( "delete_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value );

// Old-style action.
    if ( 'post' == $meta_type ) {
        /**
         * Fires immediately before deleting metadata for a post.
         *
         * @param array $meta_ids An array of post metadata entry IDs to delete.
         */
        do_action( 'delete_postmeta', $meta_ids );
    }

    $query = "DELETE FROM $table WHERE $id_column IN( " . implode( ',', $meta_ids ) . " )";

    $count = $wpdb->query( $query );

    if ( !$count ) {
        return false;
    }

    if ( $delete_all ) {
        foreach ( (array) $object_ids as $o_id ) {
            wp_cache_delete( $o_id, $meta_type . '_meta' );
        }

    } else {
        wp_cache_delete( $object_id, $meta_type . '_meta' );
    }

    /**
     * Fires immediately after deleting metadata of a specific type.
     *
     * The dynamic portion of the hook name, $meta_type, refers to the meta
     * object type (comment, post, or user).
     *
     * @param array $meta_ids An array of deleted metadata entry IDs.
     * @param int $object_id Object ID.
     * @param string $meta_key Meta key.
     * @param mixed $meta_value Meta value.
     */
    do_action( "deleted_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value );

// Old-style action.
    if ( 'post' == $meta_type ) {
        /**
         * Fires immediately after deleting metadata for a post.
         *
         * @param array $meta_ids An array of deleted post metadata entry IDs.
         */
        do_action( 'deleted_postmeta', $meta_ids );
    }

    return true;
}

/**
 * Add meta data field to a user.
 *
 * Post meta data is called "Custom Fields" on the Administration Screens.
 *
 * @param int $user_id User ID.
 * @param string $meta_key Metadata name.
 * @param mixed $meta_value Metadata value.
 * @param bool $unique Optional, default is false. Whether the same key should not be added.
 *
 * @return int|bool Meta ID on success, false on failure.
 */
function devm_add_user_meta( $user_id, $meta_key, $meta_value, $unique = false ) {
    return devm_add_metadata( 'user', $user_id, $meta_key, $meta_value, $unique );
}

/**
 * Update user meta field based on user ID.
 *
 * Use the $prev_value parameter to differentiate between meta fields with the
 * same key and user ID.
 *
 * If the meta field for the user does not exist, it will be added.
 *
 * @param int $user_id User ID.
 * @param string $meta_key Metadata key.
 * @param mixed $meta_value Metadata value.
 * @param mixed $prev_value Optional. Previous value to check before removing.
 *
 * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure.
 */
function devm_update_user_meta( $user_id, $meta_key, $meta_value, $prev_value = '' ) {
    return devm_update_metadata( 'user', $user_id, $meta_key, $meta_value, $prev_value );
}

/**
 * Remove metadata matching criteria from a user.
 *
 * You can match based on the key, or key and value. Removing based on key and
 * value, will keep from removing duplicate metadata with the same key. It also
 * allows removing all metadata matching key, if needed.
 *
 * @param int $user_id user ID
 * @param string $meta_key Metadata name.
 * @param mixed $meta_value Optional. Metadata value.
 *
 * @return bool True on success, false on failure.
 */
function devm_delete_user_meta( $user_id, $meta_key, $meta_value = '' ) {
    return devm_delete_metadata( 'user', $user_id, $meta_key, $meta_value );
}

/**
 * Add meta data field to a post.
 *
 * Post meta data is called "Custom Fields" on the Administration Screen.
 *
 * @param int $post_id Post ID.
 * @param string $meta_key Metadata name.
 * @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
 * @param bool $unique Optional. Whether the same key should not be added.
 *                           Default false.
 *
 * @return int|bool Meta ID on success, false on failure.
 */
function devm_add_post_meta( $post_id, $meta_key, $meta_value, $unique = false ) {

// Make sure meta is added to the post, not a revision. // fixme: why this is needed?
    /*if ( $the_post = wp_is_post_revision( $post_id ) ) {
    $post_id = $the_post;
    }*/

    return devm_add_metadata( 'post', $post_id, $meta_key, $meta_value, $unique );
}

/**
 * Update post meta field based on post ID.
 *
 * Use the $prev_value parameter to differentiate between meta fields with the
 * same key and post ID.
 *
 * If the meta field for the post does not exist, it will be added.
 *
 * @param int $post_id Post ID.
 * @param string $meta_key Metadata key.
 * @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
 * @param mixed $prev_value Optional. Previous value to check before removing.
 *                           Default empty.
 *
 * @return int|bool Meta ID if the key didn't exist, true on successful update,
 *                  false on failure.
 */
function devm_update_post_meta( $post_id, $meta_key, $meta_value, $prev_value = '' ) {

// Make sure meta is added to the post, not a revision. fixme: why this is needed?
    /*if ( $the_post = wp_is_post_revision( $post_id ) ) {
    $post_id = $the_post;
    }*/

    return devm_update_metadata( 'post', $post_id, $meta_key, $meta_value, $prev_value );
}

/**
 * Remove metadata matching criteria from a post.
 *
 * You can match based on the key, or key and value. Removing based on key and
 * value, will keep from removing duplicate metadata with the same key. It also
 * allows removing all metadata matching key, if needed.
 *
 * @param int $post_id Post ID.
 * @param string $meta_key Metadata name.
 * @param mixed $meta_value Optional. Metadata value. Must be serializable if
 *                           non-scalar. Default empty.
 *
 * @return bool True on success, false on failure.
 */
function devm_delete_post_meta( $post_id, $meta_key, $meta_value = '' ) {

// Make sure meta is added to the post, not a revision. // fixme: why this is needed?
    /*if ( $the_post = wp_is_post_revision( $post_id ) ) {
    $post_id = $the_post;
    }*/

    return delete_metadata( 'post', $post_id, $meta_key, $meta_value );
}

//

// Comment meta functions

//

/**
 * Add meta data field to a comment.
 *
 * @param int $comment_id Comment ID.
 * @param string $meta_key Metadata name.
 * @param mixed $meta_value Metadata value.
 * @param bool $unique Optional, default is false. Whether the same key should not be added.
 *
 * @return int|bool Meta ID on success, false on failure.
 */
function devm_add_comment_meta( $comment_id, $meta_key, $meta_value, $unique = false ) {
    return devm_add_metadata( 'comment', $comment_id, $meta_key, $meta_value, $unique );
}

/**
 * Update comment meta field based on comment ID.
 *
 * Use the $prev_value parameter to differentiate between meta fields with the
 * same key and comment ID.
 *
 * If the meta field for the comment does not exist, it will be added.
 *
 * @param int $comment_id Comment ID.
 * @param string $meta_key Metadata key.
 * @param mixed $meta_value Metadata value.
 * @param mixed $prev_value Optional. Previous value to check before removing.
 *
 * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure.
 */
function devm_update_comment_meta( $comment_id, $meta_key, $meta_value, $prev_value = '' ) {
    return devm_update_metadata( 'comment', $comment_id, $meta_key, $meta_value, $prev_value );
}

/**
 * Remove metadata matching criteria from a comment.
 *
 * You can match based on the key, or key and value. Removing based on key and
 * value, will keep from removing duplicate metadata with the same key. It also
 * allows removing all metadata matching key, if needed.
 *
 * @param int $comment_id comment ID
 * @param string $meta_key Metadata name.
 * @param mixed $meta_value Optional. Metadata value.
 *
 * @return bool True on success, false on failure.
 */
function devm_delete_comment_meta( $comment_id, $meta_key, $meta_value = '' ) {
    return devm_delete_metadata( 'comment', $comment_id, $meta_key, $meta_value );
}

//

// Term meta functions

//http://core.trac.wordpress.org/ticket/10142

//
/**
 * Add meta data field to a term.
 *
 * @param int $term_id Post ID.
 * @param string $key Metadata name.
 * @param mixed $value Metadata value.
 * @param bool $unique Optional, default is false. Whether the same key should not be added.
 * @return bool False for failure. True for success.
 */
function devm_add_term_meta( $term_id, $meta_key, $meta_value, $unique = false ) {
    return devm_add_metadata( 'devm_term', $term_id, $meta_key, $meta_value, $unique );
}

/**
 * Remove metadata matching criteria from a term.
 *
 * You can match based on the key, or key and value. Removing based on key and
 * value, will keep from removing duplicate metadata with the same key. It also
 * allows removing all metadata matching key, if needed.
 *
 * @param int $term_id term ID
 * @param string $meta_key Metadata name.
 * @param mixed $meta_value Optional. Metadata value.
 *
 * @return bool False for failure. True for success.
 */
function devm_delete_term_meta( $term_id, $meta_key, $meta_value = '' ) {
    return devm_delete_metadata( 'devm_term', $term_id, $meta_key, $meta_value );
}

/**
 * Retrieve term meta field for a term.
 *
 * @param int $term_id Term ID.
 * @param string $key The meta key to retrieve.
 * @param bool $single Whether to return a single value.
 *
 * @return mixed Will be an array if $single is false. Will be value of meta data field if $single
 *  is true.
 */
function devm_get_term_meta( $term_id, $key, $single = false ) {
    return get_metadata( 'devm_term', $term_id, $key, $single );
}

/**
 * Update term meta field based on term ID.
 *
 * Use the $prev_value parameter to differentiate between meta fields with the
 * same key and term ID.
 *
 * If the meta field for the term does not exist, it will be added.
 *
 * @param int $term_id Term ID.
 * @param string $key Metadata key.
 * @param mixed $value Metadata value.
 * @param mixed $prev_value Optional. Previous value to check before removing.
 *
 * @return bool False on failure, true if success.
 */
function devm_update_term_meta( $term_id, $meta_key, $meta_value, $prev_value = '' ) {
    return devm_update_metadata( 'devm_term', $term_id, $meta_key, $meta_value, $prev_value );
}

Zerion Mini Shell 1.0