[gelöst] finishNewUser_option (mx_userfunctions_options)

Begonnen von AlternativeComputing, 15 August 2011, 15:18:16

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

AlternativeComputing

Moin Moin,

Andi ich hoffe Du kannst mir helfen.

Nun die meisten Probleme hab ich nun alle selber hinbekommen, hänge aber nun an einer Sache fest:

Folgenes Zenario:

Der Neue User/Kunde registriert sich, füllt alle benötigten Felder aus, klick auf "Neuer Benutzer" und nun muß der User/Kunde seine Angaben bestätigen. Soweit sogut. Das Funktioniert alles.

Nun soll, wenn der User/Kunde seine Angaben bestätigt hat, mit der "finishNewUser_option" die in der Session stehenden Daten (Vorname, Nachname, Straße, etc) Automatisch in das osc Adressbuch geschrieben werden.

Darf/kann ich in der "mx_userfunctions_options" mit "mxSessionGetVar" arbeiten, um die benötigten Daten aus der Session abzugreifen um sie ins Adressbuch zu kopieren?

Habe es schon mit einer Extra funktion probiert, klappe aber nicht:


$qry = "INSERT INTO " . $prefix ."_oscpmx_address_book (uid, entry_user_sexus, entry_company, entry_firstname, entry_lastname, entry_street_address, entry_suburb, entry_postcode, entry_city, entry_state, entry_country_id, entry_zone_id)
  SELECT uid, user_sexus, user_company, user_firstname, user_lastname, user_street_address, user_suburb, user_postcode, user_city, user_state, user_country_id, user_zone_id FROM " . $prefix ."_users;";

            sql_system_query($qry);
// die Funktion hab ich mir aus der "mx_userfunctions" abgegugt aber ohne gewünschten erfolg.


MfG

Peter

AlternativeComputing

Moin Moin,  :morning:

Schade.

Ich habe mir mal die Session beim Registrierungsabschluß angesehen und festgestellt, das ja keine uid mit gegeben wird.

Also muß ich mir woll was anderes einfallen lassen, um beim Registrierungsabschluß das Adressbuch mit zu füllen.
MfG

Peter

Andi

Moin :)

du versteifst dich immer zu sehr auf die Session....

Codest du für 1.12, da wäre eine ganz einfache Lösung möglich.
Aber nur in 1.12...
schön´s Grüssle, Andi

AlternativeComputing

Moin Andi :)

Erstmal Danke für Deine Antwort :)

Nein die Sessions hab ich jetzt mal weggelassen.

Das problem ist ja das:

Der neue User wird ja erst in die usertabelle geschrieben, wenn alle Registerprozese abgeschloßen sind, soweit ich das verfolgen konnte.

Nun soll eigendlich, beim Abschluß der Registrierung (wenn die letzte Seite des Registerprozeses erscheint) das Adressbuch mit gefüllt werden.

Ich hab es erst garnicht mit den Sessions, sondern mit "Insert ... Select ... From" probiert:


/**
* Info
* die zusaetzlichen Datenbankfelder als array
*       - um ein zusaetzliches Feld in die Insert-Query einzufuegen,
*       einfach den Feldnamen und den Wert in der entsprechenden
*       SQL-Syntax hinzufuegen (siehe Beispieldaten)
*       - um eine bestehende (Original) Kombination auszuschliessen
*       den entsprechenden Arraywert aus dem $fields-Array löschen
*         z.B. unset($fields[13]);
*/
function finishNewUser_option($session, $fields)
{
   $formvars = mxAddSlashesForSQL($session);
   extract($formvars);
   // mxDebugFuncVars($session);
   // unset($fields[4]); #  = "femail         = '$femail'";
   // unset($fields[5]); #  = "url            = '$url'";
   // unset($fields[6]); #  = "user_avatar    = '$user_avatar'";
   // unset($fields[8]); #  = "user_icq       = '$user_icq'";
   // unset($fields[9]); #  = "user_occ       = '$user_occ'";
   // unset($fields[10]); # = "user_from      = '$user_from'";
   // unset($fields[11]); # = "user_intrest   = '$user_intrest'";
   // unset($fields[12]); # = "user_sig       = '$user_sig'";
   // unset($fields[13]); # = "user_aim       = '$user_aim'";
   // unset($fields[14]); # = "user_yim       = '$user_yim'";
   // unset($fields[15]); # = "user_msnm      = '$user_msnm'";
   // / Beispiel: die YA-Erweiterung von _Gerry_
   if (isset($user_company)) $fields[26] = "user_company = '$user_company'";
   if (isset($user_firstname)) $fields[27] = "user_firstname = '$user_firstname'";
   if (isset($user_lastname)) $fields[28] = "user_lastname = '$user_lastname'";
   if (isset($user_street_address)) $fields[29] = "user_street_address = '$user_street_address'";
   if (isset($user_suburb)) $fields[30] = "user_suburb = '$user_suburb'";
   if (isset($user_postcode)) $fields[31] = "user_postcode = '$user_postcode'";
   if (isset($user_city)) $fields[32] = "user_city = '$user_city'";
   if (isset($user_zone_id)) $fields[33] = "user_zone_id = '$user_zone_id'";
   if (isset($user_country_id)) $fields[34] = "user_country_id = '$user_country_id'";
   if (isset($user_telephone)) $fields[35] = "user_telephone = '$user_telephone'";
   if (isset($user_telefax)) $fields[36] = "user_telefax = '$user_telefax'";
   if (isset($customers_default_address_id)) $fields[37] = "customers_default_address_id = '$customers_default_address_id'";
   return $fields;

$sql = "INSERT INTO " . $prefix ."_oscpmx_address_book (uid, entry_user_sexus, entry_company, entry_firstname, entry_lastname, entry_street_address, entry_suburb, entry_postcode, entry_city, entry_state, entry_country_id, entry_zone_id)
                  SELECT uid, user_sexus, user_company, user_firstname, user_lastname, user_street_address, user_suburb, user_postcode, user_city, user_state, user_country_id, user_zone_id
                  FROM " . $prefix ."_users";
$mysql_query($sql);
}


