1KA_F2F/frontend/drupal/sites/all/modules/facetapi/facetapi.requirements.inc
2020-08-14 13:36:36 +02:00

167 lines
4.9 KiB
PHP

<?php
/**
* @file
* Requirement checking callbacks.
*/
/**
* Checks equality of one or more realm properties.
*
* @param array $realm
* The realm definition as returned by facetapi_realm_load().
* @param array $facet
* The facet definition as returned by facetapi_facet_load().
* @param array $options
* An array of values keyed by properties that are being compared.
*
* @return
* TRUE if all property values are equal, FALSE otherwise.
*/
function facetapi_requirement_realm_property(array $realm, array $facet, array $options, $operator = 'AND') {
return facetapi_requirement_property($realm, $options, $operator);
}
/**
* Checks equality of one or more facet properties.
*
* @param array $realm
* The realm definition as returned by facetapi_realm_load().
* @param array $facet
* The facet definition as returned by facetapi_facet_load().
* @param array $options
* An array of values keyed by properties that are being compared.
*
* @return
* TRUE if all property values are equal, FALSE otherwise.
*/
function facetapi_requirement_facet_property(array $realm, array $facet, array $options, $operator = 'AND') {
return facetapi_requirement_property($facet, $options, $operator);
}
/**
* Checks the equality of one or more properties.
*
* @param array $definition
* The facet or realm definition.
* @param array $options
* An array of values keyed by properties that are being compared.
*
* @return
* TRUE if all property values are equal, FALSE otherwise.
*/
function facetapi_requirement_property(array $definition, array $options, $operator) {
$passed = TRUE;
foreach ($options as $key => $requirement) {
$condition = $definition[$key];
// we always expect an array
if (!is_array($requirement)) {
$requirement = array($requirement);
}
// we always expect an array
if (!is_array($condition)) {
$condition = array($condition);
}
// if the keys are numeric, map assoc them so intersect works
if (is_int(key($requirement))) {
$requirement = drupal_map_assoc($requirement);
}
// if the keys are numeric, map assoc them so intersect works
if (is_int(key($condition))) {
$condition = drupal_map_assoc($condition);
}
// Check if it is either an AND or OR operation and act accordingly
if ($operator == 'AND') {
if (array_intersect_key($condition, $requirement) != $requirement) {
$passed = FALSE;
break;
}
}
elseif ($operator == 'OR') {
if (!array_intersect_key($condition, $requirement)) {
$passed = FALSE;
break;
}
}
}
return $passed;
}
/**
* Checks whether one or more realm properties are set.
*
* @param array $realm
* The realm definition as returned by facetapi_realm_load().
* @param array $facet
* The facet definition as returned by facetapi_facet_load().
* @param array $options
* An array of boolean statuses keyed by properties being checked.
*
* @return
* TRUE if all properties match the passed statues, FALSE otherwise.
*/
function facetapi_requirement_realm_property_set(array $realm, array $facet, array $options) {
return facetapi_requirement_property_set($realm, $options);
}
/**
* Checks whether one or more facet properties are set.
*
* @param array $realm
* The realm definition as returned by facetapi_realm_load().
* @param array $facet
* The facet definition as returned by facetapi_facet_load().
* @param array $options
* An array of boolean statuses keyed by properties being checked.
*
* @return
* TRUE if all properties match the passed statues, FALSE otherwise.
*/
function facetapi_requirement_facet_property_set(array $realm, array $facet, array $options) {
return facetapi_requirement_property_set($facet, $options);
}
/**
* Checks whether one or more properties are set.
*
* @param array $definition
* The facet or realm definition.
* @param array $options
* An array of boolean statuses keyed by properties being checked.
*
* @return
* TRUE if all properties match the passed statues, FALSE otherwise.
*/
function facetapi_requirement_property_set(array $definition, array $options) {
$passed = TRUE;
foreach ($options as $key => $requirement) {
if (!($requirement ? !empty($definition[$key]) : empty($definition[$key]))) {
$passed = FALSE;
break;
}
}
return $passed;
}
/**
* Checks whether the facet is hierarchical.
*
* @param array $realm
* The realm definition as returned by facetapi_realm_load().
* @param array $facet
* The facet definition as returned by facetapi_facet_load().
* @param $option
* TRUE if the facet should be hierarchical, FALSE if it should be flat.
*
* @return
* TRUE if the hierarchical status matches $option, FALSE otherwise.
*/
function facetapi_requirement_facet_hierarchical(array $realm, array $facet, $option) {
$options = array('hierarchy callback' => (bool) $option);
return facetapi_requirement_facet_property_set($realm, $facet, $options);
}