[gelöst]User status "pending" einführen
am 12.04.2010 - 10:39 Uhr in
Hallo,
ich wollte mal fragen ob sich damit shcon mal wer befasst hat und mir evtl ein paar Ratschläge geben kann.
Die Situation ist folgende, ich würde gerne 3 verschiedene Benutzer Gruppen haben.
- Benutzer registriert sich, ist in der Accept Liste, hat sofort Zugriffsrechte, und bekommt eine Begrüßungsmail.
- Benutzer ist registriert, seine email adresse gibt es nicht mehr, wird geblocked.
- Benutzer registriert sich, email ist nicht in Accept oder Deny Liste, dieser sollte dann pending sein, Begrüßungsemail mit info pending,
Admin bekommt email das er prüfen soll.
Dafür muss ich mir ja ein Modul schreiben, dass dem Modul User Register Notification ähnelt.
Meine Frage ist nun hat jemand schon sowas oder was ähnliches geschrieben udn kann mir ein paar Tips geben?
Wie ist das mit dem neuen Status pending, den gibt es ja nicht wie führe ich den ein.
Über Hilfe wäre ich sehr erfreut.
Fange jetzt mal selbst an, falls ich erfolgreich bin werde ich den Code posten falls es wen interresiert.
LG
Dave
- Anmelden oder Registrieren um Kommentare zu schreiben