Ich dachte ja, daß das anhängen reichte, was aber nicht so ist.

Nun werde ich es woll doch über die "User_Registration" index file probieren. Ich wollte eigendlich sowenig Dateinen wie möglich bearbeiten :(

<Edit>
Erstmal für die 0.1.11.3, dann sind alle nötigen Datein angepast. Danach kommt der Port auf die 1.12
</Edit>
MfG

Peter

AlternativeComputing

#4
Moin Moin,  :BD:

Ok das Adressbuch Problem habe ich Tasächlich über die index File des "User_Registration" Moduls gelöst bekommen. ^^


       $viewvars = mxStripSlashes($session);
       $viewvars['uid'] = sql_insert_id();
       // mxDebugFuncvars($viewvars); exit;
       sendnewusermail($viewvars);
       sendnewuserpm($viewvars);
       // extract($viewvars);
       if ($newsletter) {
           $userhost = gethostbyaddr(MX_REMOTE_ADDR);
           $result2 = sql_query("INSERT INTO ${prefix}_newsletter SET email = '$email', html='1', status = '2', checkkey='0', regdate='$user_regtime', regip='$userip', reghost='$userhost'");
       }
// Ab hier der Edit:
       $sql = "INSERT INTO " . $prefix ."_oscpmx_address_book (uid, entry_user_sexus, entry_company, entry_firstname, entry_lastname, entry_street_address, entry_suburb, entry_postcode, entry_city, entry_country_id, entry_zone_id)
                  SELECT uid, user_sexus, user_company, user_firstname, user_lastname, user_street_address, user_suburb, user_postcode, user_city, user_country_id, user_zone_id
                  FROM " . $prefix ."_users
                  WHERE uid = " . (int)$viewvars['uid'] . "";
       $result1 = sql_query($sql);
       if (!$result1) {
           mxErrorScreen(_DATABASEERROR);
           return;
       }
// Ende des Edits


Soweit sogut.

Wenn ich jetzt in den bestehenden User/Kunden Eintrag, aus den nun neu angelegten Adressbucheintrag, die address_book_id in das Feld customers_default_address_id des dazugehörigen (auch neu angeleten) User/Kunden kopieren will, wird mit dem folgenen Code ein komplet leerer User angelegt, nur das Feld customers_default_address_id wird mit der letzten address_book_id gefüllt.  :puzzled:


       $sql = "INSERT INTO " . $prefix ."_users (customers_default_address_id)
                  SELECT address_book_id
                  FROM " . $prefix ."_oscpmx_address_book
                  WHERE uid = " . (int)$viewvars['uid'] . "";
       $result1 = sql_query($sql);
       if (!$result1) {
           mxErrorScreen(_DATABASEERROR);
           return;
       }


Leider müßen alle Kopieraktionen hintereinander abgearbeitet werden.

Naja, aber das werde ich auch noch knacken ^^

<Edit>
Man, bin ich  :mad2:, mit Insert ist es auch kein Wunder das ein neuer Datensatz angelegt wird, das hinzufügen geht ja nur mit UPDATE
</Edit>
MfG

Peter

Andi

Moin :)

je nach Registrieroption kann es auch sein, dass der User erst in die temporäre Usertabelle geschrieben wird.

Aber sobald der User in der Usertabelle gespeichert ist, kannst du all seine Daten über die Api-Funktionen ermitteln. z.B. mxGetUserDataFromUid()

ZitatErstmal für die 0.1.11.3, dann sind alle nötigen Datein angepast. Danach kommt der Port auf die 1.12
Als Entwickler würde ich dir empfehlen dein Hauptaugenmerk auf die 1.12 zu legen, vergiss die 0.1.11, die wird bald Geschichte sein.
Die 1.12 beinhaltet gegenüber der 0.1.11 etliche Verbesserungen zur Modulentwicklung. So z.B. gibt es für eigentlich alle relevanten Userfunktionen, sogenannte "Hooks", die es erlauben, modulspezifischen Code direkt in der jeweiligen Funktion auszuführen, ohne die Systemdatei zu ändern.
Für dieses aktuelle Problem von dir, würde es genügen, eine spezielle Datei (modules/DEINMODUL/core/user.add.php) in deinem Modul anzulegen, die dann nach der Registrierung vom System automatisch eingelesen und interpretiert wird...
schön´s Grüssle, Andi

AlternativeComputing

Moin Andi,

Danke für die Infos :)

Ok das letzte Problem hab ich ja nun auch gelöst:


        $sql = "UPDATE " . $prefix ."_users AS u, " . $prefix ."_oscpmx_address_book AS oab SET u.customers_default_address_id = oab.address_book_id WHERE u.uid = oab.uid";
        $result4 = sql_query($sql);
        if (!$result4) {
            mxErrorScreen(_DATABASEERROR);
            return;
        }


Ok dann muß ich noch ne if und else Bedingung, zur Prüfung, ob in der user_temp Daten stehen oder nicht, einbauen.

Ich würde ja gerne das 1.12 benutzen, wenn es nicht mehr ein RC ist. Es war schon ein Fehler den osCommerce in der 2.2RC2a als Modul zu benutzen.

Aber vielen Dank nochmals für die Info mit der user_temp, an die hab ich jetzt net gedacht.
MfG

Peter