Kiểm soát 100% kinh phí với Công cụ dự toán chi tiết. Vui lòng để lại số Zalo hoặc WhatsApp để nhận bảng dự toán miễn phí từ VIBHOME!
// Đăng ký kích hoạt Role Quản lý hợp đồng trong WordPress
function vibhome_register_contract_manager_role() {
if (!get_role('contract_manager')) {
add_role(
'contract_manager',
'Quản lý hợp đồng',
array(
'read' => true,
'edit_posts' => false,
)
);
}
}
add_action('init', 'vibhome_register_contract_manager_role');
//chặn vào crm
add_action('template_redirect', 'vibhome_unified_pages_router_v49');
function vibhome_unified_pages_router_v49() {
$request_uri = strtok($_SERVER['REQUEST_URI'], '?');
$path = rtrim($request_uri, '/');
// Kiểm soát chặt chẽ đường dẫn /quan-ly-crm
if ($path === '/quan-ly-crm') {
if (is_user_logged_in()) {
$current_user = wp_get_current_user();
$roles = (array)$current_user->roles;
$login_lower = strtolower($current_user->user_login);
$db_role = isset($current_user->role) ? strtolower(trim($current_user->role)) : '';
// Kiểm tra xem user có phải là Kế toán, Kiến trúc sư hoặc Quản lý hợp đồng hay không
$is_restricted = (
in_array('accountant', $roles) ||
in_array('architect', $roles) ||
in_array('contract_manager', $roles) ||
$db_role === 'accountant' ||
$db_role === 'architect' ||
$db_role === 'contract_manager' ||
strpos($login_lower, 'ketoan') !== false ||
strpos($login_lower, 'kientrucsu') !== false ||
strpos($login_lower, 'kts') !== false
);
// Nếu thuộc nhóm bị hạn chế, lập tức chặn và đá văng về trang quản lý hợp đồng hoặc trang chủ
if ($is_restricted) {
wp_safe_redirect(home_url('/quan-ly-hop-dong/'));
exit;
}
} else {
// Nếu chưa đăng nhập mà vào /quan-ly-crm thì chuyển về trang hợp đồng/đăng nhập
wp_safe_redirect(home_url('/quan-ly-hop-dong/'));
exit;
}
}
}
// Tự động gán đúng role khi tạo tài khoản mới
add_action('user_register', 'vibhome_auto_assign_user_role_on_create');
// Tự động cập nhật lại role nếu tên đăng nhập thay đổi hoặc chỉnh sửa profile
add_action('profile_update', 'vibhome_auto_assign_user_role_on_create');
function vibhome_auto_assign_user_role_on_create($user_id) {
// Không chạy nếu là AJAX / cron / background job không liên quan để tránh lỗi
if (defined('DOING_AJAX') && DOING_AJAX) {
// Vẫn cho phép chạy qua AJAX nếu đang tạo user từ trang quản trị
}
$user = get_userdata($user_id);
if (!$user) {
return;
}
$login_lower = strtolower($user->user_login);
$target_role = 'sale'; // Mặc định là sale
// Kiểm tra tên đăng nhập để phân quyền chuẩn
if (strpos($login_lower, 'ketoan') !== false) {
$target_role = 'accountant';
} elseif (strpos($login_lower, 'kientrucsu') !== false || strpos($login_lower, 'kts') !== false) {
$target_role = 'architect';
} elseif (strpos($login_lower, 'quanly') !== false || strpos($login_lower, 'contract') !== false || $login_lower === 'trunggdtc') {
$target_role = 'contract_manager'; // Gán chuẩn role Quản lý hợp đồng
} elseif ($login_lower === 'admin' || $login_lower === 'adminvibhome') {
$target_role = 'administrator'; // Giữ quyền admin tối cao nếu là tài khoản quản trị
}
// Gán trực tiếp role vào WordPress user object
$user->set_role($target_role);
}
// 1. NHẬN DIỆN VAI TRÒ CRM MANAGER & ADMINISTRATOR LÀ ADMIN TRANG HỢP ĐỒNG
function vibhome_is_contract_admin_v49($user) {
if (!$user || !is_user_logged_in()) return false;
$roles = (array)$user->roles;
$db_role = isset($user->role) ? strtolower(trim($user->role)) : '';
return current_user_can('manage_options')
|| in_array('administrator', $roles)
|| in_array('crm_manager', $roles)
|| in_array('contract_manager', $roles)
|| $db_role === 'crm_manager'
|| $db_role === 'contract_manager'
|| $db_role === 'administrator';
}
// 2. TỰ ĐỘNG GHI 'crm_manager' VÀO CỘT role BẢNG wp_users KHI LƯU USER
// TỰ ĐỘNG BẢO VỆ VÀ GHI ĐÚNG ROLE VÀO CỘT `role` BẢNG WP_USERS
add_action('user_register', 'vibhome_sync_custom_db_role', 20);
add_action('profile_update', 'vibhome_sync_custom_db_role', 20);
function vibhome_sync_custom_db_role($user_id) {
$user = get_userdata($user_id);
if (!$user) return;
$roles = (array)$user->roles;
$login_lower = strtolower($user->user_login);
// Mặc định là sale
$db_role_value = 'sale';
// Ưu tiên nhận diện đúng các vai trò quản lý / admin
if (in_array('contract_manager', $roles)) {
$db_role_value = 'contract_manager';
} elseif (in_array('crm_manager', $roles)) {
$db_role_value = 'crm_manager';
} elseif (in_array('administrator', $roles) || strpos($login_lower, 'admin') !== false) {
$db_role_value = 'administrator';
} elseif (in_array('accountant', $roles) || strpos($login_lower, 'ketoan') !== false) {
$db_role_value = 'accountant';
} elseif (in_array('architect', $roles) || strpos($login_lower, 'kientrucsu') !== false || strpos($login_lower, 'kts') !== false) {
$db_role_value = 'architect';
}
// Cập nhật chuẩn xác vào cột role của bảng wp_users
global $wpdb;
$wpdb->update(
$wpdb->users,
array('role' => $db_role_value),
array('ID' => $user_id)
);
}
// Thêm bộ lọc hiển thị tên tiếng Việt cho role contract_manager nếu WordPress không tự nhận
add_filter('editable_roles', function($roles) {
if (isset($roles['contract_manager'])) {
$roles['contract_manager']['name'] = 'Quản lý hợp đồng';
} else {
$roles['contract_manager'] = array(
'name' => 'Quản lý hợp đồng',
'capabilities' => array('read' => true)
);
}
return $roles;
});
add_action('template_redirect', 'vibhome_block_crm_page_native');
function vibhome_block_crm_page_native() {
// Kiểm tra chính xác xem có phải đang truy cập trang có slug là 'quan-ly-crm' không
if ( is_page('quan-ly-crm') ) {
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
// 🛑 DANH SÁCH TÀI KHOẢN CỤ THỂ BỊ CHẶN (Điền user_login vào đây)
$blocked_usernames = array('kientrucsu2','ketoan1'); // Nếu muốn chặn thêm tài khoản khác: array('kientrucsu2', 'user_khac')
// Nếu tài khoản đăng nhập nằm trong danh sách chặn
if ( in_array($current_user->user_login, $blocked_usernames) ) {
// Lập tức chuyển hướng ra trang quản lý hợp đồng
wp_redirect( home_url('/quan-ly-hop-dong/') );
exit;
}
}
}
}
Page Not Found - VIBHOME - THIẾT KẾ THI CÔNG TRỌN GÓIBỏ qua nội dung