<?php
/**
 * Makes a filter for the custom post type ajut and its custom fields
 *
 * references:
 * basic start
 * https://www.advancedcustomfields.com/resources/creating-wp-archive-custom-field-filter/
 * 
 * checkbox adaptation query filter
 * https://barn2.com/blog/querying-posts-by-custom-field-acf/#array-based-fields
 *
 * @package Xarxaprod_wp_plugin
 */

// define the filter fields
// array of filters (field key => field name)
$GLOBALS['my_query_filters_ajut'] = array(
  'fundtarget' => 'xxp_fund_target',
  'fundsource' => 'xxp_fund_source',
  'fundfield' => 'xxp_fund_field'
);
$GLOBALS['my_query_filters_ajut_dates'] = array(
  'fundapplybegin' => 'xxp_fund_apply_begin',
  'fundapplyend' => 'xxp_fund_apply_end'
  //'fundcall' => 'xxp_fund_call',
);

// action
add_action('pre_get_posts', 'my_pre_get_posts_ajuts',10,1);
if ( ! function_exists('my_pre_get_posts_ajuts') ){
  function my_pre_get_posts_ajuts( $query ) {
    
    // bail early if is in admin
    if( is_admin() ) { return; }
    
    // bail early if not main query or plugin $the_query_ajut
    // - allows custom code / plugins to continue working
    if( !$query->is_main_query() ) return;



    // loop over filters
    foreach( $GLOBALS['my_query_filters_ajut'] as $key => $fieldname)
    {
      // continue if not found in url
      if( empty($_GET[ $fieldname ]) ) { continue; }

      // get original meta query
      $meta_query = [];
      $meta_query[] = $query->get('meta_query');
      $meta_query[] = array('relation'  => 'OR');

      // get the values for this filter
      // eg: http://domain.tdl/ajut/?xxp_fund_target=autonoma,entitat-publica
      $filtervalues= explode(',', $_GET[ $fieldname ]);

      // loop retreived values from checkboxes and filter them with REGEXP
      // http://domain.tdl/ajut/?xxp_fund_target=autonoma&xxp_fund_field=circi
      // http://domain.tdl/ajut/?xxp_fund_target=autonoma,entitat-publica&xxp_fund_field=dansa
      foreach( $filtervalues as $filteredvalue )
      {
        // they are array based fields
        // https://barn2.com/blog/querying-posts-by-custom-field-acf/#array-based-fields
        $strippedvalue = sprintf( '^%1$s$|s:%2$u:"%1$s";', $filteredvalue, strlen( $filteredvalue ) );

        // add our meta query to the original meta queries
        $meta_query[] = array(
            array(
                'key'     =>  $fieldname,
                'value'   =>  $strippedvalue,
                'compare' =>  'REGEXP',
            ),
        );
      }
    // update the meta query arguments
    $query->set('meta_query', $meta_query);
    }

    //always return
    return;
  }
}