Noch paar Fragen zur API und Userverwaltung ...

Begonnen von AlternativeComputing, 04 Juli 2012, 18:11:25

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

AlternativeComputing

Moin Moin,

ich muß Euch noch mal Nerven.

Da ich ja nun das osc Modul an das PMX 12.1 anpasse, sind da noch paar Fragen offen.

Ich habe mir auch den Coder Guid runter geladen und gelesen.

Wenn Dateien includet werden, muß ich zwingend ' (PMX_MODULES_DIR . DS . 'Catalog' . DS . '/Pfad/datei.php' ' oder kann ich weiterhin ' (dirname(__FILE__) . '/Pfad/Datei.php' ' verweden?

Des weiteren, soll die Kundenprüfung und beim Login und der Registrierung der User bestimmte Werte in die Seesion zugefügt werden.

Das hat folgenden Grund:

Wenn sich ein User registriert und das Konto Aktiviert wird, sollen die Sessionwerte für den osc mit gesetzt werden und die Tabellen für das Adressbuch und die für die Kunden sollen Automatisch 1x gefüllt werden.
Ebenso wenn der User sich auslogt und einloggt, sollen entwerder die Werte in der Session gelöscht werden oder gesetzt werden.

Nun habe ich eine einfache funktionierende Brücke für die Sessionwerte hinbekommen und für das anlegen des Gastkunden.

Code in der application_top:

// set the user ID if it exists
if (MX_IS_USER) {
$userdata = mxGetUserData();

$uid = $userdata['uid'];
$customer_id = $userdata['customers_id'];
$customer_default_address_id = $userdata['customers_default_address_id'];
$customer_first_name = $userdata['customers_firstname'];
$customer_country_id = $userdata['customers_country_id'];
$customer_zone_id = $userdata['customers_zone_id'];

if (mxSessionGetVar($userdata['uid']) && mxSessionGetVar($userdata['customers_id'])) {
mxSessionSetVar('customer_id', $customer_id);
mxSessionSetVar('customer_default_address_id', $customer_default_address_id);
mxSessionSetVar('customer_first_name', $customer_first_name);
mxSessionSetVar('customer_country_id', $customer_country_id);
mxSessionSetVar('customer_zone_id', $customer_zone_id);

} else {

mxSessionSetVar('customer_id', $customer_id);
mxSessionSetVar('customer_default_address_id', $customer_default_address_id);
mxSessionSetVar('customer_first_name', $customer_first_name);
mxSessionSetVar('customer_country_id', $customer_country_id);
mxSessionSetVar('customer_zone_id', $customer_zone_id);
 }
} else {

$uid = "1";
$customer_id = "";
$customer_default_address_id = "";
$customer_first_name = "Guest";
$customer_country_id = "";
$customer_zone_id  = "";
$guest_account = "1";
$gu_id = session_id();

$check_customer_query = sql_query("select customers_id from " . TABLE_CUSTOMERS . " where id = '" . tep_db_input($gu_id) . "'");
$check_customer = sql_fetch_array($check_customer_query);

if (!sql_num_rows($check_customer_query)) {
 sql_query("INSERT INTO " . $prefix ."_oscpmx_customers (customers_id, uid, customers_firstname, customers_default_address_id, guest_account, id) VALUES ('$customer_id', '$uid', '$customer_first_name', '0', '$guest_account', '" . tep_db_input($gu_id) . "')");

mxSessionSetVar('customer_id', $check_customer['customers_id']);
mxSessionSetVar('customer_default_address_id', $customer_default_address_id);
mxSessionSetVar('customer_first_name', $customer_first_name);
mxSessionSetVar('customer_country_id', $customer_country_id);
mxSessionSetVar('customer_zone_id', $customer_zone_id);

}else{

 $customer_id = $check_customer['customers_id'];
 $customer_default_address_id = "";
 $customer_first_name  = "Guest";
 $customer_country_id = "";
 $customer_zone_id  = "";

 sql_query("update " . $prefix ."_xxxxxx_customers_info set customers_info_date_of_last_logon = now(), customers_info_number_of_logons = customers_info_number_of_logons+1 where customers_info_id = ". $customer_id  ."");

mxSessionSetVar('customer_id', $customer_id);
mxSessionSetVar('customer_default_address_id', $customer_default_address_id);
mxSessionSetVar('customer_first_name', $customer_first_name);
mxSessionSetVar('customer_country_id', $customer_country_id);
mxSessionSetVar('customer_zone_id', $customer_zone_id);

   }
 }


