neues Modul Frontend User Daten

Gesperrt
php0815
Beiträge: 373
Registriert: Mi 26. Okt 2005, 12:12
Wohnort: Schwarzwald
Kontaktdaten:

neues Modul Frontend User Daten

Beitrag von php0815 » Di 16. Mai 2006, 15:39

ein Modul das Frontenduserdaten verwaltet:
# Es muß das Modul Newsletter_Handler_output.php angepasst werden siehe unten
# Anmeldung über das Newslettermodul
# wenn das Modul nicht in einem Geschützten Bereich liegt und man nicht angemeldet ist wird nichts angezeigt.
# Eine Ausgabe der Userdaten ist nicht vorhanden
# die Verknüpfung mit dem Newsletter erfolgt über idfrontenduser

# 18.05.06 SQL Injection angepasst


Haupt Modul Change_adress.php

Code: Alles auswählen

<?php
cInclude("classes", "class.frontend.users.php");

function queryf($format) {
    $parameter = func_get_args(); // Uebergebene Parameter bekommen
    $querystring = array_shift($parameter); // Erstes Element: Querystring
    $parameter = array_map("mysql_real_escape_string", $parameter); // Uebrigen Parameter escapen mit mysql_real_escape_string()
    $query = vsprintf($querystring, $parameter); // Einsetzen der Variablen fuer die Typangabe
    return mysql_query($query); // Query ausfuehren und returnen
}

