PDA

Zobacz pełną wersję : blokada konta po czasie



msm
04-02-2011, 18:51
Szukam dodatku który zablokuje konto użytkownika po określonym czasie.

msm

alex51
04-02-2011, 18:57
Jest taki dodatek - Kill Unapproved Users (http://extensions.joomla.org/extensions/clients-a-communities/user-management/7515) niestety, według informacji na JED, plugin ten działa tylko w trybie legacy.
Jednak kolega Marek Kolka - zorro publikuje jego polską wersje (http://www.zorro.cal24.pl/index.php?option=com_remository&Itemid=53&func=fileinfo&id=136) i dodaje informację, że dodatek ten jest natywny dla J!1.5.
Ten plugin usuwa użytkowników, którzy zarejestrowali się ale nie aktywują konta przez N dni. Ilość dni można określić w ustawieniach dodatku.

msm
04-02-2011, 19:21
Dziękuje za informacje zawsze to coś, chodzi mi bardziej o deaktywację konta po ustalonej dacie. W portalu użytkownik wykupuje sobie abonament na określony czas i po tym czasie konto przestaje być aktywne. Myślałem że w j1.6 będzie już taka funkcjonalność ale nie znalazłem.

msm

alex51
04-02-2011, 19:25
Domyślałem się o jaką funkcjonalność Ci chodziło, sam też szukałem swego czasu takiego rozwiązania, które by usuwało konto użytkownika nie odwiedzającego strony po określonym czasie. Nie udało mi się nic takiego wyszukać.
Zastanawiam się jednak, czy nie dałoby się przerobić wspomnianego powyżej dodatku, by uzyskać planowaną funkcjonalność. Obawiam się jednak, że jedynie Jola byłaby w stanie powiedzieć coś na ten temat.

Gall Anonim
04-02-2011, 21:19
Można by pokombinować z dostępem za pomocą wykupowanych punktów abonamentowych - po jednym za każdy dzień kalendarzowy abonamentu - koniec punktów - koniec dostępu - chyba że kupi nowe - coś mi świta system punktów z takimi możliwościami - ale to jak rozwiążę swoje problemy z centralnym sklepem rozsyłającym automatycznie zamówienia do terenowych oddziałów według adresu klienta składającego zamówienie w sklepie. /stawiałem wątek - niestety bezowocnie :(/
Pzdr

Jola
04-02-2011, 21:52
Witam,
nie podejrzewam zebyś znalazł gotowe rozwiązanie (chyba, że jest wbudowane w jakieś rozszerzenie).
Zablokowanie użytkownika nie jest wielkim problemem - trzeba tylko wiedzieć jak pobrać warunek tego blokowania.
Czyli znać miejsce gdzie jest zapisane kto, kiedy i na jak długo ma wykupione konto.
Wg mnie modyfikacja indywidualna.

Robster
04-02-2011, 23:30
Z tego co pamiętam to JoeMonster stoi na J!, a oni coś takiego tam mają. Strzelam na 99%, że to dedykowany komponent, ale nie zaszkodzi zapytać, w końcu pewnie też jakieś tam poszukiwania w tym kierunku prowadzili.

palyga007
04-02-2011, 23:50
Cześć @Robster


Z tego co pamiętam to JoeMonster stoi na J!

Raczej nie. :)

Robster
05-02-2011, 00:31
Hej @palyga007 :)

Czyli coś mi się ubzdurało :)

alex51
05-02-2011, 07:20
Widzę, że dyskusja przybrała kierunek związany z adaptacją systemu abonamentowego. Mnie bardziej interesuje bardziej ogólny kierunek, czyli sposób na określenie czasu dla ważności zwykłego konta użytkownika. Zakładam taką tezę: użytkownik po zarejestrowaniu się i aktywowaniu swojego konta "zapomina" o nim i przestaje odwiedzać stronę. Ustalam przykładowy limit - 3 miesiące, po którym to terminie po brakach odwiedzin konto użytkownika zostanie automatycznie usunięte.
Wspomniany wcześniej dodatek Kill Unapproved Users działa prawie tak samo, jak planuje, ale w odniesieniu do kont jeszcze nie aktywowanych. Mam więc takie pytanie: czy w cytowanym poniżej kodzie (całość zawartości pliku killunapproved.php) jest możliwość modyfikacji pozwalającej uzyskać planowaną przeze mnie funkcjonalność?:


<?php
/**
* @package Joomlatunes plugin collection
* @copyright Copyright (C) 2006-2008 by Dmitry V. Smirnov (http://www.joomlatune.ru)
* @license GNU/GPL, see LICENSE.php
*/

// no direct access
defined ( '_JEXEC' ) or die ( 'Restricted access' );

jimport ( 'joomla.plugin.plugin' );

/**
* Joomla! Kill Unapproved Users plugin
*/
class plgSystemKillUnapproved extends JPlugin {
/**
* Constructor
*
* For php4 compatability we must not use the __constructor as a constructor for plugins
* because func_get_args ( void ) returns a copy of all passed arguments NOT references.
* This causes problems with cross-referencing necessary for the observer design pattern.
*
* @param object $subject The object to observe
* @param array $config An array that holds the plugin configuration
* @since 1.0
*/
function plgSystemKillUnapproved(& $subject, $config) {
parent::__construct ( $subject, $config );
}

function onAfterInitialise() {
$days = $this->params->get ( 'days' );
$excludes = $this->params->get('excludes',0);

$db = & JFactory::getDBO ();

$query = "SELECT u.id AS uid, a.id AS aid FROM #__users AS u"
. "\n LEFT JOIN #__core_acl_aro AS a ON a.value = u.id"
. "\n WHERE DATE_ADD(u.registerDate, INTERVAL $days DAY) < NOW() AND block = 1 AND u.gid NOT IN(23,24,25) AND u.id NOT IN($excludes)";
$db->setQuery ( $query );
$rows = $db->loadObjectList ();

if (count( $rows ) > 0) {
foreach ($rows as $row){

$uid = $row->uid;
$aid = $row->aid;

$query = "DELETE FROM #__users WHERE id = $uid";
$db->setQuery ( $query );
$db->Query ();

$query = "DELETE FROM #__core_acl_aro WHERE id = $aid";
$db->setQuery ( $query );
$db->Query ();

$query = "DELETE FROM #__core_acl_groups_aro_map WHERE aro_id = $aid";
$db->setQuery ( $query );
$db->Query ();
}
unset ($row);
}
}
}

Żałuję, że nie mam wystarczającej motywacji do nauki php, a może nie potrafię znaleźć właściwych źródeł do rozpoczęcia tej nauki?

Robster
05-02-2011, 09:43
Ja z php znam tylko podstawy, ale myślę, że dobrze rozumiem ten fragment kodu:


$query = "SELECT u.id AS uid, a.id AS aid FROM #__users AS u"
. "\n LEFT JOIN #__core_acl_aro AS a ON a.value = u.id"
. "\n WHERE DATE_ADD(u.registerDate, INTERVAL $days DAY) < NOW() AND block = 1 AND u.gid NOT IN(23,24,25) AND u.id NOT IN($excludes)";

o ile się nie mylę zapytanie w funkcji warunkowej:

AND block = 1

sprawdza czy konto nie zostało aktywowane, ewentualnie zablokowane. Chodź mogę się mylić bo nie wiem za co odpowiada zmienna:

u.gid

niemniej spróbuj @alex5 usunąć ten warunek z block i powinno być ok, czyli:


$query = "SELECT u.id AS uid, a.id AS aid FROM #__users AS u"
. "\n LEFT JOIN #__core_acl_aro AS a ON a.value = u.id"
. "\n WHERE DATE_ADD(u.registerDate, INTERVAL $days DAY) < NOW() AND u.gid NOT IN(23,24,25) AND u.id NOT IN($excludes)";

palyga007
05-02-2011, 09:54
@Robster usunięcie tylko tego warunku pomoże, ale nie zawsze.

AND u.gid NOT IN(23,24,25) AND u.id NOT IN($excludes)";