Das schreibt mir zwar die benötigten Werte in die Session aber legt nur das Gastkonto in der Tabelle an. Für diesen Aufbau muste ich die Usertabelle um paar Einträge erweitern was aber nicht das Problem ist.

Nun habe ich die Anfragen erweitert und hänge fest, da mir langsam die Ideen ausgehen.

Hier mal die Erweiterte abfrage in der application_top:


if (MX_IS_USER) {
$userdata = mxGetUserData();

$uid = $userdata['uid'];

$check_user_query = sql_query("select customers_company, customers_firstname, customers_lastname, customers_street_address, customers_suburb, customers_postcode, customers_city, customers_zone_id, customers_country_id, customers_telephone, customers_fax, email, user_bday, user_sexus from " . $prefix ."_users where uid = '". (int)$userdata['uid'] ."'");
$check_user = sql_fetch_array($check_user_query);

if (sql_num_rows($check_user_query)) {

//$customer_id = $uid;
//$customer_id = $check_user['customers_id'];
$user_company = $check_user['customers_company'];
$user_firstname = $check_user['customers_firstname'];
$user_lastname = $check_user['customers_lastname'];
$user_street_address = $check_user['customers_street_address'];
$user_suburb = $check_user['customers_suburb'];
$user_postcode = $check_user['customers_postcode'];
$user_city = $check_user['customers_city'];
$user_zone_id = $check_user['customers_zone_id'];
$user_country_id = $check_user['customers_country_id'];
$user_telephone = $check_user['customers_telephone'];
$user_fax = $check_user['customers_fax'];
$user_email_address = $check_user['email'];
$user_gender = $check_user['user_sexus'];
$user_dob = $check_user['user_bday'];
//$customer_firstname = $customer_first_name;

   if ($user_gender == '2') {
     $ugender = 'm';
   } elseif ($user_gender == '1') {
     $ugender = 'f';
   }

 sql_query("INSERT INTO " . $prefix ."_oscpmx_customers (uid, customers_gender, customers_firstname, customers_lastname, customers_dob, customers_email_address, customers_default_address_id, customers_telephone, customers_fax, guest_account, id) VALUES ('$uid', '$ugender', '$user_firstname', '$user_lastname', '$user_dob', '$user_email_address', '', '$user_telephone', '$user_fax', '0', '')");

}

if (sql_num_rows($check_user_query)) {

$check_user_qry = sql_query("SELECT c.customers_id AS customers_id, c.customers_gender AS customers_gender, c.customers_firstname AS customers_firstname, c.customers_lastname AS customers_lastname, u.customers_suburb AS customers_suburb, u.customers_postcode AS customers_postcode, u.customers_city AS customers_city, u.customers_zone_id AS customers_zone_id, u.customers_country_id AS customers_country_id, u.user_bday AS user_bday, u.user_sexus AS user_sexus, u.customers_company AS customers_company, u.customers_street_address AS customers_street_address, u.uid AS uid
                                             FROM " . $prefix ."_oscpmx_customers AS c, " . $prefix ."_users AS u ORDER BY u.uid = '". (int)$userdata['uid'] ."'");
$check_user1 = sql_fetch_array($check_user_qry);

//$customer_id = $uid;
$u_id = $check_user1['customers_id'];
$u_company = $check_user1['customers_company'];
$u_firstname = $check_user1['customers_firstname'];
$u_lastname = $check_user1['customers_lastname'];
$u_street_address = $check_user1['customers_street_address'];
$u_suburb = $check_user1['customers_suburb'];
$u_postcode = $check_user1['customers_postcode'];
$u_city = $check_user1['customers_city'];
$u_zone_id = $check_user1['customers_zone_id'];
$u_country_id = $check_user1['customers_country_id'];
$u_gender = $check_user1['user_sexus'];
$customer_first_name = $u_firstname;

   if ($u_gender == '2') {
     $gender = 'm';
   } elseif ($u_gender == '1') {
     $gender = 'f';
   }

 sql_query("INSERT INTO " . $prefix ."_oscpmx_address_book (customers_id, entry_gender, entry_company, entry_firstname, entry_lastname, entry_street_address, entry_suburb, entry_postcode, entry_city, entry_country_id, entry_zone_id) VALUES ('$u_id','$gender' ,'$u_company', '$u_firstname', '$u_lastname', '$u_street_address', '$u_suburb', '$u_postcode, '$u_city', '$u_zone_id', '$u_country_id', '')");


if (mxSessionGetVar($userdata['uid']) && mxSessionGetVar($check_user1['customers_id'])) {
mxSessionSetVar('customer_id', $check_user1['customers_id']);
mxSessionSetVar('customer_first_name', $u_firstname);
mxSessionSetVar('customer_country_id', $u_country_id);
mxSessionSetVar('customer_zone_id', $u_zone_id);

} else {

mxSessionSetVar('uid', $uid);
mxSessionSetVar('customer_id', $check_user1['customers_id']);
mxSessionSetVar('customer_first_name', $u_firstname);
mxSessionSetVar('customer_country_id', $u_country_id);
mxSessionSetVar('customer_zone_id', $u_zone_id);
 }
}
} else {

$uid = "1";
$customer_id = "";
$customer_default_address_id = "";
$customer_first_name = "Guest";
$customer_country_id = "";
$customer_zone_id  = "";
$guest_account = "1";
$gu_id = session_id();

$check_customer_query = sql_query("select customers_id from " . TABLE_CUSTOMERS . " where id = '" . tep_db_input($gu_id) . "'");
$check_customer = sql_fetch_array($check_customer_query);

if (!sql_num_rows($check_customer_query)) {
 sql_query("INSERT INTO " . $prefix ."_oscpmx_customers (customers_id, uid, customers_firstname, customers_default_address_id, guest_account, id) VALUES ('$customer_id', '$uid', '$customer_first_name', '0', '$guest_account', '" . tep_db_input($gu_id) . "')");


mxSessionSetVar('customer_id', $check_customer['customers_id']);
mxSessionSetVar('customer_default_address_id', $customer_default_address_id);
mxSessionSetVar('customer_first_name', $customer_first_name);
mxSessionSetVar('customer_country_id', $customer_country_id);
mxSessionSetVar('customer_zone_id', $customer_zone_id);

}else{

 $customer_id = $check_customer['customers_id'];
 $customer_default_address_id = "";
 $customer_first_name  = "Guest";
 $customer_country_id = "";
 $customer_zone_id  = "";

 sql_query("update " . $prefix ."_oscpmx_customers_info set customers_info_date_of_last_logon = now(), customers_info_number_of_logons = customers_info_number_of_logons+1 where customers_info_id = ". $customer_id  ."");

mxSessionSetVar('customer_id', $customer_id);
mxSessionSetVar('customer_default_address_id', $customer_default_address_id);
mxSessionSetVar('customer_first_name', $customer_first_name);
mxSessionSetVar('customer_country_id', $customer_country_id);
mxSessionSetVar('customer_zone_id', $customer_zone_id);

   }
 }


Bei dieser Kundenfunktion wird aber immer ein Eintrag in die Adressbuch und Kunden Tabelle geschrieben. Bei der Gastkontenabfrage halt nur einmal, da hier mit der Session ID gegen geprüft wird. Das will ich aber beim User vermeiden, da sonst bei einer Ungültigen Session wieder ein neuer Eintrag in die Kunden & Adressbuch Tabelle geschrieben wird.

Das das alles noch nicht 100% Sauber gecodet ist, denke ich ist mir bewusst.

Wie kann ich die Abfragen besser schreiben und vor allen wie und wo kann ich diese Abfragen in die mx_userfunctions_options und die nötigen Files in dem YA Modul einbauen ohne die Sicherheit auszuhebeln?

Für Tips und Ratschläge wäre ich dankbar, da ich sonst nicht wirklich beim checkout_shipping Sessionübergabe Problem weiter komme.
MfG

Peter

AlternativeComputing

Ok die Abfragen hab ich hinbekommen.
Es wird nur noch einmal die Kunden und Adressbuch Tabelle gefüllt, wenn kein Eintrag vorhanden ist.

Nun muß ich mich in die user_funktion einarbeiten, das auch die Tabellen bei der Registrierung gefüllt werden.
MfG

Peter

Olaf

Moin,  :morning:

soooo tief reinarbeiten musst du dich da nicht....   :cool:
es gibt einen Hook, welcher aufgerufen wird, wenn ein neuer User sich registriert.
du brauchst eine Datei, namens:  user.add.php im Verzeichnis /modules/deinmodul/core/

Inhalt dieser user.add.php:
<?php

defined
('mxMainFileLoaded') or die('access denied');
// $uid .... intval - enthält die Userid des neuen Users 
// $userinfo - assoz. array - enthält alle zugehörigen Userdaten

// ...... dein code

?>


dort kannst du dann deine Tabellen dann mit den Userdaten füllen.  ;)

