Files
AutoBooking/autobooking-roles.php
T

114 lines
3.9 KiB
PHP

<?php
/**
* Plugin Name: AutoBooking Roles
* Description: Crea roles Driver, Pending Driver y Corporate Admin, y la capability manage_autobooking para el admin.
* Version: 1.1.0
* Author: AutoBooking
*
* Changelog:
* 1.1.0 - Agrega rol corporate_admin, capability manage_autobooking,
* y migracion retroactiva de usuarios corporativos existentes.
* 1.0.0 - Version inicial: roles driver y driver_pending.
*/
if ( ! defined( 'ABSPATH' ) ) exit;
define( 'ABR_ROLE_DRIVER', 'driver' );
define( 'ABR_ROLE_DRIVER_PENDING', 'driver_pending' );
define( 'ABR_ROLE_CORPORATE', 'corporate_admin' );
define( 'ABR_CAP_READ_DRIVER_DASH', 'read_driver_dashboard' );
define( 'ABR_CAP_READ_CUST_DASH', 'read_customer_dashboard' );
define( 'ABR_CAP_READ_CORPORATE_DASH', 'read_corporate_dashboard' );
define( 'ABR_CAP_MANAGE_AB', 'manage_autobooking' );
/* ------------------------------------------------------------------
Registra / actualiza roles y capabilities (idempotente)
------------------------------------------------------------------ */
function abr_register_roles_caps() {
// --- Role: Driver ---
$driver_caps = [
'read' => true,
ABR_CAP_READ_DRIVER_DASH => true,
];
if ( ! get_role( ABR_ROLE_DRIVER ) ) {
add_role( ABR_ROLE_DRIVER, 'Driver', $driver_caps );
} else {
$r = get_role( ABR_ROLE_DRIVER );
foreach ( $driver_caps as $cap => $grant ) {
if ( ! $r->has_cap( $cap ) ) $r->add_cap( $cap, $grant );
}
}
// --- Role: Pending Driver ---
$pending_caps = [ 'read' => true ];
if ( ! get_role( ABR_ROLE_DRIVER_PENDING ) ) {
add_role( ABR_ROLE_DRIVER_PENDING, 'Pending Driver', $pending_caps );
} else {
$r = get_role( ABR_ROLE_DRIVER_PENDING );
foreach ( $pending_caps as $cap => $grant ) {
if ( ! $r->has_cap( $cap ) ) $r->add_cap( $cap, $grant );
}
}
// --- Role: Corporate Admin ---
$corp_caps = [
'read' => true,
ABR_CAP_READ_CORPORATE_DASH => true,
];
if ( ! get_role( ABR_ROLE_CORPORATE ) ) {
add_role( ABR_ROLE_CORPORATE, 'Corporate Admin', $corp_caps );
} else {
$r = get_role( ABR_ROLE_CORPORATE );
foreach ( $corp_caps as $cap => $grant ) {
if ( ! $r->has_cap( $cap ) ) $r->add_cap( $cap, $grant );
}
}
// --- Administrator: acceso total ---
$admin = get_role( 'administrator' );
if ( $admin ) {
foreach ( [ ABR_CAP_READ_DRIVER_DASH, ABR_CAP_READ_CUST_DASH, ABR_CAP_READ_CORPORATE_DASH, ABR_CAP_MANAGE_AB ] as $cap ) {
if ( ! $admin->has_cap( $cap ) ) $admin->add_cap( $cap );
}
}
}
/* ------------------------------------------------------------------
Migracion retroactiva: asigna rol corporate_admin a usuarios WP
que ya tienen ab_company_id en usermeta y no tienen el rol.
Idempotente: correrlo dos veces no duplica ni rompe nada.
------------------------------------------------------------------ */
function abr_migrate_existing_corporate_users() {
global $wpdb;
$user_ids = $wpdb->get_col(
"SELECT DISTINCT um.user_id
FROM {$wpdb->usermeta} um
INNER JOIN {$wpdb->prefix}ab_companies c ON c.id = CAST(um.meta_value AS UNSIGNED)
WHERE um.meta_key = 'ab_company_id'
AND um.meta_value != ''
AND um.meta_value != '0'
AND c.active = 1"
);
if ( empty( $user_ids ) ) return;
foreach ( $user_ids as $uid ) {
$user = get_userdata( (int) $uid );
if ( ! $user ) continue;
if ( ! in_array( ABR_ROLE_CORPORATE, (array) $user->roles, true ) ) {
$user->add_role( ABR_ROLE_CORPORATE );
}
}
}
function abr_activation() {
abr_register_roles_caps();
abr_migrate_existing_corporate_users();
}
register_activation_hook( __FILE__, 'abr_activation' );
add_action( 'init', 'abr_register_roles_caps' );