482 lines
10 KiB
PHP
482 lines
10 KiB
PHP
<?php
|
|
|
|
if( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
|
|
|
if( ! class_exists('ACF_Assets') ) :
|
|
|
|
class ACF_Assets {
|
|
|
|
/** @var array Storage for translations */
|
|
var $text = array();
|
|
|
|
/** @var array Storage for data */
|
|
var $data = array();
|
|
|
|
|
|
/**
|
|
* __construct
|
|
*
|
|
* description
|
|
*
|
|
* @date 10/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param void
|
|
* @return void
|
|
*/
|
|
|
|
function __construct() {
|
|
|
|
// actions
|
|
add_action('init', array($this, 'register_scripts'));
|
|
}
|
|
|
|
|
|
/**
|
|
* add_text
|
|
*
|
|
* description
|
|
*
|
|
* @date 13/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function add_text( $text ) {
|
|
foreach( (array) $text as $k => $v ) {
|
|
$this->text[ $k ] = $v;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* add_data
|
|
*
|
|
* description
|
|
*
|
|
* @date 13/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function add_data( $data ) {
|
|
foreach( (array) $data as $k => $v ) {
|
|
$this->data[ $k ] = $v;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* register_scripts
|
|
*
|
|
* description
|
|
*
|
|
* @date 13/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function register_scripts() {
|
|
|
|
// vars
|
|
$version = acf_get_setting('version');
|
|
$min = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
|
|
|
|
// scripts
|
|
wp_register_script('acf-input', acf_get_url("assets/js/acf-input{$min}.js"), array('jquery', 'jquery-ui-sortable', 'jquery-ui-resizable'), $version );
|
|
wp_register_script('acf-field-group', acf_get_url("assets/js/acf-field-group{$min}.js"), array('acf-input'), $version );
|
|
|
|
// styles
|
|
wp_register_style('acf-global', acf_get_url('assets/css/acf-global.css'), array(), $version );
|
|
wp_register_style('acf-input', acf_get_url('assets/css/acf-input.css'), array('acf-global'), $version );
|
|
wp_register_style('acf-field-group', acf_get_url('assets/css/acf-field-group.css'), array('acf-input'), $version );
|
|
|
|
// action
|
|
do_action('acf/register_scripts', $version, $min);
|
|
}
|
|
|
|
|
|
/**
|
|
* enqueue_scripts
|
|
*
|
|
* Enqueue scripts for input
|
|
*
|
|
* @date 13/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function enqueue_scripts( $args = array() ) {
|
|
|
|
// run only once
|
|
if( acf_has_done('enqueue_scripts') ) {
|
|
return;
|
|
}
|
|
|
|
// defaults
|
|
$args = wp_parse_args($args, array(
|
|
|
|
// force tinymce editor to be enqueued
|
|
'uploader' => false,
|
|
|
|
// priority used for action callbacks, defaults to 20 which runs after defaults
|
|
'priority' => 20,
|
|
|
|
// action prefix
|
|
'context' => is_admin() ? 'admin' : 'wp'
|
|
));
|
|
|
|
// define actions
|
|
$actions = array(
|
|
'admin_enqueue_scripts' => $args['context'] . '_enqueue_scripts',
|
|
'admin_print_scripts' => $args['context'] . '_print_scripts',
|
|
'admin_head' => $args['context'] . '_head',
|
|
'admin_footer' => $args['context'] . '_footer',
|
|
'admin_print_footer_scripts' => $args['context'] . '_print_footer_scripts',
|
|
);
|
|
|
|
// fix customizer actions where head and footer are not available
|
|
if( $args['context'] == 'customize_controls' ) {
|
|
$actions['admin_head'] = $actions['admin_print_scripts'];
|
|
$actions['admin_footer'] = $actions['admin_print_footer_scripts'];
|
|
}
|
|
|
|
// add actions
|
|
foreach( $actions as $function => $action ) {
|
|
acf_maybe_add_action( $action, array($this, $function), $args['priority'] );
|
|
}
|
|
|
|
// enqueue uploader
|
|
// WP requires a lot of JS + inline scripes to create the media modal and should be avoioded when possible.
|
|
// - priority must be less than 10 to allow WP to enqueue
|
|
if( $args['uploader'] ) {
|
|
add_action($actions['admin_footer'], 'acf_enqueue_uploader', 5);
|
|
}
|
|
|
|
// localize text
|
|
acf_localize_text(array(
|
|
|
|
// unload
|
|
'The changes you made will be lost if you navigate away from this page' => __('The changes you made will be lost if you navigate away from this page', 'acf'),
|
|
|
|
// media
|
|
'Select.verb' => _x('Select', 'verb', 'acf'),
|
|
'Edit.verb' => _x('Edit', 'verb', 'acf'),
|
|
'Update.verb' => _x('Update', 'verb', 'acf'),
|
|
'Uploaded to this post' => __('Uploaded to this post', 'acf'),
|
|
'Expand Details' => __('Expand Details', 'acf'),
|
|
'Collapse Details' => __('Collapse Details', 'acf'),
|
|
'Restricted' => __('Restricted', 'acf'),
|
|
'All images' => __('All images', 'acf'),
|
|
|
|
// validation
|
|
'Validation successful' => __('Validation successful', 'acf'),
|
|
'Validation failed' => __('Validation failed', 'acf'),
|
|
'1 field requires attention' => __('1 field requires attention', 'acf'),
|
|
'%d fields require attention' => __('%d fields require attention', 'acf'),
|
|
|
|
// tooltip
|
|
'Are you sure?' => __('Are you sure?','acf'),
|
|
'Yes' => __('Yes','acf'),
|
|
'No' => __('No','acf'),
|
|
'Remove' => __('Remove','acf'),
|
|
'Cancel' => __('Cancel','acf'),
|
|
|
|
// conditions
|
|
'Has any value' => __('Has any value', 'acf'),
|
|
'Has no value' => __('Has no value', 'acf'),
|
|
'Value is equal to' => __('Value is equal to', 'acf'),
|
|
'Value is not equal to' => __('Value is not equal to', 'acf'),
|
|
'Value matches pattern' => __('Value matches pattern', 'acf'),
|
|
'Value contains' => __('Value contains', 'acf'),
|
|
'Value is greater than' => __('Value is greater than', 'acf'),
|
|
'Value is less than' => __('Value is less than', 'acf'),
|
|
'Selection is greater than' => __('Selection is greater than', 'acf'),
|
|
'Selection is less than' => __('Selection is less than', 'acf'),
|
|
|
|
// misc
|
|
'Edit field group' => __('Edit field group', 'acf'),
|
|
));
|
|
}
|
|
|
|
|
|
/**
|
|
* admin_enqueue_scripts
|
|
*
|
|
* description
|
|
*
|
|
* @date 16/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function admin_enqueue_scripts() {
|
|
|
|
// enqueue
|
|
wp_enqueue_script('acf-input');
|
|
wp_enqueue_style('acf-input');
|
|
|
|
// vars
|
|
$text = array();
|
|
|
|
// actions
|
|
do_action('acf/enqueue_scripts');
|
|
do_action('acf/admin_enqueue_scripts');
|
|
do_action('acf/input/admin_enqueue_scripts');
|
|
|
|
// only include translated strings
|
|
foreach( $this->text as $k => $v ) {
|
|
if( str_replace('.verb', '', $k) !== $v ) {
|
|
$text[ $k ] = $v;
|
|
}
|
|
}
|
|
|
|
// localize text
|
|
if( $text ) {
|
|
wp_localize_script( 'acf-input', 'acfL10n', $text );
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* admin_print_scripts
|
|
*
|
|
* description
|
|
*
|
|
* @date 18/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function admin_print_scripts() {
|
|
do_action('acf/admin_print_scripts');
|
|
}
|
|
|
|
|
|
/**
|
|
* admin_head
|
|
*
|
|
* description
|
|
*
|
|
* @date 16/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function admin_head() {
|
|
|
|
// actions
|
|
do_action('acf/admin_head');
|
|
do_action('acf/input/admin_head');
|
|
}
|
|
|
|
|
|
/**
|
|
* admin_footer
|
|
*
|
|
* description
|
|
*
|
|
* @date 16/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function admin_footer() {
|
|
|
|
// global
|
|
global $wp_version;
|
|
|
|
// get data
|
|
$data = wp_parse_args($this->data, array(
|
|
'screen' => acf_get_form_data('screen'),
|
|
'post_id' => acf_get_form_data('post_id'),
|
|
'nonce' => wp_create_nonce( 'acf_nonce' ),
|
|
'admin_url' => admin_url(),
|
|
'ajaxurl' => admin_url( 'admin-ajax.php' ),
|
|
'validation' => acf_get_form_data('validation'),
|
|
'wp_version' => $wp_version,
|
|
'acf_version' => acf_get_setting('version'),
|
|
'browser' => acf_get_browser(),
|
|
'locale' => acf_get_locale(),
|
|
'rtl' => is_rtl(),
|
|
'editor' => acf_is_block_editor() ? 'block' : 'classic'
|
|
));
|
|
|
|
// get l10n (old)
|
|
$l10n = apply_filters( 'acf/input/admin_l10n', array() );
|
|
|
|
// todo: force 'acf-input' script enqueue if not yet included
|
|
// - fixes potential timing issue if acf_enqueue_assest() was called during body
|
|
|
|
// localize data
|
|
?>
|
|
<script type="text/javascript">
|
|
acf.data = <?php echo wp_json_encode($data); ?>;
|
|
acf.l10n = <?php echo wp_json_encode($l10n); ?>;
|
|
</script>
|
|
<?php
|
|
|
|
// actions
|
|
do_action('acf/admin_footer');
|
|
do_action('acf/input/admin_footer');
|
|
|
|
// trigger prepare
|
|
?>
|
|
<script type="text/javascript">
|
|
acf.doAction('prepare');
|
|
</script>
|
|
<?php
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* admin_print_footer_scripts
|
|
*
|
|
* description
|
|
*
|
|
* @date 18/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function admin_print_footer_scripts() {
|
|
do_action('acf/admin_print_footer_scripts');
|
|
}
|
|
|
|
/*
|
|
* enqueue_uploader
|
|
*
|
|
* This function will render a WP WYSIWYG and enqueue media
|
|
*
|
|
* @type function
|
|
* @date 27/10/2014
|
|
* @since 5.0.9
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function enqueue_uploader() {
|
|
|
|
// run only once
|
|
if( acf_has_done('enqueue_uploader') ) {
|
|
return;
|
|
}
|
|
|
|
// bail early if doing ajax
|
|
if( acf_is_ajax() ) {
|
|
return;
|
|
}
|
|
|
|
// enqueue media if user can upload
|
|
if( current_user_can('upload_files') ) {
|
|
wp_enqueue_media();
|
|
}
|
|
|
|
// create dummy editor
|
|
?>
|
|
<div id="acf-hidden-wp-editor" class="acf-hidden">
|
|
<?php wp_editor( '', 'acf_content' ); ?>
|
|
</div>
|
|
<?php
|
|
|
|
// action
|
|
do_action('acf/enqueue_uploader');
|
|
}
|
|
}
|
|
|
|
// instantiate
|
|
acf_new_instance('ACF_Assets');
|
|
|
|
endif; // class_exists check
|
|
|
|
|
|
/**
|
|
* acf_localize_text
|
|
*
|
|
* description
|
|
*
|
|
* @date 13/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function acf_localize_text( $text ) {
|
|
return acf_get_instance('ACF_Assets')->add_text( $text );
|
|
}
|
|
|
|
|
|
/**
|
|
* acf_localize_data
|
|
*
|
|
* description
|
|
*
|
|
* @date 13/4/18
|
|
* @since 5.6.9
|
|
*
|
|
* @param type $var Description. Default.
|
|
* @return type Description.
|
|
*/
|
|
|
|
function acf_localize_data( $data ) {
|
|
return acf_get_instance('ACF_Assets')->add_data( $data );
|
|
}
|
|
|
|
|
|
/*
|
|
* acf_enqueue_scripts
|
|
*
|
|
*
|
|
*
|
|
* @type function
|
|
* @date 6/10/13
|
|
* @since 5.0.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function acf_enqueue_scripts( $args = array() ) {
|
|
return acf_get_instance('ACF_Assets')->enqueue_scripts( $args );
|
|
}
|
|
|
|
|
|
/*
|
|
* acf_enqueue_uploader
|
|
*
|
|
* This function will render a WP WYSIWYG and enqueue media
|
|
*
|
|
* @type function
|
|
* @date 27/10/2014
|
|
* @since 5.0.9
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function acf_enqueue_uploader() {
|
|
return acf_get_instance('ACF_Assets')->enqueue_uploader();
|
|
}
|
|
|
|
?>
|