PDA

Zobacz pełną wersję : gp Prune Inactive Users - usuwanie zbędnych użytkowników :)



GrzesiekP
24-02-2011, 21:52
Do napisania pluginu natchnął mnie ten wątek:
blokada-konta-po-czasie (http://forum.joomla.pl/showthread.php?48768-blokada-konta-po-czasie)

Mam w bazie ponad 19k użytkowników, i wielu z nich to martwe duszyczki. Troszkę materiałów zebrałem, trochę problemów miałem, niemniej jednak starałem się profesjonalnie podejść do tematu i przedstawiam swoje pierwsze, oficjalne dzieło dla społeczności J!

gp Prune Inactive Users

Funkcje:

1. Określenie częstotliwości sprawdzania i usuwania użytkowników.
Oznacza to, że skrypt sprawdza użytkowników nie za każdym wywołaniem, ale np.:
- codziennie (raz dziennie)
- co 3 dni;
- raz w tygodniu;
- raz na dwa tygodnie;
- raz w miesiącu.

2. Tryb usuwania - mamy dwa tryby - podstawowy i rozszerzony.
Tryb podstawowy pobiera listę użytkowników, którzy nie należą do grup od #ID=23,24 lub 25.
Tryb rozszerzony - pobiera listę wszystkich użytkowników, a następnie każdego sprawdza czy należy do grupy 'super administrator', 'administrator', 'manager' (operator). Jeśli należy, to użytkownik jest pomijany. Tryb ten wykonuje więcej zapytań do bazy!

3. Usuń nieaktywowanych - usuwa użytkowników, którzy zarejestrowali się w serwisie, ale nie aktywowali swojego konta.
Okres czasu dla powyższej opcji oznacza liczbę dni od daty rejestracji, po której nieaktywowane konto użytkownika zostanie usunięte.

4. Usuń martwe dusze - usuwa użytkowników, którzy zarejestrowali się i bywali w serwisie, ale od jakiegoś czasu już nie logują się.
Okres czasu dla powyższej opcji oznacza liczbę dni od daty ostatniej wizyty, po której konto użytkownika zostanie usunięte.

5. Usuń nigdy zalogowanych - usuwa użytkowników, którzy zarejestrowali się w serwisie, aktywowali konto, ale nigdy się nie zalogowali.
Okres czasu dla powyższej opcji oznacza liczbę dni od daty rejestracji, po której konto użytkownika zostanie usunięte.

6. Usuwaj zablokowanych - opcja, która pozwala również na usuwanie zablokowanych użytkowników.

7. Pomiń użytkowników - lista #ID użytkowników, które należy pominąć przy sprawdzaniu.


Skrypt ponadto zapisuje log w bazie po każdym wykonaniu sprawdzenia z liczbą skasowanych użytkowników oraz datą usunięcia.


Przyszłe plany, które chciałbym zrealizować w niedługim czasie:
1. Wyeliminować błędy - liczę na to, że pomożecie.
2. Usprawnić działanie pluginu.
3. Wprowadzić opcję powiadamiania użytkownika e-mailem o tym, iż jego konto zostanie usunięte, jeśli nie aktywuje/zaloguje się w najbliższym czasie.

...

Chciałbym jeszcze dodać, że skrypt testowałem u siebie - zalecam przetestować na jakiejś roboczej witrynie zanim zainstalujecie go na oficjalnej stronie.

Plugin usuwa użytkowników w "joomla'owski" sposób, czyli zwykłe $user->delete także żadne niepotrzebne śmieci wpisy po nim nie zostają :)

Pozdrawiam i czekam na uwagi/sugestie/propozycje :)
GP



Zmiany:

25.02.2011 - wersja 1.0.1
#1 Poprawiono bug z usuwaniem użytkowników zablokowanych (podziękowania dla alex51).

alex51
25-02-2011, 11:44
Fajna sprawa, że zebrałeś "do kupy" funkcje 3 oddzielnych dodatków. Możesz sprawdzić działanie funkcji kasowania kont użytkowników, którzy nie aktywowali swoich kont? Obawiam się, że nie działa ta opcja, a w "starym" pluginie miała taki warunek:
block = 1.
W Twoim skrypcie nie ma takiej możliwości, chyba wszystkie block są = 0.

