define('IJ_POST_ATTACHMENTS_DIR', dirname(__FILE__));
define('IJ_POST_ATTACHMENTS_URL', plugin_dir_url(__FILE__));
define('IJ_POST_ATTACHMENTS_VER', '0.1.0');
//
class IJ_Post_Attachments
{
//
/**
* List of methods that are WP actions.
*
* @since 0.0.1a
* @var array
*/
private $actions = array(
'add_meta_boxes', 'admin_print_styles', 'admin_enqueue_scripts',
'wp_ajax_ij_realign', 'wp_ajax_ij_attachment_edit'
);
/**
* The singleton instance of this class
*
* @since 0.0.1a
* @var IJ_Post_Attachments
*/
private static $instance;
//
//
/**
* Constructor
*
* @since 0.0.1a
* @return IJ_Post_Attachments
*/
private function __construct()
{
foreach ($this->actions as $action)
add_action($action, array($this, $action));
}
/**
* Singleton access for the class
*
* @static
* @since 0.0.1a
* @return IJ_Post_Attachments
*/
static public function getInstance()
{
if (!isset(self::$instance))
self::$instance = new IJ_Post_Attachments();
return self::$instance;
}
/**
* Disallows cloning this class
*
* @since 0.0.1a
* @throws Exception
* @return void
*/
public function __clone()
{
throw new Exception("Clone is disallowed.");
}
//
//
/**
* Add the plugin meta box
*
* @since 0.0.1a
* @return void
*/
public function add_meta_boxes()
{
$pid = isset($_GET['post']) ? $_GET['post'] : 0;
global $pagenow;
if (!(in_array( $pagenow, array( 'post-new.php' ) )) && ($pid == '0' || $pid == NULL)) {
return; //Additional check to avoid showing the metabox in not-intended pages (ex. Members Plugin)
}
add_meta_box(
'ij-post-attachments', __('Media'),
array($this, 'printMetaBox'), null, 'normal', 'high'
);
}
/**
* Enqueue the JS files needed by the plugin
*
* @since 0.0.1a
* @return void
*/
public function admin_enqueue_scripts()
{
global $hook_suffix;
if ($hook_suffix != 'post.php')
return;
wp_enqueue_script('syoHint', IJ_POST_ATTACHMENTS_URL . 'scripts/jquery.syoHint.js', array('jquery'), '1.0.10');
wp_enqueue_script(
'ij-post-attachments', IJ_POST_ATTACHMENTS_URL . 'scripts/ij-post-attachments.js',
array('syoHint', 'jquery-ui-sortable'), IJ_POST_ATTACHMENTS_VER
);
wp_localize_script('ij-post-attachments', 'IJ_Post_Attachments_Vars', array(
'editMedia' => __('Edit Media'),
'postID' => isset($_GET['post']) ? $_GET['post'] : 0
));
}
/**
* Enqueue the plugin CSS
*
* @since 0.0.1a
* @return void
*/
public function admin_print_styles()
{
global $hook_suffix;
if ($hook_suffix == 'post.php' || $hook_suffix == 'post-new.php' )
wp_enqueue_style('ij-post-attachments', IJ_POST_ATTACHMENTS_URL . 'styles/ij-post-attachments.css', array(), IJ_POST_ATTACHMENTS_VER);
}
/**
* Create the meta box below the post editor and list the files
*
* @since 0.0.1a
* @param object $post
* @return void
*/
public function printMetaBox($post)
{
$attachments = new WP_Query(array(
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_status' => 'any',
'orderby' => 'menu_order',
'order' => 'ASC'
));
include IJ_POST_ATTACHMENTS_DIR . '/html/metabox.php';
}
//
//
/**
* Output the script/link tags needed by the edit iframe
*
* @since 0.0.1a
* @return void
*/
public function attachmentEditHeadIframe()
{
global $wp_scripts;
wp_default_scripts($wp_scripts);
// I don't know if all these scripts are really needed by the media edit screen.
// They're just there, so they'll be here too :P
include IJ_POST_ATTACHMENTS_DIR . '/html/attachmentEditHead.php';
// Add the needed vars to set the thumbnail :)
$wp_scripts->localize('set-post-thumbnail', 'post_id', $_GET['post_id']);
$wp_scripts->print_extra_script('set-post-thumbnail');
}
/**
* Echoes the content of the edit iframe
*
* @since 0.0.1a
* @return void
*/
public function attachmentEditIframe()
{
$url = admin_url('media.php');
$id = $_REQUEST['attachment_id'];
include IJ_POST_ATTACHMENTS_DIR . '/html/attachmentEditIframe.php';
}
/**
* Initialize the attachment edit pop-up.
*
* @since 0.0.1a
* @return void
*/
public function wp_ajax_ij_attachment_edit()
{
add_action('admin_head-media-upload-popup', array($this, 'attachmentEditHeadIframe'));
wp_iframe(array($this, 'attachmentEditIframe'));
// Without the line below, the WP AJAX caller (admin-ajax.php) would print an '0'
// at the end of the request.
die;
}
//
//
/**
* Re-align attachments.
*
* @since 0.0.1a
* @return void
*/
public function wp_ajax_ij_realign()
{
header('Content-Type: text/plain');
$alignment = $_REQUEST['alignment'];
if (!is_array($alignment))
$alignment = array_map('trim', explode(',', $alignment));
$alignment = array_values($alignment);
$count = count($alignment);
for ($i = 0; $i < $count; $i++) {
if (!is_numeric($alignment[$i]))
continue;
$attachment = get_post($alignment[$i]);
$attachment->menu_order = $i;
wp_update_post($attachment);
}
}
//
}
$IJ_Post_Attachments = IJ_Post_Attachments::getInstance();