375 lines
16 KiB
PHP
375 lines
16 KiB
PHP
<?php
|
|
defined( 'WPINC' ) OR exit;
|
|
|
|
/**
|
|
* Register settings for the tab.
|
|
*/
|
|
function dg_register_settings() {
|
|
global $dg_options;
|
|
|
|
include_once DG_PATH . 'inc/class-gallery.php';
|
|
include_once DG_PATH . 'inc/class-gallery-sanitization.php';
|
|
include_once DG_PATH . 'inc/class-thumber.php';
|
|
|
|
$defaults = $dg_options['gallery'];
|
|
$active = $dg_options['thumber']['active'];
|
|
|
|
add_settings_section(
|
|
'gallery_defaults', __( 'Default Settings', 'document-gallery' ),
|
|
'dg_render_default_settings_section', DG_OPTION_NAME );
|
|
|
|
add_settings_section(
|
|
'thumbnail_generation', __( 'Thumbnail Generation', 'document-gallery' ),
|
|
'dg_render_thumber_section', DG_OPTION_NAME );
|
|
|
|
add_settings_section(
|
|
'css', __( 'Custom CSS', 'document-gallery' ),
|
|
'dg_render_css_section', DG_OPTION_NAME );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_attachment_pg', 'attachment_pg',
|
|
array( 'DG_Admin', 'renderCheckboxField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_attachment_pg',
|
|
'name' => 'gallery_defaults][attachment_pg',
|
|
'value' => esc_attr( $defaults['attachment_pg'] ),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Link to attachment page rather than to file.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_columns', 'columns',
|
|
array( 'DG_Admin', 'renderTextField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_columns',
|
|
'name' => 'gallery_defaults][columns',
|
|
'value' => esc_attr( $defaults['columns'] ),
|
|
'type' => 'number" min="1" step="1',
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'The number of columns to display when not rendering descriptions.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_descriptions', 'descriptions',
|
|
array( 'DG_Admin', 'renderCheckboxField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_descriptions',
|
|
'name' => 'gallery_defaults][descriptions',
|
|
'value' => esc_attr( $defaults['descriptions'] ),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Include document descriptions.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_fancy', 'fancy',
|
|
array( 'DG_Admin', 'renderCheckboxField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_fancy',
|
|
'name' => 'gallery_defaults][fancy',
|
|
'value' => esc_attr( $defaults['fancy'] ),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Use auto-generated document thumbnails.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_order', 'order',
|
|
array( 'DG_Admin', 'renderSelectField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_order',
|
|
'name' => 'gallery_defaults][order',
|
|
'value' => esc_attr( $defaults['order'] ),
|
|
'options' => DG_GallerySanitization::getOrderOptions(),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Ascending or descending sorting of documents.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_orderby', 'orderby',
|
|
array( 'DG_Admin', 'renderSelectField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_orderby',
|
|
'name' => 'gallery_defaults][orderby',
|
|
'value' => esc_attr( $defaults['orderby'] ),
|
|
'options' => DG_GallerySanitization::getOrderbyOptions(),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Which field to order documents by.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_relation', 'relation',
|
|
array( 'DG_Admin', 'renderSelectField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_relation',
|
|
'name' => 'gallery_defaults][relation',
|
|
'value' => esc_attr( $defaults['relation'] ),
|
|
'options' => DG_GallerySanitization::getRelationOptions(),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Whether matched documents must have all taxa_names (AND) or at least one (OR).', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_limit', 'limit',
|
|
array( 'DG_Admin', 'renderTextField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_limit',
|
|
'name' => 'gallery_defaults][limit',
|
|
'value' => esc_attr( $defaults['limit'] ),
|
|
'type' => 'number" min="-1" step="1',
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Limit the number of documents included. -1 means no limit.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_mime_types', 'mime_types',
|
|
array( 'DG_Admin', 'renderTextField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_mime_types',
|
|
'name' => 'gallery_defaults][mime_types',
|
|
'value' => esc_attr( $defaults['mime_types'] ),
|
|
'type' => 'text',
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Comma-delimited list of <a href="http://en.wikipedia.org/wiki/Internet_media_type#List_of_common_media_types">MIME types</a>.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_new_window', 'new_window',
|
|
array( 'DG_Admin', 'renderCheckboxField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_new_window',
|
|
'name' => 'gallery_defaults][new_window',
|
|
'value' => esc_attr( $defaults['new_window'] ),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Open thumbnail links in new window.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_paginate', 'paginate',
|
|
array( 'DG_Admin', 'renderCheckboxField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_paginate',
|
|
'name' => 'gallery_defaults][paginate',
|
|
'value' => esc_attr( $defaults['paginate'] ),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'When a limit exists, paginate rather than truncating gallery.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_post_status', 'post_status',
|
|
array( 'DG_Admin', 'renderSelectField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_post_status',
|
|
'name' => 'gallery_defaults][post_status',
|
|
'value' => esc_attr( $defaults['post_status'] ),
|
|
'options' => DG_GallerySanitization::getPostStatuses(),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Which post status to look for when querying documents.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'gallery_defaults_post_type', 'post_type',
|
|
array( 'DG_Admin', 'renderSelectField' ),
|
|
DG_OPTION_NAME, 'gallery_defaults',
|
|
array(
|
|
'label_for' => 'label_gallery_defaults_post_type',
|
|
'name' => 'gallery_defaults][post_type',
|
|
'value' => esc_attr( $defaults['post_type'] ),
|
|
'options' => DG_GallerySanitization::getPostTypes(),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Which post type to look for when querying documents.', 'document-gallery' )
|
|
) );
|
|
|
|
/*add_settings_field(
|
|
'thumbnail_generation_thumber-co', __( 'Thumber.co', 'document-gallery' ),
|
|
array( 'DG_Admin', 'renderCheckboxField' ),
|
|
DG_OPTION_NAME, 'thumbnail_generation',
|
|
array(
|
|
'label_for' => 'label_thumbnail_generation_thumber-co',
|
|
'name' => 'thumbnail_generation][thumber-co',
|
|
'value' => esc_attr( $active['thumber-co'] ),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'Use your <a href="http://thumber.co" target="_blank">Thumber.co</a> subscription to remotely generate document thumbnails.' , 'document-gallery' ),
|
|
'disabled' => ! DG_ThumberCoThumber::isThumberCoAvailable()
|
|
) );*/
|
|
|
|
add_settings_field(
|
|
'thumbnail_generation_av', __( 'Audio/Video', 'document-gallery' ),
|
|
array( 'DG_Admin', 'renderCheckboxField' ),
|
|
DG_OPTION_NAME, 'thumbnail_generation',
|
|
array(
|
|
'label_for' => 'label_thumbnail_generation_av',
|
|
'name' => 'thumbnail_generation][av',
|
|
'value' => esc_attr( $active['av'] ),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => esc_html__( 'Locally generate thumbnails for audio & video files.', 'document-gallery' )
|
|
) );
|
|
|
|
add_settings_field(
|
|
'thumbnail_generation_gs', 'Ghostscript',
|
|
array( 'DG_Admin', 'renderCheckboxField' ),
|
|
DG_OPTION_NAME, 'thumbnail_generation',
|
|
array(
|
|
'label_for' => 'label_thumbnail_generation_gs',
|
|
'name' => 'thumbnail_generation][gs',
|
|
'value' => esc_attr( $active['gs'] ),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => DG_GhostscriptThumber::isGhostscriptAvailable()
|
|
? __( 'Use <a href="http://www.ghostscript.com/" target="_blank">Ghostscript</a> for faster local PDF processing (compared to Imagick).', 'document-gallery' )
|
|
: __( 'Your server is not configured to run <a href="http://www.ghostscript.com/" target="_blank">Ghostscript</a>.', 'document-gallery' ),
|
|
'disabled' => ! DG_GhostscriptThumber::isGhostscriptAvailable()
|
|
) );
|
|
|
|
add_settings_field(
|
|
'thumbnail_generation_imagick', 'Imagick',
|
|
array( 'DG_Admin', 'renderCheckboxField' ),
|
|
DG_OPTION_NAME, 'thumbnail_generation',
|
|
array(
|
|
'label_for' => 'label_thumbnail_generation_imagick',
|
|
'name' => 'thumbnail_generation][imagick',
|
|
'value' => esc_attr( $active['imagick'] ),
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => DG_ImagickThumber::isImagickAvailable()
|
|
? __( 'Use <a href="http://www.php.net/manual/en/book.imagick.php" target="_blank">Imagick</a> to handle lots of filetypes locally.', 'document-gallery' )
|
|
: __( 'Your server is not configured to run <a href="http://www.php.net/manual/en/book.imagick.php" target="_blank">Imagick</a>.', 'document-gallery' ),
|
|
'disabled' => ! DG_ImagickThumber::isImagickAvailable()
|
|
) );
|
|
|
|
add_settings_field(
|
|
'thumbnail_generation_width', __( 'Max Thumbnail Dimensions', 'document-gallery' ),
|
|
array( 'DG_Admin', 'renderMultiTextField' ),
|
|
DG_OPTION_NAME, 'thumbnail_generation',
|
|
array(
|
|
array(
|
|
'label_for' => 'label_advanced_width',
|
|
'name' => 'thumbnail_generation][width',
|
|
'value' => esc_attr( $dg_options['thumber']['width'] ),
|
|
'type' => 'number" min="1" step="1',
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => ' x '
|
|
),
|
|
array(
|
|
'label_for' => 'label_advanced_height',
|
|
'name' => 'thumbnail_generation][height',
|
|
'value' => esc_attr( $dg_options['thumber']['height'] ),
|
|
'type' => 'number" min="1" step="1',
|
|
'option_name' => DG_OPTION_NAME,
|
|
'description' => __( 'The max width and height (in pixels) that thumbnails will be generated.', 'document-gallery' )
|
|
)
|
|
) );
|
|
}
|
|
|
|
/**
|
|
* Validate settings for the tab.
|
|
*/
|
|
function dg_validate_settings( $values ) {
|
|
global $dg_options;
|
|
$ret = $dg_options;
|
|
|
|
include_once DG_PATH . 'inc/class-gallery.php';
|
|
|
|
$thumbs_cleared = false;
|
|
|
|
// handle gallery shortcode defaults
|
|
$errs = array();
|
|
$ret['gallery'] = DG_Gallery::sanitizeDefaults( null, $values['gallery_defaults'], $errs );
|
|
|
|
foreach ( $errs as $k => $v ) {
|
|
add_settings_error( DG_OPTION_NAME, str_replace( '_', '-', $k ), $v );
|
|
}
|
|
|
|
// handle setting width
|
|
if ( isset( $values['thumbnail_generation']['width'] ) ) {
|
|
$width = (int) $values['thumbnail_generation']['width'];
|
|
if ( $width > 0 ) {
|
|
$ret['thumber']['width'] = $width;
|
|
} else {
|
|
add_settings_error( DG_OPTION_NAME, 'thumber-width',
|
|
__( 'Invalid width given: ', 'document-gallery' ) . $values['thumbnail_generation']['width'] );
|
|
}
|
|
|
|
unset( $values['thumbnail_generation']['width'] );
|
|
}
|
|
|
|
// handle setting height
|
|
if ( isset( $values['thumbnail_generation']['height'] ) ) {
|
|
$height = (int) $values['thumbnail_generation']['height'];
|
|
if ( $height > 0 ) {
|
|
$ret['thumber']['height'] = $height;
|
|
} else {
|
|
add_settings_error( DG_OPTION_NAME, 'thumber-height',
|
|
__( 'Invalid height given: ', 'document-gallery' ) . $values['thumbnail_generation']['height'] );
|
|
}
|
|
|
|
unset( $values['thumbnail_generation']['width'] );
|
|
}
|
|
|
|
// delete thumb cache to force regeneration if max dimensions changed
|
|
if ( $ret['thumber']['width'] !== $dg_options['thumber']['width'] ||
|
|
$ret['thumber']['height'] !== $dg_options['thumber']['height'] ) {
|
|
DG_Thumb::purgeThumbs();
|
|
}
|
|
|
|
// handle setting the active thumbers
|
|
foreach ( array_keys( $ret['thumber']['active'] ) as $k ) {
|
|
$ret['thumber']['active'][ $k ] = isset( $values['thumbnail_generation'][ $k ] );
|
|
}
|
|
|
|
// if new thumbers available, clear failed thumbnails for retry
|
|
if ( ! $thumbs_cleared ) {
|
|
DG_Thumb::purgeFailedThumbs();
|
|
}
|
|
|
|
// handle modified CSS
|
|
if ( trim( $ret['css']['text'] ) !== trim( $values['css'] ) ) {
|
|
$ret['css']['text'] = trim( $values['css'] );
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Render the Default Settings section.
|
|
*/
|
|
function dg_render_default_settings_section() { ?>
|
|
<p><?php _e( 'The following values will be used by default in the shortcode. You can still manually set each of these values in each individual shortcode.', 'document-gallery' ); ?></p>
|
|
<?php }
|
|
|
|
|
|
/**
|
|
* Render the Thumber section.
|
|
*/
|
|
function dg_render_thumber_section() { ?>
|
|
<p><?php _e( 'Select which tools to use when generating thumbnails.', 'document-gallery' ); ?></p>
|
|
<?php }
|
|
|
|
|
|
/**
|
|
* Renders a text field for use when modifying the CSS to be printed in addition to the default CSS.
|
|
*/
|
|
function dg_render_css_section() {
|
|
global $dg_options; ?>
|
|
<p><?php printf(
|
|
__( 'Enter custom CSS styling for use with document galleries. To see which ids and classes you can style, take a look at <a href="%s" target="_blank">style.css</a>.', 'document-gallery' ),
|
|
DG_URL . 'assets/css/style.css' ); ?></p>
|
|
<table class="form-table">
|
|
<tbody>
|
|
<tr valign="top">
|
|
<td>
|
|
<textarea name="<?php echo DG_OPTION_NAME; ?>[css]" rows="10" cols="50"
|
|
class="large-text code"><?php echo $dg_options['css']['text']; ?></textarea>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<?php }
|