etiqueta traducida] */ public static function listing($lang = 'en') { return [ 'id' => alexr_translate_x('ID', $lang), 'uuid' => alexr_translate_x('Uuid', $lang), 'type' => alexr_translate_x('Type', $lang), 'source' => alexr_translate_x('Source', $lang), 'status' => alexr_translate_x('Status', $lang), 'date' => alexr_translate_x('Date', $lang), 'date_created' => alexr_translate_x('Created', $lang), 'shift_event' => alexr_translate_x('Shift/Event', $lang), 'time_24h' => alexr_translate_x('Time (24h)', $lang), 'time_12h' => alexr_translate_x('Time (12h)', $lang), 'duration' => alexr_translate_x('Duration', $lang), 'name' => alexr_translate_x('Name', $lang), 'party' => alexr_translate_x('Party', $lang), 'email' => alexr_translate_x('Email', $lang), 'phone' => alexr_translate_x('Phone', $lang), 'language' => alexr_translate_x('Language', $lang), 'country' => alexr_translate_x('Country', $lang), 'payment' => alexr_translate_x('Payment', $lang), 'spend' => alexr_translate_x('Billing', $lang), 'area_table_selected' => alexr_translate_x('Table Selected', $lang), 'tables' => alexr_translate_x('Tables', $lang), 'tags' => alexr_translate_x('Tags', $lang), 'notes' => alexr_translate_x('Notes', $lang), 'custom_fields' => alexr_translate_x('C.Fields', $lang), // La columna "reply" del listado no se exporta: son botones de // accion (WhatsApp/SMS), no un dato de la reserva. ]; } /** * Claves validas * * @return array */ public static function keys() { return array_keys(self::listing()); } /** * Columnas activadas por defecto. Se corresponden con lo que se exportaba * antes de poder configurarlo, para que nadie note un cambio hasta que * entre a configurarlo. * * @return array */ public static function defaultEnabled() { return [ 'type', 'shift_event', 'status', 'time_24h', 'time_12h', 'name', 'party', 'tables', 'email', 'phone', 'language', 'country', 'notes', 'tags', ]; } /** * Configuracion por defecto en el formato que usa el popup de columnas * y que se guarda en restaurant_setting. * * @return array */ public static function defaultColumns() { $enabled_by_default = self::defaultEnabled(); $columns = []; $order = 1; foreach (self::keys() as $key) { $columns[] = [ 'column' => $key, 'enabled' => in_array($key, $enabled_by_default), 'order' => $order, ]; $order++; } return $columns; } /** * Añade la etiqueta traducida a una configuracion guardada, y de paso * incorpora las columnas nuevas que no existieran cuando se guardo * (desactivadas y al final) para que el popup no se quede corto tras una * actualizacion del plugin. * * @param array $columns configuracion guardada * @param string $lang * * @return array */ public static function withLabels($columns, $lang = 'en') { $labels = self::listing($lang); $result = []; $saved_keys = []; $max_order = 0; foreach ($columns as $column) { // Puede venir como objeto (json_decode) o como array $column = (array) $column; $key = isset($column['column']) ? $column['column'] : null; if (!$key || !isset($labels[$key])) continue; $order = isset($column['order']) ? intval($column['order']) : 0; $max_order = max($max_order, $order); $saved_keys[] = $key; $result[] = [ 'column' => $key, 'label' => $labels[$key], 'enabled' => !empty($column['enabled']), 'order' => $order, ]; } // Columnas nuevas del catalogo que aun no estaban guardadas foreach ($labels as $key => $label) { if (in_array($key, $saved_keys)) continue; $max_order++; $result[] = [ 'column' => $key, 'label' => $label, 'enabled' => false, 'order' => $max_order, ]; } return $result; } }