güzel bir fonksiyon olmasına rağmen kimi yerlerde insanın başını ağrıtabiliyor,
mesela fake_user_delete özelliğini kaldırıp üyeleri silmesini isterseniz ve ayarları yanlış yaparsanız gidiyor...
mesela forumu ziyaret etmeyen üyeleri sil seçeneği...
eğer benim gibi rakamı 30 gün derseniz üye sayınızın 4/3 ünü kaybedebilirsiniz..
tedbir olarak
seçeneğinin önüne
- Kod: Tümünü seç
$deletion_time = $board_config['admin_auto_delete_days'] * 86400;
$deletion_time_inactive = $board_config['admin_auto_delete_days_inactive'] * 86400;
$deletion_time_no_post = $board_config['admin_auto_delete_days_no_post'] * 86400;
bu sorguyu ekliyoruz
- Kod: Tümünü seç
if ($board_config['admin_auto_delete_days_inactive'] < 120 )
{
// bir güvenlik güncellemesi, hata bile olsa 120 günü doldurmamış üyeler silinemez...
$board_config['admin_auto_delete_days_inactive'] = 120;
}
böylece yanlış da ayarlamış olsanız son 120 gün içinde mesaj yazmamış üyeleriniz silinmeyecektir...
ikinci özellik ise mesaj yazmamış üyelerle ilgili... kişi mesaj yazmamış fakat okuyor olabilemez mi? oluyor...
onları da korumaya almak için
- Kod: Tümünü seç
$sql = 'SELECT user_id, username, user_regdate, user_posts FROM ' . USERS_TABLE . '
WHERE user_id <> ' . ANONYMOUS . "
AND user_posts = 0
$fake_delete_sql
HAVING (user_regdate + $deletion_time_no_post) < " . time();
sorgusunu aşağıdaki ile değiştiriyoruz...
- Kod: Tümünü seç
$sql = 'SELECT user_id, username, user_lastvisit, user_posts FROM ' . USERS_TABLE . '
WHERE user_id <> ' . ANONYMOUS . "
AND user_posts = 0
$fake_delete_sql
HAVING (user_lastvisit + $deletion_time_no_post) < " . time();
tabii bu kadarcık koruma yetmez en iyisi buna da bir aylık bir sınırı otomatik koymamız lazım...
yukarda eklediğimiz kontrol sorgusunun altına şunu da ekleyelim
- Kod: Tümünü seç
if ($board_config['admin_auto_delete_days_no_post'] < 30 )
{
// bir güvenlik güncellemesi, hata bile olsa 30 gündür forumu ziyaret etmemiş üyeler, mesaj yazmamışsalar bile silinemez...
$board_config['admin_auto_delete_days_no_post'] = 30;
}
peki bunun için kişinin kayıt tarihi ile bizim girdiğimiz süre arasındaki tarihi almak ne kadar doğru? çünkü kişiyi biz
cezalandırmak için pasif etmiş olabiliriz? bu durumda en basit şekliyle iki şeyi mantık olarak üretebiliriz...
kişi hesabını aktif etmemişse ya son ziyaret tarihi olmayacaktır veya kayıt tarihiyle aynı olacaktır?
acaba öyle mi?
kişi üyeliğini aktif edene kadar ziyaret tarihi oluşmuyor... bundan yararlanarak yeni bir kontrol daha eklemek lazım...
mesela üye son ziyaret tarihi 2 den küçük ise..
çünkü veritabanında ziyaret etmemiş üyenin kayıt tarihi: 1 olarak görünüyor...
tabii bu yeni bir değişken demek, o durumda az önce sql sorgusunda kullanılmış fonksyionu kullanalım...
diyelim ki üyenin son ziyaret tarihi baktığımız şu zaman değil ise...
bu imkansız olacağına göre yeni sql sorgusu şöyle oluşuyor
....
işin özü, fonksiyonun bu kısmı zaten localde çalışıtıramadık ve daha da uğraşmayı gereksiz görüyorum, ilk iki kısım bana yetiyor..