Download & Extend

Check spam in CCK fields

Project:Spam
Version:6.x-1.x-dev
Component:Content (User, Node, Comments)
Category:task
Priority:normal
Assigned:Unassigned
Status:needs review

Issue Summary

I need to check spam in CCK fields but spam module allow to check only title and body

So i made a little dirty hack to allow spam filters works with CCK fields

I just modified spam_get_text() function in spam.module

function spam_get_text($content, $type, $fields, $extra = array(), $full = TRUE) {
  if (is_object($content)) {
    $content = (array)$content;
  }

  /*Dirty hack to concatenate all cck fields into body*/
  if ($type == 'node') {
      foreach($content as $field => $value) {
          if (strpos($field, 'field_') === 0) {
              $content['body'] .= ' '. $value[0]['value'];
          }
      }
  }

  $text = '';

  foreach ($fields['main'] as $field) {
    $text .= $content[$field] .' ';
  }
  if ($full && is_array($fields['other'])) {
    foreach ($fields['other'] as $field) {
      $text .= $content[$field] .' ';
    }
  }
  return $text;
}

I understand that this solution is not very good - but it works for me

Comments

#1

Yes. We'd need to add a content/spam_content_cck.inc file that would take care of the CCK fields.

Your fix would imply that everyone has CCK installed.

Thank you for posting it though. That's a good start for CCK support.
Alexis Wilke

#2

Yes my solution imply that everyone has CCK installed and also it doesn't work with multivalued CCK fields, thought it is very easy to fix

function spam_get_text($content, $type, $fields, $extra = array(), $full = TRUE) {
  if (is_object($content)) {
    $content = (array)$content;
  }

  /*Dirty hack to concatenate all cck fields into body*/
  if (($type == 'node') && module_exists('cck')) {
      foreach($content as $field => $value) {
          if (strpos($field, 'field_') === 0) {
              for ($i=0; $i<sizeof($value); $i++) {
                  //check multivalued fields
                  $content['body'] .= ' '. $value[$i]['value'];
              }
          }
      }
  }

  $text = '';

  foreach ($fields['main'] as $field) {
    $text .= $content[$field] .' ';
  }
  if ($full && is_array($fields['other'])) {
    foreach ($fields['other'] as $field) {
      $text .= $content[$field] .' ';
    }
  }
  return $text;
}
nobody click here