$frontendusers = new FrontendUserCollection;
$frontendusers->select("idclient = '$client' AND username = '".urlencode($auth->auth[uname])."'");
if ($frontenduser = $frontendusers->next()) {
   $idfrontend    = $frontenduser->get("idfrontenduser");

   $strMsg = "";

   if ($_POST["action"] == "save") {
      if ($_POST["name"] != "" || $_POST["vorname"] != "" || $_POST["plz"] != "" || $_POST["ort"] != "" || $_POST["email"] != "") {
         if ($_POST["name"] == "") {
            $strMsg = "Bitte geben sie ihren Namen an.";
         } else if  ($_POST["vorname"] == "") {
            $strMsg = "Bitte geben sie ihren Vorname an.";
         } else if  ($_POST["plz"] == "") {
            $strMsg = "Bitte geben sie ihre PLZ an.";
         } else if  ($_POST["ort"] == "") {
             $strMsg = "Bitte geben sie ihren Ort an.";
         } else if ($_POST["email"] == "") {
             $strMsg = "Bitte geben sie ihre eMail an.";
         }
      }

      if ($strMsg == "" && $_REQUEST["ku_nr"] != "") {
      
    $kunum = $_POST['ku_nr'];
    $name = $_POST['name'];
    $vorname = $_POST['vorname'];
    $strasse = $_POST['strasse'];
    $plz = $_POST['plz'];
    $ort = $_POST['ort'];
    $tel = $_POST['tel'];
    $fax = $_POST['fax'];
    $mobil = $_POST['mobil'];
    $email = $_POST['email'];
    $www = $_POST['www'];

    $db2 = new DB_Contenido;
  $sql = queryf("UPDATE ".$cfg['tab']['frontdatadress']."
            SET vorname = '$vorname',
                name = '$name',
                strasse = '$strasse',
                plz = '$plz',
                ort = '$ort',
                tel = '$tel',
                fax = '$fax',
                mobil = '$mobil',
                email = '$email',
                www = '$www'
            WHERE ku_nr = $kunum");
    $db2->query($sql);
    echo" Die Daten wurden eingetragen<br>";
      } else {
        $strMsg = '<font color="#FF0000">'.$strMsg.'</font>';
        echo"Die Daten wurden nicht eingetragen: $strMsg";
      }
   }

  $template = 'dateneingabe.html';

  if ( !is_object($tpl) )
  {
    $tpl = new Template;
  }
  $tpl->reset();
  
      // Kundennummer ermitteln
      $db2 = new DB_Contenido;
      $sql = "SELECT
                ku_nr,
                vorname,
                name,
                strasse,
                plz,
                ort,
                tel,
                fax,
                mobil,
                email,
                www
              FROM
                ".$cfg['tab']['frontdatadress']."
              WHERE
                idfrontenduser = $idfrontend";
                
      $db2->query($sql);

        if ($db2->next_record())
        {
            $kunumdb = $db2->f("ku_nr");
            $vorname = $db2->f("vorname");
            $name = $db2->f("name");
            $strasse = $db2->f("strasse");
            $plz = $db2->f("plz");
            $ort = $db2->f("ort");
            $tel = $db2->f("tel");
            $fax = $db2->f("fax");
            $mobil = $db2->f("mobil");
            $email = $db2->f("email");
            $www = $db2->f("www");
        }
        
  // pfad ür den Rücksprung ermitteln
  $url = $sess->url("front_content.php?idcat=".$idcat);

  // pfad für den Rücksprung setzen
  $tpl->set('s', 'FORM_ACTION', $url);
  $tpl->set('s', 'KU_NR', $kunumdb);
  $tpl->set('s', 'VORNAME', $vorname);
  $tpl->set('s', 'NAME', $name);
  $tpl->set('s', 'STRASSE', $strasse);
  $tpl->set('s', 'PLZ', $plz);
  $tpl->set('s', 'ORT', $ort);
  $tpl->set('s', 'TEL', $tel);
  $tpl->set('s', 'FAX', $fax);
  $tpl->set('s', 'MOBIL', $mobil);
  $tpl->set('s', 'EMAIL', $email);
  $tpl->set('s', 'WWW', $www);

  $tpl->generate('templates/'.$template);
}
else{
// Ausgabe wenn das Modul nicht im geschützen bereich liegt
  echo"Bitte logen sie sich ein um die Daten bearbeiten zu können";
}
?>
Stye -> HTML Editor -> Dateneingabe.html

Code: Alles auswählen

<div id="frontdat">
	<br>
	<form action="{FORM_ACTION}" method="post" style="padding:0;margin:0;" name="kunstlerformular" id="kunstlerformular"}>
             <input type="hidden" name="action" value="save" >
		<table width="480" border="0" cellspacing="2" cellpadding="0">
		        <tr>
				<td width="150">Kunden-Nummer</td>
				<td><input type="text" name="ku_nr" value="{KU_NR}" readonly disable size="10" maxlength="10" tabindex="1" border="0"></td>
			</tr>
			<tr>
				<td width="150">Name</td>
				<td><input type="text" name="name" value="{NAME}" size="20" maxlength="20" tabindex="3" border="0"></td>
			</tr>
			<tr>
				<td width="150">Vorname</td>
				<td><input type="text" name="vorname" value="{VORNAME}" size="20" maxlength="20" tabindex="4" border="0"></td>
			</tr>
			<tr>
				<td width="150"><img src="images/blank.gif" alt="" height="10" width="100" border="0"></td>
				<td><img src="images/blank.gif" alt="" height="10" width="100" border="0"></td>
			</tr>
			<tr>
				<td width="150">Stra&szlig;e</td>
				<td><input type="text" name="strasse" value="{STRASSE}" size="45" maxlength="45" tabindex="5" border="0"></td>
			</tr>
			<tr>
				<td width="150"><img src="images/blank.gif" alt="" height="10" width="100" border="0"></td>
				<td><img src="images/blank.gif" alt="" height="10" width="100" border="0"></td>
			</tr>
			<tr>
				<td width="150">PLZ</td>
				<td><input type="text" name="plz" value="{PLZ}" size="5" maxlength="5" tabindex="6" border="0"></td>
			</tr>
			<tr>
				<td width="150">Ort</td>
				<td><input type="text" name="ort" value="{ORT}" size="45" maxlength="45" tabindex="7" border="0"></td>
			</tr>
			<tr>
				<td width="150"><img src="images/blank.gif" alt="" height="10" width="100" border="0"></td>
				<td><img src="images/blank.gif" alt="" height="10" width="100" border="0"></td>
			</tr>
			<tr>
				<td width="150">Telefon</td>
				<td><input type="text" name="tel" value="{TEL}" size="45" maxlength="45" tabindex="8" border="0"></td>
			</tr>
			<tr>
				<td width="150">Fax</td>
				<td><input type="text" name="fax" value="{FAX}" size="20" maxlength="20" tabindex="9" border="0"></td>
			</tr>
			<tr>
				<td width="150">Mobil</td>
				<td><input type="text" name="mobil" value="{MOBIL}" size="20" maxlength="20" tabindex="10" border="0"></td>
			</tr>
			<tr>
				<td width="150"><img src="images/blank.gif" alt="" height="10" width="100" border="0"></td>
				<td><img src="images/blank.gif" alt="" height="10" width="100" border="0"></td>
			</tr>
			<tr>
				<td width="150">eMail</td>
				<td><input type="text" name="email" value="{EMAIL}" size="45" maxlength="45" tabindex="11" border="0"></td>
			</tr>
			<tr>
				<td width="150">www</td>
				<td><input type="text" name="www" value="{WWW}" size="45" maxlength="255" tabindex="12" border="0"></td>
			</tr>
			<tr>
				<td width="150"><img src="images/blank.gif" alt="" height="20" width="100" border="0"></td>
				<td><img src="images/space.gif" alt="" height="20" width="100" border="0"></td>
			</tr>
			<tr>
				<td width="150"><input type="submit" name="eintragen" value="Daten eintragen" tabindex="35" border="0"></td>
				<td><input type="reset" tabindex="36" border="0"></td>
			</tr>
		</table>
	</form>
</div>
Newsletter_Handler_output.php anpassung bei ca. Zeile 170:

Code: Alles auswählen

       if ($frontenduser = $frontendusers->next()) {

          //    Daten auslesen für Kundendaten anlegen
          $db2 = new DB_Contenido;
          $idfrontenduser = $frontenduser->get("idfrontenduser");

          $sql = "INSERT INTO
                    ".$cfg["tab"]["frontdatadress"] ."
                  SET
                    idfrontenduser ='$idfrontenduser'";

          $db2->query($sql);

            $db2 = new DB_Contenido;
      $sql = "SELECT
                ku_nr
              FROM
                ".$cfg['tab']['frontdatadress']."
              WHERE
                idfrontenduser = $idfrontenduser";
      $db2->query($sql);

        if ($db2->next_record())
        {
            $kunum = $db2->f("ku_nr");
        }
          // Ende Daten auslesen für Kundendaten anlegen

          $frontenduser->set("active",1);
          $pwd = substr(md5(rand()),0,8); // Generating password
          $frontenduser->set("password", $pwd);
          $frontenduser->store();
          // Übersetzung ändern
          $strMessage .= mi18n("<br><br>Additionally, your website account has been activated. You can now use the following username and password to log in to access special areas on our website:<br>");
          // --- hinzugefügt --- .mi18n("<br>Kundennummer: ").$kunum --- hinzugefügt ---
          $strMessage .= mi18n("Username: ").$recipient->get("email").mi18n("<br>Password: ").$pwd.mi18n("<br>Kundennummer: ").$kunum;
          // --- hinzugefügt --- .mi18n("Kundennummer: ").$kunum."\n\n" --- hinzugefügt ---
          $body = mi18n("txtMailPassword")."\n\n".mi18n("Username: ").$recipient->get("email")."\n".mi18n("Password: ").$pwd."\n\n".mi18n("Kundennummer: ").$kunum."\n\n".mi18n("Click here to login: ").$cfgClient[$client]["path"]["htmlpath"]."front_content.php?changelang=".$lang;


// Bei ca. Zeile 270 einfügen
          switch ($arrSettings["FrontendDel"]) {
             case "DeleteUser": // Deleting frontend account
                $idfrontenduser = $frontenduser->get("idfrontenduser"); // idfrontenduser ermitteln für frontdatadress löschen
                $frontendusers->delete($frontenduser->get("idfrontenduser"));
                
       // Datensatz in frontdatadress löschen
                $db2 = new DB_Contenido;

                $sql = "DELETE FROM
                          ".$cfg['tab']['frontdatadress']."
                        WHERE
                          idfrontenduser = $idfrontenduser";
       // ende Datensatz in frontdatadress löschen

                $strMessage .= mi18n(" Your website account has been deleted.");
                break;
in datei cfg_sql.inc.php einfügen

Code: Alles auswählen

$cfg["tab"]["frontdatadress"] = $cfg['sql']['sqlprefix']."_frontdatadress";
Datenbank erstellen

Code: Alles auswählen

$db = new DB_Contenido;
$sql = "CREATE TABLE IF NOT EXISTS `".$cfg["tab"]["frontdatadress"]."` (
  `ku_nr` int(11) NOT NULL auto_increment,
  `idfrontenduser` int(11) NOT NULL default '0',
  `firm_id` int(11) NOT NULL default '0',
  `vorname` varchar(45) NOT NULL default '',
  `name` varchar(45) NOT NULL default '',
  `strasse` varchar(45) NOT NULL default '',
  `plz` int(11) NOT NULL default '0',
  `ort` varchar(45) NOT NULL default '',
  `tel` varchar(45) NOT NULL default '',
  `fax` varchar(45) NOT NULL default '',
  `mobil` varchar(45) NOT NULL default '',
  `email` varchar(45) NOT NULL default '',
  `www` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`ku_nr`)
) TYPE=MyISAM AUTO_INCREMENT=2006000 ;
$db->query($sql);
Zuletzt geändert von php0815 am Do 18. Mai 2006, 14:08, insgesamt 2-mal geändert.
In der Ruhe liegt die Kraft den wer suchet der findet
Wer Rechtschreibfehler findet kann sie behalten, Codefehler können gemeldet werden.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 16. Mai 2006, 23:19

Tipp:
In der change_adress.php solltest Du noch Techniken gegen SQL-Injection integrieren. Z.Z. kann man - als angemeldeter Nutzer - mit geeigneten Eingaben die Datenbank manipulieren.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

php0815
Beiträge: 373
Registriert: Mi 26. Okt 2005, 12:12
Wohnort: Schwarzwald
Kontaktdaten:

Beitrag von php0815 » Do 18. Mai 2006, 13:15

Ist das nicht durch $db2 = new DB_Contenido; abgesichert?

Wenn nicht reicht es wenn ich folgende funktion verwende?

Code: Alles auswählen

function queryf($format) {
    $parameter = func_get_args(); // Uebergebene Parameter bekommen
    $querystring = array_shift($parameter); // Erstes Element: Querystring
    $parameter = array_map("mysql_real_escape_string", $parameter); // Uebrigen Parameter escapen mit mysql_real_escape_string()
    $query = vsprintf($querystring, $parameter); // Einsetzen der Variablen fuer die Typangabe
    return mysql_query($query); // Query ausfuehren und returnen
}
/* Beispiel
$a = 'hallo';
$c = 10;
$db->queryf("SELECT bla FROM bla WHERE blabla = '%s' AND xx = %d", $a, $c);
*/
oder reicht dieser Code aus?