gleiches gibt es auch für das "User-löschen" : user.delete.php
(könnte für dich ja genauseo relevat sein )
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

AlternativeComputing

Der Hook greift dann auf die mx_user_funktion zu, sehe ich das richtig?
MfG

Peter

Olaf

über den hook bekommst du die Userdaten und die Datei user.xxxx.php wird automatisch aufgerufen, du musst dir also darum keine Gedanken machen.
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

AlternativeComputing

Ok, nochmal fürs Verständnis:

Dann müßte ich praktisch


$uid = $uinfo['uid'];
//$customer_id = $uid;
//$customer_id = $uinfo['customers_id'];
$customer_company = $uinfo['customers_company'];
$customer_default_address_id = $uinfo['customers_default_address_id'];
$customer_first_name = $uinfo['customers_firstname'];
$customer_lastname = $uinfo['customers_lastname'];
$customer_street_address = $uinfo['customers_street_address'];
$customer_suburb = $uinfo['customers_suburb'];
$customer_postcode = $uinfo['customers_postcode'];
$customer_city = $uinfo['customers_city'];
$customer_zone_id = $uinfo['customers_zone_id'];
$customer_country_id = $uinfo['customers_country_id'];
$customer_telephone = $uinfo['customers_telephone'];
$customer_fax = $uinfo['customers_fax'];
$customer_email_address = $uinfo['email'];
$customer_gender = $uinfo['user_sexus'];
$customer_dob = $uinfo['user_bday'];

   if ($customer_gender == '2') {
     $ugender = 'm';
   } elseif ($customer_gender == '1') {
     $ugender = 'f';
   }


