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

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

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

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



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

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


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


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





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

Gram
Откуда: здешний
Всего сообщений: 569
Рейтинг пользователя: 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
Откуда: здешний
Всего сообщений: 569
Рейтинг пользователя: 14

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




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

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


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





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

Gram
Откуда: здешний
Всего сообщений: 569
Рейтинг пользователя: 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.1879. Количество выполненных запросов: 18, время выполнения запросов 0.0924
Rambler's Top100