Zostaje jeszcze warunek że użytkownik nie znajduje się w żadnej z grup Operator ,Administrator, Główny Administrator
Oczywiście to raczej mało prawdopodobne, żeby trzeba było w ten sposób usuwać kogoś z dostępem do zaplecza :)
No i zostaje jeszcze $excludes, ale w tym momencie nie wiem co to znaczy :)


Hmm.. jeszcze chyba śpię...

Użytkownik pytał o możliwość blokady konta, a my mu je usuwamy. :)

Robster
05-02-2011, 10:03
Czyli:

u.gid
to rodzaj grupy, dobrze wiedzieć :) No ale myślę, że osoby z prawami w zapleczu, są już uprzednio sprawdzone i nie będzie z nimi problemów, ale jakby ktoś chciał i te grupy sprawdzać, to wystarczy przecież wywalić tą linijkę z zapytania :)

A wracając do $excludes, to z tego linka http://wiki.joomla.pl/index.php/Wyra%C5%BCenia_regularne_w_argumentach_parametr%C3 %B3w wynika, że są to rekordy oznaczone jako coś w rodzaju wyjątków lub jakoś tak i mają być pominięte przy tego typu operacjach. To chyba jakiś wewnętrzny system filtrowania w J! Jednym słowem lepiej tego nie ruszać :)

Jola
05-02-2011, 16:23
Muszę się wtrącić i trochę naprostować sugerowane rozwiązania. @Alex51 chce usuwać aktywowanych użytkowników, którzy nie odwiedzali witryny przez określony czas. Czyli block=0 i nie registerDate tylko lastvisitDate :

$query = "SELECT u.id AS uid, a.id AS aid FROM #__users AS u"
. "\n LEFT JOIN #__core_acl_aro AS a ON a.value = u.id"
. "\n WHERE DATE_ADD(u.lastvisitDate, INTERVAL $days DAY) < NOW() AND block = 0 AND u.gid NOT IN(23,24,25) AND u.id NOT IN($excludes)";

Użytkowników mających dostęp do zaplecza zostawiamy w spokoju i tych, których wpisujemy w ustawienia pluginu ($excludes).
:)

Robster
05-02-2011, 18:15
No to nas Jola pozamiatała :D Swoją drogą trzeba by kiedyś przyswoić te wszystkie zmienne w J! i tabele dokładnie prześledzić :)

alex51
05-02-2011, 19:08
Coś zrobiłem nie tak, bo jakoś nie chce mi to zadziałać? Sugerowana przez Jolę zmiana w kodzie nie skutkuje kasowaniem kont wskazanych liczbą dni nieodwiedzania strony. Usiłowałem też przetestować działanie dodatku w jego oryginalnej wersji i w żaden sposób niczego on nie zmienia, czyli nie usuwa kont użytkowników, bez względu jak bym nie ustawiał wartość liczby dni.
A przy okazji skoro jest to kod php, to dlaczego ma na początku znacznik otwierający <?php a na końcu nie ma znacznika końcowego ?> ?

Jola
05-02-2011, 19:10
Możesz podać namiar na ten dodatek

alex51
05-02-2011, 19:13
Podawałem linki w #2: na JED (http://extensions.joomla.org/extensions/clients-a-communities/user-management/7515) i ze spolszczeniem u zorro (http://www.zorro.cal24.pl/index.php?option=com_remository&Itemid=53&func=fileinfo&id=136).

Dziwna sprawa. Na testowej nowo zainstalowanej stronie, z bazą zawierającą 10 użytkowników dodatek z modyfikacją Joli zadziałał prawidłowo. Natomiast na kopii mojej działającej strony nie chce zadziałać!

Jola
05-02-2011, 19:35
Sprawdziłam - działają obie wersje: oryginalna i przerobiona ale..
Jest jeden warunek w ID użytkowników wyłączonych musi być coś wpisane (chociaż jedno ID) :)

