Archiv verlassen und diese Seite im Standarddesign anzeigen : cronjob: inaktive Benutzer löschen
Hallo,
hier ist ein cronjob für die Verwaltung von inaktiven Usern.
Der cronjob arbeite folgendermaßen:
Jeder Ausführung des cronjobs läuft in zwei Schritten ab.
Als erstes erhalten alle Benutzer deren letzter Besuch vor 180 Tagen war eine Benachrichtigung per Mail, dass ihr Account in kürze gelöscht wird.
In der zweiten Stufe werden alle Benutzer gelöscht deren letzter Besuch länger als 180 + 7 Tage her ist.
Die Anzahl der Tage kann natürlich im Script geändert werden.
Aufgrund der Berechnungen im Script ist es sehr wichtig, dass dieser cronjob täglich ausgeführt wird.
Folgende Phrasen müssen eingefügt werden:
Im Bereich "Email Subject Text"
Variablenname: infouser
Inhalt: Inaktiver Account
Variablenname: killuser
Inhalt: Account gelöscht
Im Bereich "Email Body Text"
Variablenname: infouser
Inhalt: Hallo $username,
wir haben bemerkt, dass Sie seit langer Zeit nicht mehr bei $vboptions[bbtitle] vorbeigeschaut haben.
Sollten Sie auch innerhalb der nächsten Tage $vboptions[bbtitle] nicht besuchen, wird Ihr Account gelöscht.
Vielen Dank,
Ihr $vboptions[bbtitle] Team
Variablenname: killuser
Inhalt: Hallo $username,
wir haben bemerkt, dass Sie seit langer Zeit nicht mehr bei $vboptions[bbtitle] vorbeigeschaut haben.
Ihre Registrierung unter dem Benutzernamen "$username" ist nun gelöscht worden.
Wenn Sie möchten können Sie sich gerne erneut registrieren.
Vielen Dank,
Ihr $vboptions[bbtitle] Team
Die Texte können natürlich von euch angepasst werden.
Bitte beachtet, dass beim ersten ausführen des cronjobs unter Umständen viele Benutzer gelöscht werden können, die vorher keine Benachrichtigung bekommen haben, weil sie schon viel länger inaktiv waren und von diesem Script nicht mehr erfass wurden.
Fargen und Anregungen erwünscht.
mfg Xothous
(Stand 05.01.2005)
Version für vBulletin 3.6.x:
http://www.vbulletin-germany.com/forum/showpost.php?p=157770&postcount=46
Also der User sollte schon über E-Mail benachrichtigt werden das er gelöscht worden ist oder noch besser wenn mann den Cron laufen läst schreibt er den Usern eine E-Mail das wenn sie weiterhin nicht aktiv sind das sie beim
nächste Aktivitäts Test gelöscht werden und dann natürlich bei der Löschung auch noch mal.
Einfach User Löschen ohne Benachrichtigung finde ich nicht gerade eine schöne Lösung ansonsten eine Gute Board erweiterung.
Hat jemad eine Lösung mit E-Mail benachrichtigung am Start?
Sollte kein großes Problem sein da noch ne Mailbenachrichtigung einzubauen.
Werde das die Tage mal machen, kann aber noch was dauern, da ich im Moment wenig Zeit hab.
Xothous
Wie schauts denn nun aus ?
Wie schauts denn nun aus ?
Habs aktualisiert, schau mal in meinen ertsen Beitrag.
Hi ich wollte es gerade einbauen aber es Leuft nicht ich hab es Folgend eingebaut
Phrasen angelegt
und del_inaktiv.php in den Ordner /includes/cron hochgeladen.
Danach habe ich einen Cron im Admincp erstellt.
aber er schreibt keine Logs und mein Test User Hat auch keine E-Mail bekommen
Hi ich wollte es gerade einbauen aber es Leuft nicht ich hab es Folgend eingebaut
Phrasen angelegt
und del_inaktiv.php in den Ordner /includes/cron hochgeladen.
Danach habe ich einen Cron im Admincp erstellt.
aber er schreibt keine Logs und mein Test User Hat auch keine E-Mail bekommen
Hat dein Testuser denn dass Board die eingestellten Tage das Board nicht mehr besucht?
Ich habe jetzt wrausgefunden das die User gelöscht werden also alles Richtig und bekommen auch eine E-Mail.
aber die werden nicht 7 Tage zuvor benachrichtigt !
Ich habe jetzt wrausgefunden das die User gelöscht werden also alles Richtig und bekommen auch eine E-Mail.
aber die werden nicht 7 Tage zuvor benachrichtigt !
Tut mir Leid, aber ich kann keinen Fehler finden, zumal es bei mir alles funktioniert. Aber ich werde weitere Tests machen.
Läßt du das Script auch täglich ausführen?
Blade_de
25.04.2004, 23:13
wie siehts aus funktioniert das jetzt alles ?
Hi,
habe bei mir auch das Prob, das es nicht gestartet wird :(
es soll jeden Tag um 00:04 laufen, aber nix.
Ist auch bei dem Unbestätigte USer löschen Cron.
Was passiert mit den Beiträgen eines Users, wenn man ihn löscht? Werden seine Beiträge auch gelöscht? Falls ja, so kann der Sinn ganzer Threads verloren gehen.
Was passiert mit Threads, die vom Mitglied gestartet wurden? Diese machen doch ohne das Eröffnungs-Posting keinen Sinn. Wird dann der gesamte Thread gelöscht? Falls ja, so wäre das sehr unschön, da dadurch ggf. sehr attraktive Threads komplett verloren gingen.
Ergo: Wenn ich Mitglieder, die x Tage inaktiv waren samt Beiträge lösche, dann muss ich auch alle Beiträge, die älter als x Tage sind entfernen.
Gut wäre, wenn man ein Mitglied löschen könnte, und seine Beiträge stehen bleiben würden. Als Autor könnte "ehemaliges Mitglied" o. ä. statt des Usernamens erscheinen. Dann würde der Sinn von Threads nicht gefährdet. Obwohl es dann zu Schwierigkeiten kommen könnte, wenn mehrere an einem Thread beteiligte User gelöscht werden.
Oder wie seht Ihr das?
Gruß,
Chriss
Afaik werden die Beiträge nicht gelöscht, der 'User' wird lediglich zu einem 'Gast'.
Was passiert mit den Beiträgen eines Users, wenn man ihn löscht? Werden seine Beiträge auch gelöscht?
Die Beiträge eines Users werden natürlich nicht gelöscht, sondern es erscheint anstelle des Benutzernamens einfach "Gast".
wie siehts aus funktioniert das jetzt alles ?
Ich hab das Ding bei mir im Einsatz und es funz alles. Kann im Moment keine Fehler finden, kann aber natürlich auch keine Garantie übernehmen.
Hi,
habe bei mir auch das Prob, das es nicht gestartet wird
es soll jeden Tag um 00:04 laufen, aber nix.
Ist auch bei dem Unbestätigte USer löschen Cron.
Wenn ein cronjob, oder genauer eine "Zeitgesteuerte Aufgabe" nicht gestartet wird kann das durchaus daran liegen, dass es zum Zeitpunkt des gewünschten Starts keine Aktivität in deinem Forum gibt.
Diese Zeitgesteuerten Aufgaben verlangen, dass zum Zeitpunkt der gewünschten Ausführung auch Aktivität im Forum herrscht, weil wenn vom Forum garkein Script ausgeführt wird, kann auch die Aufgabe nicht ausgeführt werden, weil ja nix vom Forum läuft. <- hoffe das war verständlich :D
Ich würde empfehlen die Ausführung mal Tagsüber, wenn im Forum was los ist zu probieren.
mfG Xothous
lässt sich das script auch für ein vb 2.3.0 einsetzen bzw. kann es so umgeschrieben werden das es auch für die älteren versionen genutzt werden kann?
lässt sich das script auch für ein vb 2.3.0 einsetzen bzw. kann es so umgeschrieben werden das es auch für die älteren versionen genutzt werden kann?
Da vBulletin 2 überhaupt kein Cron-System besitzt: Nein.
danke, für deinen sehr nützlichen hack!
gibt es einen möglichkeit, benützer mit einer bestimmten anzahl von beiträgen, von der löschung des accounts auszuschliessen?
gruss
dominik
edit: sorry, ist ja bereits möglich
redlabour
10.06.2004, 20:22
Merci - funzt wunderbar !
Zeitgeist
21.07.2004, 16:07
Das endgültige löschen der User scheint wohl nicht ganz zu funktionieren. Jedenfalls zeigte es bei mir keine Wirkung. Dann hab ich das Script folgendermaßen abgeändert:
#### Inaktive Benutzer löschen #####
$users = $DB_site->query("
SELECT userid,username,languageid,email
FROM " . TABLE_PREFIX . "user
WHERE posts < ".$lessthan."
AND lastvisit <= ".(TIMENOW - ($olderthan * 86400 + $killafter * 86400))
);
vbmail_start();
$del_useres = '';
while ($user = $DB_site->fetch_array($users))
{
$username = $user['username'];
$userid = $user['userid'];
// user löschen
delete_user($userid);
eval(fetch_email_phrases('killuser', $user['languageid']));
vbmail($user['email'], $subject, $message);
$del_useres .= iif($del_useres, ', ');
$del_useres .= $user['username'];
}
// Logeinträge schrieben
if ($del_useres)
{
log_cron_action('Gelöschte Benutzer: ' . $del_useres, $nextitem);
}
vbmail_end();
#### ENDE - Inaktive Benutzer löschen #####+#
Danach klappte das Löschen bei mir komischerweise problemlos...
red_head
22.07.2004, 19:46
Servus,
ich würde nicht den letzten Besuch nehmen!
Da z.B. ein User hat sich vor über einem halben Jahr das letzte mal eingelogt.
Und er logt sich jetzt auf die Aufoderung ein. Wird das Datum ja nicht auf das aktuelle Datum gesetzt sondern die letzte Aktivität wird zum letzten Besuch ... Bei mir hat es einen Moderator gelöscht .. der innerhalb von den letzten 10 Tagen auf jeden Fall online war ... Nur sein letzter Besuch lag über ein halbes Jahr zurück! Daher wurde er gelöscht :(
Daher würde ich die lastactivity (Letzte Aktivität) nehmen ;)
Dann kann es nicht passieren das der User doch gelöscht wird.
Gruß red_head
"danke für den Hack"
wie siehts aus? wie sollte man das Teil einbauen?
waiting
Onkel_Tom
30.08.2004, 19:55
Wie man das "Teil" einbauen soll steht eigentlich im ersten Beitrag dieses threads !
Für nicht englische vB Benutzer heißen die Phrasentypen:
"E-Mail Betreff" anstelle von "Email Subject Text"
und
"E-Mail Text" anstelle von "Email Body Text"
Die Änderung von red_head ist durchaus die bessere Lösung!
Suche in Datei del_inaktiv.php nach:
AND lastvisit < ".(TIMENOW - ($olderthan * 86400 + $killafter * 86400)) und ersetze es mit:AND lastactivity < ".(TIMENOW - ($olderthan * 86400 + $killafter * 86400))
dann müsste eigentlich alles Laufen.
Mit Ausnahme das der Cron das Script bei mit nicht startet (siehe auch Cronjob: unbestätigte User löschen). Komisch eigentlich da alle Cronjobs, auch eigenen, einwandfrei funktionieren nur Xothous specialscripts wollen bei mir einfach nicht automatisch loslaufen. Übrigens egal wieviele User aktiv sind und das Script anstoßen könnten ;)
Wahrscheinlich hat mein Server eine Allergie gegen "delete User" Scripts :D
Onkel_Tom
30.08.2004, 20:43
Okay, anbei nun die gebugfixte Version die nun auch auf meinem Server läuft ;)
EDIT: Das Script befindet sich ein paar Beiträge weiter unten
Kleiner Tipp noch wegen den unter Umständen gelöschten Benutzern, ohne das diese vorab eine Hinweis E-Mail bekommen haben, beim Installieren dieser Funktion. Geht einfach in das AdminCP und klickt auf Benutzer => E-Mail verschicken
und gebt dort bei den Such-Kriterien einfach die gewünschten Optionen ein.
Letzter Besuch ist vor dem: 01.01.2004
Beitragszahl ist kleiner als: 1
Dann füllt oben die Nachricht mit dem dem Text des Templates aus und los geh'ts mit der eMail.
Achtet halt drauf das Ihr den Cronjob für diese Erweiterung erst nach ein paar Tagen einrichtet da sonst die betroffenen Benutzer ja nur ein paar Stunden Zeit haben sich im Forum zurückzumelden ohne gelöscht zu werden ;)
Hi,
habe die gefixte Version aufgeladen.
Nur habe ich das Problem, das er jetzt das script in einer schleife ausführt und immer ein und denselben User benachrichtigt?
sprich 14:00,14:01 usw
Was kann das sein?
muß das lastactivity nicht 2 mal vorhanden sein?
Onkel_Tom
31.08.2004, 14:44
Oops, da habe ich zwei Codestellen vergessen auf lastactivity zu ändern. Probier mal bitte das geänderte angehängte Script.
Hatte nach langer Zeit mal wieder Zeit und hab das Script mal aktualisiert.
Siehe 1. Beitrag
thx @ Onkel_Tom
mzbcarper
27.02.2005, 04:03
Ich bekomme das Script nicht zum laufen! geht das noch anderen so ? oder liegt es an mir ?
Verwende Vbb 3.0.6 de
Mh. Irgendwie geht in deinem Forum wohl nichts... ;) Schau dochmal nach ob du auch das Update richtig gemacht hast. Vor allem hast du hoffentlich alle(!) neuen vB 3.0.6 Dateien hochgeladen?
darkdiver
27.02.2005, 08:40
hi,
super Idee das Script, aber ich würde gerne gewisse Usergruppen ausschliessen, denn wenn jemand vom Verein mal micht länger reinsieht, darf dieser nicht gelöscht werden, aber ich sage einmal für "Standard" Forum User ist das eine feine Lösung, kann das noch jemand einbauen?
Grüße
Eric
Ist die Datei, die Onkel_Tom gepostet hat auf 365 Tage eingestellt, also eMail Verwarnung nach 365 Tagen?
Dann noch eine zweite Frage:
Was muss ich genau in "Aufgabe hinzuzufügen" eingeben?
Titel --> ?
Wochentag --> ?
Monatstag --> ?
Stunde --> ?
Minute --> ?
Logeinträge --> Ja oder Nein?
Dateiname: Das ist klar.
Grüße,
Piper
kaiandeve
28.03.2005, 20:52
hi,
welche skripte sind denn nun die aktuellen?
oder ist auf der ersten Seite das "bug-korrigierte"?
gruß Kai
nachtrag: was ist mit den "zählern"? aktualisiert er diese auch?
welche skripte sind denn nun die aktuellen?
oder ist auf der ersten Seite das "bug-korrigierte"?
http://www.vbulletin-germany.com/forum/showpost.php?p=78368&postcount=25nachtrag: was ist mit den "zählern"? aktualisiert er diese auch?Ja.
kaiandeve
29.03.2005, 20:49
Danke :-)
TouchStone
11.04.2005, 09:55
Was genau muss bei der Zeitgesteuerten Aufgabe , wo eingetragen werden?
Ich kenne mich damit noch nicht aus , habe das vB erst eine woche.;)
Gruss
Onkel_Tom
11.04.2005, 10:20
Hi,
Im AdminCP auf "Zeitgesteuerte Aufgaben" klicken und dann "Aufgabe hinzufügen" anklicken.
Im nächsten Fenster folgende Daten eingeben.
Titel: Inaktive Benutzerkonten löschen
Wochentag: *
Monatstag: *
Stunde: 8
Minute: 5
Logeinträge: Ja
Dateiname: ./includes/cron/del_inaktiv.php
Mit dieser Einstellung führt Dein vB das Script del_inaktiv.php das Du vorher natürlich in Deinem /includes/cron Verzeichnis kopiert haben musst jeden Tag um 8:05Uhr morgens aus. Alle Vorgänge des Scripts werden gelogged und können im Log der zeitgesteuerten Aufgaben verfolgt werden.
Ich hoffe damit gehelft zu haben ;)
TouchStone
11.04.2005, 10:26
@Onkel_Tom
Damit ist mir sehr geholfen , vielen dank.
Gruss
]|fre$h-LoRd|[
04.01.2006, 10:47
Ich hab noch mal ne Frage, die hier nicht beantwortet wurde, glaube ich.
Wie kann ich meine Mods, oder bestimme Usergruppen vor dem Script schützen? Kann man da nicht noch eine Option einfügen, in der man die zu übergehenden Usergruppen als Nummern eingeben kann!?
|fre$h-LoRd|[']Wie kann ich meine Mods, oder bestimme Usergruppen vor dem Script schützen? Kann man da nicht noch eine Option einfügen, in der man die zu übergehenden Usergruppen als Nummern eingeben kann!?Suche zweimal:WHERE posts < " . $lessthan . "Füge jeweils darunter ein:AND usergroupid NOT IN (5, 6, 7)
]|fre$h-LoRd|[
04.01.2006, 18:45
Dickes danke Mystics!
in der version Vbb 3.0.6 funktioniert das script nicht. ich habe alles so gemacht wie es im 1. posting stand.
Klappt bei mir wunderbar. Was klappt denn nicht?
Onkel_Tom
01.09.2006, 00:01
in der version Vbb 3.0.6 funktioniert das script nicht. ich habe alles so gemacht wie es im 1. posting stand.
Meint er etwa die Version 3.6.0 ?
Hm, das würde das Nichtfunktionieren erklären :)
Es soll ja geringe Unterschiede zw. 3.0.6 und 3.6.0 geben, habe ich gehört.
Onkel_Tom
01.09.2006, 00:23
Mike, könntest Du den Hack portieren sodaß er mit der 3.6.0 funzt?
Ich bräuchte ihn selbst auch passend für 3.6.0 da ich in naher Zukunft alle meine Foren auf die neue Version umstelle und aktuell, sofern es die Zeit zuläßt, die integrierten 67 Erweiterungen der vB3.0.5 in ein 3.6.0 einpflege. Schritt für Schritt und ohne fixen Termin was es fertig sein soll ;)
Meint er etwa die Version 3.6.0 ?
Hm, das würde das Nichtfunktionieren erklären :)
Es soll ja geringe Unterschiede zw. 3.0.6 und 3.6.0 geben, habe ich gehört.
natürlich meinte ich 3.6.0
wenn ich die datei ausführe bekomme ich eine leere weiße seite und in der log steht auch nicht´s. wie erwähnt ich habe es nach anleitung im ersten posting eingebaut.
Du bist hier im 3.0 Forum, also geht die Datei natürlich in 3.6 nicht mehr ;)
Probier mal die Datei im Anhang...
Onkel_Tom
05.09.2006, 14:01
Probier mal die Datei im Anhang...
Sieht aus als ob die Datei einwandfrei funktioniert!
Aber wie sollte es anders sein wenn Mike sein Hände dazwischen hatte :D
Vielen Dank Mike!
Du bist hier im 3.0 Forum, also geht die Datei natürlich in 3.6 nicht mehr ;)
Probier mal die Datei im Anhang...
ich habe es nun mal getestet, und ich muss sagen es funktioniert tadellos.
ein kleiner fehler scheint aber noch zu sein.
in den e-mail´s fehlt der username. woran kann das liegen? es wäre schon schön wenn der username mit in den mails auftaucht.
hat keiner eine lösung für mein problem?
Habe den Anhang aktualisiert.
danke für das update. http://www.vbulletin-germany.com/forum/images/icons/icon14.gif
eine kleine frage habe ich doch noch.
wie ist es möglich diesen code (http://www.vbhacks-germany.org/showpost.php?p=29742&postcount=19) in das script zu intrigieren?
ich habe unter $userid = $user['userid'];
diesen code eingestezt //
$days = floor((time() - $user['joindate']) / 86400);
$joindate = $user['userid'], date('d.m.Y', $user['joindate']), $days);
$tage = $user['joindate'];
// http://www.vbhacks-germany.org/showthread.php?t=3920
wie muss der richtige code ausehen damit es funkioniert?
Suche:SELECT userid, username, languageid, emailErsetze es mit:SELECT userid, username, languageid, email, joindate
Suche:SELECT userid, username, languageid, emailErsetze es mit:SELECT userid, username, languageid, email, joindate
habe ich gemacht, und unter :
$userid = $user['userid'];
habe ich nun $joindate = $user['joindate']; eingetragen.
das klappt auch soweit ganz gut, nur wird das datum nicht korekt dargestellt. es stehen nur zahlen da beispiel:
1130081220. hast du dafür auch eine lösung parat?
edit: wie muss der code ausehen wenn auch die tage der abwesendheit angezeigt werden sollen.
danke!
$joindate = date("d.m.Y", $user['joindate']);
$tagereg = floor((time() - $user['joindate']) / 86400);
$lastvisitdate = date("d.m.Y", $user['lastactivity']);
$tageabwesend = floor((time() - $user['lastactivity']) / 86400);
lastactivity musst du natürlich noch oben im Query hinzufügen.
vielen dank, jetzt klappt es!
super Mystics http://www.vbulletin-germany.com/forum/images/icons/icon14.gif
darkdiver
31.12.2006, 13:41
Hallo,
könnte das jemand alles zusammenfassen und wieder in eine php packen?
Viele Grüße und einen guten Rutsch ins neue Jahr
Eric
vBulletin® v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.