Neues Modul für "Kunde werden"
bernd

bernd commited on 2007-06-25 19:17:14
Zeige 8 geänderte Dateien mit 191 Einfügungen und 4 Löschungen.


git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@521 87cf0b9e-d624-0410-a070-f6ee81989793
... ...
@@ -17,6 +17,17 @@ function db_query($query)
17 17
 }
18 18
 
19 19
 
20
+
21
+function maybe_null($value)
22
+{
23
+  if (strlen( (string) $value ) > 0)
24
+    return "'{$value}'";
25
+  else
26
+    return 'NULL';
27
+}
28
+
29
+
30
+
20 31
 function logger($scriptname, $scope, $message)
21 32
 {
22 33
   $user = 'NULL';
... ...
@@ -143,6 +154,23 @@ function html_form($form_id, $scriptname, $querystring, $content)
143 154
 }
144 155
 
145 156
 
157
+function html_select($name, $options, $default)
158
+{
159
+  require_once('inc/security.php');
160
+  $ret = "<select name=\"{$name}\" size=\"1\">\n";
161
+  foreach ($options as $key => $value)
162
+  {
163
+    $selected = '';
164
+    if ($default == $key)
165
+      $selected = ' selected="selected" ';
166
+    $key = filter_input_general($key);
167
+    $value = filter_input_general($value);
168
+    $ret .= "  <option value=\"{$key}\"{$selected}>{$value}</option>\n";
169
+  }
170
+  $ret .= '</select>';
171
+  return $ret;
172
+}
173
+
146 174
 
147 175
 
148 176
 ?>
... ...
@@ -22,5 +22,10 @@ function filter_shell( $input )
22 22
         return ereg_replace('[^-[:alnum:]\_\.\+ßäöüÄÖÜ/%§=]', '', $input );
23 23
 }
24 24
 
25
+function check_emailaddr( $input )
26
+{
27
+        return (preg_match("/^[a-z]+[a-z0-9]*[\.|\-|_]?[a-z0-9]+@([a-z0-9]*[\.|\-]?[a-z0-9]+){1,4}\.[a-z]{2,4}$/i", $input ) == 1);
28
+}
29
+
25 30
 
26 31
 ?>
... ...
@@ -23,7 +23,7 @@ foreach ($config['modules'] as $module)
23 23
     $menu[$key]["file"] = $prefix."go/".$module."/".$menu[$key]["file"];
24 24
     $weight = $menu[$key]["weight"];
25 25
     if (array_key_exists($weight, $weighted_menuitem))
26
-      array_merge($weighted_menuitem[$weight], array($key => $menu[$key]));
26
+      $weighted_menuitem[$weight] = array_merge($weighted_menuitem[$weight], array($key => $menu[$key]));
27 27
     else
28 28
       $weighted_menuitem[$weight] = array($key => $menu[$key]);
29 29
   }
... ...
@@ -58,9 +58,7 @@ $menuitem["logout"]["file"] = "logout.php";
58 58
 
59 59
 
60 60
 ?>
61
-
62
-
63
-<?php echo '<?xml version="1.0" encoding="utf-8"?>'; ?>
61
+<?php echo '<?xml version="1.0" encoding="utf-8"?>'."\n"; ?>
64 62
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
65 63
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
66 64
 