Code: Alles auswählen

$db->query("SELECT ... FROM table WHERE name = ? AND alter = ?", array($name, $alter));
In der Ruhe liegt die Kraft den wer suchet der findet
Wer Rechtschreibfehler findet kann sie behalten, Codefehler können gemeldet werden.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 18. Mai 2006, 14:03

Nein, das new DB_Contenido erzeugt nur ein weiteres Objekt zum Zugriff auf die DB.

Wenn Du direkt ein SQL-Statement gegen die DB sendest und darin sowas wie value='$_REQUEST["irgendwas"]' vorkommt (d.h. die übergebenen Daten ungefiltert ins SQL-Statement gelangen), kann man es für SQL-Injection ausnutzen.

Die erste Funktion würde helfen, das zweite dürfte nicht gehen, da die query-Methode des DB_Contenido-Objekts (genaugenommen die conlib) keine Prepared Statements kennt (funktioniert auch erst mit mySQL 5).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

php0815
Beiträge: 373
Registriert: Mi 26. Okt 2005, 12:12
Wohnort: Schwarzwald
Kontaktdaten:

Beitrag von php0815 » Do 18. Mai 2006, 14:10

habe ich oben eingefügt
Danke für den hinweis auf die SQL Injection
In der Ruhe liegt die Kraft den wer suchet der findet
Wer Rechtschreibfehler findet kann sie behalten, Codefehler können gemeldet werden.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 18. Mai 2006, 15:06

Kein Problem. Beim Haar-in-der-Suppe-finden bin ich gut, ich alte Nölebacke... :wink:

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

php0815
Beiträge: 373
Registriert: Mi 26. Okt 2005, 12:12
Wohnort: Schwarzwald
Kontaktdaten:

Beitrag von php0815 » Do 18. Mai 2006, 15:15

Solche Leute wie dich brauchen wir 0815 Programmierer sonst kommen wir auf keinen grünen Zweig.
In der Ruhe liegt die Kraft den wer suchet der findet
Wer Rechtschreibfehler findet kann sie behalten, Codefehler können gemeldet werden.

pommes
Beiträge: 60
Registriert: So 21. Mai 2006, 19:05
Kontaktdaten:

Re: neues Modul Frontend User Daten

Beitrag von pommes » Mi 31. Mai 2006, 00:10

php0815 hat geschrieben: Datenbank erstellen

Code: Alles auswählen

$db = new DB_Contenido;
$sql = "CREATE TABLE IF NOT EXISTS `".$cfg["tab"]["frontdatadress"]."` (
  `ku_nr` int(11) NOT NULL auto_increment,
  `idfrontenduser` int(11) NOT NULL default '0',
  `firm_id` int(11) NOT NULL default '0',
  `vorname` varchar(45) NOT NULL default '',
  `name` varchar(45) NOT NULL default '',
  `strasse` varchar(45) NOT NULL default '',
  `plz` int(11) NOT NULL default '0',
  `ort` varchar(45) NOT NULL default '',
  `tel` varchar(45) NOT NULL default '',
  `fax` varchar(45) NOT NULL default '',
  `mobil` varchar(45) NOT NULL default '',
  `email` varchar(45) NOT NULL default '',
  `www` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`ku_nr`)
) TYPE=MyISAM AUTO_INCREMENT=2006000 ;
$db->query($sql);
Und da waren sie wieder meine Prob *LOL*

Hallo erstmal,

wo genau muss ich das ausführen ?
Im phpMyAdmin 2.5.4 bekomme ich nur:
SQL-Befehl :
$db = new DB_Contenido
MySQL meldet:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near
Ich nutze Confixx und da werden die Datenbanknamen (z.B. usr_web2_3)vorgegeben.
Kann ich in dieser einfach "frontdatadress" anlegen und funktioniert das ?
Wo muss denn dann alles hinkopiert werden ?
Sorry für die vielleicht dummen Fragen, bin Newbie, sorry ;)
Gruß
Pommes

php0815
Beiträge: 373
Registriert: Mi 26. Okt 2005, 12:12
Wohnort: Schwarzwald
Kontaktdaten:

Beitrag von php0815 » Mi 31. Mai 2006, 09:04

Dumme Fragen gibt es nicht nur schlecht vormulierte oder Dumme Antworten :D
Stecke das ganze in eine output Datei und führe sie aus dann sollte die Tabelle angelegt werden.
Oder gehe ins phpMyAdmin klickst auf den Reiter sql und führst folgenden Code aus

Code: Alles auswählen

CREATE TABLE `con_frontdatadress` (
  `ku_nr` int(11) NOT NULL default '0',
  `idfrontenduser` int(11) NOT NULL default '0',
  `kuenstlername` varchar(45) NOT NULL default '',
  `vorname` varchar(45) NOT NULL default '',
  `name` varchar(45) NOT NULL default '',
  `strasse` varchar(45) NOT NULL default '',
  `plz` int(11) NOT NULL default '0',
  `ort` varchar(45) NOT NULL default '',
  `tel` varchar(45) NOT NULL default '',
  `fax` varchar(45) NOT NULL default '',
  `mobil` varchar(45) NOT NULL default '',
  `email` varchar(45) NOT NULL default '',
  `www` varchar(255) NOT NULL default '',
  `geburtstag` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`ku_nr`)
) TYPE=MyISAM;
Dann sollte die Tabelle hinzugefügt werden.

