This repository has been archived on 2023-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
Omphaloskepsis/plugins/infinite-scroll/includes/admin.php

126 lines
3.7 KiB
PHP
Raw Permalink Normal View History

2018-03-21 18:19:20 +00:00
<?php
/**
* Infinite Scroll Administrative Backend
* @subpackage Admin
* @package Infinite_Scroll
*/
class Infinite_Scroll_Admin {
private $parent;
/**
* Register hooks with WordPress API
* @param class $parent (reference) the Parent Class
*/
function __construct( &$parent ) {
$this->parent = &$parent;
add_action( 'admin_menu', array( &$this, 'options_menu_init' ) );
add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue' ) );
//upload helers
add_filter( 'get_media_item_args', array( &$this, 'send_to_editor'), 10, 1);
}
/**
* Register our menu with WordPress
*/
function options_menu_init() {
add_options_page( __( 'Infinite Scroll Options', 'infinite-scroll' ), __( 'Infinite Scroll', 'infinite-scroll' ), 'manage_options', 'infinite_scroll_options', array( &$this, 'options' ) );
}
/**
* Callback to load options template
*/
function options() {
//toggle presets page
$file = isset( $_GET['manage-presets'] ) ? 'manage-presets' : 'options';
$file = isset( $_GET['submit'] ) ? 'submit' : $file;
require dirname( $this->parent->file ) . '/templates/' . $file . '.php';
}
/**
* Enqueue admin JS on options page
*/
function admin_enqueue() {
if ( get_current_screen()->id != 'settings_page_infinite_scroll_options' && !defined( 'IFRAME_REQUEST' ) )
return;
$suffix = ( WP_DEBUG || SCRIPT_DEBUG ) ? '.dev' : '';
$file = "/js/admin/infinite-scroll{$suffix}.js";
wp_enqueue_script( $this->parent->slug, plugins_url( $file, $this->parent->file ), array( 'jquery', 'media-upload', 'thickbox' ), $this->parent->version, true );
wp_enqueue_style('thickbox');
wp_localize_script( $this->parent->slug, $this->parent->slug_, array( 'confirm' => __( 'Are you sure you want to delete the preset "%s"?', 'infinite-scroll' ) ) );
}
/**
* If image is sucessfully uploaded, automatically close the editor
* and store the image URL in the image input
* @param array $args the default args
* @return array the original args, unmodified
* @uses media_send_to_editor()
& @uses send_to_editor() (javascript)
*/
function send_to_editor( $args ) {
global $wpdb;
if ( $args['errors'] !== null )
return $args;
if ( isset( $_GET['attachment_id'] ) ) {
$id = $_GET['attachment_id'];
//workaround for WP 3.2 non-flash upload
//not ideal, but works for an edge case
} else {
//because we can't get the attachment ID at this point, try to pull it from the database
//look for the most recent parent-less attachment with same title and mime-type
$upload = $GLOBALS['HTTP_POST_FILES']['async-upload'];
$title = substr( $upload['name'], 0, strrpos( $upload['name'], '.' ) );
$id = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type = '" . $upload['type'] . "' AND post_parent = '0' AND post_title = '$title' ORDER BY ID DESC LIMIT 1" );
//if for some reason we couldn't pull the ID, simply kick
//the user will just have to click insert to close the dialog
if ( !$id )
return $args;
}
//rely on WordPress's internal function to output script tags and call send_to_editor()
media_send_to_editor( wp_get_attachment_url( $id ) );
return $args;
}
/**
* Wrapper function to load the tinyMCE Editor
* Used to allow fallback to pre-3.3 function
* @param string $field the field to load the editor for
*/
function editor( $field ) {
//3.3
if ( function_exists( 'wp_editor' ) )
wp_editor( $this->parent->options->loading[ $field ], "infinite_scroll[loading][{$field}]", array( 'media_buttons' => false, 'textarea_rows' => 5, 'teeny' => true ) );
//3.2
else
the_editor( $this->parent->options->loading[ $field ], "infinite_scroll[loading][{$field}]", null, false );
}
}