$customers = sql_query("select customers_id from {$prefix}_oscpmx_customers where uid='" . mxAddSlashesForSQL($uid) . "'");
$customers_values = sql_num_rows($customers);

   if (empty($customers_values)) {
 sql_query("INSERT INTO {$prefix}_oscpmx_customers (uid, customers_gender, customers_firstname, customers_lastname, customers_dob, customers_email_address, customers_default_address_id, customers_telephone, customers_fax, guest_account, id) VALUES ('" . mxAddSlashesForSQL($uid) . "', '" . mxAddSlashesForSQL($ugender) . "', '" . mxAddSlashesForSQL($customer_first_name) . "', '" . mxAddSlashesForSQL($customer_lastname) . "', '" . mxAddSlashesForSQL($customer_dob) . "', '" . mxAddSlashesForSQL($customer_email_address) . "', '', '" . mxAddSlashesForSQL($customer_telephone) . "', '" . mxAddSlashesForSQL($customer_fax) . "', '0', '')");

 }

$check_user_qry = sql_query("SELECT c.customers_id AS customers_id, c.customers_gender AS customers_gender, c.customers_firstname AS customers_firstname, c.customers_lastname AS customers_lastname, c.customers_default_address_id AS customers_default_address_id, u.customers_suburb AS customers_suburb, u.customers_postcode AS customers_postcode, u.customers_city AS customers_city, u.customers_zone_id AS customers_zone_id, u.customers_country_id AS customers_country_id, u.user_bday AS user_bday, u.user_sexus AS user_sexus, u.customers_company AS customers_company, u.customers_street_address AS customers_street_address, u.uid AS uid
                                             FROM {$prefix}_oscpmx_customers AS c JOIN {$prefix}_users AS u WHERE c.uid = u.uid");

$check_user = sql_fetch_array($check_user_qry);

$u_customer_id = $check_user['customers_id'];
$u_company = $check_user['customers_company'];
$u_firstname = $check_user['customers_firstname'];
$u_lastname = $check_user['customers_lastname'];
$u_default_address_id = $check_user['customers_default_address_id'];
$u_street_address = $check_user['customers_street_address'];
$u_suburb = $check_user['customers_suburb'];
$u_postcode = $check_user['customers_postcode'];
$u_city = $check_user['customers_city'];
$u_zone_id = $check_user['customers_zone_id'];
$u_country_id = $check_user['customers_country_id'];
$u_gender = $check_user['user_sexus'];
$customer_first_name = $u_firstname;

   if ($u_gender == '2') {
     $gender = 'm';
   } elseif ($u_gender == '1') {
     $gender = 'f';
   }

$abook = sql_query("select customers_id from {$prefix}_oscpmx_address_book where uid='" . mxAddSlashesForSQL($uid) . "'");
   $abook_values = sql_num_rows($abook);

   if (empty($abook_values)) {
 sql_query("INSERT INTO {$prefix}_oscpmx_address_book (customers_id, uid, entry_gender, entry_company, entry_firstname, entry_lastname, entry_street_address, entry_suburb, entry_postcode, entry_city, entry_country_id, entry_zone_id) VALUES ('" . mxAddSlashesForSQL($u_customer_id) . "', '" . mxAddSlashesForSQL($uid) . "', '" . mxAddSlashesForSQL($gender) . "', '" . mxAddSlashesForSQL($u_company) . "', '" . mxAddSlashesForSQL($u_firstname) . "', '" . mxAddSlashesForSQL($u_lastname) . "', '" . mxAddSlashesForSQL($u_street_address) . "', '" . mxAddSlashesForSQL($u_suburb) . "', '" . mxAddSlashesForSQL($u_postcode) . "', '" . mxAddSlashesForSQL($u_city) . "', '" . mxAddSlashesForSQL($u_country_id) . "', '" . mxAddSlashesForSQL($u_zone_id) . "',");

 }

//mxSessionSetVar('uid', $uid);
mxSessionSetVar('customer_id', $u_customer_id);
mxSessionSetVar('customer_first_name', $u_firstname);
mxSessionSetVar('customer_default_address_id', $u_default_address_id);
mxSessionSetVar('customer_country_id', $u_country_id);
mxSessionSetVar('customer_zone_id', $u_zone_id);


in die user.add.php schreiben.

Richtig?
MfG

Peter

Olaf

g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

AlternativeComputing

#7
Ahhh :) Dank Dir :)


