Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#1550 closed Bug/Fehler (fixed)

check_country_required_zones() gibt true als Standard aus

Reported by: web-looks <info@…> Owned by: GTB
Priority: normal Milestone: modified-shop-2.0.5.0
Component: Shop Version: 2.0.4.2

Description

Die Funktion check_country_required_zones() gibt als Standard den Wert true zurück. Nur wenn für das jeweilige Land Bundesländer hinterlegt sind, diese aber nicht angezeigt werden (c.required_zones), wird 0 zurückgegeben.

In Shops die nicht den AJAX States Updater nutzen, wird dadurch das Bundesland-Feld auch für Länder ohne Bundesländer angezeigt. Im Demoshop ist es nur über den Quelltext sichtbar, da der States Updater das Bundesland Feld durch ein hidden field ersetzt.

Schritte zur Nachstellung:

  • Konfiguration > Kunden Details > Bundesland = Ja
  • Konfiguration > Mein Shop > Land = Afhanistan (oder ein anderes ohne Bundesländer)
  • Mein Konto > Adressbuch bearbeiten > Neue Anschrift
  • Quelltext ansehen (STRG + U)

Vorschlag zur Korrektur:

/inc/check_country_required_zones.inc.php

Suchen nach:

return true;

Ersetzen mit:

return false;

Attachments (0)

Change History (5)

comment:1 Changed 3 years ago by Tomcraft

  • Milestone set to modified-shop-2.0.5.0
  • Owner changed from somebody to GTB
  • Status changed from new to assigned

comment:2 Changed 3 years ago by web-looks <info@…>

Nachtrag zum Aufbau der Funktion:

Zuerst wird geprüft, ob für das Land Bundesländer hinterlegt sind. Nur falls ja, wird geprüft, ob diese auch angegeben werden müssen (c.required_zones). So ist es unmöglich ein Bundesland abzufragen, wenn für das Land keine Bundesländer hinterlegt sind.

Bei der Formularprüfung in create_account.php, etc... wird aber immer die Mindestlänge geprüft, falls für das Land keine Bundesländer hinterlegt sind.

    if ($entry_state_has_zones == true) {
        $zone_query = xtc_db_query("SELECT DISTINCT zone_id
                                               FROM ".TABLE_ZONES."
                                              WHERE zone_country_id = '".(int)$country ."'
                                                AND (zone_id = '" . (int)$state . "'
                                                     OR zone_code = '" . xtc_db_input($state) . "'
                                                     OR zone_name LIKE '" . xtc_db_input($state) . "%'
                                                     )");
      if (xtc_db_num_rows($zone_query) == 1) {
        $zone = xtc_db_fetch_array($zone_query);
        $zone_id = $zone['zone_id'];
        $state = '';
      } else {
        $error = true;
        $messageStack->add('create_account', ENTRY_STATE_ERROR_SELECT);
      }
    } else {
      if (strlen($state) < ENTRY_STATE_MIN_LENGTH) {
        $error = true;
        $messageStack->add('create_account', ENTRY_STATE_ERROR);
      }
    }

Des Weiteren wird das Feld zur Eingabe nur angezeigt, wenn $required_zones = true ist. Andernfalls wird ein hidden field erzeugt.

$state_input = xtc_draw_input_fieldNote(array ('name' => 'state', 'text' => '&nbsp;'. (xtc_not_null(ENTRY_STATE_TEXT) ? '<span class="inputRequirement">'.ENTRY_STATE_TEXT.'</span>' : '')));
if (!$required_zones) {
  $state_input = '<input type="hidden" value="0" name="state">';
  $smarty->assign('display_state', ' style="display:none"');        
}

Ich nehme an, dass es so gedacht war, dass man mittels c.required_zones festlegen kann, ob für ein Land die Angabe eines Bundeslandes Pflicht ist. Wenn dem so ist, sollte in der Funktion check_country_required_zones() nur c.required_zones geprüft werden, nicht jedoch, ob Bundesländer hinterlegt sind.

comment:3 Changed 3 years ago by GTB

  • Resolution set to fixed
  • Status changed from assigned to closed

In 11758:

fix #1550

comment:4 Changed 3 years ago by GTB

In 11760:

fix #1550

comment:5 Changed 3 years ago by GTB

In 11780:

revised r11758 (fix #1550)

Add Comment

Modify Ticket

Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.