feat: AutoBooking initial commit — PHP WordPress Plugin (REST API, wpdb, WP_User_Query)
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
<?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' );
|
||||
Reference in New Issue
Block a user