Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Русский IkonBoard »   Форум поддержки русской версии IkonBoard »   Блокировка дублирования уведомлений
RSS

Блокировка дублирования уведомлений


<<Назад  Вперед>>Модератор: GramПечать
 
Ghost
Новичок


Всего сообщений: 14
Рейтинг пользователя: 0





Дата регистрации на форуме:
22 фев. 2005
Извините за оффтопик, но новую тему форум мне открыть не дает. Я хотел спросить, как можно избежать многочисленного добавления email пользователя в список для напоминания об обновлениях? Дело в том, что некоторые подписываются на одну и ту же тему раз 10 и потом получают столько же напоминаний по каждому новому сообщению. Как этого можно избежать?
Эта тема была выделена из темы "Хаки для register.cgi" (23 февраля 2005 19:40)
Gram
Модератор раздела

Gram
Откуда: здешний
Всего сообщений: 566
Рейтинг пользователя: 14

Репутация пользователя: 1




Дата регистрации на форуме:
23 июля 2003
Ну для начала надо сказать, что в последней версии Ikonboard'a несколько напоминаний не приходит (даже если пользователь несколько раз подпишется на тему). А вообще то, у себя я фиксил данную штуку таким образом:

Открываем post.cgi и ищем код (3 раза должен повторяться)

if ($emailfunctions eq "on") { # start mail

            

            $filetoopen = "$ikondir" . "forum$inforum/newinfo.mal";

            open (FILE, "$filetoopen");

            @maildata = <FILE>;

            close (FILE);

        

            # Lets sort the data (there's no point adding the new requestee at this point!)

        

            foreach $dataline (@maildata) {

                ($postersname,$posteremailaddress) = split(/\|/,$dataline);

                

                if ($lastemailsent ne $postersname) {

                

                    $filename = $postername;

                    $filename =~ s/ /_/g;

                    $filetoopen = "$ikondir" . "members/$filename.ext";

                    $filetoopen = stripMETA($filetoopen);

                    if (-e $filetoopen) {

                       $filetoopen = stripMETA($filetoopen);

                       open (FILE, "$filetoopen");

                       $buffer = <FILE>;

                      close (FILE);

                      ($allowmailsend,$fullmsgtext,$trash)=split(/\|/,$buffer);

                    }

                    else {$allowmailsend = "yes"; }  

                

                # No point in getting your own post emailed to you, so...

                

                    if ($inmembername eq $postersname || $allowmailsend eq "no") { next; }

                

                    # If not,carry on!

                    

                        $output .= "\n\n<!-- Processing Emails --> \n\n";

              

                        $toemail = $posteremailaddress;

                        chomp $toemail;

                        $toemail =~ s/\\//g;

                        $fromemail = $adminemail_out;

                        chomp $fromemail;

                        $fromemail =~ s/\\//g;



Заменяем на

if ($emailfunctions eq "on") {

            

            if ($innotify eq "yes" && $userregistered ne "no") {

                $filetomake = "$ikondir" . "forum$inforum/$newthreadnumber.mal";

                $filetomake = &stripMETA($filetomake);

                open (FILE, ">$filetomake");

                flock (FILE, 2);

                print FILE "$inmembername|$emailaddress\n";

                close (FILE);

            }            

            

            $filetoopen = "$ikondir" . "forum$inforum/newinfo.mal";

            $filetoopen = &stripMETA($filetoopen);

            open (FILE, "<$filetoopen");

            @maildata = <FILE>;

            close (FILE);

        

            foreach $dataline (@maildata) {

                ($postersname,$posteremailaddress) = split(/\|/,$dataline);

                

                if (!$sended{$postersname}) {

                            

                        &getmember($postersname);  

                            

                        if ($inmembername eq $postersname || $allowmailsend eq "no" || $userregistered eq "no") { next; }

                    

                        $output .= "\n\n<!-- Processing Emails --> \n\n";

              

                        $toemail = $emailaddress;

                        chomp $toemail;

                        $toemail =~ s/\\//g;

                        $fromemail = $adminemail_out;

                        chomp $fromemail;

                        $fromemail =~ s/\\//g;


Ищем код (3 раза должен повторяться)

$lastemailsent = "$postersname";

И заменяем везде на

$sended{$postersname}=1;

Этим мы убиваем двух зайцев:
1. Уведомление приходит только одно.
2. Уведомление приходит на мыло, указанное в профиле в текущий момент времени.




Спасибо - попробую так и сделать.
Ghost
Новичок


Всего сообщений: 14
Рейтинг пользователя: 0





Дата регистрации на форуме:
22 фев. 2005
Что-то не работает - скрипт дает добавлять себя в список несколько раз + напоминания об обновлениях вообще перестали приходить...
Gram
Модератор раздела

Gram
Откуда: здешний
Всего сообщений: 566
Рейтинг пользователя: 14

Репутация пользователя: 1




Дата регистрации на форуме:
23 июля 2003
Ghost, выложи свой post.cgi, посмотрим.

(переименуй в post.txt и кинь сюда ссылку)
Ghost
Новичок


Всего сообщений: 14
Рейтинг пользователя: 0





Дата регистрации на форуме:
22 фев. 2005
Выслал вам на мыло. :)
Gram
Модератор раздела

Gram
Откуда: здешний
Всего сообщений: 566
Рейтинг пользователя: 14

Репутация пользователя: 1




Дата регистрации на форуме:
23 июля 2003
Понял в чем проблема. В общем, нужно найти вот этот код (строка 1669):

if ($innotify eq "yes" && $userregistered ne "no") {

$filetomake = "$ikondir" . "forum$inforum/$newthreadnumber.mal";

$filetomake = &stripMETA($filetomake);

open (FILE, ">$filetomake");

flock (FILE, 2);

print FILE "$inmembername|$emailaddress\n";

close (FILE);

}



$filetoopen = "$ikondir" . "forum$inforum/newinfo.mal";

$filetoopen = &stripMETA($filetoopen);

open (FILE, "<$filetoopen");

@maildata = <FILE>;

close (FILE);



и заменить на
$filetoopen = "$ikondir" . "forum$inforum/$intopic.mal";

            open (FILE, "<$filetoopen");

            @maildata = <FILE>;

            close (FILE);

            $found = 0;

            if ($innotify eq "yes" && $userregistered ne "no") {

              

                foreach (@maildata) {

                    ($curname,$curemail) = split(/\|/,$_);

                    if ($curname eq $inmembername) { $found=1; last; }

                }

                

                if (!$found) {

                     open (FILE,">>$filetoopen");

                     flock (FILE, 2);

                     print FILE ("$inmembername|$emailaddress\n");

                     close (FILE);

                }

             }

Тогда и рассылки будут приходить и дублирования не будет и одинаковых записей в файле *.mal тоже не будет.
<<Назад  Вперед>>Модератор: GramПечать
Объединенный Открытый Проект »   Русский IkonBoard »   Форум поддержки русской версии IkonBoard »   Блокировка дублирования уведомлений
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.0317. Количество выполненных запросов: 18, время выполнения запросов 0.0173