PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cronjob: inaktive Benutzer löschen



Xothous
27.03.2004, 14:57
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

Florian
28.03.2004, 16:52
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?

Xothous
28.03.2004, 22:22
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

Ne0
03.04.2004, 09:48
Wie schauts denn nun aus ?

Xothous
03.04.2004, 13:47
Wie schauts denn nun aus ?
Habs aktualisiert, schau mal in meinen ertsen Beitrag.

Florian
07.04.2004, 15:34
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

Xothous
07.04.2004, 19:29
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?

Florian
08.04.2004, 18:48
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 !

Xothous
11.04.2004, 14:57
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 ?

MrD
26.04.2004, 12:28
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.

Chriss
26.04.2004, 14:56
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

<jay>
26.04.2004, 17:58
Afaik werden die Beiträge nicht gelöscht, der 'User' wird lediglich zu einem 'Gast'.

Xothous
26.04.2004, 21:23
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

Paridus
27.04.2004, 19:21
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?

Mystics
27.04.2004, 20:16
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.

dominik
10.06.2004, 11:56
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

gucci
02.08.2004, 19:39
"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 ;)

MrD
31.08.2004, 14:15
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.

Xothous
05.01.2005, 15:38
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

h75
27.02.2005, 05:43
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

Piper
17.03.2005, 17:11
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, 21: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?

Mystics
29.03.2005, 21:44
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=25
nachtrag: was ist mit den "zählern"? aktualisiert er diese auch?Ja.

kaiandeve
29.03.2005, 21: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&ouml;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!?

Mystics
04.01.2006, 12:34
|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!

Paridus
31.08.2006, 14:23
in der version Vbb 3.0.6 funktioniert das script nicht. ich habe alles so gemacht wie es im 1. posting stand.

Mystics
31.08.2006, 22:10
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 ?

Mystics
01.09.2006, 00:07
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 ;)

Paridus
01.09.2006, 08:48
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.

Mystics
04.09.2006, 23:46
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!

Paridus
22.09.2006, 08:48
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.

Paridus
26.09.2006, 14:35
hat keiner eine lösung für mein problem?

Mystics
28.09.2006, 22:42
Habe den Anhang aktualisiert.

Paridus
23.10.2006, 17:53
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?

Mystics
23.10.2006, 23:02
Suche:
SELECT userid, username, languageid, emailErsetze es mit:
SELECT userid, username, languageid, email, joindate

Paridus
24.10.2006, 12:19
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!

Mystics
24.10.2006, 12:48
$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.

Paridus
24.10.2006, 13:38
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