4 This plugin works basically the same as "userdb_systempasswd", but adds a
5 page, where users can register themselfes into the "UserRegistry" to get
6 access with permission ring level 2 ("editing"). You could use this one
7 in conjunction with "userdb_systempasswd" (to separate ordinary users from
8 higher level moderators).
10 The virtual page "UserRegistry" (you can change this name) can be used
11 by users to create an account and to change its settings (you could add
12 data fields). The _SYSTEM page "system/UserRegistry" can only be edited
13 by a superuser (ring level 0), and the permission/ring level could also
14 be changed for individual users therein (making use of "_systempasswd"
19 define("EWIKI_PAGE_USERREGISTRY", "UserRegistry");
20 define("EWIKI_USERDB_USERREGISTRY", "system/UserRegistry");
21 define("EWIKI_REGISTERED_LEVEL", 2); # ordinary users
24 $ewiki_plugins["auth_userdb"][] = "ewiki_auth_userdb_userregistry";
25 $ewiki_plugins["page"][EWIKI_PAGE_USERREGISTRY] = "ewiki_page_userregistry";
29 $ewiki_t["en"]["PLEASE_RETRY"] = "Please retry.";
30 $ewiki_t["en"]["WRONG_PW"] = "You supplied the wrong password!";
31 $ewiki_t["en"]["RETYPE_PW"] = "Password and retyped password do not match!";
32 $ewiki_t["en"]["PW_ONLY_LETTERS"] = "Only letters and numbers are allowed in user names and passwords.";
33 $ewiki_t["en"]["USERNAME_MIN"] = "User names must be at least 3 characters long.";
34 $ewiki_t["en"]["USERNAME_ALREADY_USED"] = "This user name is already used.";
36 $ewiki_t["de"]["PLEASE_RETRY"] = "Bitte, versuch's nochmal.";
37 $ewiki_t["de"]["WRONG_PW"] = "Du hast ein falsches Paßwort eingegeben!";
38 $ewiki_t["de"]["RETYPE_PW"] = "Paßwort und Wiederholung stimmen nicht überein!";
39 $ewiki_t["de"]["PW_ONLY_LETTERS"] = "Nur Buchstaben und Zahlen sind im Paßwort und Benutzernamen erlaubt.";
40 $ewiki_t["en"]["USERNAME_MIN"] = "Benutzernamen müssen wenigstens 3 Zeichen lang sein.";
41 $ewiki_t["en"]["USERNAME_ALREADY_USED"] = "Dieser Benutzername wird schon verwendet.";
42 // partial text _{snippets}
43 $ewiki_t["de"]["New Account"] = "Neues Konto";
44 $ewiki_t["de"]["Account Settings"] = "Konto Einstellungen";
45 $ewiki_t["de"]["change password"] = "Paßwort Ändern";
46 $ewiki_t["de"]["new password"] = "neues Paßwort";
47 $ewiki_t["de"]["password"] = "Paßwort";
48 $ewiki_t["de"]["retype"] = "wiederholen";
49 $ewiki_t["de"]["user/login name"] = "Benutzer/Login-Name";
50 $ewiki_t["de"]["name"] = "Name";
51 $ewiki_t["de"]["save"] = "Speichern";
52 $ewiki_t["de"]["optional infos"] = "Optionale Angaben";
53 $ewiki_t["de"]["personal WikiPage"] = "persönliche WikiSeite";
54 $ewiki_t["de"]["email address"] = "EMail-Adresse";
55 $ewiki_t["de"]["create account"] = "Konto anlegen";
56 $ewiki_t["de"]["change settings"] = "Einstellungen ändern";
57 $ewiki_t["de"]["Data saved"] = "Daten gespeichert";
58 $ewiki_t["de"]["Error saving"] = "Fehler beim Speichern";
61 #-- user database query
62 function ewiki_auth_userdb_userregistry($username, $password=NULL) {
67 $data = ewiki_db::GET(EWIKI_USERDB_USERREGISTRY);
71 foreach (explode("\n",$data["content"]) as $line) {
73 if (strtok($line, ":") == $username) {
74 $line = substr($line, strpos($line, ":") + 1);
75 $entry = explode(":", $line);
85 #-- virtual registration page -------------------------------------------
86 function ewiki_page_userregistry($id, &$data, $action) {
88 global $ewiki_plugins, $ewiki_config, $ewiki_auth_user;
90 $o = ewiki_make_title($id, $id, 2, $action);
91 $url = ewiki_script("", $id);
94 if ($ewiki_auth_user && empty($_REQUEST["userreg_name"])) {
95 $user = $ewiki_auth_user;
96 $uu = ewiki_auth_userdb_userregistry($ewiki_auth_user);
98 $_REQUEST["userreg_login"] = 1;
101 $user = trim($_REQUEST["userreg_name"]);
102 $pw = $_REQUEST["userreg_pw"];
105 #-- try to get user entry
106 $ue = ewiki_auth_userdb_userregistry($user);
108 #-- account creation ---------------------------------------------------
109 if ($_REQUEST["userreg_register"] && empty($ue)) {
111 $o .= ewiki_t(<<< END
112 <h4>_{New Account}</h4>
113 <form action="$url" method="POST" enctype="multipart/form-data" accept-encoding="ISO-8859-1">
114 _{user/login name} <input type="text" size="14" name="userreg_name" value="$user"> <br />
115 <input type="hidden" name="userreg_pw" value="">
117 _{password} <input type="password" name="new_pw" size="10" maxsize="12" value="$pw"> <br />
118 _{retype} <input type="password" name="new_pw2" size="10" maxsize="12" value=""> <br />
120 <input type="submit" name="userreg_store" value="_{create account}">
125 return($o); // finished here, prevent fallthrough-display of login-form
129 if ($ue && $user && !ewiki_auth_user($user,$pw)) {
130 $o .= $_REQUEST["userreg_register"]
131 ? ewiki_t("USERNAME_ALREADY_USED")
132 : (ewiki_t("WRONG_PW") . "\n" . ewiki_t("PLEASE_RETRY"));
136 #-- set fallback settings for account creation
137 if (empty($ue) && $_REQUEST["userreg_store"]) {
139 $_REQUEST["userreg_ue"] =
142 EWIKI_REGISTERED_LEVEL,
148 if (preg_match("/[^".EWIKI_CHARS_U.EWIKI_CHARS_L."]/", $user.$pw)) {
149 $o .= ewiki_t("PW_ONLY_LETTERS") . "\n" . ewiki_t("PLEASE_RETRY");
152 elseif ($name && (strlen($user) < 3)) {
153 return($o . ewiki_t("USERNAME_MIN"));
156 #-- save changes -------------------------------------------------------
157 if ($_REQUEST["userreg_store"] && $user) {
160 ($new_ue = $_REQUEST["userreg_ue"]) or ($new_ue = array());
162 ($new_ue[1] = $ue[1]) or ($new_ue[1] = EWIKI_REGISTERED_LEVEL);
163 if ($new_pw = $_REQUEST["new_pw"]) {
164 if ($new_pw == $_REQUEST["new_pw2"]) {
165 $new_ue[0] = md5($new_pw);
168 $o .= ewiki_t("RETYPE_PW") ."\n<br />";
172 foreach ($new_ue as $i=>$v) {
173 $new_ue[$i] = preg_replace("/[^-@._ \w\d".EWIKI_CHARS_L.EWIKI_CHARS_U."]/", " ", $v);
177 ($data = ewiki_db::GET(EWIKI_USERDB_USERREGISTRY))
179 "id" => EWIKI_USERDB_USERREGISTRY,
180 "version" => 1, flags => 0,
181 "created" => time(), "lastmodified" => time(),
182 "content" => "nobody:*:3::", "meta" => "",
183 "author" => ewiki_author("$user@$id"),
185 $data["flags"] |= EWIKI_DB_F_SYSTEM;
186 $list = explode("\n", $data["content"]);
190 $new_ue = $user . ":" . implode(":", $new_ue);
192 foreach ($list as $i=>$line) {
194 if (strtok($line, ":") == $user) {
204 $data["content"] = implode("\n", $list);
208 if ($ok = ewiki_db::WRITE($data)) {
213 $o .= ewiki_t("Data saved")."\n<br />";
216 $o .= ewiki_t("Error saving")."\n<br />";
217 ewiki_log("_userdb_userregistry: failed to update db for user $user, retries=$retry", 2);
220 #-- fallthru to view_settings
221 $_REQUEST["userreg_login"] = 1;
222 $ue = ewiki_auth_userdb_userregistry($user);
226 #-- view settings ----------------------------------------------------
227 if ($_REQUEST["userreg_login"]) {
230 $o .= ewiki_t(<<< END
231 <h4>_{Account Settings}</h4>
232 <form action="$url" method="POST" enctype="multipart/form-data" accept-encoding="ISO-8859-1">
233 <input type="hidden" name="userreg_name" value="$user">
234 <input type="hidden" name="userreg_pw" value="$pw">
235 <b>_{change password}</b><br />
236 _{new password} <input type="password" size="10" maxsize="12" name="new_pw" value=""> <br />
237 _{retype} <input type="password" size="10" maxsize="12" name="new_pw2" value=""> <br />
239 <b>_{optional infos}</b><br />
240 _{personal WikiPage} <input type="text" name="userreg_ue[2]" value="{$ue[2]}"><br />
241 _{email address} <input type="text" name="userreg_ue[3]" value="{$ue[3]}"><br />
243 opt string <input type="text" name="userreg_ue[4]" value="{$ue[4]}"><br />
244 opt string <input type="text" name="userreg_ue[5]" value="{$ue[5]}"><br />
245 opt string <input type="text" name="userreg_ue[6]" value="{$ue[6]}"><br />
248 <input type="submit" name="userreg_store" value="_{save}">
254 #-- print login <form> ---------------------------------------------
257 $url = ewiki_script("", $id);
258 $o .= ewiki_t(<<< END
259 <form action="$url" method="POST" enctype="multipart/form-data" accept-encoding="ISO-8859-1">
260 <div class="userreg-form-settings">
261 <div class="userreg-form-register">
262 _{name} <input type="text" size="14" name="userreg_name">
263 <input type="submit" name="userreg_register" value="_{create account}"><br />
266 _{password} <input type="password" size="10" maxsize="12" name="userreg_pw"><br />
268 <input type="submit" name="userreg_login" value="_{change settings}">