/** * Check Rule against Message Information */ function check_rule(&$rules, &$rule_row, &$message_row, $user_id) { global $user, $config; if (!isset($rules[$rule_row['rule_check']][$rule_row['rule_connection']])) { return false; } $check_ary = $rules[$rule_row['rule_check']][$rule_row['rule_connection']]; $result = false; $check0 = $message_row[$check_ary['check0']]; switch ($rule_row['rule_connection']) { case RULE_IS_LIKE: $result = preg_match("/" . preg_quote($rule_row['rule_string'], '/') . '/i', $check0); break; case RULE_IS_NOT_LIKE: $result = !preg_match("/" . preg_quote($rule_row['rule_string'], '/') . '/i', $check0); break; case RULE_IS: $result = $check0 == $rule_row['rule_string']; break; case RULE_IS_NOT: $result = $check0 != $rule_row['rule_string']; break; case RULE_BEGINS_WITH: $result = preg_match("/^" . preg_quote($rule_row['rule_string'], '/') . '/i', $check0); break; case RULE_ENDS_WITH: $result = preg_match("/" . preg_quote($rule_row['rule_string'], '/') . '$/i', $check0); break; case RULE_IS_FRIEND: case RULE_IS_FOE: case RULE_ANSWERED: case RULE_FORWARDED: $result = $check0 == 1; break; case RULE_IS_USER: $result = $check0 == $rule_row['rule_user_id']; break; case RULE_IS_GROUP: $result = in_array($rule_row['rule_group_id'], $check0); break; case RULE_TO_GROUP: $result = in_array('g_' . $message_row[$check_ary['check2']], $check0) || in_array('g_' . $message_row[$check_ary['check2']], $message_row[$check_ary['check1']]); break; case RULE_TO_ME: $result = in_array('u_' . $user_id, $check0) || in_array('u_' . $user_id, $message_row[$check_ary['check1']]); break; } if (!$result) { return false; } switch ($rule_row['rule_action']) { case ACTION_PLACE_INTO_FOLDER: return array('action' => $rule_row['rule_action'], 'folder_id' => $rule_row['rule_folder_id']); break; case ACTION_MARK_AS_READ: case ACTION_MARK_AS_IMPORTANT: return array('action' => $rule_row['rule_action'], 'pm_unread' => $message_row['pm_unread'], 'pm_marked' => $message_row['pm_marked']); break; case ACTION_DELETE_MESSAGE: global $db, $auth; // Check for admins/mods - users are not allowed to remove those messages... // We do the check here to make sure the data we use is consistent $sql = 'SELECT user_id, user_type, user_permissions FROM ' . USERS_TABLE . ' WHERE user_id = ' . (int) $message_row['author_id']; $result = $db->sql_query($sql); $userdata = $db->sql_fetchrow($result); $db->sql_freeresult($result); $auth2 = new \src\auth\auth(); $auth2->acl($userdata); if (!$auth2->acl_get('a_') && !$auth2->acl_get('m_') && !$auth2->acl_getf_global('m_')) { return array('action' => $rule_row['rule_action'], 'pm_unread' => $message_row['pm_unread'], 'pm_marked' => $message_row['pm_marked']); } return false; break; default: return false; } return false; }