You are here

function views_handler_filter_nid in Views PHP Filter 5

1 string reference to 'views_handler_filter_nid'
viewsphpfilter_views_tables_alter in ./viewsphpfilter.module
Implementation of hook_views_tables_alter() from Views API

File

./viewsphpfilter.module, line 50

Code

function views_handler_filter_nid($op, $filter, $filterinfo, &$query) {

  //as with filter_nid_process_form below -- the first if should NOT be necessary - 5.x only
  if (is_array($filter['value'])) {
    $filter['value'] = implode(',', $filter['value']);
  }
  if (isset($filter['value'])) {
    if ($filter['options'] == 'php') {
      $result = eval($filter['value']);

      //can't use drupal_eval(), because it only returns strings -- what good is that?
      if ($result === FALSE) {
        watchdog('viewsphpfilter', "Parse error in PHP: {$filter['value']}; filter ignored", WATCHDOG_ERROR);
        return;
      }
    }
    else {
      $result = $filter['value'];
    }
    if ($result == NULL) {
      watchdog('viewsphpfilter', "PHP returned null; filter ignored", WATCHDOG_NOTICE);
      return;
    }
    if (!is_array($result)) {
      $result = explode(',', $result);
    }
    if (empty($result) || count($result) == 1 && $result[0] == NULL) {
      if ($filter['operator'] == 'OR') {
        $query
          ->add_where("node.nid IS NULL");
      }
      return;
    }
    foreach ($result as $i => $val) {
      $result[$i] = trim($val, " \t\n\r\0\v,");
    }

    //error_log('result: ' . print_r($nids,TRUE));
    $allints = true;
    foreach ($result as $retval) {
      if ((string) (int) $retval != $retval) {
        $allints = false;
      }
    }
    if ($allints) {
      if ($filter['operator'] == 'OR') {
        $query
          ->add_where("node.nid IN (%s)", implode(",", $result));
      }
      else {

        // $filter['operator'] == 'NOR'
        $query
          ->add_where("node.nid NOT IN (%s)", implode(",", $result));
      }
    }
    else {
      watchdog('viewsphpfilter', "Invalid return value in PHP: " . implode(",", $result) . "; filter ignored", WATCHDOG_ERROR);
    }
  }
}