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' );