Zum Inhalt springen

sr_feuser_register => redakteur soll user freischalten

Erstellt am 19. September 2005 · 17 Antworten · letzte Antwort am 9. März 2006

Tags: Frontend-Benutzer, Frage

ciena ·

Hallo Leute,

bei dieser Extension kann sich der USer selbst anmelden und bei Bestätigung(User erhält Bestätigungsemail) der Registierung kann der User sofort in den geschützten Bereich.
Wie mache ich das nun, das der Redakteur den User freischalten muss? Und der User erst nach der Freischaltung in den geschützten Bereich kommt.
Bestimmt ein Eintrag in die CONSTANTS, nur welcher?
Kann mir jemand helfen? Wäre Klasse

Danke und Grüße

dfluess ·

Ändere das Template und nimm den Marker für den Freischaltlink aus der User-Section raus. Setze den in die Benachrichtigung für den Admin.

Du kannst Die Texte beliebig anpassen.

Der Admin kann dann auf den Link klicken um den FE-User freizuschalten..

D.

stefansvw ·

alles Super, habe auch die Marker ausgetauscht nur mein Problem ist nun wie ich die ###EMAIL_TEMPLATE_EDIT_SAVED_ADMIN### nun HTML-fähig mache.

Weiß das jemand?

Mein Ziel ist es ähnlich wie @ciena den User sich selbst registrieren zu lassen aber der Admin oder Redakteur schaltet Ihn frei.

Das was mir dabei noch fehlt ist folgendes:

User hat sich registriert
a) Mail mit Benutzerdaten und kurze Info (Admin schaltet Sie nach überprüfung frei ...) an den neuen User (HTML-Mail)
b) Mail mit Bestätigungslink an Admin (HTML-Mail)
c) nach aktivierung durch den Admin. Kurze Freischaltbestätigung an den neuen User

geht das irgendwie zu bewerkstelligen ?

Ich glaube dieser Vorgang wird noch mehrere interessieren.

Gruß
Stefan

ciena ·

Hallo Stefan,

ich hab schon mal im Template nachgeschaut, könntest Du mir bitte die Stelle nennen, wo der Marker zum Austauscch steht?

Wäre Klasse, danke

stefansvw ·

Hallo ciena,

ich habe nun sr_feuser_register auf die neuste Version 1.6 upgedatet.

Im Template heißen die beiden Marker

für den Admin (leider kein HTML)

<!-- ###EMAIL_TEMPLATE_SETFIXED_CREATE_ADMIN### begin -->
.
.
.
<!-- ###EMAIL_TEMPLATE_SETFIXED_CREATE_ADMIN### end-->

für den User (in HTML)

<!-- ###EMAIL_TEMPLATE_SETFIXED_CREATE### begin -->
.
.
.
<!-- ###EMAIL_TEMPLATE_SETFIXED_CREATE### end -->

in TS-Constants habe ich folgendes stehen

plugin.tx_srfeuserregister_pi1.loginPID = 12
plugin.tx_srfeuserregister_pi1.email = xxx@xxx.fr
plugin.tx_srfeuserregister_pi1.siteName = xxx
plugin.tx_srfeuserregister_pi1.pid = 44
plugin.tx_srfeuserregister_pi1.enablePreviewRegister = 1
plugin.tx_srfeuserregister_pi1.useEmailAsUsername = 1
plugin.tx_srfeuserregister_pi1.enableEmailOnUpdate = 1
plugin.tx_srfeuserregister_pi1.enableAdminNotifyConfirmation = 1
plugin.tx_srfeuserregister_pi1.enableEmailOnRefuse = 1
plugin.tx_srfeuserregister_pi1.enableEmailOnApprove = 1
plugin.tx_srfeuserregister_pi1.enablePreviewEdit = 1
plugin.tx_srfeuserregister_pi1.enableEmailConfirmation = 1
plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnApprove = 1
plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnRefuse = 1
plugin.tx_srfeuserregister_pi1.enableEmailAttachment = 0
plugin.tx_srfeuserregister_pi1.enableHTMLMail = 1
plugin.tx_srfeuserregister_pi1.enableAdminNotifyConfirmation = 1
plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnDelete = 1
plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnRegister = 1
plugin.tx_srfeuserregister_pi1.enableEmailOnRegister = 1
plugin.tx_srfeuserregister_pi1.registerPID = 44
plugin.tx_srfeuserregister_pi1.parseValues.newsletter = setEmptyIfAbsent
plugin.tx_srfeuserregister_pi1.HTMLMailCSS = EXT:sr_feuser_register/pi1/tx_srfeuserregister_htmlmail.css