Vielen Dank.

<Edit>
Folglich muß ich dann ja auch mit der user.login.php und user.delete.php machen.
Gibt es denn auch den Hook fürs Login?
</Edit>
MfG

Peter

Olaf

....und denke auch an die user.delete.php, damit du die Leichen auch gleich entfernen kannst....
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

AlternativeComputing

MfG

Peter

Olaf

hook für user.login.php gibt es (noch) nicht, ist aber ne Idee...
es gibt nur :
user.add.
user.delete.
user.edit
user.userpoints.

ich würde deinen ganzen Code in eine/mehrere Function auslagern und je nach Event entsprechend aufrufen in den Hooks
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

AlternativeComputing

Naja, der letzte Codeblock ist ja nur dafür da, wenn sich User/Kunden Registrieren.

Für den user.login Hook wäre er kürzer und beim delete ebenso.

Die Prüfungen müßen so lang sein, da erst die Daten aus der user Tabelle in die customers geschrieben werden sollen.
Wenn dann ein Datensatz vorhanden ist (der identisch mit der Userid ist) , soll dann ein Eintrag in die Adressbook Tabelle geschrieben werden.

In dem Codeblock fehlen aber noch zwei Update anweisungen für die Customers ID und der customers_default_address_id.

Das ist bei der Registrierung leider nötig, da ja die Bridge   aus der alten osc_mainfile wegfällt.
Das soll alles das PMX überhenmen.