GrzesiekP
25-02-2011, 12:40
@alex51

Serdeczne dzięki - faktycznie moje niedopatrzenie.

Wersja 1.0.1:
- usuwa nieaktywowanych użytkowników (activation != '', block=1);
- w przypadku pozostałych dwóch opcji mamy możliwość zdefiniowania czy "martwa dusza", która została zablokowana przez administratora ma zostać usunięta czy też nie.

alex51
25-02-2011, 12:56
Odwaliłeś kawał dobrej roboty i wielu powinno Ci podziękować. Przydałoby się wstawić Twój dodatek do naszej plikowni.
Zastanawiam się też nad taką możliwością - czy nie dałoby się połączyc działania Twojego dodatku z komponentem Community Builder, w którym konieczne jest przeprowadzenie synchronizacji użytkowników po każdej zmianie "stanu posiadania".

alex51
25-02-2011, 13:16
Testuję i nie wychodzi mi to do końca. Na testowej stronie ze standardową rejestracją (bez CB) założyłem testowe konto użytkownika, które pozostawiłem bez aktywowania. Cofnąłem datę rejestracji na 25 stycznia 2011 roku i według bazy danych użytkownik test_test ma takie dane:

usertype - Registered, block - 1, registerDate - 2011-01-25 07:05:16, lastvisitDate - 0000-00-00 00:00:00 i mimo to nie obejmuje go działanie dodatku, mimo ustawienia w nim opcji kasowania Usuń "nieaktywowanych - po 2 dniach".
Czy coś źle zrobiłem?
Zainstalowanie dodatku opisanego we wcześniejszym poście (plg_killunapprovedusers_pl) powoduje zgodne z oczekiwaniami kasowanie wspomnianego wyżej konta.

GrzesiekP
25-02-2011, 14:52
Sprawa wygląda tak, że skrypt wykonuje się tylko raz dziennie, tak aby ograniczyć do minimum obciążenie.

Przy bazie o wielkości 19 tys. użytkowników wykonywanie kodu za każdym wywołaniem jest wg mnie ... nierozsądne.

Dlatego ograniczyłem sprawdzanie do jednego dziennie. Jeśli chcesz przetestować działanie, usuń najnowszy wpis w tabeli "#__gpplugin_PruneInactiveUsers" i odśwież stronę :)


Kolejna aktualizacja będzie zawierać opcję dotyczącą ilości wywołań dziennie (chociaż muszę się zastanowić, jak to później rozegrać z rozsyłaniem maili, aby dwu/trzykrotnie dziennie nie przychodziły.

---------- Post dodany o 13:52 ---------- Poprzedni post był o 12:57 ----------

Odnośnie synchronizacji z CB - czemu nie :)
Po emailach będzie to kolejna opcja planowana do wdrożenia - muszę tylko zdobyć CB i popatrzeć co i jak tam, bo tego komponentu nie znam (jedynie JS używam póki co).

mjmartino
25-02-2011, 18:18
@GrzesiekP dodatek bardzo przydatny od razu nasunęła mi się myśl z waszej dyskusji którą przeczytałem ;)


Przy bazie o wielkości 19 tys. użytkowników wykonywanie kodu za każdym wywołaniem jest wg mnie ... nierozsądne.

Możesz dorobić przecież funkcji którą na żądanie będzie sprawdzać z dopisaniem że nie zaleca się i to zapytanie bardzo obciąża serwer itp dla przestrogi ;)

Ja na razie nie mam jak po testować.. ale może przywrócę kopie jakiegoś old serwisu i po testuje ;)

Pozdrawiam :) <piwo>

GrzesiekP
25-02-2011, 22:03
Przemyślałem trochę i jednak zastosuję opcję z 3 możliwościami sprawdzania (raz, dwa i trzy razy dziennie).

Wykonywania pętli za każdym wywołaniem strony mija się z celem.
Przecież liczą się dni nieaktywności - minuty/sekundy można pominąć :)