und im Setup

plugin.tx_srfeuserregister_pi1.create.required = username,password,first_name,last_name,email,company
plugin.tx_srfeuserregister_pi1.invite.required = username,password,first_name,last_name,email,company

Nun musst Du nur noch in der Datei locallang.php Deinen Text dementsprechend anpassen

fertig.

Gruß
Stefan

typotree ·

Hallo Stefan,

hast Du schon versucht im Template die E-Mail an den Admin so aufzubauen, wie die HTML-Email an den User? Also folgende Template-Zeilen einfach in ###EMAIL_TEMPLATE_SETFIXED_CREATE_ADMIN### einbauen. Mit ein paar kleinen Änderungen, wie Ansprache und so.

<!-- ###EMAIL_TEMPLATE_SETFIXED_CREATE_HTML### begin -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<style type="text/css">
<!--
###CSS_STYLES###
-->
</style>
<title>###LABEL_V_REGISTRATION_INITIATED_SUBJECT###</title>
<meta http-equiv="Content-Type" content="text/html; charset=###CHARSET###" />
<meta name="generator" content="Typo 3.5 CMS" />
</head>
<body bgcolor="#ffffff" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">
<!--###SUB_RECORD###-->
<table border="0" cellspacing="0" cellpadding="1" width="100%">
	<tr><td>
		<p>###GW1B######LABEL_V_DEAR######GW1E###</p>
		<p>###LABEL_V_REGISTRATION_INITIATED_MESSAGE1###<br />
		<a href="###SETFIXED_APPROVE_URL###">###SETFIXED_APPROVE_URL###</a><br />
		###LABEL_COPY_PASTE_LINK###</p>
		<p>###LABEL_V_REGISTRATION_INITIATED_MESSAGE2###<br />
		<a href="###SETFIXED_DELETE_URL###">###SETFIXED_DELETE_URL###</a><br />
		###LABEL_COPY_PASTE_LINK###<br />
		###LABEL_EXCUSE_US###</p>
		<p>###LABEL_KIND_REGARDS###<br />
		###GW1B######SITE_NAME######GW1E###<br />
		<a href="###SITE_URL###">###SITE_WWW###</a><br />
		<a href="mailto:###SITE_EMAIL###">###SITE_EMAIL###</a></p>
	</td></tr>
</table>
<!--###SUB_RECORD###-->
</body></html>
<!-- ###EMAIL_TEMPLATE_SETFIXED_CREATE_HTML### end-->

Wenn das nicht klappt dann melde Dich nochmal, ich schaue dann nochmal im Quellkode nach. Ich benutze noch Version 1.4, nur falls die Template-Datei sich mittlerweile verändert hat.

Gruß
Martin

stefansvw ·

Hallo Martin,

sicher man kann und soll auch noch ein paar Zeilen dem Benutzer oder Admin gegenüber ändern entweder im Template selbst oder in der locallang.php.

Aber Hauptsache ist jetzt, das der Vorgang "registrieren", "mail mit benutzerdaten an User", "mail mit Bestätigungscode an Admin", danach nach freischalten vom Admin, "Bestätigung der Aktivierung an den User sowie an den Admin" nun ohne Probleme klappt.

😃 :p 😃 :p 😃 :p