Edit:
habe im anderen Post gelesen das du Gebursttag auch noch benötigst, habe ich eingefügt aber nur in der Tabelle, die Eingabe kommt noch.
Das mit der Ausgabe mache ich dir muß mir noch die Füße vertreten (abspecken) heute mittag ist es dann fertig.
Kannst ja mal posten wie es ungefähr aussehen soll.

Gruß
php0815
In der Ruhe liegt die Kraft den wer suchet der findet
Wer Rechtschreibfehler findet kann sie behalten, Codefehler können gemeldet werden.

Mc
Beiträge: 188
Registriert: Mi 2. Mär 2005, 21:19
Kontaktdaten:

Beitrag von Mc » Mo 5. Feb 2007, 14:07

Klasse Modul!

Genau das, was wir gesucht haben. Bei mir läuft es aber nur, wenn ich das Feld ku_nr auf autoincrement stelle.

Gruß Mc

Mc
Beiträge: 188
Registriert: Mi 2. Mär 2005, 21:19
Kontaktdaten:

ids auf auto_increment

Beitrag von Mc » So 18. Feb 2007, 12:47

Ich verwende das Modul Change_Adress von php0815 und das Modul Newsletter_Handler von HerrB in der Anpassung von php0815.
Funktioniert auch prima.

Ich möchte nun über phpMyAdmin bzw. ein Formular eines selbsterstellten Moduls in die con_frontendusers und in die con_frontdatadress per Hand einen weiteren User eintragen. Dies klappt zunächst auch. Wenn sich nun allerdings ein User über das Anmeldeformular des Newsletters einträgt, dann wird der "von Hand" vorgenommene Eintrag überschrieben. Woran kann das liegen?

In diesem Zusammenhang eine weitere Frage: Wo werden eigentlich die ids idfrontenduser und ku_nr generiert? Ich hatte oben schon geschrieben, dass bei mir die Module nur funktionieren, wenn ich ku_nr auf auto_increment stelle.
Wenn ich mit einem entsprechenden Modul einem frontenduser in der con_frontendgroupmember Gruppen zuweisen will, dann habe ich dafür die idfrontendgroupmember auf auto_increment gestellt. Es scheint zu funktionieren, ich weiß allerdings nicht, welche Auswirkungen das haben könnte.
Kann ich auch die idfrontenduser auf auto_increment stellen?

Vielen Dank.
Gruß
Mc

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 18. Feb 2007, 14:51

Es wird deswegen überschrieben, weil Du den Eintrag in der Sequenz-Tabelle (con_sequence) nicht entsprechend aktualisiert hast.

Das beantwortet auch die Frage, wie die idfrontenduser generiert wird. Grundsätzlich ist es besser, Elemente über die Objekte und Klassen zu erzeugen, die nehmen Dir die Arbeit ab... :wink:

Die Spalte ku_nr ist im ersten Post auch als auto_increment definiert, vermutlich wurde es bereits mal aktualisiert.

Du solltest ansonsten in Contenido-Tabellen keine Änderungen in der DB-Definition vornehmen (und die Änderung in der con_frontendgroupmember wieder zurücknehmen - dafür ist die con_sequence da).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

barni
Beiträge: 127
Registriert: Fr 28. Okt 2005, 20:54
Kontaktdaten:

Beitrag von barni » Do 15. Mai 2008, 15:52

Hallo,

würde das Modul sehr gerne ausprobieren, aber irgendwie komm ich nicht zurecht.

Und zwar wollte ich das mit der Neuen Version 4.8.3. testen.

Ist dort der Newsletter Handler anders?

Irgendwie versteh ich da grade garnicht, wo dein Code rein muss.
Das ist der Originalcode aus der 4.8.3

Code: Alles auswählen

