Index: branches/RC/core/units/users/users_event_handler.php =================================================================== diff -u -N -r10955 -r10966 --- branches/RC/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 10955) +++ branches/RC/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 10966) @@ -249,8 +249,8 @@ if ($user_id) { $object->Load($user_id); if (!$this->checkBanRules($object)) { - $event->status = erFAIL; - return false; + $event->status = erFAIL; + return false; } if ($object->GetDBField('Status') == STATUS_ACTIVE) { $groups = $object->getMembershipGroups(true); @@ -695,8 +695,8 @@ $email_as_login = $this->Application->ConfigValue('Email_As_Login'); $object =& $event->getObject(); if (!$this->checkBanRules($object)) { - $event->status = erFAIL; - return false; + $event->status = erFAIL; + return false; } if ($email_as_login) { $object->Fields['Email']['error_msgs']['unique'] = $this->Application->Phrase('lu_user_and_email_already_exist'); @@ -1654,85 +1654,94 @@ $image_helper->SaveItemImages($object); } } - + /** - * Check user fields + * Checks, if given user fields matches at least one of defined ban rules * * @param kDBItem $object + * @return bool */ - function checkBanRules(&$object) + function checkBanRules(&$object) { - $table = $this->Application->getUnitOption('ban-rule', 'TableName'); + $table = $this->Application->getUnitOption('ban-rule', 'TableName'); if (!$this->Conn->TableFound($table)) { - return 1; + // when ban table not found -> assume user is ok by default + return true; } - $sql = 'SELECT * - FROM '.$table.' - WHERE - ItemType=6 - AND Status=1 - ORDER BY Priority DESC'; - $a_rules = $this->Conn->Query($sql); - $found = FALSE; - foreach($a_rules as $a_rule) { - $field = $a_rule['ItemField']; - if(isset($object->Fields[$field])) { - $this_value = strtolower($object->GetDBField($field)); - $test_value = strtolower($a_rule['ItemValue']); - switch($a_rule['ItemVerb']) - { -// case 0: /* any */ -// $found = TRUE; -// break; - case 1: /* is */ - if ($this_value == $test_value) { - $found = TRUE; - } - break; -// case 2: /* is not */ -// if($ThisValue != $TestValue) -// $found = TRUE; -// break; - case 3: /* contains */ - if(strstr($this_value, $test_value)) { - $found = TRUE; - } - break; -// case 4: /* not contains */ -// if(!strstr($ThisValue,$TestValue)) -// $found = TRUE; -// break; -// case 5: /* Greater Than */ -// if($TestValue > $ThisValue) -// $found = TRUE; -// break; -// case 6: /* Less Than */ -// if($TestValue < $ThisValue) -// $found = TRUE; -// break; -// case 7: /* exists */ -// if(strlen($ThisValue)>0) -// $found = TRUE; -// break; -// case 8: /* unique */ -// if($this->ValueExists($field,$ThisValue)) -// $found = TRUE; -// break; - } + + $sql = 'SELECT * + FROM '.$table.' + WHERE ItemType = 6 AND Status = ' . STATUS_ACTIVE . ' + ORDER BY Priority DESC'; + $rules = $this->Conn->Query($sql); + + $found = false; + foreach ($rules as $rule) { + $field = $rule['ItemField']; + + $this_value = strtolower( $object->GetDBField($field) ); + $test_value = strtolower( $rule['ItemValue'] ); + + switch ($rule['ItemVerb']) { + /*case 0: // any + $found = true; + break;*/ + + case 1: // is + if ($this_value == $test_value) { + $found = true; + } + break; + + /*case 2: // is not + if ($this_value != $test_value) { + $found = true; + } + break;*/ + + case 3: // contains + if (strstr($this_value, $test_value)) { + $found = true; + } + break; + + + /*case 4: // not contains + if (!strstr($this_value, $test_value)) { + $found = true; + } + break; + + case 5: // Greater Than + if ($test_value > $this_value) { + $found = true; + } + break; + + case 6: // Less Than + if ($test_value < $this_value) { + $found = true; + } + break; + + case 7: // exists + if (strlen($this_value) > 0) { + $found = true; + } + break; + + case 8: // unique + if ($this->ValueExists($field, $this_value)) { + $found = true; + } + break;*/ } - if($found) - { -// if($b->Get("RuleType")==0) -// { -// $MatchedRule = $b->Get("RuleId"); -// } -// else -// { -// $MatchedRule = 0; -// } + + if ($found) { break; } } + return !$found; } }