Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function taxista_dashboard_shortcode() {
- ob_start();
- ?>
- <script>
- const urlParams = new URLSearchParams(window.location.search);
- const taxistaId = urlParams.get('id');
- let taxistaData = null;
- function showMessage(containerId, message, type) {
- const messageDiv = document.getElementById(containerId);
- messageDiv.textContent = message;
- messageDiv.className = `message ${type}`;
- messageDiv.style.display = 'block';
- setTimeout(() => messageDiv.style.display = 'none', 3000);
- }
- async function verifyPin() {
- const pin = document.getElementById('pinInput').value;
- try {
- const response = await fetch('<?php echo admin_url('admin-ajax.php'); ?>?action=verify_taxista_pin', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- taxistaId: taxistaId,
- pin: pin
- })
- });
- const result = await response.json();
- if (result.success) {
- document.getElementById('authScreen').style.display = 'none';
- document.getElementById('mainScreen').style.display = 'block';
- loadTaxistaInfo(result.data);
- } else {
- showMessage('authMessage', result.data || 'PIN incorrecto', 'error');
- }
- } catch (error) {
- showMessage('authMessage', 'Error al verificar PIN', 'error');
- }
- }
- function loadTaxistaInfo(data) {
- taxistaData = data;
- document.getElementById('taxistaName').textContent = data.fields.Nombre;
- document.getElementById('taxistaUnit').textContent = `Unidad: ${data.fields.Unidad}`;
- if (data.fields.Foto && data.fields.Foto.length > 0) {
- document.getElementById('taxistaPhoto').src = data.fields.Foto[0].url;
- }
- updateStatusDisplay(data.fields.Estado);
- }
- async function updateStatus(newStatus) {
- try {
- const response = await fetch('<?php echo admin_url('admin-ajax.php'); ?>?action=update_taxista_status', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- taxistaId: taxistaId,
- newStatus: newStatus,
- pin: document.getElementById('pinInput').value // Enviamos el PIN para reverificar
- })
- });
- const result = await response.json();
- if (result.success) {
- updateStatusDisplay(newStatus);
- showMessage('statusMessage', 'Estado actualizado correctamente', 'success');
- } else {
- showMessage('statusMessage', result.data || 'Error al actualizar el estado', 'error');
- }
- } catch (error) {
- showMessage('statusMessage', 'Error al actualizar el estado', 'error');
- }
- }
- function updateStatusDisplay(status) {
- const statusDiv = document.getElementById('currentStatus');
- statusDiv.className = `current-status status-${status}`;
- statusDiv.innerHTML = `
- <i class="fas fa-${status === 'ocupado' ? 'times-circle' : 'check-circle'}"></i>
- Estado actual: ${status === 'ocupado' ? 'Ocupado' : 'Disponible'}
- `;
- }
- document.getElementById('loginButton').addEventListener('click', verifyPin);
- document.getElementById('pinInput').addEventListener('keypress', function(e) {
- if (e.key === 'Enter') verifyPin();
- });
- if (!taxistaId) {
- showMessage('authMessage', 'Error: No se especificó un taxista', 'error');
- }
- </script>
- <?php
- return ob_get_clean();
- }
- add_shortcode('taxista_dashboard', 'taxista_dashboard_shortcode');
- // Nuevos endpoints seguros
- function verify_taxista_pin() {
- try {
- $data = json_decode(file_get_contents('php://input'), true);
- if (!isset($data['taxistaId']) || !isset($data['pin'])) {
- wp_send_json_error('Datos incompletos');
- }
- $config = get_airtable_config();
- // Verificar taxista y PIN
- $response = wp_remote_get("https://api.airtable.com/v0/{$config['baseId']}/{$config['tableId']}/{$data['taxistaId']}", array(
- 'headers' => array(
- 'Authorization' => "Bearer {$config['apiKey']}"
- )
- ));
- if (is_wp_error($response)) {
- throw new Exception($response->get_error_message());
- }
- $taxista = json_decode(wp_remote_retrieve_body($response), true);
- if (!isset($taxista['fields']['PIN']) || $taxista['fields']['PIN'] !== $data['pin']) {
- wp_send_json_error('PIN incorrecto');
- }
- wp_send_json_success($taxista);
- } catch (Exception $e) {
- wp_send_json_error($e->getMessage());
- }
- }
- add_action('wp_ajax_verify_taxista_pin', 'verify_taxista_pin');
- add_action('wp_ajax_nopriv_verify_taxista_pin', 'verify_taxista_pin');
- function update_taxista_status() {
- try {
- $data = json_decode(file_get_contents('php://input'), true);
- if (!isset($data['taxistaId']) || !isset($data['newStatus']) || !isset($data['pin'])) {
- wp_send_json_error('Datos incompletos');
- }
- $config = get_airtable_config();
- // Primero verificamos el PIN nuevamente por seguridad
- $verify_response = wp_remote_get("https://api.airtable.com/v0/{$config['baseId']}/{$config['tableId']}/{$data['taxistaId']}", array(
- 'headers' => array(
- 'Authorization' => "Bearer {$config['apiKey']}"
- )
- ));
- $taxista = json_decode(wp_remote_retrieve_body($verify_response), true);
- if (!isset($taxista['fields']['PIN']) || $taxista['fields']['PIN'] !== $data['pin']) {
- wp_send_json_error('No autorizado');
- }
- // Actualizar el estado
- $response = wp_remote_request(
- "https://api.airtable.com/v0/{$config['baseId']}/{$config['tableId']}/{$data['taxistaId']}",
- array(
- 'method' => 'PATCH',
- 'headers' => array(
- 'Authorization' => "Bearer {$config['apiKey']}",
- 'Content-Type' => 'application/json'
- ),
- 'body' => json_encode(array(
- 'fields' => array(
- 'Estado' => $data['newStatus']
- )
- ))
- )
- );
- if (is_wp_error($response)) {
- throw new Exception($response->get_error_message());
- }
- wp_send_json_success('Estado actualizado correctamente');
- } catch (Exception $e) {
- wp_send_json_error($e->getMessage());
- }
- }
- add_action('wp_ajax_update_taxista_status', 'update_taxista_status');
- add_action('wp_ajax_nopriv_update_taxista_status', 'update_taxista_status');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement