Seite 2 von 2

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Mi 13. Mai 2015, 13:44
von olape
Hallo,

ich habe die Änderung in der db.inc.php jetzt mal gemacht.
Danke an Martens.

Heute war der Haken nämlich wieder weg.
-->
Artikel anlegen / ändern, Hersteller anlegen und Ausprägungen für die Facettensuche anlegen.

Gruss Olaf

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Di 19. Mai 2015, 10:07
von olape
Hallo,

so, heute wieder weg.

leider taucht im log nur das erneute Setzen des Hakens auf.
Wann genau, und warum er verloren geht bleibt also weiterhin ein Rätsel.

Auch heute wieder:
Artikel anlegen / ändern, Hersteller anlegen und Ausprägungen für die Facettensuche anlegen.

Gruss Olaf

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Di 19. Mai 2015, 21:23
von Martens
Hallo Olaf,

im Log müssten eigentlich Datum und Uhrzeit stehen (in der Hoffnung, dass man noch weiß, was man da gerade im Backend gemacht hat):
Code: Alles auswählen
24.04.2015 20:13:16
mysql_query() hat den Wert FALSE zurückgegeben
In Datei: /admin/admin_neu/themes/einstellungen/index.php
Fehlermeldung:
SQL: UPDATE randshop_einstellungen SET randshop_einstellungen.value = '' WHERE randshop_einstellungen.key = 'gastbestellung_check' AND randshop_einstellungen.group = 'artikel'


Man kann die conf/db.inc.php aber noch etwas erweitern, sodass dann auch die beteiligte Funktions-Kette als Array in das Log geschrieben wird. Und zwar unmittelbar nach der Zeile $error_msg .= "\nSQL: " . $SQLString . "\n";
Code: Alles auswählen
if(strpos($SQLString, "UPDATE") === 0 && strpos($SQLString, "gastbestellung_check")) {
   $error_msg .= "Trace: " . print_r(debug_backtrace(), true) . "\n";
}

Im Log sieht das dann beim gewollten abschalten der Gastbestellung so aus:
Code: Alles auswählen
19.05.2015 23:12:06
mysql_query() hat den Wert FALSE zurückgegeben
In Datei: /admin/admin_neu/themes/einstellungen/index.php
Fehlermeldung:
SQL: UPDATE randshop_einstellungen SET randshop_einstellungen.value = '' WHERE randshop_einstellungen.key = 'gastbestellung_check' AND randshop_einstellungen.group = 'artikel'
Trace: Array
(
    [0] => Array
        (
            [file] => /***/***/***/includes/functions.shopeinstellung.inc.php
            [line] => 610
            [function] => errorlogged_mysql_query
            [args] => Array
                (
                    [0] => UPDATE randshop_einstellungen SET randshop_einstellungen.value = '' WHERE randshop_einstellungen.key = 'gastbestellung_check' AND randshop_einstellungen.group = 'artikel'
                )

        )

    [1] => Array
        (
            [file] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_features_save.inc.php
            [line] => 12
            [function] => SaveKeyValueEinstellungen
            [args] => Array
                (
                    [0] => artikel
                    [1] => gastbestellung_check
                    [2] =>
                )

        )

    [2] => Array
        (
            [file] => /***/***/***/includes/classes/TabCtrl.cls.php
            [line] => 40
            [function] => TrySaveTab
            [args] => Array
                (
                    [0] => Array
                        (
                        )

                    [1] =>
                )

        )

    [3] => Array
        (
            [file] => /***/***/***/admin/admin_neu/themes/einstellungen/index.php
            [line] => 30
            [function] => HandleSaveAndTabChange
            [class] => TabCtrl
            [object] => TabCtrl Object
                (
                    [tabs:TabCtrl:private] => Array
                        (
                            [0] => Array
                                (
                                    [TabName] => Grunddaten
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_grunddaten_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_grunddaten_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [1] => Array
                                (
                                    [TabName] => Betreiberdaten
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_betreiber_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_betreiber_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [2] => Array
                                (
                                    [TabName] => Features
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_features_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_features_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [3] => Array
                                (
                                    [TabName] => Ajax Suche
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_ajax_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_ajax_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [4] => Array
                                (
                                    [TabName] => SEO
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_seo_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_seo_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [5] => Array
                                (
                                    [TabName] => AGB Hosting
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_agb_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_agb_tab.inc.php
                                    [MultiLingual] =>
                                )

                            [6] => Array
                                (
                                    [TabName] => Fehlerseite
                                    [IncFileValidateAndSave] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_fehlerseite_save.inc.php
                                    [IncFileTemplate] => /***/***/***/admin/admin_neu/themes/einstellungen/editieren_fehlerseite_tab.inc.php
                                    [MultiLingual] => 1
                                )

                        )

                    [aktiverTab:TabCtrl:private] => 2
                    [neuerTab:TabCtrl:private] =>
                    [speichern:TabCtrl:private] => 1
                    [errorInfos:TabCtrl:private] => Array
                        (
                        )

                    [languageId] =>
                    [neueLanguageId] =>
                )

            [type] => ->
            [args] => Array
                (
                )

        )

)


Grüße
Martin

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Di 19. Mai 2015, 21:57
von Martens
Achja, noch was …

natürlich gibt es auch eine Quick&Dirty-Lösung, wenn man darauf verzichten kann, die Gastbestellung im Admin-Bereich ein- und ausschalten zu können. In templates/[DEIN-TEMPLATE]/website/user/login.tpl Zeile 48 muss dazu nur die Abfrage, ob die Gastbestellung aktiviert ist, auskommentiert werden.
Original:
Code: Alles auswählen
<?php if($tpl_sourceid == 8 && $tpl_gastbestellung_check == 1) { ?>

Auskommentiert:
Code: Alles auswählen
<?php if($tpl_sourceid == 8 /*&& $tpl_gastbestellung_check == 1*/) { ?>

Dann ist es egal, ob im Backend ein Häkchen gesetzt ist oder nicht. Es wäre aber gut, die Log-Erweiterung trotzdem weiter laufen zu lassen und hin und wieder mal ein Auge drauf zu werfen. So lässt sich der Übeltäter vielleicht doch noch entlarven.

Grüße
Martin

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Mi 20. Mai 2015, 09:55
von olape
Hallo,

@Martens
danke für deine Hinweise.
Ich habe den Zusatz in die db.inc.php eingefügt.
Bekomme die von dir beschreibenen Meldungen, Jedenfalls, wenn ich den Haken gewollt entferne und setzte.

Beim nicht gewollten Entfernen des Hakens war leider keine Entrag im Log, Erst, als ich den Haken wieder gesetzt habe.

Gruss Olaf

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Mi 20. Mai 2015, 20:57
von Martens
Sooo, ich hab's! :D

Das Problem betrifft nicht nur die "Gastbestellung", sondern auch die Anzeige-Einstellungen für den "Facebook Likebutton", "PDF Download Katalog" und die "Durchschnittsbewertung aller Artikel". Reproduzieren lässt sich das, wenn man im Backend auf "Artikel" -> "Einstellungen" geht, wo die Tabs für Gebindepreise, Sortierung und Facettensuche sind. Sobald man hier auf Speichern klickt, die Checkbox ändert oder sogar nur einen anderen Tab wählt (das löst ebenfalls einen Speichervorgang aus), werden die Einstellungen der oben genannten Features mit einem leeren Wert überschrieben. Sprich: Sie werden im Frontend nicht mehr angezeigt. Diese 5 Einstellungen (inkl. Anzeige der Gebindepreise) gehören in der DB-Tabelle "randshop_einstellungen" zur group "artikel". Bevor nun eine Einstellung eines Werts dieser Gruppe geändert wird, löscht die Shop-Software pauschal alle values, die zur group "artikel" gehören mit dem Statement
Code: Alles auswählen
UPDATE randshop_einstellungen SET randshop_einstellungen.value = '' WHERE randshop_einstellungen.group = 'artikel'
und trägt alle Werte neu ein. Das klappt aber nur, wenn in dem Formular alle Einstellungen dieser Gruppe vorhanden sind. Doch das ist hier nicht der Fall.

Der Übeltäter ist admin/artikel/einstellungen_gebindepreise.php.
Um das Problem zu lösen, müssen alle Einstellungen der Gruppe "artikel" (bislang war das nur "gebindepreise_aktiv") an die Speicher-Funktion übergeben werden.

Und so wird's gemacht:
Die beiden Zeilen (73/74)
Code: Alles auswählen
$einstellungen = GetEinstellungen('', 'artikel');
$tpl_einstellungen = $einstellungen->artikel;
kopieren und löschen.

Die kopierten Zeilen dann weiter oben in der Datei, am Besten direkt nach $tabReiter->setActiveID('gebindepreise'); (Zeile 31) einfügen.

Dann den Funktionsaufruf
Code: Alles auswählen
    SaveGroupEinstellungen('artikel',
        array(
            'gebindepreise_aktiv' => $_POST['gebindepreise_aktiv'],
        )
    );
löschen und durch
Code: Alles auswählen
    $tpl_einstellungen->gebindepreise_aktiv = $_POST['gebindepreise_aktiv'];
    SaveGroupEinstellungen('artikel', $tpl_einstellungen);
ersetzen.

Das Objekt $tpl_einstellungen enthält alle gespeicherten Werte der Gruppe "artikel". Nachdem darin der Wert für "gebindepreise_aktiv" aktualisiert wurde, werden alle an SaveGroupEinstellungen() übergeben.

Der komplette PHP-Block oberhalb von <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> sollte dann so aussehen:
Code: Alles auswählen
<?php
/**
 *
 * Copyright (C) Die Randgruppe GmbH
 *
 * http://www.randshop.com
 * http://www.dierandgruppe.com
 *
 * Unter der Lizenz von Die Randgruppe GmbH:
 * http://www.randshop.com/Lizenz
 * 
 * $Author: $
 * $Date: $
 * $Revision: $
 *
 */

session_start();

// PHP-Includes
include_once("../../conf/config.inc.php");
include_once(DATEIPFAD . "conf/db.inc.php");
include_once("../global_off.inc.php");
include_once(DATEIPFAD . "includes/language/langu_" . LANGU_ADMIN . ".inc.php");
include_once(DATEIPFAD . "includes/language/langu_admin_" . LANGU_ADMIN . ".inc.php");
include_once(DATEIPFAD . "includes/functions.shopeinstellung.inc.php");
include_once(DATEIPFAD . "includes/functions.menue.inc.php");
include_once(DATEIPFAD . "includes/functions.language.inc.php");

include_once("einstellungen_reiter.inc.php");
$tabReiter->setActiveID('gebindepreise');

$einstellungen = GetEinstellungen('', 'artikel');
$tpl_einstellungen = $einstellungen->artikel;

if($_POST['formaction'] == 'delete')
{
   unset($_POST['gebinde'][$_POST['deleteIndex']]);
}

if($_POST['formaction'] == 'save' || $_POST['formaction'] == 'delete')
{
    $tpl_einstellungen->gebindepreise_aktiv = $_POST['gebindepreise_aktiv'];
    SaveGroupEinstellungen('artikel', $tpl_einstellungen);
   
   $gebindeEinstellungenString = "";
   if($_POST['gebinde'])
   {
       foreach($_POST['gebinde'] as $gebinde)
       {
          if($gebinde['einheit'])
          {
             if($trenner)
                   $gebindeEinstellungenString .= ";";
               else
                   $trenner = true;
               $gebindeEinstellungenString .= $gebinde['groesse'] . '_' . $gebinde['einheit'];
          }
       }
   }
    SaveGroupEinstellungen('artikel_gebinde',
        array(
            'gebinde' => $gebindeEinstellungenString
        )
    );
}

if($_POST['reiter'])
{
    $tabReiter->redirect($_POST['reiter']);
}

$einstellungen = GetEinstellungen('', 'artikel_gebinde');
$gebindeArray = explode(';', $einstellungen->artikel_gebinde->gebinde);
foreach($gebindeArray as $gebinde)
{
    $gebindeWerte = explode('_', $gebinde);
    if($gebindeWerte[0] && $gebindeWerte[1])
        $tpl_gebinde[$gebindeWerte[1]] = $gebindeWerte[0];
    if($gebindegroesse_vergleich) {
        if($gebindegroesse_vergleich != $gebindeWerte[0]) {
           $tpl_warnmeldung = $lang_warnung_gebindegroessen_unterschiedlich;
        }
    } else {
       $gebindegroesse_vergleich = $gebindeWerte[0];
    }
     
}

?>


Viele Grüße
Martin

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Mi 20. Mai 2015, 21:00
von Martens
olape hat geschrieben:Artikel anlegen / ändern, Hersteller anlegen und Ausprägungen für die Facettensuche anlegen.
Beim nicht gewollten Entfernen des Hakens war leider keine Entrag im Log, Erst, als ich den Haken wieder gesetzt habe.

Hallo Olaf,

das waren die entscheidenden Hinweise, Danke!

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Do 21. Mai 2015, 08:48
von olape
Hallo Martens

Reproduzieren lässt sich das, wenn man im Backend auf "Artikel" -> "Einstellungen" geht, wo die Tabs für Gebindepreise, Sortierung und Facettensuche sind.

Stimmt, so bekommt man es hin.

Habe deine Lösung umgesetzt, jetzt kann man es zumindest nicht mehr über Einstellungen --> Gebindepreise, Sortierung und Facettensuche auslösen.
Hoffentlich war das alles.
Die Zusätze in der db.inc.php habe ich wieder entfernt.

Vielen Dank an dich.

Gruss Olaf

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Do 21. Mai 2015, 18:34
von Magnus
Hallo,

ist ja echt klasse, dass die Ursache jetzt entdeckt ist.

Ich glaube, ich habe noch eine einfachere Lösung gefunden:
in der o.g. Datei, ca. Zeile 40 diesen Code:
Code: Alles auswählen
    SaveGroupEinstellungen('artikel',
        array(
            'gebindepreise_aktiv' => $_POST['gebindepreise_aktiv']
        )
    );


durch diesen ersetzen
Code: Alles auswählen
SaveKeyValueEinstellungen('artikel','gebindepreise_aktiv',$_POST['gebindepreise_aktiv']);


das sollte das Problem schon beheben, zumindest tats das bei mir ;-)

vielen Dank für die Tipps und das Engagement!

Magnus

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Di 26. Mai 2015, 15:09
von Martens
Magnus hat geschrieben:
Code: Alles auswählen
SaveKeyValueEinstellungen('artikel','gebindepreise_aktiv',$_POST['gebindepreise_aktiv']);

Hallo Magnus,

ahrrrgggh … auf die Idee, dass eine Funktion vorhanden ist, mit der man einen einzelnen Wert ändern kann, hätte ich eigentlich auch kommen können ... :roll:

Danke für's Code-Review
Martin

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Di 26. Mai 2015, 19:26
von Magnus
Hey Martin, so ist das doch eine nette Zusammenarbeit. Zeigt wieder mal, dass man so auch schöne Lösungen finden kann. Mir hat die Idee mit deiner Datenbankabfrage auch sehr gut gefallen ;-)

viele Grüße

Magnus

Re: Gastbestellungen zulassen-Haken verschwindet

BeitragVerfasst: Do 11. Jun 2015, 12:16
von ablass
Wow Leute.. super Detektivarbeit... und direkt so übernommen in die v2.4.. Danke an alle.