354 lines
5.0 KiB
PHP
354 lines
5.0 KiB
PHP
<?php
|
|
|
|
if( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
|
|
|
if( ! class_exists('acf_admin_tools') ) :
|
|
|
|
class acf_admin_tools {
|
|
|
|
|
|
/** @var array Contains an array of admin tool instances */
|
|
var $tools = array();
|
|
|
|
|
|
/** @var string The active tool */
|
|
var $active = '';
|
|
|
|
|
|
/**
|
|
* __construct
|
|
*
|
|
* This function will setup the class functionality
|
|
*
|
|
* @date 10/10/17
|
|
* @since 5.6.3
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function __construct() {
|
|
|
|
// actions
|
|
add_action('admin_menu', array($this, 'admin_menu'));
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* register_tool
|
|
*
|
|
* This function will store a tool tool class
|
|
*
|
|
* @date 10/10/17
|
|
* @since 5.6.3
|
|
*
|
|
* @param string $class
|
|
* @return n/a
|
|
*/
|
|
|
|
function register_tool( $class ) {
|
|
|
|
$instance = new $class();
|
|
$this->tools[ $instance->name ] = $instance;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* get_tool
|
|
*
|
|
* This function will return a tool tool class
|
|
*
|
|
* @date 10/10/17
|
|
* @since 5.6.3
|
|
*
|
|
* @param string $name
|
|
* @return n/a
|
|
*/
|
|
|
|
function get_tool( $name ) {
|
|
|
|
return isset( $this->tools[$name] ) ? $this->tools[$name] : null;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* get_tools
|
|
*
|
|
* This function will return an array of all tools
|
|
*
|
|
* @date 10/10/17
|
|
* @since 5.6.3
|
|
*
|
|
* @param n/a
|
|
* @return array
|
|
*/
|
|
|
|
function get_tools() {
|
|
|
|
return $this->tools;
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* admin_menu
|
|
*
|
|
* This function will add the ACF menu item to the WP admin
|
|
*
|
|
* @type action (admin_menu)
|
|
* @date 28/09/13
|
|
* @since 5.0.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function admin_menu() {
|
|
|
|
// bail early if no show_admin
|
|
if( !acf_get_setting('show_admin') ) return;
|
|
|
|
|
|
// add page
|
|
$page = add_submenu_page('edit.php?post_type=acf-field-group', __('Tools','acf'), __('Tools','acf'), acf_get_setting('capability'), 'acf-tools', array($this, 'html'));
|
|
|
|
|
|
// actions
|
|
add_action('load-' . $page, array($this, 'load'));
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* load
|
|
*
|
|
* description
|
|
*
|
|
* @date 10/10/17
|
|
* @since 5.6.3
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function load() {
|
|
|
|
// disable filters (default to raw data)
|
|
acf_disable_filters();
|
|
|
|
|
|
// include tools
|
|
$this->include_tools();
|
|
|
|
|
|
// check submit
|
|
$this->check_submit();
|
|
|
|
|
|
// load acf scripts
|
|
acf_enqueue_scripts();
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* include_tools
|
|
*
|
|
* description
|
|
*
|
|
* @date 10/10/17
|
|
* @since 5.6.3
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function include_tools() {
|
|
|
|
// include
|
|
acf_include('includes/admin/tools/class-acf-admin-tool.php');
|
|
acf_include('includes/admin/tools/class-acf-admin-tool-export.php');
|
|
acf_include('includes/admin/tools/class-acf-admin-tool-import.php');
|
|
|
|
|
|
// action
|
|
do_action('acf/include_admin_tools');
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* check_submit
|
|
*
|
|
* description
|
|
*
|
|
* @date 10/10/17
|
|
* @since 5.6.3
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function check_submit() {
|
|
|
|
// loop
|
|
foreach( $this->get_tools() as $tool ) {
|
|
|
|
// load
|
|
$tool->load();
|
|
|
|
|
|
// submit
|
|
if( acf_verify_nonce($tool->name) ) {
|
|
$tool->submit();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* html
|
|
*
|
|
* description
|
|
*
|
|
* @date 10/10/17
|
|
* @since 5.6.3
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function html() {
|
|
|
|
// vars
|
|
$screen = get_current_screen();
|
|
$active = acf_maybe_get_GET('tool');
|
|
|
|
|
|
// view
|
|
$view = array(
|
|
'screen_id' => $screen->id,
|
|
'active' => $active
|
|
);
|
|
|
|
|
|
// register metaboxes
|
|
foreach( $this->get_tools() as $tool ) {
|
|
|
|
// check active
|
|
if( $active && $active !== $tool->name ) continue;
|
|
|
|
|
|
// add metabox
|
|
add_meta_box( 'acf-admin-tool-' . $tool->name, $tool->title, array($this, 'metabox_html'), $screen->id, 'normal', 'default', array('tool' => $tool->name) );
|
|
|
|
}
|
|
|
|
|
|
// view
|
|
acf_get_view( 'html-admin-tools', $view );
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* meta_box_html
|
|
*
|
|
* description
|
|
*
|
|
* @date 10/10/17
|
|
* @since 5.6.3
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function metabox_html( $post, $metabox ) {
|
|
|
|
// vars
|
|
$tool = $this->get_tool($metabox['args']['tool']);
|
|
|
|
|
|
?>
|
|
<form method="post">
|
|
<?php $tool->html(); ?>
|
|
<?php acf_nonce_input( $tool->name ); ?>
|
|
</form>
|
|
<?php
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// initialize
|
|
acf()->admin_tools = new acf_admin_tools();
|
|
|
|
endif; // class_exists check
|
|
|
|
|
|
/*
|
|
* acf_register_admin_tool
|
|
*
|
|
* alias of acf()->admin_tools->register_tool()
|
|
*
|
|
* @type function
|
|
* @date 31/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function acf_register_admin_tool( $class ) {
|
|
|
|
return acf()->admin_tools->register_tool( $class );
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* acf_get_admin_tools_url
|
|
*
|
|
* This function will return the admin URL to the tools page
|
|
*
|
|
* @type function
|
|
* @date 31/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function acf_get_admin_tools_url() {
|
|
|
|
return admin_url('edit.php?post_type=acf-field-group&page=acf-tools');
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* acf_get_admin_tool_url
|
|
*
|
|
* This function will return the admin URL to the tools page
|
|
*
|
|
* @type function
|
|
* @date 31/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function acf_get_admin_tool_url( $tool = '' ) {
|
|
|
|
return acf_get_admin_tools_url() . '&tool='.$tool;
|
|
|
|
}
|
|
|
|
|
|
?>
|