Dank Dir noch mal für die Hooks.
MfG

Peter

AlternativeComputing

@ TerraProject:

Ok hast recht. Ich muß die Abfragen in mehrere Funktionen packen.
Die Adressbucheinträge sind nicht korrekt.

Aber das Kopieren der Userdaten in die Kundentabelle funtz schon mal einwandfrei.
MfG

Peter

AlternativeComputing

Sooo das mit den Funktionen hat sich erledigt.
Die user.add.php funzt wie sie soll.

Nun aber mal ne andere Frage:

Was ist sinnvoller, die Dateien mit PMX_MODULES_PATH oder mit PMX_MODULES_DIR zu includen?

PMX_MODULES_PATH macht ja schon bei URLS und Bildern sinn aber auch bei Dateien?
MfG

Peter

Olaf

PMX_XXXX_PATH.... bezieht sich immer auf die pmx-Root

PMX_XXXX_DIR ... bezieht sich auf die Server-Root.

Includes also immer mit _PATH includen....

allerdings gibt es ein paar Ausnahmen (die mir auf die Schnelle nicht einfallen) wo _DIR verwendet werden muss... allerdings nur in den selteten Fällen....
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

AlternativeComputing

Ich frag deshalb, da im YA Modules alles mit _DIR included wird.

Aber mal sehen was Chefe (Andi) dazu sagen kann.
MfG

Peter

AlternativeComputing

#16
Moin Moin,

Ich noch mal.

Wo finde ich die Sessions, die beim Login geschrieben werden?
Das ist jetzt wichtig, da die benötigten Daten nicht korrekt über die Aplicatiuon_Top übergeben werden.

Die Kunden Session Daten sollten schon beim Login geschrieben werden.

Ich hoffe Andi stolpert über diesen Fred.

<Edit>
Der Login Hook funtzt ja doch.
</Edit>
MfG

Peter

Olaf

schau dir mal den Inhalt von $_SESSION an... da findest du alles
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

AlternativeComputing

Das ist kein problem, ich baue gerade die osC Session nach. Mir ist nur was anderes aufgefallen.
Die Shipping- und Zahlungs- Module werden nicht geladen.

Und dann ist es auch kein Wunder, das der Shop bei der checkout_shipping hängen bleibt.

Die Hook sind ja mal Geil. Genau das was ich als ersatz für die osc_mainfile gebraucht habe.
MfG

Peter