FacetWP – “Between” / “Capacity” facet type

mgibbs189

{{gist file=”facet-capacity.php” lang=”php”}}
<?php
class FacetWP_Facet_Capacity
{

function __construct() {
$this->label = __( ‘Capacity’, ‘fwp’ );
}

/**
* Generate the facet HTML
*/
function render( $params ) {

$output = ”;
$value = (array) $params[‘selected_values’];
$value = empty( $value ) ? ” : $value[0];
$output .= ‘<input type=”text” placeholder=”Capacity” class=”facetwp-capacity-input” value=”‘ . esc_attr( $value ) . ‘” />’;
$output .= ‘<input type=”button” class=”facetwp-submit” value=”‘ . __( ‘OK’, ‘fwp’ ) . ‘” />’;
return $output;
}

/**
* Filter the query based on selected values
*/
function filter_posts( $params ) {
global $wpdb;

$facet = $params[‘facet’];
$value = $params[‘selected_values’];
$where = ”;

$number = (int) $value[0];
$where .= ” AND (facet_value + 0) <= ‘$number'”;
$where .= ” AND (facet_display_value + 0) >= ‘$number'”;

$sql = ”
SELECT DISTINCT post_id FROM {$wpdb->prefix}facetwp_index
WHERE facet_name = ‘{$facet[‘name’]}’ $where”;
return facetwp_sql( $sql, $facet );
}

/**
* Output any admin scripts
*/
function admin_scripts() {
?>
<script>
(function($) {
wp.hooks.addAction(‘facetwp/load/capacity’, function($this, obj) {
$this.find(‘.facet-source’).val(obj.source);
$this.find(‘.facet-source-other’).val(obj.source_other);
});

wp.hooks.addFilter(‘facetwp/save/capacity’, function(obj, $this) {
obj[‘source’] = $this.find(‘.facet-source’).val();
obj[‘source_other’] = $this.find(‘.facet-source-other’).val();
return obj;
});
})(jQuery);
</script>
<?php
}

/**
* Output any front-end scripts
*/
function front_scripts() {
?>
<script>
(function($) {
wp.hooks.addAction(‘facetwp/refresh/capacity’, function($this, facet_name) {
var val = $this.find(‘.facetwp-capacity-input’).val();
FWP.facets[facet_name] = (” !== val) ? [val] : [];
});

$(document).on(‘click’, ‘.facetwp-type-capacity .facetwp-submit’, function() {
FWP.autoload();
});
})(jQuery);
</script>
<?php
}

/**
* (Admin) Output settings HTML
*/
function settings_html() {
$sources = FWP()->helper->get_data_sources();
?>
<tr>
<td>
<?php _e(‘Other data source’, ‘fwp’); ?>:
<div class=”facetwp-tooltip”>
<span class=”icon-question”>?</span>
<div class=”facetwp-tooltip-content”><?php _e( ‘Use a separate value for the upper limit?’, ‘fwp’ ); ?></div>
</div>
</td>
<td>
<select class=”facet-source-other”>
<option value=””><?php _e( ‘None’, ‘fwp’ ); ?></option>
<?php foreach ( $sources as $group ) : ?>
<optgroup label=”<?php echo $group[‘label’]; ?>”>
<?php foreach ( $group[‘choices’] as $val => $label ) : ?>
<option value=”<?php echo esc_attr( $val ); ?>”><?php echo esc_html( $label ); ?></option>
<?php endforeach; ?>
</optgroup>
<?php endforeach; ?>
</select>
</td>
</tr>
<?php
}
}

{{/gist}}