114 lines
3.9 KiB
PHP
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' );
|