Dazu braucht es eigentlich
am 12.04.2010 - 11:50 Uhr
Dazu braucht es eigentlich kein Modul. Wenn ein User sich noch nicht einloggen kann, weil er noch nicht freigeschaltet ist, ist er Gast. Du kannst in Deinem System einstellen, daß User nur nach Freigabe Durch einen Admin registriert werden. Die zugehörigen Mails sind dazu schon im System vorhanden. Mehr hast Du nicht zu tun.
Willst Du es mit einem Pending Status umsetzten einfach die Userregistrierung auf automatisch setzen und mit auto_assign_role den User in die Rolle "Pending" stecken und dieser Rolle alle Rechte nehmen. Der Admin vergibt dann für diese User eine passende Rolle. Die Benachrichtigung des Admin per Email kannst Du über Rules erreichen.
Beste Grüße
Werner
Hi
am 12.04.2010 - 12:02 Uhr
danke für die schnelle Antwort.
Habe das auch gerade gefunden.
Das Problem ist nur das dann auch die Accept Liste nicht mehr berücksichtigt wird, bei denen ich ja gleich will das der Account funktioniert.
Das kann ich aber über eine Modifikation des Codes ändern. Sollte nicht schwer sein.
Wenn ich das mit dem Pending mache, sind doch alle auf pending auch die in der Accept List oder?
LG
dave
Die User sind dann bereits
am 12.04.2010 - 13:32 Uhr
Die User sind dann bereits zugelassene User und fallen in die Rolle "authenticated User". Damit mußt Du dieser Rolle alle Rechte weg nehmen. Vielleicht ist es sogar besser, das mit dem "Pending"-Zustand gleichzusetzen. Der Admin hebt dann den User in eine andere Rolle. Deine Accept-Liste ist dann allerdings außer Funktion. Du könntest evtl in Rules eine Regel über PHP einbauen und den User in eine andere Rolle heben lassen. Auch ein "Deny" könnt vielleicht so abgebildet werden. Das solltest Du dann mal testen.
Beste Grüße
Werner
Hi
am 12.04.2010 - 14:10 Uhr
also ich habe das jetzt wie folgt gemacht.
Eine Rolle die nur für user freischalten zuständig ist um später besser an die email Adresse zu kommen.
Jedoch habe ihc noch ein Problem, wie heißt denn der Aufruf um die Acces Lsite zu überprufen von drupal, daran harperts noch ?
Da das hier leider nicht funktioniert wie gewünscht: variable_get('user_email_verification', TRUE)
<?php
// david
if(variable_get('user_email_verification', TRUE)){
$sql = "INSERT INTO drupal_users_roles (uid, rid) VALUES ($account->uid, 3)";
db_query($sql);
$sql = "UPDATE drupal_users SET status = 1 WHERE uid = $account->uid";
db_query($sql);
// Create new user account, no administrator approval required.
$op = $notify ? 'register_admin_created' : 'register_no_approval_required';
_user_mail_notify($op, $account);
if ($notify) {
drupal_set_message(t('Password and further instructions have been e-mailed to the new user <a href="@url">%name</a>.', array('@url' => url("user/$account->uid"), '%name' => $account->name)));
}
else {
drupal_set_message(t('Your password and further instructions have been sent to your e-mail address.'));
$form_state['redirect'] = '';
return;
}
}else{
_user_mail_notify('register_pending_approval', $account);
$sql = "SELECT uid FROM drupal_users_roles WHERE rid = 18";
$user = db_query($sql);
$sql = "SELECT mail FROM drupal_users WHERE uid = $user";
$mail = db_query($sql);
$message = array(
'to' => '$mail',
'subject' => t('User Registration, with unknown email-address'),
'body' => t('A User with an unknown e-mail address has registered. Username: $account->name e-mail: $account->mail'),
'headers' => array('From' => 'webmaster@configuration-workgroup.com'),
);
drupal_mail_send($message);
drupal_set_message(t('Thank you for applying for an account. Your account is currently pending approval by the site administrator.<br />In the meantime, a welcome message with further instructions has been sent to your e-mail address.'));
$form_state['redirect'] = '';
return;
}
// david ende
?>
LG
dave
Hab es fertig falls es wen interresiert
am 13.04.2010 - 12:37 Uhr
Hab eine Rolle eingefügt für den User der dann zur VErwaltung zuständig iust und die mails bekommt.
Kommt in den else Block Zeile 2394 users.module
<?php
// Create new user account, administrator approval required.
// david
$array = explode("@", $account->mail);
$sql = " SELECT Count(*) FROM drupal_access WHERE status = 1 AND mask LIKE '%%%s' ";
$t = db_result(db_query($sql, $array[1]));
if($t > '0'){
$sql = "INSERT INTO drupal_users_roles (uid, rid) VALUES ($account->uid, 3)";
db_query($sql);
$sql = "UPDATE drupal_users SET status = 1 WHERE uid = $account->uid ";
db_query($sql);
// Create new user account, no administrator approval required.
$op = $notify ? 'register_admin_created' : 'register_no_approval_required';
_user_mail_notify($op, $account);
if ($notify) {
drupal_set_message(t('Password and further instructions have been e-mailed to the new user <a href="@url">%name</a>.', array('@url' => url("user/$account->uid"), '%name' => $account->name)));
}
else {
drupal_set_message(t('Your password and further instructions have been sent to your e-mail address.'));
$form_state['redirect'] = '';
return;
}
}else{
_user_mail_notify('register_pending_approval', $account);
$sql = "SELECT uid FROM drupal_users_roles WHERE rid = 18";
$uid = db_query($sql);
$row = mysql_fetch_row($uid);
$sql = "SELECT mail FROM drupal_users WHERE uid = $row[0]";
$mail = db_query($sql);
$row = mysql_fetch_row($mail);
$trans = array (
"%name" => $account->name,
"%mail" => $account->mail
);
$body = "A User with an unknown e-mail address has registered. Username: %name e-mail: %mail";
$message = array(
'to' => $row[0],
'subject' => t('User Registration, with unknown email-address'),
'body' => strtr($body, $trans),
'headers' => array('From' => 'webmaster@configuration-workgroup.com'),
);
drupal_mail_send($message);
drupal_set_message(t('Thank you for applying for an account. Your account is currently pending approval by the site administrator.<br />In the meantime, a welcome message with further instructions has been sent to your e-mail address.'));
$form_state['redirect'] = '';
return;
}
// david ende
}
?>
LG
dave
Es ist prinzipiell keine gute
am 13.04.2010 - 15:14 Uhr
Es ist prinzipiell keine gute Idee den Core von Drupal zu hacken!!! Mit dem nächsten Update sind Deine Änderungen wieder weg und Du fängst von vorne an. Das sollte sich auch anders lösen lassen.
Beste Grüße
Werner
Hi das ist mir bewusst
am 13.04.2010 - 15:23 Uhr
nur denke ich mal das ich solange ich bei drupal 6 bleibe das einfach so übernehmen kann.
Es gibt bestimmt eine elegantere Lösung, nur mir ist keine Eingefallen. :)
mfg
David Gillet
Also ich habe mich jetzt
am 15.04.2010 - 12:05 Uhr
umentschieden und habe angefangen mein eigenes modul zu schreiben.
Es kann noch nicht viel, es hat nur eine configurations Page, sieht wie folgt aus:
<?php
function cwg_registration_menu() {
$items = array();
$items['admin/settings/cwg_registration'] = array(
'title' => 'CWG-Registration module settings',
'description' => 'Expands the registration process with certain notifications',
'page callback' => 'drupal_get_form',
'page arguments' => array('cwg_registration_admin'),
'access arguments' => array('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
/**
* Define the settings form.
*/
function cwg_registration_admin() {
$form = array();
$form['registration_confirmation_mail'] = array(
'#type' => 'textarea',
'#title' => t('Text of the confirmation mail'),
);
$form['registration_pending_mail'] = array(
'#type' => 'textarea',
'#title' => t('Text of the pending mail')
);
$form['registration_admin_mail'] = array(
'#type' => 'textarea',
'#title' => t('Text of the admin mail')
);
$form['registration_admin_mail_addresses'] = array(
'#type' => 'textfield',
'#size' => 75,
'#maxlength' => 75,
'#title' => t('Text of the admin mail')
);
return system_settings_form($form);
}
?>
So jetzt würde ich natürlich gerne diese 4 Werte abspeichern, was empfehlt ihr mir in txt Dateien oder ein DB Table?
Wie bekomme ich den die Daten in das Form gibt es da sowas wie ein default Wert den ich setzten kann.
Ziel ist erstmal das ich die Emails sowie die Emailaddressen speichern und ändern kann.
Freue mich über jegliche Hilfe.
Danke im voraus.
LG
dave
Habe
am 19.07.2010 - 13:22 Uhr
alles in DB gespeichert und ich in den Registrierungs Prozess einmischt per passendem hook.