Wer das abgeänderte Template braucht, kann mich ja anposten

Ich würde dies alles halt gerne noch kombinieren mit Newsletter und Forum.

Also einer der hier registriert ist wird auch in die DB für Newsletter sowie Forum eingetragen, damit er sich nicht nochmals anmelden muss.

Hat hier jemand noch einen Tip ???

Gruß
Stefan

typotree ·

Hallo Stefan,

prima, dass es klappt. An welcher Stelle hast du denn die Bestätigung an den User und Admin nach der Freischaltung durch den Admin eingebaut?
Wegen dem Newsletter: Es gibt doch Felder für die Newsletter-Kategorien die man bei der Registrierung auswählen kann. Oder soll er in die DB von tt_adress aufgenommen werden?
Wegen Forum: Du musst die Eintragung in der Datei 'class.tx_srfeuserregister_pi1.php' vornehmen. Bei Version 1.4 ist ab Zeilennummer 810 die Funktion 'save()' zu finden. Unter 'default' wird der User mit seinen Daten eingetragen. ich habe an dieser Stelle dem User in Abhängigkeit eines Auswahlfeldes eine neue Usergruppe angehängt.

$query = 'UPDATE '.$this->theTable.' SET usergroup = "'.$allGroups.'" WHERE pid = "'.$this->thePid.'" AND email = "'.$this->dataArr['email'].'" AND uid = "'.$newId.'"';
mysql(TYPO3_db, $query);
echo mysql_error();

Hier musst Du nur deine Insert-Befehle einfügen um die Eintragungen vorzunehmen.

Gruß
Martin

stefansvw ·

Hallo Typotree,

ich weiss ja nicht ob diese beiden ###Marker### schon bei 1.4 integriert waren.

Sie heisen

<!-- ###EMAIL_TEMPLATE_SETFIXED_APPROVE### begin --> für den user
<!-- ###EMAIL_TEMPLATE_SETFIXED_APPROVE_ADMIN### begin --> für den admin

Ich muss zugeben, dass ich noch keine Ext für Newsletter installiert habe aber dies natürlich ausprobieren will. Was für eine Ext schlägst Du denn vor? Kann diese auch HTML-Newsletter versenden? Wenn es über Felder bei der Registrierung danach gibt, dann ist es ja gerade so wie ich es will. Super

Im Forum versuche ich es mal deinen Vorschlag in der function save() welche bei 1.6 auf 819 liegt umzusetzen. Ich nehme ja mal an als neue else in der If-Anweisung

if ($this->typoVersion >= 3006000) {

oder eine total neue IF-Anweisung

Gruß
Stefan

typotree ·

Hallo Stefan,

die beiden marker gibt es in der Version. Ich glaube nach der Bestätigung werden diese wohl aufgerufen, man muss das wohl nicht mehr koden, muss ich mir noch mal genau anschauen.
Ich habe beim Newsletter, die alte Version von Kasper und Erweiterungen dazu ausprobiert, komme aber mit einigen Fehlern nicht weiter. Ich habe schon die kompletten Postings dazu hier im Forum mir angeschaut, na ja, ist bei uns nicht Prio 1 im Moment.
In der Funktion 'save' bei der Registrierung ruft er an einer Stelle eine Insert-Funktion auf. Direkt dahinter habe ich meinen Update eingepflanzt, ohne weitere Abfragen (quick&dirty). Musst Du mal ausprobieren.

Gruß
Martin

P.S

if ($this->typoVersion >= 3006000) {

Diese Abfrage ist für das Typo3-System höher als 3.6, was hat das mit der Registrierungs-Extension zu tun?

stefansvw ·

Hallo Typotree,

in dieser Anweisung habe ich die Insert-Function gesehen und dachte das diese Anweisung sagt mach es bei einer Version höher als 3.6 so ansonsten so. Aber stimmt, mit dem Registration-Prozess hat dies wirklich nichts zu tun.

Ich nehme mal an Du meinst diese Sparte oder

if (is_array ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['registrationProcess'])) {
						foreach  ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['registrationProcess'] as $classRef) {
							$hookObj= &t3lib_div::getUserObj($classRef);
							if (method_exists($hookObj, 'registrationProcess_afterSaveCreate')) {
								$hookObj->registrationProcess_afterSaveCreate($this->currentArr, &$this);
							}
						}
					}