<?php
   // Includes
   cInclude('classes', 'contenido/class.clientslang.php');
   cInclude('classes', 'contenido/class.client.php');
   cInclude('classes', 'class.template.php');
   cInclude('classes', 'class.newsletter.recipients.php');
   cInclude('classes', 'class.newsletter.php');
   cInclude('classes', 'class.frontend.users.php');
   cInclude('classes', 'class.phpmailer.php');

   // Initialisation
   $oClientLang = new cApiClientLanguage(false, $client, $lang);
   $oClient     = new cApiClient($client);
   $oRecipients = new RecipientCollection;
   $sMessage = "&nbsp;";
   unset($recipient); // Unset any existing recipient objects - note, that it must be $recipient for the plugins...

   $aSettings   = array();
   $aSettings['JoinSel']         = $oClientLang->getProperty('newsletter', 'joinsel');
   $aSettings['JoinMultiple']    = $oClientLang->getProperty('newsletter', 'joinmultiple');
   $aSettings['JoinGroups']      = $oClientLang->getProperty('newsletter', 'joingroups');
   $aSettings['JoinMessageType'] = $oClientLang->getProperty('newsletter', 'joinmessagetype');
   $aSettings['FrontendLink']    = $oClient->getProperty('newsletter', 'frontendlink'); # Note: Stored for client, as frontendusers are language independent
   $aSettings['FrontendConfirm'] = "CMS_VALUE[5]";
   $aSettings['FrontendDel']     = "CMS_VALUE[6]";
   $aSettings['SenderEMail']     = $oClient->getProperty('global', 'sender-email'); # This one could be recycled by other modules...
   $aSettings['HandlerID']       = $oClientLang->getProperty('newsletter', 'idcatart');
   
   $sTemplate = 'newsletter_handler.html';
   
   if (!isset($oPage) || !is_object($oPage)) {
      $oPage = new Template;
   }
   $oPage->reset();

   // If there is no selection option set or if no groups has been selected, activate option Default
   if ($aSettings['JoinSel'] == '' || $aSettings['JoinGroups'] == '') {
      $aSettings['JoinSel'] = "Default";
   }
   if ($aSettings['FrontendConfirm'] == '') {
      $aSettings['FrontendConfirm'] = "ActivateUser";
   }
   if ($aSettings['FrontendDel'] == '') {
      $aSettings['FrontendDel'] = "DeleteUser";
   }

   if ($_POST['action'] == "subscribe") {
      if (!isset($_POST['email']) || !$_POST['email']) {
         $sMessage = mi18n("Please specify an e-mail address.");
      } elseif (!isValidMail($_POST['email']) || strpos($_POST['email'], ",") != false || strpos($_POST['email'], ";") != false) {
         $sMessage = mi18n("Please specify a valid e-mail address.");
      } elseif ($oRecipients->emailExists($_POST['email'])) {
         $sMessage = mi18n("This e-mail address has been already registered for the newsletter.");
      } else {
         $sEMail = ereg_replace("\n", "", stripslashes($_POST['email']));
         $sEMail = ereg_replace("\r", "", $sEMail);
         $sName  = stripslashes($_POST["emailname"]);

         // Which newsletter type should the recipient receive?
         switch ($aSettings['JoinMessageType'])
         {
            case "user":
               if ($_POST["selNewsletterType"] == 1) {
                  $iMessageType = 1; // html
               } else {
                  $iMessageType = 0; // text
               }
               break;
            case "html":
               $iMessageType = 1; // html
               break;
            default:
               $iMessageType = 0; // Default: text
         }

         // Analyze group specification
         switch ($aSettings['JoinSel'])
         {
            case "Selected":
               $recipient = $oRecipients->create($sEMail, $sName, 0, $aSettings['JoinGroups'], $iMessageType);
               break;
            case "UserSelected":
               $iSelCount = count($_POST['selNewsletterGroup']);
   
               if ($iSelCount == 0) {
                  $recipient = $oRecipients->create($sEMail, $sName, 0, "", $iMessageType); // No group selected
               } else {
                  if ($iSelCount > 1 && $aSettings['JoinMultiple'] != "enabled") {

                     $sMessage = mi18n("Please select one group, only.");
                  } else {
                     // Recipient wants to join special groups
                     $aGroups = explode(",", $aSettings['JoinGroups']);

                     /* Check, if received data is valid and matches the group selection */
                     $bError = false;
                     foreach ($_POST['selNewsletterGroup'] as $iIDGroup)
                     {
                        if (!is_numeric($iIDGroup) || !in_array($iIDGroup, $aGroups))
                        {
                           $bError = true;
                           break;
                        }
                     }

                     if ($bError) {
                        $sMessage = mi18n("There was an error processing your request. Please ask the webmaster for help.");
                     } else {
                        $recipient = $oRecipients->create($sEMail, $sName, 0, implode(",", $_POST['selNewsletterGroup']));
                     }
                  }
               }
               break;
            default:
               $recipient = $oRecipients->create($sEMail, $sName, 0, "", $iMessageType);
         }

         if ($recipient)
         {
            // Add here code, if you like to store additional information per >recipient< (see frontenduser below)
            // Example: $recipient->setProperty("contact", "firstname", $_REQUEST["firstname"]);
            // contact/firstname have to match the values used in the firstname-recipient-plugin
            // $_REQUEST["firstname"] contains the data from the input-field firstname in the
            // Form module (-> there has to be a field with this name)
            // Note: You should check the values you get (safety)!!!

            $sBody = mi18n("txtMailSubscribe")."\n".$cfgClient[$client]['path']['htmlpath']."front_content.php?changelang=".$lang."&idcatart=".$aSettings['HandlerID']."&confirm=".$recipient->get("hash")."\n\n";

            $oMail = new phpmailer();
            $oMail->From     = $aSettings['SenderEMail'];
            $oMail->FromName = $aSettings['SenderEMail'];
            $oMail->AddAddress($sEMail);
            $oMail->Mailer   = "mail";
            $oMail->Subject  = mi18n("Newsletter: Confirmation");
            $oMail->Body     = $sBody;

            if($oMail->Send())
            {
               $sMessage = mi18n("Dear subscriber,<br>your e-mail address is now subscribed for our newsletter. You will now receive an e-mail asking you to confirm your subscription.");

               if ($aSettings['FrontendLink'] == "enabled")
               {
                  $oFrontendUsers = new FrontendUserCollection;

                  if (!$oFrontendUsers->userExists($sEMail))
                  {
                     if ($frontenduser = $oFrontendUsers->create($sEMail)) // it's "frontenduser" (instead of oFrontendUser) for plugins...
                     {
                        // Add here code, if you like to store additional information per >frontenduser<
                        // Example: $frontenduser->setProperty("contact", "firstname", $_REQUEST["firstname"]);
                        // contact/firstname have to match the values used in the firstname-frontenduser-plugin
                        // $_REQUEST["firstname"] contains the data from the input-field firstname in the
                        // Form module (-> there has to be a field with this name)
                        // Note: You should check the values you get (safety)!!!

                        if ($aSettings['FrontendConfirm'] == "ActivateUser")
                        {
                           // Inform about frontend user account creation
                           $sMessage .= mi18n("<br><br>After the confirmation you will also receive a password which you can use with your e-mail address to logon to special areas on this website.");
                        }
                     } else {
                        $sMessage .= mi18n("<br><br>Sorry, there was a problem creating your website account. Please ask the webmaster for help.");
                     }
                  }
               }
            } else {
               $sMessage = mi18n("Sorry, there was a problem sending the confirmation mail to your e-mail address. Please ask the webmaster for help.");
            }
         } else {
            $sMessage = mi18n("Sorry, there was a problem subscribing your e-mail address for the newsletter. Please ask the webmaster for help.");
         }
      }
   } elseif ($_POST['action'] == "delete") {
      if (!isset($_POST['email']) || !$_POST['email']) {
         $sMessage = mi18n("Please specify an e-mail address.");
      } elseif (!isValidMail($_POST['email']) || strpos($_POST['email'], ",") != false || strpos($_POST['email'], ";") != false) {
         $sMessage = mi18n("Please specify a valid e-mail address.");
      } elseif ($recipient = $oRecipients->emailExists($_POST['email'])) {
         $sBody = mi18n("txtMailDelete")."\n".$cfgClient[$client]['path']['htmlpath']."front_content.php?changelang=".$lang."&idcatart=".$aSettings['HandlerID']."&unsubscribe=".$recipient->get("hash")."\n\n";

         $oMail = new phpmailer();
         $oMail->From     = $aSettings['SenderEMail'];
         $oMail->FromName = $aSettings['SenderEMail'];
         $oMail->AddAddress($recipient->get("email"));
         $oMail->Mailer   = "mail";
         $oMail->Subject  = mi18n("Newsletter: Cancel subscription");
         $oMail->Body     = $sBody;

         if($oMail->Send())
         {
            $sMessage = mi18n("Dear subscriber,<br>a mail has been sent to your e-mail address. Please confirm the cancelation of the newsletter subscription.");
         } else {
            $sMessage = mi18n("Sorry, there was a problem sending you the cancelation confirmation e-mail. Please ask the webmaster for help.");
         }
      } else {
         $sMessage = mi18n("Sorry, the e-mail address was not found.");
      }
   } elseif (strlen($_GET['confirm']) == 30 && is_alphanumeric($_GET['confirm'])) {
      $oRecipients->setWhere("idclient", $client);
      $oRecipients->setWhere("idlang", $lang);
      $oRecipients->setWhere("hash", $_GET['confirm']);
      $oRecipients->query();

      if ($recipient = $oRecipients->next())
      {
         $iID    = $recipient->get("idnewsrcp"); // For some reason, $recipient may get invalid later on - save id
         $sEMail = $recipient->get("email");     // ... and email
         $recipient->set("confirmed", 1);
         $recipient->set("confirmeddate", date("Y-m-d H:i:s"), false);
         $recipient->set("deactivated", 0);
         $recipient->store();

         $sMessage = mi18n("Thank you! You have confirmed your subscription to our newsletter!");

         $oNewsletters = New NewsletterCollection;
         $oNewsletters->setWhere("idclient", $client);
         $oNewsletters->setWhere("idlang", $lang);
         $oNewsletters->setWhere("welcome", '1');
         $oNewsletters->query();

         if ($oNewsletter = $oNewsletters->next())
         {
            $aRecipients = array(); // Needed, as used by reference
            $oNewsletter->sendDirect($aSettings['HandlerID'], $iID, false, $aRecipients);

            $sMessage .= mi18n(" The welcome newsletter is already on the way to you!");
         }
         
         if ($aSettings['FrontendLink'] == "enabled" && $aSettings['FrontendConfirm'] == "ActivateUser")
         {
            $oFrontendUsers = new FrontendUserCollection;
            $oFrontendUsers->setWhere("idclient", $client);
            $oFrontendUsers->setWhere("username", $sEMail);
            $oFrontendUsers->query();

            if ($frontenduser = $oFrontendUsers->next())
            {
               $frontenduser->set("active", 1);
               $sPassword = substr(md5(rand()),0,8); // Generating password
               $frontenduser->set("password", $sPassword);
               $frontenduser->store();


               $sMessage .= mi18n("<br><br>Additionally, your website account has been activated. You can now use the following username and password to log in to access special areas on our website:<br>");
               $sMessage .= mi18n("Username: ").$sEMail.mi18n("<br>Password: ").$sPassword;
   
               $sBody = mi18n("txtMailPassword")."\n\n".mi18n("Username: ").$sEMail."\n".mi18n("Password: ").$sPassword."\n\n".mi18n("Click here to login: ").$cfgClient[$client]['path']['htmlpath']."front_content.php?changelang=".$lang;

               $oMail           = new phpmailer();
               $oMail->From     = $aSettings['SenderEMail'];
               $oMail->FromName = $aSettings['SenderEMail'];
               $oMail->AddAddress($sEMail);
               $oMail->Mailer   = "mail";
               $oMail->Subject  = mi18n("Website account");
               $oMail->Body     = $sBody;

               if($oMail->Send())
               {
                  $sMessage .= mi18n("<br><br>The account details and the password has also been sent to your mail account.");
               } else {
                  $sMessage .= mi18n("<br><br><b>Sorry, there was a problem sending you the account details by mail. Please remember the given password.</b><b>");
               }
            } else {
               $sMessage .= mi18n("<br><br>Sorry, there was a problem activating your website account, also. Please ask the webmaster for help.");
            }
         }
      } else {
         $sMessage = mi18n("Sorry, there was a problem confirming your subscription. Please ask the webmaster for help.");
      }
   } elseif (strlen($_GET['stop']) == 30 && is_alphanumeric($_GET['stop'])) {
      $oRecipients->setWhere("idclient", $client);
      $oRecipients->setWhere("idlang", $lang);
      $oRecipients->setWhere("hash", $_GET['stop']);
      $oRecipients->query();

      if ($recipient = $oRecipients->next())
      {
         $recipient->set("deactivated", 1);
         $recipient->store();

         $sMessage = mi18n("Your newsletter subscription has been paused.");
      } else {
         $sMessage = mi18n("Sorry, there was a problem pausing your newsletter subscription. Please ask the webmaster for help.");
      }
   } elseif (strlen($_GET['goon']) == 30 && is_alphanumeric($_GET['goon'])) {
      $oRecipients->setWhere("idclient", $client);
      $oRecipients->setWhere("idlang", $lang);
      $oRecipients->setWhere("hash", $_GET['goon']);
      $oRecipients->query();

      if ($recipient = $oRecipients->next())
      {
         $recipient->set("deactivated", 0);
         $recipient->store();

         $sMessage = mi18n("Newsletter subscription has been resumed.");
      } else {
         $sMessage = mi18n("Sorry, there was a problem resuming your newsletter subscription. Please ask the webmaster for help.");
      }
   } elseif (strlen($_GET['unsubscribe']) == 30 && is_alphanumeric($_GET['unsubscribe'])) {
      $oRecipients->setWhere("idclient", $client);
      $oRecipients->setWhere("idlang", $lang);
      $oRecipients->setWhere("hash", $_GET['unsubscribe']);
      $oRecipients->query();
      
      if ($recipient = $oRecipients->next()) {
         $sEMail = $recipient->get("email"); // Saving recipient e-mail address for frontend account
         $oRecipients->delete($recipient->get("idnewsrcp"));

         $sMessage = mi18n("Your e-mail address has been removed from our list of newsletter recipients.");

         if ($aSettings['FrontendLink'] == "enabled")
         {
            $oFrontendUsers = new FrontendUserCollection;
            $oFrontendUsers->setWhere("idclient", $client);
            $oFrontendUsers->setWhere("username", $sEMail);
            $oFrontendUsers->query();

            if ($frontenduser = $oFrontendUsers->next())
            {
               switch ($aSettings['FrontendDel'])
               {
                  case "DeleteUser": // Deleting frontend account
                     $oFrontendUsers->delete($frontenduser->get("idfrontenduser"));
                     $sMessage .= mi18n(" Your website account has been deleted.");
                     break;
                  case "DisableUser": // Disabling frontend account
                     $frontenduser->set("active", 0);
                     $frontenduser->store();
                     $sMessage .= mi18n(" Your website account has been disabled.");
                     break;
                  default:
               }
            }
         }
      } else {
         $sMessage = mi18n("Sorry, there was a problem removing your e-mail address. Please ask the webmaster for help.");
      }
   }

   $oPage->set('s', 'CONTENT', $sMessage);
   $oPage->generate('templates/'.$sTemplate);
?>
Kannst du mir auf die Sprünge helfen, wo dein Code rein muss?

Vielen lieben Dank!
Barni
ich bin genauso hilflos wie ich tu ;)

Gesperrt