Modify

Opened 7 years ago

Closed 7 years ago

Last modified 7 years ago

#1550 closed Bug/Fehler (fixed)

check_country_required_zones() gibt true als Standard aus

Reported by: web-looks <info@…> Owned by: Gerhard Waldemair
Priority: normal Milestone: modified-shop-2.0.5.0
Component: Shop Version: 2.0.4.2
Keywords: Cc:
Blocked By: Blocking:

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 by Torsten Riemer, 7 years ago

Milestone: modified-shop-2.0.5.0
Owner: changed from somebody to Gerhard Waldemair
Status: newassigned

comment:2 by web-looks <info@…>, 7 years ago

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 by Gerhard Waldemair, 7 years ago

Resolution: fixed
Status: assignedclosed

In 11758:

fix #1550

comment:4 by Gerhard Waldemair, 7 years ago

In 11760:

fix #1550

comment:5 by Gerhard Waldemair, 7 years ago

In 11780:

revised r11758 (fix #1550)

Modify Ticket

Action
as closed The owner will remain Gerhard Waldemair.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.