Aber hier kann ich keine Insert-Function feststellen. Bin ich etwas blind oder wie auch immer.

Sehe nur die Function userProcess_alt die wohl arrays mit passed variables
des user-prozesses umgeht.

Meinst Du diesen Teil ???

Gruß
Stefan

typotree ·

Hallo Stefan,

dass scheint mir die neue 'Hook'-Variante zu sein. In meiner Version gibt es das noch nicht. Wenn ich das richtig verstanden habe schreibt man in dieser Hook-Klasse eigene Funktionen und kann diese dann aufrufen lassen um Aktionen (z. B. DB-Einträge) vorzunehmen wenn er den User anlegt, editiert oder löscht. Steht in seiner Doku drin, glaube ich.
In meiner Version habe ich es direkt in die Funktion 'save()' eingebaut, in der der DB-Eintrag zum Anlegen des Users statt findet.

Gruß
Martin

stefansvw ·

Hallo Martin,

jetzt bin ich mal so frech und setzte Dir die gesamte save-Function überarbeitet wie auch immer hier rein. Ich finde diesen Punkt einfach nicht.

:o

function save() {
			if ($this->typoVersion >= 3006000) global $TYPO3_DB;
			switch($this->cmd) {
				case 'edit':
				$theUid = $this->dataArr['uid'];
				$origArr = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable, $theUid);
					// Fetch the original record to check permissions
				if ($this->conf['edit'] && ($GLOBALS['TSFE']->loginUser || $this->aCAuth($origArr))) {
						// Must be logged in in order to edit  (OR be validated by email)
					$newFieldList = implode(',', array_intersect(explode(',', $this->fieldList), t3lib_div::trimExplode(',', $this->conf['edit.']['fields'], 1)));
					$newFieldList = implode(',', array_unique( array_merge (explode(',', $newFieldList), explode(',', $this->adminFieldList))));
						// Do not reset the name if we have no new value
					if(!in_array('name', t3lib_div::trimExplode(',', $this->conf[$this->cmdKey.'.']['fields'], 1)) && !in_array('first_name', t3lib_div::trimExplode(',', $this->conf[$this->cmdKey.'.']['fields'], 1)) && !in_array('last_name', t3lib_div::trimExplode(',', $this->conf[$this->cmdKey.'.']['fields'], 1))) {
						$newFieldList  = implode(',', array_diff(explode(',', $newFieldList), array('name')));
					}
					if ($this->aCAuth($origArr) || $this->cObj->DBmayFEUserEdit($this->theTable, $origArr, $GLOBALS['TSFE']->fe_user->user, $this->conf['allowedGroups'], $this->conf['fe_userEditSelf'])) {
						if ($this->typoVersion >= 3006000) {
							$res = $this->cObj->DBgetUpdate($this->theTable, $theUid, $this->parseOutgoingDates($this->dataArr), $newFieldList, true);
						} else {
							$query = $this->cObj->DBgetUpdate($this->theTable, $theUid, $this->parseOutgoingDates($this->dataArr), $newFieldList);
							mysql(TYPO3_db, $query);
							echo mysql_error();
						}
						$this->saved = 1;

							// Post-edit processing: call user functions and hooks
						$this->currentArr = $this->parseIncomingTimestamps( $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable, $theUid));
						$this->userProcess_alt($this->conf['edit.']['userFunc_afterSave'], $this->conf['edit.']['userFunc_afterSave.'], array('rec' => $this->currentArr, 'origRec' => $origArr));

							// <Ries van Twisk added registrationProcess hooks>
							// Call all afterSaveEdit hooks after the record has been edited and saved
						if (is_array ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['registrationProcess'])) {
							foreach  ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['registrationProcess'] as $classRef) {
								$hookObj= &t3lib_div::getUserObj($classRef);
								if (method_exists($hookObj, 'registrationProcess_afterSaveEdit')) {
									$hookObj->registrationProcess_afterSaveEdit($this->currentArr, &$this);
								}
							}
						}
							// </Ries van Twisk added registrationProcess hooks>
					} else { 
						$this->error = '###TEMPLATE_NO_PERMISSIONS###';
					}
				}
				break;
				default:
				if ($this->conf['create']) {
					$newFieldList = implode(array_intersect(explode(',', $this->fieldList), t3lib_div::trimExplode(',', $this->conf['create.']['fields'], 1)), ',');
					$newFieldList  = implode( array_unique( array_merge (explode(',', $newFieldList), explode(',', $this->adminFieldList))), ',');
					if ($this->typoVersion >= 3006000) {
						$res = $this->cObj->DBgetInsert($this->theTable, $this->thePid, $this->parseOutgoingDates($this->dataArr), $newFieldList, true);
						$newId = $TYPO3_DB->sql_insert_id();
					} else {
						$query = $this->cObj->DBgetInsert($this->theTable, $this->thePid, $this->parseOutgoingDates($this->dataArr), $newFieldList);
						mysql(TYPO3_db, $query);
						echo mysql_error();
						$newId = mysql_insert_id();
					}
						// Enable users to own them self.
					if ($this->theTable == "fe_users" && $this->conf['fe_userOwnSelf']) {
						$extraList = '';
						$dataArr = array();
						if ($GLOBALS['TCA'][$this->theTable]['ctrl']['fe_cruser_id']) {
							$field = $GLOBALS['TCA'][$this->theTable]['ctrl']['fe_cruser_id'];
							$dataArr[$field] = $newId;
							$extraList .= ','.$field;
						}
						if ($GLOBALS['TCA'][$this->theTable]['ctrl']['fe_crgroup_id']) {
							$field = $GLOBALS['TCA'][$this->theTable]['ctrl']['fe_crgroup_id'];
							list($dataArr[$field]) = explode(',', $this->dataArr['usergroup']);
							$dataArr[$field] = intval($dataArr[$field]);
							$extraList .= ','.$field;
						}
						if (count($dataArr)) {
							if ($this->typoVersion >= 3006000) {
								$res = $this->cObj->DBgetUpdate($this->theTable, $newId, $dataArr, $extraList, true);
							} else {
								$query = $this->cObj->DBgetUpdate($this->theTable, $newId, $dataArr, $extraList);
								mysql(TYPO3_db, $query);
								echo mysql_error();
							}
						} 
					}
					$this->saved = 1;

						// Post-create processing: call user functions and hooks
					$this->currentArr = $this->parseIncomingTimestamps( $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable, $newId));
					$this->userProcess_alt($this->conf['create.']['userFunc_afterSave'], $this->conf['create.']['userFunc_afterSave.'], array('rec' => $this->currentArr));

						// <Ries van Twisk added registrationProcess hooks>
						// Call all afterSaveCreate hooks after the record has been created and saved
					if (is_array ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['registrationProcess'])) {
						foreach  ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['registrationProcess'] as $classRef) {
							$hookObj= &t3lib_div::getUserObj($classRef);
							if (method_exists($hookObj, 'registrationProcess_afterSaveCreate')) {
								$hookObj->registrationProcess_afterSaveCreate($this->currentArr, &$this);
							}
						}
					}
						// </Ries van Twisk added registrationProcess hooks>
				}
				break;
			}
		}
