Files
SIGE-WEB-snapshot/ambiente-de-test/wp-content/plugins/document-gallery/admin/tabs/thumbnail-management-tab.php

330 lines
15 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
defined( 'WPINC' ) OR exit;
global $dg_url_params;
$dg_url_params = array( 'page' => DG_OPTION_NAME, 'tab' => 'thumbnail-management-tab' );
/**
* Register settings for the tab.
*/
function dg_register_settings() {
add_settings_section(
'thumbnail_table', '',
'dg_render_thumbnail_section', DG_OPTION_NAME );
}
/**
* Validate settings for the tab.
*/
function dg_validate_settings( $values ) {
global $dg_options;
$ret = $dg_options;
$responseArr = array( 'result' => false );
if ( isset( $values['entry'] ) ) {
$ID = intval( $values['entry'] );
} else {
$ID = - 1;
}
// Thumbnail(s) cleanup;
// cleanup value is a marker
if ( isset( $values['cleanup'] ) && isset( $values['ids'] ) ) {
$deleted = array_values( array_intersect( array_keys( DG_Thumb::getThumbs() ), $values['ids'] ) );
DG_Thumb::purgeThumbs( $deleted );
$responseArr['result'] = true;
$responseArr['deleted'] = $deleted;
}
// Attachment title update
// title value is a marker
elseif ( isset( $values['title'] ) && $ID != - 1 ) {
$attachment = array(
'ID' => $ID,
'post_title' => rawurldecode( addslashes( $values['title'] ) )
);
if ( wp_update_post( $attachment ) ) {
$responseArr['result'] = true;
}
}
// Attachment description update
// description value is a marker
elseif ( isset( $values['description'] ) && $ID != - 1 ) {
$attachment = array(
'ID' => $ID,
'post_content' => rawurldecode( addslashes( $values['description'] ) )
);
if ( wp_update_post( $attachment ) ) {
$responseArr['result'] = true;
}
}
// Thumbnail file manual refresh (one at a time)
// upload value is a marker
elseif ( isset( $values['upload'] ) && isset( $_FILES['file'] ) && array_key_exists( $ID, DG_Thumb::getThumbs() ) ) {
$uploaded_filename = DG_Admin::validateUploadedFile();
if ( $uploaded_filename && ( $thumb = DG_Thumber::setThumbnail( $ID, $uploaded_filename ) ) ) {
$responseArr['result'] = true;
$responseArr['url'] = $thumb->getUrl();
}
}
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
echo wp_json_encode( $responseArr );
add_filter( 'wp_redirect', 'dg_exit', 1, 0 );
}
return $ret;
}
/**
* Render the Thumbnail table.
*/
function dg_render_thumbnail_section() {
global $dg_url_params;
include_once DG_PATH . 'inc/class-thumber.php';
static $limit_options = array( 10, 25, 75 );
static $order_options = array( 'asc', 'desc' );
static $orderby_options = array( 'date', 'title' );
$options = DG_Thumber::getOptions();
// find subset of thumbs to be included
$orderby = $dg_url_params['orderby'] = dg_get_orderby_param( $orderby_options );
$order = $dg_url_params['order'] = dg_get_order_param( $order_options );
$limit = $dg_url_params['limit'] = dg_get_limit_param();
/** @var DG_Thumb[] $thumbs */
$thumbs = DG_Thumb::getThumbs( $options['width'] . 'x' . $options['height'] );
uasort( $thumbs, 'dg_cmp_thumb' );
$thumbs_number = count( $thumbs );
$lastsheet = ceil( $thumbs_number / $limit );
$sheet = isset( $_REQUEST['sheet'] ) ? absint( $_REQUEST['sheet'] ) : 1;
if ( $sheet === 0 || $sheet > $lastsheet ) {
$sheet = 1;
}
$offset = ( $sheet - 1 ) * $limit;
$thumbs = array_slice( $thumbs, $offset, $limit, true );
// https://core.trac.wordpress.org/ticket/12212
$posts = array();
if ( ! empty( $thumbs ) ) {
$posts = get_posts(
array(
'post_type' => 'any',
'post_status' => 'any',
'numberposts' => - 1,
'post__in' => array_keys( $thumbs ),
'orderby' => 'post__in'
) );
}
foreach ( $posts as $post ) {
$path_parts = pathinfo( $post->guid );
$thumb = $thumbs[$post->ID];
$thumbs[$post->ID] = array();
$t = &$thumbs[$post->ID];
$t['timestamp'] = $thumb->getTimestamp();
$t['title'] = dg_get_thumb_title( $post );
$t['ext'] = isset( $path_parts['extension'] ) ? $path_parts['extension'] : '';
$t['description'] = $post->post_content;
$t['icon'] = $thumb->isSuccess() ? $thumb->getUrl() : DG_DefaultThumber::getInstance()->getThumbnail( $post->ID );
}
unset( $posts );
$select_limit = '';
foreach ( $limit_options as $l_o ) {
$select_limit .= '<option value="' . $l_o . '"' . selected( $limit, $l_o, false ) . '>' . $l_o . '</option>' . PHP_EOL;
}
$thead = '<tr>' .
'<th scope="col" class="manage-column column-cb check-column">' .
'<label class="screen-reader-text" for="cb-select-all-%1$d">' . __( 'Select All', 'document-gallery' ) . '</label>' .
'<input id="cb-select-all-%1$d" type="checkbox">' .
'</th>' .
'<th scope="col" class="manage-column column-icon">' . __( 'Thumbnail', 'document-gallery' ) . '</th>' .
'<th scope="col" class="manage-column column-title ' . ( ( $orderby != 'title' ) ? 'sortable desc' : 'sorted ' . $order ) . '"><a href="?' . http_build_query( array_merge( $dg_url_params, array(
'orderby' => 'title',
'order' => ( ( $orderby != 'title' ) ? 'asc' : ( ( $order == 'asc' ) ? 'desc' : 'asc' ) )
) ) ) . '"><span>' . __( 'File name', 'document-gallery' ) . '</span><span class="sorting-indicator"></span></th>' .
'<th scope="col" class="manage-column column-description">' . __( 'Description', 'document-gallery' ) . '</th>' .
'<th scope="col" class="manage-column column-thumbupload"></th>' .
'<th scope="col" class="manage-column column-date ' . ( ( $orderby != 'date' ) ? 'sortable asc' : 'sorted ' . $order ) . '"><a href="?' . http_build_query( array_merge( $dg_url_params, array(
'orderby' => 'date',
'order' => ( ( $orderby != 'date' ) ? 'desc' : ( ( $order == 'asc' ) ? 'desc' : 'asc' ) )
) ) ) . '"><span>' . __( 'Date', 'document-gallery' ) . '</span><span class="sorting-indicator"></span></th>' .
'</tr>';
$pagination = '<div class="alignleft bulkactions"><button class="button action deleteSelected">' . __( 'Delete Selected', 'document-gallery' ) . '</button></div><div class="tablenav-pages">' .
'<span class="displaying-num">' .
$thumbs_number . ' ' . _n( 'item', 'items', $thumbs_number, 'document-gallery' ) .
'</span>' . ( $lastsheet > 1 ?
'<span class="pagination-links">' .
'<a class="first-page' . ( $sheet == 1 ? ' disabled' : '' ) . '" title="' . __( 'Go to the first page', 'document-gallery' ) . '"' . ( $sheet == 1 ? '' : ' href="?' . http_build_query( $dg_url_params ) . '"' ) . '>«</a>' .
'<a class="prev-page' . ( $sheet == 1 ? ' disabled' : '' ) . '" title="' . __( 'Go to the previous page', 'document-gallery' ) . '"' . ( $sheet == 1 ? '' : ' href="?' . http_build_query( array_merge( $dg_url_params, array( 'sheet' => $sheet - 1 ) ) ) . '"' ) . '></a>' .
'<span class="paging-input">' .
'<input class="current-page" title="' . __( 'Current page', 'document-gallery' ) . '" type="text" name="paged" value="' . $sheet . '" size="' . strlen( $sheet ) . '" maxlength="' . strlen( $sheet ) . '"> ' . __( 'of', 'document-gallery' ) . ' <span class="total-pages">' . $lastsheet . '</span></span>' .
'<a class="next-page' . ( $sheet == $lastsheet ? ' disabled' : '' ) . '" title="' . __( 'Go to the next page', 'document-gallery' ) . '"' . ( $sheet == $lastsheet ? '' : ' href="?' . http_build_query( array_merge( $dg_url_params, array( 'sheet' => $sheet + 1 ) ) ) . '"' ) . '></a>' .
'<a class="last-page' . ( $sheet == $lastsheet ? ' disabled' : '' ) . '" title="' . __( 'Go to the last page', 'document-gallery' ) . '"' . ( $sheet == $lastsheet ? '' : ' href="?' . http_build_query( array_merge( $dg_url_params, array( 'sheet' => $lastsheet ) ) ) . '"' ) . '>»</a>' .
'</span>' : ' <b>|</b> ' ) .
'<span class="displaying-num"><select dir="rtl" class="limit_per_page">' . $select_limit . '</select> ' . __( 'items per page', 'document-gallery' ) . '</span>' .
'</div>' .
'<br class="clear" />';
?>
<script type="text/javascript">
var URL_params = <?php echo wp_json_encode( $dg_url_params ); ?>;
</script>
<div class="thumbs-list-wrapper">
<div>
<div class="tablenav top"><?php echo $pagination; ?></div>
<table id="ThumbsTable" class="wp-list-table widefat fixed media"
cellpadding="0" cellspacing="0">
<thead>
<?php printf( $thead, 1 ); ?>
</thead>
<tfoot>
<?php printf( $thead, 2 ); ?>
</tfoot>
<tbody><?php
foreach ( $thumbs as $tid => $thumb ) {
$icon = $thumb['icon'];
$title = $thumb['title'];
$ext = $thumb['ext'];
$description = $thumb['description'];
$date = DocumentGallery::localDateTimeFromTimestamp( $thumb['timestamp'] );
?>
<tr data-entry="<?php echo $tid; ?>">
<td scope="row" class="check-column">
<input
type="checkbox"
class="cb-ids"
name="<?php echo DG_OPTION_NAME; ?>[ids][]"
value="<?php echo $tid; ?>">
</td>
<td class="column-icon media-icon"><img src="<?php echo $icon; ?>" /></td>
<td class="title column-title">
<strong>
<a
href="<?php echo home_url( '/?attachment_id=' . $tid ); ?>"
target="_blank"
title="<?php sprintf( __( "View '%s' attachment page", 'document-gallery' ), $title ); ?>">
<span class="editable-title"><?php echo $title; ?></span>
<sup><?php echo $ext; ?></sup>
</a>
</strong>
<span class="dashicons dashicons-edit"></span>
<span class="edit-controls">
<span class="dashicons dashicons-yes"></span>
<span class="dashicons dashicons-no"></span>
</span>
</td>
<td class="column-description">
<div class="editable-description"><?php echo $description; ?></div>
<span class="dashicons dashicons-edit"></span>
<span class="edit-controls">
<span class="dashicons dashicons-yes"></span>
<span class="dashicons dashicons-no"></span>
<span class="dashicons dashicons-update"></span>
</span>
</td>
<td class="column-thumbupload">
<span class="manual-download">
<span class="dashicons dashicons-upload"></span>
<span class="html5dndmarker">Drop file here<span> or </span></span>
<span class="buttons-area">
<input id="upload-button<?php echo $tid; ?>" type="file" />
<input id="trigger-button<?php echo $tid; ?>" type="button" value="Select File" class="button" />
</span>
</span>
<div class="progress animate invis">
<span><span></span></span>
</div>
</td>
<td class="date column-date"><?php echo $date; ?></td>
</tr>
<?php
} ?>
</tbody>
</table>
<div class="tablenav bottom"><?php echo $pagination; ?></div>
</div>
</div>
<?php }
/**
* @param $t1 DG_Thumb Thumbnail #1.
* @param $t2 DG_Thumb Thumbnail #2
*
* @return int The result of comparing the two thumbs using arguments in $URL_params.
*/
function dg_cmp_thumb($t1, $t2) {
global $dg_url_params;
$ret = 0;
switch ( $dg_url_params['orderby'] ) {
case 'date':
$ret = $t1->getTimestamp() - $t2->getTimestamp();
break;
case 'title':
$ret = strcmp( dg_get_thumb_title( $t1->getPostId() ), dg_get_thumb_title( $t2->getPostId() ) );
break;
}
return 'asc' === $dg_url_params['order'] ? $ret : -$ret;
}
/**
* @return int The limit, which may or may not be a member of $limit_options.
*/
function dg_get_limit_param() {
global $dg_options;
$limit = isset( $_REQUEST['limit'] ) ? DG_Util::posint( $_REQUEST['limit'] ) : $dg_options['meta']['items_per_page'];
if ( $limit !== $dg_options['meta']['items_per_page'] ) {
$dg_options['meta']['items_per_page'] = $limit;
DocumentGallery::setOptions( $dg_options );
}
return $limit;
}
/**
* @param $order_options string[] The possible options for order.
* @return string The order value.
*/
function dg_get_order_param($order_options) {
$ret = isset( $_REQUEST['order'] ) ? strtolower( $_REQUEST['order'] ) : '';
return in_array($ret, $order_options) ? $ret : $order_options[0];
}
/**
* @param $orderby_options string[] The possible options for orderby.
* @return string The orderby value.
*/
function dg_get_orderby_param($orderby_options) {
$ret = isset( $_REQUEST['orderby'] ) ? strtolower( $_REQUEST['orderby'] ) : '';
return in_array( $ret, $orderby_options ) ? $ret : $orderby_options[0];
}
/**
* @param $post int|WP_Post The post to get title of.
* @return string The title.
*/
function dg_get_thumb_title( $post ) {
if ( is_numeric( $post ) ) {
$post = get_post( $post );
}
return ! empty( $post->post_title ) ? $post->post_title : pathinfo( $post->guid, PATHINFO_FILENAME );
}
/**
* Wraps the PHP exit language construct.
*/
function dg_exit() {
exit;
}