/**
 * Sanitize a variable of unknown type.
 *
 * Recursive helper function to sanitize a variable from input,
 * which could also be a multidimensional array of variable depth.
 *
 * @since  3.0.0
 *
 * @param  mixed  $var  Variable to sanitize.
 * @param  string $func Function to use for sanitizing text strings (default 'sanitize_text_field')
 *
 * @return array|string Sanitized variable
 */
function simcal_sanitize_input($var, $func = 'sanitize_text_field')
{
    if (is_null($var)) {
        return '';
    }
    if (is_bool($var)) {
        if ($var === true) {
            return 'yes';
        } else {
            return 'no';
        }
    }
    if (is_string($var) || is_numeric($var)) {
        $func = is_string($func) && function_exists($func) ? $func : 'sanitize_text_field';
        return call_user_func($func, trim(strval($var)));
    }
    if (is_object($var)) {
        $var = (array) $var;
    }
    if (is_array($var)) {
        $array = array();
        foreach ($var as $k => $v) {
            $array[$k] = simcal_sanitize_input($v);
        }
        return $array;
    }
    return '';
}
 /**
  * Register setting callback.
  *
  * Callback function for sanitizing and validating options before they are updated.
  *
  * @since  3.0.0
  *
  * @param  array $settings Settings inputs.
  *
  * @return array Sanitized settings.
  */
 public function validate($settings)
 {
     $sanitized = '';
     if (is_array($settings)) {
         foreach ($settings as $k => $v) {
             $sanitized[$k] = simcal_sanitize_input($v);
         }
     } else {
         $sanitized = simcal_sanitize_input($settings);
     }
     return $sanitized;
 }