typotree ·

Hallo Stefan,

in meiner Funktion save() hatte ich nach diesen Zeilen einen eigenen Update gesetzt. Die Abfrage nach der Typo3-Version gab es da nicht.

                                if ($this->conf['create']) {
                                        $newFieldList = implode(array_intersect(explode(',', $this->fieldList), t3lib_div::trimExplode(',', $this->conf['create.']['fields'], 1)), ',');
                                        $newFieldList  = implode( array_unique( array_merge (explode(',', $newFieldList), explode(',', $this->adminFieldList))), ',');
                                        if ($this->typoVersion >= 3006000) {
                                                $res = $this->cObj->DBgetInsert($this->theTable, $this->thePid, $this->parseOutgoingDates($this->dataArr), $newFieldList, true);
                                                $newId = $TYPO3_DB->sql_insert_id();

In Zeile 5 werden die Werte eingetragen und Zeile 6 liefert die neue User-ID.
Diese 'Hook'-Geschichte existiert in meiner Version nicht.

if (is_array ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['registrationProcess'])) {
                                                foreach  ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['registrationProcess'] as $classRef) {
                                                        $hookObj= &t3lib_div::getUserObj($classRef);
                                                        if (method_exists($hookObj, 'registrationProcess_afterSaveCreate')) {
                                                                $hookObj->registrationProcess_afterSaveCreate($this->currentArr, &$this);
                                                        }
                                                }
                                        }

