| Server IP : 38.190.208.107 / Your IP : 216.73.216.152 Web Server : nginx/1.28.1 System : Linux ht2026040333114 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.37-1 (2023-07-03) x86_64 User : root ( 0) PHP Version : 8.2.28 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv,eval,assert,passthru,system,exec,shell_exec,popen,proc_open MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /www/wwwroot/wp.9/wp-content/themes/dt-the7/inc/extensions/custom-meta-boxes/ |
Upload File : |
<?php
/**
* Metabox fields.
*/
// File Security Check
if ( ! defined( 'ABSPATH' ) ) { exit; }
/**************************************************************************************/
// Proportion slider field
/**************************************************************************************/
if ( !class_exists( 'THE7_RWMB_Proportion_Slider_Field' ) ) {
class THE7_RWMB_Proportion_Slider_Field {
/**
* Enqueue scripts and styles
*
* @return void
*/
static function admin_enqueue_scripts() {
$url = THE7_RWMB_CSS_URL . 'jqueryui';
wp_enqueue_style( 'jquery-ui-core', "{$url}/jquery.ui.core.css", array(), '1.8.17' );
wp_enqueue_style( 'jquery-ui-theme', "{$url}/jquery.ui.theme.css", array(), '1.8.17' );
wp_enqueue_style( 'jquery-ui-slider', "{$url}/jquery.ui.slider.css", array(), '1.8.17' );
wp_enqueue_style( 'the7-mb-slider', THE7_RWMB_CSS_URL . 'slider.css' );
wp_enqueue_script( 'the7-mb-slider', THE7_RWMB_JS_URL . 'slider.js', array( 'jquery-ui-slider', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-core' ), THE7_RWMB_VER, true );
}
/**
* Get div HTML
*
* @param string $html
* @param mixed $meta
* @param array $field
*
* @return string
*/
static function html( $html, $meta, $field ) {
return sprintf(
'<div class="clearfix">
<div class="the7-mb-slider" id="%s" data-options="%s"></div>
<span class="the7-mb-slider-value-label">%s<span>%s</span>%s</span>
<input type="hidden" name="%s" value="%s" />
</div>',
$field['id'], esc_attr( json_encode( $field['js_options'] ) ),
$field['prefix'], $meta, $field['suffix'],
$field['field_name'], $meta
);
}
/**
* Normalize parameters for field
*
* @param array $field
*
* @return array
*/
static function normalize_field( $field ) {
$field = wp_parse_args( $field, array(
'prefix' => '',
'suffix' => '',
'js_options' => array(),
) );
$field['js_options'] = wp_parse_args( $field['js_options'], array(
'range' => 'min', // range = 'min' will add a dark background to sliding part, better UI
) );
if ( isset($field['std']) ) {
$field['js_options']['value'] = absint($field['std']);
} else {
$field['js_options']['value'] = $field['js_options']['min'];
}
return $field;
}
/**
* Add proportions preview.
*/
static function dt_filter_begin_html( $begin, $field, $meta ) {
$preview = '
<div class="the7-mb-proportion_slider-preview-container">
<img src="' . PRESSCORE_ADMIN_URI .'/assets/images/blank.gif" class="the7-mb-proportion_slider-prop-box" />
</div>
';
// find label
$begin_parts = explode('</div>', $begin, 2);
if ( isset( $begin_parts[1] ) ) {
// add previw after label
$begin_parts[0] .= '</div>' . $preview;
// if no label
} else {
$begin_parts[0] = $preview . $begin_parts[0];
}
return implode('', $begin_parts);
}
}
add_filter('the7_mb_proportion_slider_begin_html', array('THE7_RWMB_Proportion_Slider_Field', 'dt_filter_begin_html'), 10, 3);
}
/**************************************************************************************/
// New advanced image field
/**************************************************************************************/
if ( ! class_exists( 'THE7_RWMB_Image_Advanced_MK2_Field' ) && class_exists( 'THE7_RWMB_Image_Field' ) )
{
class THE7_RWMB_Image_Advanced_MK2_Field extends THE7_RWMB_Image_Field
{
/**
* Enqueue scripts and styles
*
* @return void
*/
static function admin_enqueue_scripts()
{
parent::admin_enqueue_scripts();
// Make sure scripts for new media uploader in WordPress 3.5 is enqueued
wp_enqueue_media();
wp_enqueue_script( 'the7-mb-image-advanced-mk2', PRESSCORE_EXTENSIONS_URI . '/custom-meta-boxes/js/media.js', array( 'jquery' ), THE7_RWMB_VER, true );
wp_enqueue_style( 'the7-mb-image-advanced-mk2-style', PRESSCORE_EXTENSIONS_URI . '/custom-meta-boxes/css/advanced-mk2.css', THE7_RWMB_VER );
}
/**
* Add actions
*
* @return void
*/
static function add_actions()
{
// Attach images via Ajax
add_action( 'wp_ajax_the7_mb_attach_media', array( __CLASS__, 'wp_ajax_attach_media' ), 9 );
// Reorder images via Ajax
add_action( 'wp_ajax_the7_mb_reorder_images', array( __CLASS__, 'wp_ajax_reorder_images' ), 9 );
// Delete file via Ajax
add_action( 'wp_ajax_the7_mb_delete_file', array( __CLASS__, 'wp_ajax_delete_file' ), 9 );
// Image template
add_action( 'admin_footer', array( __CLASS__, 'image_temaplate') );
}
/**
* Ajax callback for attaching media to field
*
* @return void
*/
static function wp_ajax_attach_media()
{
$post_id = is_numeric( $_REQUEST['post_id'] ) ? $_REQUEST['post_id'] : 0;
$field_id = isset( $_POST['field_id'] ) ? $_POST['field_id'] : 0;
// $attachment_id = isset( $_POST['attachment_id'] ) ? $_POST['attachment_id'] : 0;
$attachments_ids = isset( $_POST['attachments_ids'] ) ? $_POST['attachments_ids'] : array();
check_ajax_referer( "the7-mb-attach-media_{$field_id}" );
if ( empty($attachments_ids) ) {
The7_RW_Meta_Box::ajax_response( _x( 'Empty atachments', 'image upload', 'the7mk2' ), 'error' );
exit;
}
// sanitize data
$attachments_ids = array_map( 'absint', $attachments_ids );
// update
update_post_meta( $post_id, $field_id, $attachments_ids );
The7_RW_Meta_Box::ajax_response( false, 'success' );
exit;
}
/**
* Ajax callback for reordering images
*
* @return void
*/
static function wp_ajax_reorder_images()
{
$field_id = isset( $_POST['field_id'] ) ? $_POST['field_id'] : 0;
$order = isset( $_POST['order'] ) ? $_POST['order'] : 0;
$post_id = is_numeric( $_REQUEST['post_id'] ) ? $_REQUEST['post_id'] : 0;
check_ajax_referer( "the7-mb-reorder-images_{$field_id}" );
parse_str( $order, $items );
$items = array_map( 'absint', $items['item'] );
update_post_meta( $post_id, $field_id, $items );
The7_RW_Meta_Box::ajax_response( _x( 'Order saved', 'image upload', 'the7mk2' ), 'success' );
exit;
}
/**
* Ajax callback for deleting files.
* Modified from a function used by "Verve Meta Boxes" plugin
*
* @link https://goo.gl/LzYSq
* @return void
*/
static function wp_ajax_delete_file()
{
$post_id = isset( $_POST['post_id'] ) ? intval( $_POST['post_id'] ) : 0;
$field_id = isset( $_POST['field_id'] ) ? $_POST['field_id'] : 0;
$attachment_id = isset( $_POST['attachment_id'] ) ? intval( $_POST['attachment_id'] ) : 0;
$force_delete = isset( $_POST['force_delete'] ) ? intval( $_POST['force_delete'] ) : 0;
check_ajax_referer( "the7-mb-delete-file_{$field_id}" );
// get saved ids
$saved_ids = get_post_meta( $post_id, $field_id, true );
// sanitize
$saved_ids = array_map( 'absint', $saved_ids );
// exclude attachment from saved list
$saved_ids = array_diff( $saved_ids, array( absint($attachment_id) ) );
// update
update_post_meta( $post_id, $field_id, $saved_ids );
$ok = $force_delete ? wp_delete_attachment( $attachment_id ) : true;
if ( $ok )
The7_RW_Meta_Box::ajax_response( '', 'success' );
else
The7_RW_Meta_Box::ajax_response( _x( 'Error: Cannot delete file', 'image upload', 'the7mk2' ), 'error' );
exit;
}
/**
* Get field HTML
*
* @param string $html
* @param array $meta
* @param array $field
*
* @return string
*/
static function html( $html, $meta, $field )
{
if ( ! is_array( $meta ) ) {
$meta = [];
}
$i18n_title = apply_filters( 'the7_mb_image_advanced_select_string', _x( 'Select or Upload Images', 'image upload', 'the7mk2' ), $field );
$attach_nonce = wp_create_nonce( "the7-mb-attach-media_{$field['id']}" );
// Uploaded images
$html .= self::get_uploaded_images( $meta, $field );
// Show form upload
$classes = array( 'button', 'the7-mb-image-advanced-upload-mk2', 'hide-if-no-js', 'new-files' );
if ( ! empty( $field['max_file_uploads'] ) && count( $meta ) >= (int) $field['max_file_uploads'] )
$classes[] = 'hidden';
$classes = implode( ' ', $classes );
$html .= "<a href='#' class='{$classes}' data-attach_media_nonce={$attach_nonce}>{$i18n_title}</a>";
return $html;
}
/**
* Get field value.
* Use $old var as a base value here because advanced_mk2 values don't send via POST so $new will be always empty.
*
* @param array $new
* @param array $old
* @param int $post_id
* @param array $field
*
* @return array|mixed
*/
static function value( $new, $old, $post_id, $field )
{
$no_old_value = ( '' === $old || false === $old );
if ( $no_old_value && array_key_exists( 'std', $field ) ) {
return $field['std'];
}
return $old;
}
/**
* Save post taxonomy
*
* @param $post_id
* @param $field
* @param $old
*
* @param $new
*/
static function save( $new, $old, $post_id, $field )
{
// some way this methid fire wen attachments added/removed to revision !!!
if ( 'revision' == get_post_type($post_id) ) {
return;
}
$name = $field['id'];
if ( ! is_array( $new ) ) {
$new = array();
}
update_post_meta( $post_id, $name, $new );
}
/**
* Standard meta retrieval
*
* @param mixed $meta
* @param int $post_id
* @param array $field
* @param bool $saved
*
* @return mixed
*/
static function meta( $meta, $post_id, $saved, $field )
{
if ( ! $saved ) {
return ( $field['std'] ? $field['std'] : array() );
}
$meta = get_post_meta( $post_id, $field['id'], true );
if ( ! is_array( $meta ) ) {
$meta = array();
}
$meta = array_map( 'esc_attr', $meta );
return $meta;
}
/**
* Normalize parameters for field
*
* @param array $field
*
* @return array
*/
static function normalize_field( $field )
{
$field = parent::normalize_field( $field );
$field['multiple'] = false;
return $field;
}
/**
* Get HTML markup for uploaded images
*
* @param array $images
* @param array $field
*
* @return string
*/
static function get_uploaded_images( $images, $field )
{
if ( ! is_array( $images ) ) {
$images = array();
}
$reorder_nonce = wp_create_nonce( "the7-mb-reorder-images_{$field['id']}" );
$delete_nonce = wp_create_nonce( "the7-mb-delete-file_{$field['id']}" );
$classes = array('the7-mb-images', 'the7-mb-uploaded');
if ( count( $images ) <= 0 )
$classes[] = 'hidden';
$ul = '<ul class="%s" data-field_id="%s" data-delete_nonce="%s" data-reorder_nonce="%s" data-force_delete="%s" data-max_file_uploads="%s">';
$html = sprintf(
$ul,
implode( ' ', $classes ),
$field['id'],
$delete_nonce,
$reorder_nonce,
$field['force_delete'] ? 1 : 0,
$field['max_file_uploads']
);
_prime_post_caches( $images, false, true );
foreach ( $images as $image )
{
$html .= self::img_html( $image );
}
$html .= '</ul>';
return $html;
}
/**
* Get HTML markup for ONE uploaded image
*
* @param int $image Image ID
*
* @return string
*/
static function img_html( $image )
{
$i18n_delete = apply_filters( 'the7_mb_image_delete_string', _x( 'Delete', 'image upload', 'the7mk2' ) );
$i18n_edit = apply_filters( 'the7_mb_image_edit_string', _x( 'Edit', 'image upload', 'the7mk2' ) );
$li = '
<li id="item_%s">
<img src="%s" />
<div class="the7-mb-image-bar">
<a title="%s" class="the7-mb-edit-file" href="%s" target="_blank">%s</a> |
<a title="%s" class="the7-mb-delete-file" href="#" data-attachment_id="%s">×</a>
</div>
</li>
';
$mime_type = get_post_mime_type($image);
if ( strpos($mime_type, 'image') !== false ) {
$src = wp_get_attachment_image_src( $image, 'thumbnail' );
$src = $src[0];
} else {
$src = wp_mime_type_icon( $mime_type );
}
$link = get_edit_post_link( $image );
return sprintf(
$li,
$image,
$src,
$i18n_edit, $link, $i18n_edit,
$i18n_delete, $image
);
}
static function image_temaplate() {
if ( !in_array($GLOBALS['hook_suffix'], array('post.php', 'post-new.php')) ) return;
?>
<script type="text/html" id="tmpl-dt-post-gallery-item">
<li id="item_{{ data.imgID }}">
<img src="{{ data.imgSrc }}" />
<div class="the7-mb-image-bar">
<a title="{{ data.editTitle }}" class="the7-mb-edit-file" href="{{ data.editHref }}" target="_blank">{{ data.editTitle }}</a> |
<a title="{{ data.deleteTitle }}" class="the7-mb-delete-file" href="#" data-attachment_id="{{ data.imgID }}">×</a>
</div>
</li>
</script>
<?php
}
}
}
/**************************************************************************************/
// Fancy category field
/**************************************************************************************/
if ( ! class_exists( 'THE7_RWMB_Fancy_Category_Field' ) ) {
class THE7_RWMB_Fancy_Category_Field {
static $field = array();
static $meta = '';
static $post_type_obj = null;
static $taxonomy_obj = null;
static $posts_query = array();
static $tax_query = array();
/**
* Get field HTML
*
* @param string $html
* @param mixed $meta
* @param array $field
*
* @return string
*/
static function html( $html, $meta, $field ) {
$meta_defaults = array(
'select' => 'all',
'type' => 'albums',
'posts_ids' => array(),
'terms_ids' => array(),
);
// in taxonomy mode change default type to 'category'
if ( 'taxonomy' == $field['mode'] ) { $meta_defaults['type'] = 'category'; }
$meta = wp_parse_args($meta, $meta_defaults);
if ( !is_array($meta['posts_ids']) ) { $meta['posts_ids'] = explode(',', $meta['posts_ids']); }
if ( !is_array($meta['terms_ids']) ) { $meta['terms_ids'] = explode(',', $meta['terms_ids']); }
// store field
self::$field = $field;
self::$meta = $meta;
$html = $posts_html = $taxonomy_html = '';
if ( in_array( $field['mode'], array('both', 'posts') ) ) {
if ( !empty($field['post_type']) ) {
self::$post_type_obj = get_post_type_object( $field['post_type'] );
$query = self::get_posts_query( $field['post_type'] );
update_post_thumbnail_cache( $query );
}
$posts_html = self::get_posts_tab();
}
if ( in_array( $field['mode'], array('both', 'taxonomy') ) ) {
if ( $field['taxonomy'] ) {
self::$taxonomy_obj = get_taxonomy( $field['taxonomy'] );
self::get_taxonomy_query( $field['taxonomy'] );
}
$taxonomy_html = self::get_taxonomy_tab();
}
$html .= self::get_tabs();
$html .= '<div class="dt_tabs-content">';
$html .= self::get_main_tab();
$html .= '<div class="dt_tab-select hide-if-js">';
$html .= $posts_html . $taxonomy_html;
$html .= '</div><!-- /.dt_tab-select -->';
$html .= '</div><!-- /.dt_tabs-content -->';
return $html;
}
/**
* Get posts list.
*/
static function get_posts_tab() {
if ( ! self::get_posts_query()->have_posts() ) {
return '';
}
global $post, $wpdb;
$imgs_text = array(
_x('no pictures', 'backend', 'the7mk2'),
_x('1 picture', 'backend', 'the7mk2'),
_x('% pictures', 'backend', 'the7mk2')
);
$html = '';
$html .= '<div class="dt_tab-items hide-if-js">';
update_post_thumbnail_cache( self::get_posts_query() );
foreach ( self::get_posts_query()->posts as $_post ) {
$attachments = (array) get_post_meta( $_post->ID, '_dt_album_media_items', true );
$attachments = array_filter( $attachments );
// count post images
$imgs_count = count( $attachments );
// prepare title info
if ( 0 == $imgs_count ) { $title_info = $imgs_text[0]; }
elseif ( 1 == $imgs_count ) { $title_info = $imgs_text[1]; }
else { $title_info = str_replace('%', $imgs_count, $imgs_text[2]); }
// post terms
$terms = get_the_terms( $_post->ID, self::$field['taxonomy'] );
if( !is_wp_error($terms) && $terms ) {
$term_links = array();
foreach ( $terms as $term ) {
$link = get_admin_url() . 'edit-tags.php';
$link = add_query_arg(
array(
'action' => 'edit',
'post_type' => self::$field['post_type'],
'taxonomy' => self::$field['taxonomy'],
'tag_ID' => $term->term_id
),
$link
);
$term_links[] = '<a href="' . esc_url( $link ) . '" rel="tag" target="_blank">' . $term->name . '</a>';
}
if( empty($term_links) ) {
$term_links[] = 'none';
}
$terms_list = '<p><strong>' . _x('Categories: ', 'backend', 'the7mk2') . '</strong>' . implode( ', ', $term_links ) . '</p>';
}else {
$terms_list = '<p></p>';
}
// item start
$item_str = '<div class="dt_list-item"><div class="dt_item-holder">';
// item checkbox
$item_str .= sprintf( '<label class="dt_checkbox"><input type="checkbox" name="%s" value="%s" %s /></label>',
self::$field['field_name'] . '[posts_ids][' . $_post->ID . ']',
$_post->ID,
checked( in_array($_post->ID, (array) self::$meta['posts_ids']), true, false )
);
// get thumbnail or first post image
$img = '';
if ( has_post_thumbnail($_post->ID) ) {
$img = wp_get_attachment_image_src( get_post_thumbnail_id($_post->ID), 'thumbnail' );
} elseif ( $attachments && is_array( $attachments ) ) {
$img = wp_get_attachment_image_src( current( $attachments ), 'thumbnail' );
}
// if no image
if ( !$img ) {
$img = array( get_template_directory_uri() . '/images/no-avatar.gif' );
}
// image style and dimensions
$cover_style = 'dt_album-cover';
$w = $h = 88;
if( 'dt_slider' == $_post->post_type ) {
$cover_style = 'dt_slider-cover';
$w = 98; $h = 68;
}
// image block
$item_str .= sprintf( '<div class="dt_item-cover %s"><div><img src="%s" heught="%d" width="%d" /></div></div>',
$cover_style, $img[0], $h, $w
);
// description start
$item_str .= '<div class="dt_item-desc">';
// title
$item_str .= '<strong><a href="' . esc_url(get_admin_url() . 'post.php?post=' . $_post->ID . '&action=edit') . '" target="_blank">' . get_the_title( $_post->ID ) . '</a> (' . $title_info . ')</strong>';
// terms list
$item_str .= $terms_list;
// date
$date_format = get_option('date_format');
$item_str .= sprintf( '<strong>%1$s</strong><abbr title="%2$s">%2$s</abbr>',
_x('Date: ', 'backend', 'the7mk2'),
apply_filters('get_the_date', mysql2date($date_format, $_post->post_date), $date_format)
);
// actions start
$item_str .= '<div class="row-actions">';
// edit
$item_str .= sprintf('<span class="edit"><a title="%s" href="%s" target="_blank">%s</a></span>',
_x( 'Edit this item', 'backend', 'the7mk2' ),
esc_url(get_admin_url() . 'post.php?post=' . $_post->ID . '&action=edit'),
_x( 'Edit', 'backend', 'the7mk2' )
);
// move to trash
if( current_user_can( 'edit_post', $_post->ID ) ) {
$item_str .= sprintf(' | <span class="trash"><a title="%s" href="%s">%s</a></span>',
_x( 'Move this item to the Trash', 'backend', 'the7mk2' ),
wp_nonce_url( site_url() . "/wp-admin/post.php?action=trash&post=" . $_post->ID, 'trash-' . $_post->post_type . '_' . $_post->ID),
_x( 'Trash', 'backend', 'the7mk2' )
);
}
// ections end
$item_str .= '</div>';
// description end
$item_str .= '</div>';
$item_str .= '</div></div>';
$html .= $item_str;
}
$html .= '</div>';
return $html;
}
/**
* Get taxonomy list.
*/
static function get_taxonomy_tab() {
if ( ! self::get_taxonomy_query() ) {
return '';
}
$html = '';
$html .= '<div class="dt_tab-categories hide-if-js">';
foreach ( self::get_taxonomy_query() as $term ) {
$html .= sprintf( '<div class="dt_list-item"><label class="dt_checkbox"><input type="checkbox" name="%1$s" value="%2$s" %3$s /></label><span>%4$s</span></div>',
self::$field['field_name'] . '[terms_ids][' . $term->term_id . ']',
$term->term_id,
checked( in_array($term->term_id, (array) self::$meta['terms_ids']), true, false ),
sprintf( '%s (%d)', $term->name, $term->count )
);
}
$html .= '</div>';
return $html;
}
/**
* Main tab.
*/
static function get_main_tab() {
global $wpdb;
$admin_url = get_admin_url();
$post_type_info = empty(self::$field['post_type_info']) ? array('posts', 'categories') : (array) self::$field['post_type_info'];
$tab_class = empty(self::$field['main_tab_class']) ? 'dt_all_sliders' : esc_attr(self::$field['main_tab_class']);
$html = '';
// buttons
$buttons = array();
if ( null !== self::$post_type_obj ) {
// add new
$buttons[] = self::get_admin_link( 'post-new.php?post_type=' . self::$field['post_type'], self::$post_type_obj->labels->add_new_item );
// edit
$buttons[] = self::get_admin_link( 'edit.php?post_type=' . self::$field['post_type'], self::$post_type_obj->labels->edit_item );
if ( null !== self::$taxonomy_obj ) {
// taxonomy
$buttons[] = self::get_admin_link(
'edit-tags.php?taxonomy=' . self::$field['taxonomy'] . '&post_type=' . self::$field['post_type'],
self::$taxonomy_obj->labels->name
);
}
}
// post type info
$total = array();
if ( null !== self::$post_type_obj ) {
$posts_ids = array();
// $posts_count = count($posts_ids);
$posts_count = self::get_posts_query()->found_posts;
// posts total
if ( in_array('posts', $post_type_info) ) {
$total[] = sprintf( '<li class="dt_total_albums">%d %s</li>', $posts_count, self::$post_type_obj->labels->name );
}
}
if ( null !== self::$taxonomy_obj && in_array('categories', $post_type_info) ) {
$tax_count = count(self::get_taxonomy_query());
// taxonomy total
$total[] = sprintf( '<li class="dt_total_categories">%d %s</li>', $tax_count, self::$taxonomy_obj->labels->name );
}
$html .= '
<div class="dt_tab-all hide-if-js">
<div class="dt_all_desc ' . $tab_class . '">';
if ( !empty(self::$field['desc']) ) {
$html .= self::$field['desc'];
}
$html .= '<p class="dt_hr"></p>';
$html .= '<h4>' . _x('You have:', 'backend', 'the7mk2') . '</h4>';
// output total
$html .= '<ul class="dt_total">' . implode('', $total) . '</ul>';
$html .= implode('', $buttons);
$html .= '
</div>
</div>';
return $html;
}
/**
* Get tabs and mode switcher.
*/
static function get_tabs() {
$select = array(
'all' => _x('All', 'backend metabox', 'the7mk2'),
'only' => _x('Only', 'backend metabox', 'the7mk2'),
'except' => _x('All, except', 'backend metabox', 'the7mk2'),
);
$type = array(
'albums' => _x('Albums', 'backend metabox', 'the7mk2'),
'category' => _x('Category', 'backend metabox', 'the7mk2'),
);
$html = '';
$html .= '<div class="dt_tabs">';
$hidden_class = '';
if ( 'both' != self::$field['mode'] ) { $hidden_class = ' hide-if-js'; }
// Arrange
$html .= '<div class="dt_arrange-by' . $hidden_class . '">';
if ( 'both' == self::$field['mode'] ) {
$html .= '<strong>' . _x('Arrange by:', 'backend metabox', 'the7mk2') . '</strong>';
}
foreach ( $type as $value=>$title ) {
$class = $value;
if ( 'category' == $value ) { $class = 'categories'; }
$html .= '<label class="dt_arrange dt_by-' . esc_attr($class) . '">';
$html .= sprintf( '<input class="type_selector" type="radio" name="%s" value="%s" %s/>',
self::$field['field_name'] . '[type]',
$value,
checked(self::$meta['type'], $value, false)
);
$html .= '<span>' . $title . '</span></label>';
}
$html .= '</div>';
// Tabs
foreach ( $select as $value=>$title ) {
$html .= '<label class="dt_tab dt_' . esc_attr($value) . '">';
$html .= sprintf( '<input type="radio" name="%s" value="%s" %s/>',
self::$field['field_name'] . '[select]',
$value,
checked(self::$meta['select'], $value, false)
);
$html .= '<span>' . $title . '</span></label>';
}
$html .= '</div>';
return $html;
}
static function get_admin_link( $action, $desc = '' ) {
return sprintf('<a href="%s" class="button" target="_blank">%s</a>', esc_url(get_admin_url() . $action), $desc);
}
static function begin_html( $begin ) {
return '';
}
static function end_html( $end ) {
return '';
}
static function value( $new, $field, $old ) {
if ( ! is_array( $new ) ) {
$new = array( 'select' => 'all', 'type' => 'category' );
}
if ( 'all' != $new['select'] ) {
if ( ( empty($new['posts_ids']) && 'albums' == $new['type'] ) || ( empty($new['terms_ids']) && 'category' == $new['type'] ) ) {
$new['select'] = 'all';
}
}
return $new;
}
static function meta( $meta, $post_id, $saved, $field ) {
$meta = get_post_meta( $post_id, $field['id'], !$field['multiple'] );
// Use $field['std'] only when the meta box hasn't been saved (i.e. the first time we run)
$meta = ( !$saved && '' === $meta || array() === $meta ) ? $field['std'] : $meta;
return $meta;
}
static function get_posts_query( $post_type = '' ) {
static $_post_type = '';
if ( $post_type ) {
$_post_type = $post_type;
}
if ( ! array_key_exists( $_post_type, self::$posts_query ) ) {
self::$posts_query[ $_post_type ] = new WP_Query(array(
'post_type' => $_post_type,
'posts_per_page' => -1,
'post_status' => 'publish',
'suppress_filters' => false,
));
}
return self::$posts_query[ $_post_type ];
}
static function get_taxonomy_query( $taxonomy = '' ) {
static $_taxonomy = '';
if ( $taxonomy ) {
$_taxonomy = $taxonomy;
}
if ( ! array_key_exists( $_taxonomy, self::$tax_query ) ) {
self::$tax_query[ $_taxonomy ] = get_terms( array(
'hide_empty' => false,
'hierarchical' => false,
'pad_counts' => false,
'taxonomy' => $_taxonomy,
) );
}
return self::$tax_query[ $_taxonomy ];
}
}
add_filter( 'the7_mb_fancy_category_begin_html', array('THE7_RWMB_Fancy_Category_Field', 'begin_html'), 10 );
add_filter( 'the7_mb_fancy_category_end_html', array('THE7_RWMB_Fancy_Category_Field', 'end_html'), 10 );
}
/**************************************************************************************/
// Proper taxonomy field
/**************************************************************************************/
if ( ! class_exists( 'THE7_RWMB_Taxonomy_List_Field' ) && class_exists( 'THE7_RWMB_Taxonomy_Field' ) )
{
class THE7_RWMB_Taxonomy_List_Field extends THE7_RWMB_Taxonomy_Field
{
/**
* Normalize parameters for field
*
* @param array $field
*
* @return array
*/
static function normalize_field( $field )
{
$field = parent::normalize_field( $field );
$field['multiple'] = false;
return $field;
}
/**
* Save post taxonomy
*
* @param $post_id
* @param $field
* @param $old
*
* @param $new
*/
static function save( $new, $old, $post_id, $field )
{
// some way this methid fire wen attachments added/removed to revision !!!
if ( 'revision' == get_post_type($post_id) ) {
return;
}
$name = $field['id'];
if ( '' === $new || array() === $new ) {
delete_post_meta( $post_id, $name );
return;
}
update_post_meta( $post_id, $name, $new );
}
/**
* Standard meta retrieval
*
* @param mixed $meta
* @param int $post_id
* @param array $field
* @param bool $saved
*
* @return mixed
*/
static function meta( $meta, $post_id, $saved, $field )
{
$meta = The7_RW_Meta_Box::meta( $meta, $post_id, $saved, $field );
if ( empty( $meta ) )
return array();
return (array) $meta;
}
}
}
/**************************************************************************************/
// Simple proportions field
/**************************************************************************************/
if ( ! class_exists( 'THE7_RWMB_Simple_Proportions_Field' ) )
{
class THE7_RWMB_Simple_Proportions_Field
{
/**
* Get field HTML
*
* @param string $html
* @param mixed $meta
* @param array $field
*
* @return string
*/
static function html( $html, $meta, $field )
{
$width_name = $field['field_name'] . '[width]';
$height_name = $field['field_name'] . '[height]';
return sprintf(
'<label>%s <input type="text" class="the7-mb-text" name="%s" id="%s-width" value="%s" size="%s" %s/></label> <span>×</span> <label>%s <input type="text" class="the7-mb-text" name="%s" id="%s-height" value="%s" size="%s" %s/></label>%s',
_x( 'width', 'metabox', 'the7mk2' ),
$width_name,
$field['id'],
$meta['width'],
$field['size'],
!$field['datalist'] ? '' : "list='{$field['datalist']['id']}'",
_x( 'height', 'metabox', 'the7mk2' ),
$height_name,
$field['id'],
$meta['height'],
$field['size'],
!$field['datalist'] ? '' : "list='{$field['datalist']['id']}'",
self::datalist_html($field)
);
}
/**
* Normalize parameters for field
*
* @param array $field
*
* @return array
*/
static function normalize_field( $field )
{
$field = wp_parse_args( $field, array(
'size' => 10,
'datalist' => false,
'multiple' => false,
) );
return $field;
}
/**
* Create datalist, if any
*
* @param array $field
*
* @return array
*/
static function datalist_html( $field )
{
if( !$field['datalist'] )
return '';
$datalist = $field['datalist'];
$html = sprintf(
'<datalist id="%s">',
$datalist['id']
);
foreach( $datalist['options'] as $option ) {
$html.= sprintf('<option value="%s"></option>', $option);
}
$html .= '</datalist>';
return $html;
}
/**
* Save post taxonomy
*
* @param $post_id
* @param $field
* @param $old
*
* @param $new
*/
static function save( $new, $old, $post_id, $field )
{
// some way this methid fire wen attachments added/removed to revision !!!
if ( 'revision' == get_post_type($post_id) ) {
return;
}
$name = $field['id'];
if ( '' === $new || array() === $new ) {
delete_post_meta( $post_id, $name );
return;
}
$new = wp_parse_args( $new, array( 'width' => '', 'height' => '' ) );
$new = array_map('esc_attr', $new);
update_post_meta( $post_id, $name, $new );
}
/**
* Standard meta retrieval
*
* @param mixed $meta
* @param int $post_id
* @param array $field
* @param bool $saved
*
* @return mixed
*/
static function meta( $meta, $post_id, $saved, $field )
{
$meta = The7_RW_Meta_Box::meta( $meta, $post_id, $saved, $field );
if ( empty( $meta ) )
return array('width' => '', 'height' => '');
return (array) $meta;
}
}
}
/**
* Dropdown Pages.
*/
if ( !class_exists( 'THE7_RWMB_Dropdown_Pages_Field' ) )
{
class THE7_RWMB_Dropdown_Pages_Field
{
/**
* Get field HTML
*
* @param string $html
* @param mixed $meta
* @param array $field
*
* @return string
*/
static function html( $html, $meta, $field )
{
$html = wp_dropdown_pages( array(
'name' => esc_attr( $field['id'] ),
'id' => esc_attr( $field['id'] ),
'echo' => 0,
'show_option_none' => $field['placeholder'],
'option_none_value' => '0',
'selected' => $meta,
'post_status' => $field['post_status'],
'class' => 'the7-mb-select',
) );
return $html;
}
/**
* Normalize parameters for field
*
* @param array $field
*
* @return array
*/
static function normalize_field( $field )
{
$field = wp_parse_args( $field, array(
'post_status' => 'publish',
) );
$field['std'] = empty( $field['std'] ) ? _x( 'Select a Page', 'pages', 'the7mk2' ) : $field['std'];
return THE7_RWMB_Select_Field::normalize_field( $field );
}
/**
* Get meta value
* If field is cloneable, value is saved as a single entry in DB
* Otherwise value is saved as multiple entries (for backward compatibility)
*
* @see "save" method for better understanding
*
* @param $meta
* @param $post_id
* @param $saved
* @param $field
*
* @return array
*/
static function meta( $meta, $post_id, $saved, $field )
{
$meta = THE7_RWMB_Select_Field::meta( $meta, $post_id, $saved, $field );
return is_array( $meta ) ? current( $meta ) : $meta;
}
/**
* Save meta value
* If field is cloneable, value is saved as a single entry in DB
* Otherwise value is saved as multiple entries (for backward compatibility)
*
* TODO: A good way to ALWAYS save values in single entry in DB, while maintaining backward compatibility
*
* @param $new
* @param $old
* @param $post_id
* @param $field
*/
static function save( $new, $old, $post_id, $field )
{
return THE7_RWMB_Select_Field::save( $new, $old, $post_id, $field );
}
}
}
/**
* Add assistive text to text input.
*/
function presscore_meta_box_text_assistive_text( $field_html, $field, $meta ) {
if ( !empty($field['assistive_text']) ) {
$field_html .= ' <small>' . $field['assistive_text'] . '</small>';
}
return $field_html;
}
add_filter( 'the7_mb_text_html', 'presscore_meta_box_text_assistive_text', 10, 3 );
/**
* Add some classes to meta box wrap.
*/
function presscore_meta_box_classes( $begin, $field, $meta ) {
$classes = array(
'the7-mb-input-'.esc_attr($field['id'])
);
// compatibility with old scripts and styles
switch ( $field['type'] ) {
case 'radio':
foreach( $field['options'] as $option ) {
if ( is_array($option) ) { $classes[] = 'dt_radio-img'; break; }
}
break;
}
if ( !empty($field['show_on']) ) {
$begin = str_replace('class="the7-mb-field', 'data-show-on="' . esc_attr(implode(',', (array) $field['show_on'])) . '" class="the7-mb-field hide-if-js', $begin);
}
if ( !empty($field['top_divider']) ) {
$begin = '<div class="dt_hr dt_hr-top"></div>' . $begin;
}
// divider
if ( !empty( $field['divider'] ) && in_array( $field['divider'], array( 'top', 'top_and_bottom' ) ) ) {
$begin = '<div class="dt_hr dt_hr-top"></div>' . $begin;
}
return str_replace('class="the7-mb-input', 'class="the7-mb-input ' . implode(' ', $classes), $begin);
}
add_filter('the7_mb_begin_html', 'presscore_meta_box_classes', 10, 3);
/**
* Add some classes to meta box wrap.
*/
function presscore_meta_box_classes_end_html( $end, $field, $meta ) {
// divider
if ( !empty( $field['divider'] ) && in_array( $field['divider'], array( 'bottom', 'top_and_bottom' ) ) ) {
$end .= '<div class="dt_hr dt_hr-bottom"></div>';
}
if ( !empty($field['bottom_divider']) ) {
$end .= '<div class="dt_hr dt_hr-bottom"></div>';
}
return $end;
}
add_filter('the7_mb_end_html', 'presscore_meta_box_classes_end_html', 10, 3);
function presscore_meta_box_before_html( $before_html, $field ) {
static $saved_show_on_template = array();
$open_template = '<div class="the7-mb-hidden-field hide-if-js" data-show-on="%s">';
$close_template = '</div>';
$field_show_on_template = isset( $field['show_on_template'] ) ? $field['show_on_template'] : array();
if ( !is_array( $field_show_on_template ) ) {
$field_show_on_template = explode( ',', $field_show_on_template );
}
$field_show_on_template = array_map( 'trim', $field_show_on_template );
sort( $field_show_on_template );
$result_html = $before_html;
if ( empty( $saved_show_on_template ) && !empty( $field_show_on_template ) ) {
$saved_show_on_template = $field_show_on_template;
$result_html .= sprintf( $open_template, implode( ',', $saved_show_on_template ) );
} elseif ( ! empty( $saved_show_on_template ) && empty( $field_show_on_template ) ) {
$saved_show_on_template = [];
$result_html = $close_template . $result_html;
} elseif ( ! empty( $saved_show_on_template ) && ! empty( $field_show_on_template ) ) {
$saved_string = implode( ',', $saved_show_on_template );
$field_string = implode( ',', $field_show_on_template );
if ( $saved_string != $field_string ) {
$saved_show_on_template = $field_show_on_template;
$result_html = $close_template . $before_html . sprintf( $open_template, implode( ',', $saved_show_on_template ) );
}
}
return $result_html;
}
add_filter( 'the7_mb_field_before_html', 'presscore_meta_box_before_html', 10, 2 );