msm
05-02-2011, 20:40
Witam, tak sobie myślę iż funkcjonalność o której pisałem jest wbudowana w joomle tylko dotyczy artykułów - data końca publikacji. Czy jest możliwość zaimplementowania tych mechanizmów dla kont userów. Oczywiście z poziomem wiedzy jaką posiadam z php jest to nieosiągalne dla mnie. Może jednak ktoś kto ma php opanowane mógłby się przyglądnąć tematowi.

alex51
06-02-2011, 10:17
(...)
Jest jeden warunek w ID użytkowników wyłączonych musi być coś wpisane (chociaż jedno ID) :)
To akurat wiedziałem, ale zrobiłem błąd zostawiając przecinek po ostatnim ID i to powodowało niedziałanie dodatku.
Tradycyjnie już chcę złożyć serdeczne podziękowania Joli, bez której pomocy nie ruszyłbym tego problemu.
Dla swoich potrzeb zrobiłem dodatkową przeróbkę tego dodatku w wersji kasującej konto użytkownika po upłynięciu określonego limitu od ostatniego logowania, którą nazwałem plg_limittimeoutlastvisitusers_pl i w takiej postaci zainstalowałem na stronie. Oryginalną wersje dodatku też zainstalowałem, by usuwał konta bez dokonanej aktywacji. Tym sposobem mam zautomatyzowane dwie sprawy, dotychczas wymagające odręcznego kasowania kont.

Gall Anonim
06-02-2011, 12:24
Dla swoich potrzeb zrobiłem dodatkową przeróbkę tego dodatku w wersji kasującej konto użytkownika po upłynięciu określonego limitu od ostatniego logowania, którą nazwałem plg_limittimeoutlastvisitusers_pl i w takiej postaci zainstalowałem na stronie.
@alex51 To może Wrzucisz na forum spakowaną paczuszkę - może się przydać w przyszłości.
Pzdr

alex51
06-02-2011, 12:26
Żaden problem wstawię obie paczuszki.

Gall Anonim
06-02-2011, 12:29
Żaden problem wstawię obie paczuszki.
@alex51 - obie zaciągnę (jak wrócę z biegania :)) oraz dziękuję w swoim i jak mniemam wielu innych Forumowiczów imieniu.
Pzdr

alex51
06-02-2011, 13:38
Dopóki nie nastąpi akceptacja paczuszkę z moją przeróbka możesz pobrać >>tutaj<< (http://alex51.funpic.de/joomla/usun_nieodwiedzajacych.zip).

Gall Anonim
06-02-2011, 15:13
Dopóki nie nastąpi akceptacja paczuszkę z moją przeróbka możesz pobrać >>tutaj<< (http://alex51.funpic.de/joomla/usun_nieodwiedzajacych.zip).
Pobrałem i dziękuje raz jeszcze :)
P.S. Przeklikam za parę dni, jak tylko się obrobię.

alex51
22-02-2011, 17:53
Dzięki pomocy wszystkich wypowiadających się w tym wątku uzyskaliśmy dwa dodatki usprawniające obsługę kont użytkowników. Pozwolę sobie je podsumować.

1. Usuwanie kont użytkowników, którzy nie aktywowali swojego konta, z określeniem limitu dni, po którym takie konto zostanie automatycznie skasowane.
2. Kasowanie kont użytkowników zarejestrowanych ale nie logujących się przez określony czas.

Zastanawiam się jeszcze nad trzecią ewentualnością:
3. Kasowanie kont użytkowników zarejestrowanych, ale nigdy nie logujących się.

Zdarzają się i to nie tak rzadko rejestracje być może zbyt pochopne lub czasami zwyczajnie omyłkowe, które osoby rejestrujące się porzucają, nie wchodząc po zarejestrowaniu się na stronę. W systemie takie konta są przedstawione specyficzną informacją w pozycji lastvisitDate - 0000-00-00 00:00:00.
Takie konta nie są objęte działaniem w/w pluginów i praktycznie "wiszą", niepotrzebnie obciążając bazę danych i psując statystyki.

Zastanawiam się nad znalezieniem sposobu by w podobnie jak w dwóch wcześniej pokazanych przykładach kasować takie "martwe dusze" po jakimś ustalonym przedziale czasowym, np. po tygodniu od daty rejestracji, która jako registerDate jest w systemie w tych przypadkach odnotowana.

Reasumując:
Jak dostosować kod używany we wcześniejszych przypadkach, by dzięki jego użyciu dało się usuwać po tygodniu od momentu aktywowanej rejestracji konta osób, które nigdy się nie zalogowały?

Jola
22-02-2011, 20:45
Przetestuj takie zapytanie:

$query = "SELECT u.id AS uid, a.id AS aid FROM #__users AS u"
. "\n LEFT JOIN #__core_acl_aro AS a ON a.value = u.id"
. "\n WHERE DATE_ADD(u.registerDate, INTERVAL $days DAY) < NOW() AND block = 0 AND u.lastvisitDate = '0000-00-00 00:00:00' AND u.gid NOT IN(23,24,25) AND u.id NOT IN($excludes)"; :)