In diese Funktion 'registrationProcess_afterSaveCreate($this->currentArr, &$this)' kannst Du dann auch Deine Aktion setzen. Ich habe solche Hook-Funktionen noch nicht eingesetzt. Der Vorteil ist das sie unabhängig von der Extension ist und man beim nächsten Upgrade der Extension nicht wieder den Quellkode der Datei überschreiben muss, sofern diese Hook-Einbindung existiert. Ich weiß auch nicht adhoc über welche Objekte man sich dann die Variablen holt usw. Deshalb habe ich so etwas bisher direkt reingeschrieben. In der Realität heißt es ja meistens "Kannst Du mal eben ...".

Gruß
Martin

stefansvw ·

Hallo Martin,

werde mich nach meinem "Umlaut-Problem" siehe #307421 mal dranmachen Deinen Lösungsweg bei mir zu integrieren.

Ich Danke Dir für alle mal für Deinen Zeitaufwand und Deine Hilfe.

Gruß
Stefan

fatmir ·

Hallo Stefan,
ich habe auch den selben Problem mit dem USER Anmeldung, Freischaltung etc.
In deinem Beitrag erfuhr ich, dass du diesen Problem gelösst hast.
Ich würde mich freuen, wenn du mir die entsprechende Einleitungen schickst.
Ich habe so viel Zeit mit diesem Extention verloren und leider ohne diesen Erfolg.

Der jetzige Zustand ist, dass meiner User sich registrieren können, danach bekommen eine Aktivierungsmail aber nach der Versuch seinen Account zu aktivieren, bekommt der User eine Meldung, dass "Es scheint ein Problem zu geben".
Der Administrator bekommt auch eine E-Mail, mit den Meldung, dass eine User registriert hat, aber ohne Freischaltung/Approve Link.
Erst nach der manuelle Freischaltung des Users kann der User sich einlogen.
In keinem Art und Weise erfährt der User, dass sein Profil von Administrator freigeschaltet wurde.

Hier zu Information auch meine Konfiguration:

plugin.tx_srfeuserregister_pi1.confirmPID = 30
plugin.tx_srfeuserregister_pi1.editPID = 28
plugin.tx_srfeuserregister_pi1.registerPID = 29
plugin.tx_srfeuserregister_pi1.loginPID = 19
plugin.tx_srfeuserregister_pi1.confirmInvitationPID = 27
plugin.tx_srfeuserregister_pi1.pid = 14

---Login (id=19)
|
|-- Approve (id=31)
|-- Confirm (id=30)
|-- Create (id=29)
|-- Edit (id=28-)
|-- Invite (id=27)

-- Users (id=14, Sysordner) Dieser Ordner dient als Ausgangpunkt für alle Login-,Seiten, -unterseiten.

Über deiner Hilfe bedanke ich mich im Voraus

Fatmir