0 && user_can($user_id, Capabilities::MANAGE); } public static function can_manage_current_user(): bool { return self::is_owner(get_current_user_id()); } /** Must be called inside a transaction before an administrator mutation. */ public static function lock_actor(int $actor): bool { global $wpdb; if (!self::is_owner($actor)) return false; // Keep the lifecycle lock order used by review mutations and cleanup. $rows = $wpdb->get_results($wpdb->prepare('SELECT id FROM %i ORDER BY id FOR UPDATE', Database::table('commentmate_reviews')), ARRAY_A); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Ownership changes lock plugin review rows directly; cached rows cannot fence concurrent guest mutations. return is_array($rows) && self::is_owner($actor); } }