GrzesiekP
22-02-2011, 22:11
Spróbuję to jutro zebrać w całość i jakoś ładnie zapakować, bo mnie też taki dodatek się przyda :)

@alex51
Ad. 2,3 -> tu oczywiście chodzi o zarejestrowanych i potwierdzonych, tak?

alex51
23-02-2011, 08:02
Jolu, dziękuję bardzo, jesteś jak zawsze nieoceniona.
@GrzesiekP - oba dodatki niedługo będą do pobrania w naszej plikowni, a na razie wstawiam je na swój serwer:
- usuń nielogujących się nigdy od czasu zarejestrowania (http://alex51.funpic.de/joomla/usun_nielogujacych.zip)
- usuń nie odwiedzających przez określony czas (http://alex51.funpic.de/joomla/usun_nieodwiedzajacych.zip)

GrzesiekP
24-02-2011, 20:55
Dzień opóźnienia, ale udało się (chociaż nie było łatwo :P ):

ZAPRASZAM
gp Prune Inactive Users - usuwanie zbędnych użytkowników :) (http://forum.joomla.pl/showthread.php?49722-gp-Prune-Inactive-Users-usuwanie-zb%C4%99dnych-u%C5%BCytkownik%C3%B3w-))

Speed_zone
27-02-2011, 01:34
Witam serdecznie,
Szukam podobnego dodatku, mianowicie, który by informował użytkownik drogą mailową, że nie logował się na konto przez załóżmy tydzień czasu.
Lub, gdy nie aktywował konta, po tygodniu dostał maila z przypomnieniem,

Wiem, że ktoś napisał dodatek który usuwa konta. Jednak wolałbym "grać fair-play" z userami i informować ich o takim fakcie.
Z góry dziękuję za pomoc.

msm
11-04-2011, 15:44
Witam ponownie, czy jest ktoś chętny do pomocy przy wykonaniu takiej funkcjonalności o której pisałem w pierwszym poście. Czyli data po której konto zostanie zablokowane a nie skasowane.

msm

DannyM
28-04-2011, 11:47
wiecie jak taki plugin moze obciazyc strone?
Prosciej jest napisac cos zewnetrznego odpalanego cornem np. raz dziennie lub tygodniowo

Gall Anonim
28-04-2011, 11:50
@DannyM wiesz jak zagmatwałeś w głowie koledze?
@msm - poszukaj jednak na JED - coś mi śmignęło jednak ostatnio w tym temacie - tyle że były to płatności kredytami dostępu na czas określony.
Pzdr

DannyM
28-04-2011, 11:56
@DannyM wiesz jak zagmatwałeś w głowie koledze?
@msm - poszukaj jednak na JED - coś mi śmignęło jednak ostatnio w tym temacie - tyle że były to płatności kredytami dostępu na czas określony.
Pzdr

sorrki ale jakos cie nie zrozumialem
Wiesz patnosci karta na (rebilling) czas okreslony to WYSOCE ryzykowny temat (dla firmy obsługującej oraz klienta) i malo jaka firma chce sie tego podejmowac.
Ostatnio pisalem cos takiego i wiem co mowie ;)