... ...
@@ -0,0 +1 @@
1
+../../index/include/mail.php
0 2
\ No newline at end of file
... ...
@@ -0,0 +1 @@
1
+../../index/include/newpass.php
0 2
\ No newline at end of file
... ...
@@ -0,0 +1,51 @@
1
+<?php
2
+
3
+require_once('inc/db_connect.php');
4
+
5
+function customer_with_email($email)
6
+{
7
+  $email = mysql_real_escape_string($email);
8
+  $result = db_query("SELECT kundennr FROM kundendaten.kundenkontakt WHERE wert='{$email}' LIMIT 1;");
9
+  if (mysql_num_rows($result) == 0)
10
+    return NULL;
11
+  else
12
+    return mysql_fetch_object($result)->kundennr;
13
+}
14
+
15
+
16
+
17
+function create_customer($data)
18
+{
19
+
20
+  if (customer_with_email($data['email']) !== NULL)
21
+  {
22
+    logger('modules/register/include/register.php', 'register', "Attempt to create customer with duplicate email »{$data['email']}«");
23
+    return NULL;
24
+  }
25
+
26
+  $anrede = mysql_escape_string($data['anrede']);
27
+  $firma = mysql_escape_string($data['firma']);
28
+  $vorname = mysql_escape_string($data['vorname']);
29
+  $nachname = mysql_escape_string($data['nachname']);
30
+  $email = mysql_escape_string($data['email']);
31
+
32
+  logger('modules/register/include/register.php', 'register', "Creating new account: {$anrede} / {$firma} / {$vorname} / {$nachname} / {$email}");
33
+  
34
+  $realname = maybe_null(chop($vorname.' '.$nachname));
35
+
36
+  $anrede = maybe_null($anrede);
37
+  $firma = maybe_null($firma);
38
+  $vorname = maybe_null($vorname);
39
+  $nachname = maybe_null($nachname);
40
+
41
+  db_query("BEGIN");
42
+  db_query("INSERT INTO kundendaten.kunden (firma, nachname, vorname, anrede) VALUES ({$firma}, {$nachname}, {$vorname}, {$anrede})");
43
+  $customerno = mysql_insert_id();
44
+  db_query("INSERT INTO kundendaten.kundenkontakt (typ, comment, wert, name, kundennr) VALUES ('email', 'extern', '{$email}', {$realname}, {$customerno})");
45
+  db_query("COMMIT");
46
+  return $customerno;
47
+
48
+}
49
+
50
+
51
+?>
... ...
@@ -0,0 +1,90 @@
1
+<?php
2
+$title = "Bei schokokeks.org registrieren";
3
+
4
+//require_once('inc/error.php');
5
+//system_failure("Diese Funktion ist noch nicht fertiggestellt.");
6
+
7
+require_once('newpass.php');
8
+
9
+$fail = array();
10
+$success = false;
11
+$customerno = 0;
12
+
13
+if (count($_POST) > 0)
14
+{
15
+  require_once('inc/security.php');
16
+  foreach (array_keys($_POST) AS $key)  
17
+  {
18
+    $_POST[$key] = filter_input_general(chop($_POST[$key]));
19
+  }
20
+  if (! in_array($_POST['anrede'], array("Herr", "Frau", "Firma")))
21
+  {
22
+    array_push($fail, 'Was haben Sie mit dem Anrede-Feld angestellt?!');
23
+  }
24
+  if (! ( (strlen($_POST['nachname']) > 1 || strlen($_POST['firma']) > 1) && strlen($_POST['email']) > 1 ))
25
+  {
26
+    array_push($fail, 'Sie müssen mindestens die Felder »Nachname« oder »Firma« sowie »E-Mail« ausfüllen!');
27
+  }
28
+  elseif (! check_emailaddr($_POST['email']))
29
+  {
30
+    array_push($fail, 'Die E-Mail-Adresse scheint nicht korrekt zu sein!');
31
+  }
32
+  if (empty($fail))
33
+  {
34
+    require_once('register.php');
35
+    $customerno = create_customer($_POST);
36
+    if ($customerno == NULL)
37
+    {
38
+      array_push($fail, 'Diese E-Mail-Adresse ist bereits in unserer Datenbank vorhanden!');
39
+    }
40
+    elseif (create_token($customerno))
41
+    {
42
+      require_once('mail.php');
43
+      require_once('inc/base.php');
44
+      send_customer_token($customerno);
45
+      logger("modules/index/new_password.php", "pwrecovery", "token sent for customer »{$_POST['customerno']}«");
46
+      $success = true;
47
+      #success_msg('Die angegebenen Daten wurden gespeichert, Sie sollten umgehend eine E-Mail erhalten.');
48
+    }
49
+  }
50
+}
51
+
52
+
53
+if ($success)
54
+{
55
+  output('<h3>Neues Konto eingerichtet</h3>
56
+  <p>Wir bestätigen hiermit die Einrichtung eines Kundenkontos und bedanken uns für Ihr Vertrauen.</p>
57
+
58
+  <h4>Was jetzt?</h4>
59
+  <p>Sie erhalten jetzt von uns eine E-Mail an die soeben eingegebene E-Mail-Adresse (»'.$_POST['email'].'«). Beachten Sie bitte, dass manche E-Mail-Spamfilter die Zustellung um einegewisse Zeit verzögern können. Sofern Sie nach ca. einer Stunde noch keine E-Mail erhalten haben, schreiben Sie bitte <a href="mailto:root@schokokeks.org">an die Administratoren.</a></p>
60
+
61
+  <p>In der E-Mail finden Sie einen Link. Wenn Sie diesen aufrufen, dann erhalten Sie die Möglichkeit, ein Passwort zu setzen. Mit diesem Passwort und der Kundennummer <strong>'.(string) $customerno.'</strong> können Sie sich daraufhin an unserem Web-Interface anmelden.');
62
+}
63
+else
64
+{
65
+  output('<h3>Bei schokokeks.org registrieren</h3>
66
+  <p>Hier können Sie sich bei schokokeks.org anmelden. Eine Anmeldung ist kostenlos und unverbindlich, erlaubt Ihnen aber, kostenpflichtige Dienste von schokokeks.org in Anspruch zu nehmen.</p>
67
+  <p><strong>Gehen Sie daher sorgfältig mit den Anmeldedaten um!</strong></p>
68
+  <p>Um Sie als Kunden identifizieren zu können, benötigen wir den Namen und die E-Mail-Adresse. Die eingegebenen Daten werden manuell bearbeitet und bei Spass-Eintragungen wird der Zugang gesperrt. Je nach dem, welche späteren Dienste Sie bei uns in Anspruch nehmen, kann es notwendig sein, dass Sie weitere Daten eingeben (z.B. Domainregistrierung).</p>
69
+  
70
+  <h4>Anmeldung</h4>
71
+  <p>Um sich jetzt bei schokokeks.org anzumelden, müssen Sie hier zuerst Ihren Namen und Ihre E-Mail-Adresse eingeben.</p>');
72
+  
73
+  foreach ($fail as $f)
74
+    output('<p class="warning"><b>Fehler:</b> '.$f.'</p>');
75
+  
76
+  /* FIXME:
77
+   * Hier werden POST-Variablen benutzt, die es eventuell gar nicht gibt. Das erlaubt PHP zwar, ist aber nicht elegant.
78
+   */
79
+
80
+  output(html_form("register_index", "", "", '<p><span class="login_label">Anrede:</span>
81
+  '.html_select('anrede', array('Herr' => 'Herr', 'Frau' => 'Frau', 'Firma' => 'Firma'), $_POST['anrede']).'
82
+  <p><span class="login_label">Firma:</span> <input type="text" name="firma" size="30" value="'.$_POST['firma'].'" /></p>
83
+  <p><span class="login_label">Vorname:</span> <input type="text" name="vorname" size="30" value="'.$_POST['vorname'].'" /></p>
84
+  <p><span class="login_label">Nachname:</span> <input type="text" name="nachname" size="30" value="'.$_POST['nachname'].'" /></p>
85
+  <p><span class="login_label">E-Mail-Adresse:</span> <input type="text" name="email" size="30" value="'.$_POST['email'].'" /></p>
86
+  <p><span class="login_label">&nbsp;</span> <input type="submit" value="Zugang erstellen" />'));
87
+  
88
+}
89
+
90
+?>
... ...
@@ -0,0 +1,13 @@
1
+<?php
2
+global $menu;
3
+$role = $_SESSION['role'];
4
+
5
+switch ($role)
6
+{
7
+  case ROLE_ANONYMOUS:
8
+    $menu["register_index"] = array("label" => "Kunde werden", "file" => "index.php", "weight" => 0);
9
+    break;
10
+    
11
+}
12
+
13
+?>
0 14