Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Fehler: Kunden können alle Kommentare in der Bestellhistorie einsehen

    web28

    • modified Team
    • Beiträge: 9.404
    Ich glaube das mit dieser Lösung alles abgedeckt wird.

    Für alte Statusmeldungen bleibt alles erhalten. nur bei neuen Statusmeldungen gibt es die Verfeinerung.

    Gruss Web28

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Upps, nicht richtig gelesen, sorry.
    Ihr habt natürlich Recht.

    Wann wird denn die orders_status_history_id generiert ?
    Vielleicht kann man die ja in die Abfrage hier mit einbauen:
    PSEUDOCODE !!
    Code: PHP  [Auswählen]
    if ($_POST['notify'] == 'on') {
            $notify_comments = ($_POST['notify_comments'] == 'off') && orders_status_history_id == 'LETZTE_ID' ?  '' : $comments;

    Gruß,
    noRiddle

    xxhappyxx

    • Viel Schreiber
    • Beiträge: 829
    • Geschlecht:
    Bislang habe ich in der DB die Tabelle "orders_status_history" um das Feld "comments_sent" erweitert. In meinem Fall nach der Spalte "customer_notified".

    Dann habe ich in der admin/oders.php nach
    Code: PHP  [Auswählen]
           $customer_notified = 1;
          }
    folgendes
    Code: PHP  [Auswählen]
            if ($_POST['notify_comments'] == 'on') {
            $customer_notified_comments = 1;
            } else {
            $customer_notified_comments = 0;
            }
    eingefügt und die anschließende Abfrage
    Code: PHP  [Auswählen]
          xtc_db_query("-- /admin/orders.php
                          INSERT INTO "
    .TABLE_ORDERS_STATUS_HISTORY."
                          (orders_id, orders_status_id, date_added, customer_notified, comments)
                          VALUES ("
    .$oID.", ".$status.", now(), ".$customer_notified.", '".xtc_db_input($comments)."')");
    in das
    Code: PHP  [Auswählen]
          xtc_db_query("-- /admin/orders.php
                          INSERT INTO "
    .TABLE_ORDERS_STATUS_HISTORY."
                          (orders_id, orders_status_id, date_added, customer_notified, comments_send, comments)
                          VALUES ("
    .$oID.", ".$status.", now(), ".$customer_notified.", ".$customer_notified_comments.", '".xtc_db_input($comments)."')");
    geändert.

    In der account_history_info.php aus
    Code: PHP  [Auswählen]
    $statuses_query = xtc_db_query("select os.orders_status_name,
                                           osh.date_added,
                                           osh.comments
                                    from "
    .TABLE_ORDERS_STATUS." os,
                                         "
    .TABLE_ORDERS_STATUS_HISTORY." osh
                                    where osh.orders_id = '"
    .(int) $_GET['order_id']."'
                                    and   osh.customer_notified = 1
                                    and   osh.orders_status_id = os.orders_status_id
                                    and   os.language_id = '"
    .(int) $_SESSION['languages_id']."'
                                    order by osh.date_added"
    );
    das
    Code: PHP  [Auswählen]
    $statuses_query = xtc_db_query("select os.orders_status_name,
                                           osh.date_added,
                                           osh.comments
                                    from "
    .TABLE_ORDERS_STATUS." os,
                                         "
    .TABLE_ORDERS_STATUS_HISTORY." osh
                                    where osh.orders_id = '"
    .(int) $_GET['order_id']."'
                                    and   osh.customer_notified = 1
                                    and   osh.comments_send = 1
                                    and   osh.orders_status_id = os.orders_status_id
                                    and   os.language_id = '"
    .(int) $_SESSION['languages_id']."'
                                    order by osh.date_added"
    );
    gemacht.

    Das funzt auch soweit ganz gut - NUR, wenn der Kunde eine Mail mit "verstecktem" Kommentar bekommt, dann wird diese Information auch nicht in der account_history_info.php angezeigt.

    Darüber, wie die Abfrage zu ändern wäre, damit der Kunde dennoch diese Information (z.B. eine Statusänderung) zu sehen bekommt, OHNE den Kommentar angezeigt zu bekommen, brüte ich noch.

    Gruß Thomas

    Nachtrag:
    In der lang/admin/orders.php habe ich aus
    Code: PHP  [Auswählen]
    define('ENTRY_NOTIFY_COMMENTS', 'Kommentare mitsenden:');
    folgendes gemacht
    Code: PHP  [Auswählen]
    define('ENTRY_NOTIFY_COMMENTS', 'Kommentar für Kunden sichtbar:');

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Meint Ihr denn das geht nicht wie ich's vorgeschlagen habe ?
    Letzte orders_status_history_id auslesen (z.B. mit: MAX(orders_status_history_id) AS last_hist_id),
    diese um 1 erhöhen und dann wie gepostet die Variable $notify_comments definieren.
    Dann bräuchte man keine weitere Spalte comments_sent oder wie auch immer genannt.

    Habe leider noch keine Testumgebung um das zu testen, müsste aber so gehen.

    Gruß,
    noRiddle

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Nur damit niemand was verkehrtes denkt.
    Geht so natürlich nicht, da man den Status, ob der Kunde den Kommentar lesen darf/soll oder nicht, ja nicht in dem Moment wo er akut ist abrufen kann.
    Weiß nicht was ich da für'n Blödsinn dachte...

    Gruß,
    noRiddle

    web28

    • modified Team
    • Beiträge: 9.404
    Hier meine Erweiterung:

    1. Datenbankupdate:
    Code: SQL  [Auswählen]
    ALTER TABLE orders_status_history ADD comments_sent INT( 1 )  NULL DEFAULT '0';

    UPDATE orders_status_history SET comments_sent = '1' WHERE customer_notified = '1';

    Mit UPDATE bleibt der Status Quo erhalten, ansonsten wären im Kundokonto gar keine Kommentare mehr sichtbar

    2. admin/orders.php anpassen
    Suchen nach:

    Code: PHP  [Auswählen]
    xtc_db_query("-- /admin/orders.php
                          INSERT INTO "
    .TABLE_ORDERS_STATUS_HISTORY."
                          (orders_id, orders_status_id, date_added, customer_notified, comments)
                          VALUES ("
    .$oID.", ".$status.", now(), ".$customer_notified.", '".xtc_db_input($comments)."')");
     

    Ersetzen mit: [in 106 beta4  nur ", comments_send' => ($_POST['notify_comments'] == 'on' ? 1 : 0) " hinzufügen]
    Code: PHP  [Auswählen]
    $sql_data_array = array('orders_id' => $oID,
                                  'orders_status_id' => $status,
                                  'date_added' => 'now()',
                                  'customer_notified' => $customer_notified,
                                  'comments' => $comments,
                                  'comments_sent' => ($_POST['notify_comments'] == 'on' ? 1 : 0)
                                  );
          xtc_db_perform(TABLE_ORDERS_STATUS_HISTORY,$sql_data_array);

    Mit $sql_data_array und xtc_db_perform wird der Code übersichtlicher und die Eingaben werden automatisch mit xtc_db_input maskiert

    3. account_history_info.php NUR "AND osh.customer_notified = 1" hinzufügen, ABER "osh.comments_sent" ergänzen
    Ergebnis:
    Code: PHP  [Auswählen]
    $statuses_query = xtc_db_query("-- /account_history_info.php
                                    SELECT os.orders_status_name,
                                           osh.date_added,
                                           osh.comments,
                                           osh.comments_sent
                                    FROM "
    .TABLE_ORDERS_STATUS." os,
                                         "
    .TABLE_ORDERS_STATUS_HISTORY." osh
                                    WHERE osh.orders_id = '"
    .$order->info['order_id']."'
                                      AND osh.customer_notified = 1
                                      AND osh.orders_status_id = os.orders_status_id
                                      AND os.language_id = '"
    .(int) $_SESSION['languages_id']."'
                                    ORDER BY osh.date_added"
    );

    in de selben Datei suchen nach:
     
    Code: PHP  [Auswählen]
    $history_block .= xtc_date_short...

    Komplette Zeile ersetzen mit:
    Code: PHP  [Auswählen]
    $history_block .= xtc_date_short($statuses['date_added']). '&nbsp;<strong>' .$statuses['orders_status_name']. '</strong>&nbsp;' . (empty ($statuses['comments']) || empty($statuses['comments_sent']) ? '&nbsp;' : nl2br(htmlspecialchars($statuses['comments']))) .'<br />';

    Hiermit wird der Kommetar nur veröffenlicht, wenn $statuses['comments_sent'] = 1 ist.

    Gruss Web28

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Code: SQL  [Auswählen]
    ALTER TABLE orders_status_history ADD comments_send INT( 1 )  NULL DEFAULT '0';
     
    UPDATE orders_status_history SET comments_sent = '1' WHERE customer_notified = '1';
     

    Kleiner Tippfehler. Es sollte
    Code: SQL  [Auswählen]
    UPDATE orders_status_history SET comments_send = '1' WHERE customer_notified = '1';
    heißen. Demnach muss der ganze gepostete Code noch einmal überarbeitet werden.

    Aus dem INT(1) würde ich auch noch ein TINYINT(1) machen, ist doch ressourcenschonender.

    Gruß
    Ronny

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Ich denke das sollte schon comments_sent heißen (weil Vergangenheitsform).
    Der Tippfehler ist im $sql_data_array wo es mit "d" geschrieben wurde.
    Alle anderen references sind ja auch mit "t" geschrieben.
    Denke also web28 hat das bewußt so gemacht.

    Gruß,
    noRiddle

    web28

    • modified Team
    • Beiträge: 9.404
    Ich habe die Tippfehler korrigiert, es heißt richtig
    comments_sent

    Gruss Web28

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Ich denke das sollte schon comments_sent heißen (weil Vergangenheitsform).
    You're right.

    Gruß
    Ronny

    xxhappyxx

    • Viel Schreiber
    • Beiträge: 829
    • Geschlecht:
    Klasse, dann ist diese Baustelle ja erschlagen.  :thumbs:

    Mein Dank an alle helfenden Hände.

    Gruß Thomas der allen ein erfolgreiches und gesundes 2013 wünscht und jetzt auch feiern geht  :cheers1: :booze:

    PS.: Vielleicht könnte einer der Mods im ersten Beitrag einen Link auf diese Lösung von web28 setzen!?

    designmatic

    • Neu im Forum
    • Beiträge: 2
    • Geschlecht:
    Hallo alle miteinander,

    für unseren Shop kommt es sehr gelegen, dass die Kommentare angezeigt werden, weil unsere Artikel zunächst produziert werden müssen, und für neugierige Kunden wäre es sicher toll, wenn sie online mitverfolgen können, was gerade in der Produktion abläuft.

    Was mich aber dabei stört: Es wird ein HTML Code-Salat in der Bestellhistorie angezeigt - der Code, der für die E-Mails benötigt wird, um Kontodaten und dergleichen übersichtlich darzustellen.

    Gibt es dafür einen Fix? :-?
    Danke im Voraus

    LG
    Shop Hosting