Помощь запретить голосование за себя

Тема в разделе "DLE", создана пользователем SPoX, 4 окт 2015.

Информация :
Актуальная версия DataLife Engine 11.1
( Final Release v.11.1 | Скачать DataLife Engine | Скачать 11.1 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 10.0 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Модераторы: killoff
  1. SPoX

    SPoX

    Регистр.:
    19 апр 2014
    Сообщения:
    172
    Симпатии:
    24
    здравствуйте друзья
    у меня на сайте (10.5 версия) установлено модуль рейтинга EasyLike 1.4.1
    все работает отлично но есть одно но как в этом модуле запретить голосование за себя?



    за ранее спасибо всем за помощь
     
  2. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.034
    Симпатии:
    2.035
    Чисто в теории...

    В файле /engine/ajax/easylike.php найти:
    PHP:
    if (count(explode('.'$ip)) == ) {
        
    // Если получен IP посетителя - работаем.
        
    if (!$like_id) {
            
    // Если записи о лайках нет - добавим.
            
    $db->query("INSERT INTO " PREFIX "_easylike_count ($col, likes) VALUES ($id, '1')");
            
    $easyLike setLog($col$likes['likes'], $id$name$ip);
            
    sendNotify($id$name$is_comment);
        } else {
            
    // Если запись есть, то проверяем, не лайкал ли этот посетитель.
            
    $select "SELECT {$col} FROM " PREFIX "_easylike_log WHERE {$col} = $id AND {$where}";
            
    $row $db->super_query($select);

            if (!
    $row[$col]) {
                
    // Если не лайкал - работаем.
                
    $db->query("UPDATE " PREFIX "_easylike_count SET likes=likes+1 WHERE {$col} ='".$id."'");
                
    $easyLike setLog($col$likes['likes'], $id$name$ip);
                
    sendNotify($id$name$is_comment);
            } else {
                
    // Если лайкал - шлём ему привет :).
                
    $easyLike ':-)';
            }
        }
    }
    Заменить на:
    PHP:
    $user_id = -1;

    if (
    count(explode('.'$ip)) == ) {
        
    // Если получен IP посетителя - работаем.
        
    if (!$like_id) {
            
    // Если записи о лайках нет - добавим.
            
    $db->query("INSERT INTO " PREFIX "_easylike_count ($col, likes) VALUES ($id, '1')");
            
    $easyLike setLog($col$likes['likes'], $id$name$ip);
            
    sendNotify($id$name$is_comment);
        } else {
            
    // Если запись есть, то проверяем, не лайкал ли этот посетитель.
            
    $select "SELECT {$col} FROM " PREFIX "_easylike_log WHERE {$col} = $id AND {$where}";
            
    $row $db->super_query($select);

            if (
    $member_id['user_group'] != 5) {
                if (
    $col == 'news_id') {
                    
    $select "SELECT `user_id` FROM " PREFIX "_post_extras WHERE {$col} = $id";
                    
    $user_id $row $db->super_query($select);
                } elseif {
                    
    $select "SELECT `user_id` FROM " PREFIX "_comments WHERE {$col} = $id";
                    
    $user_id $row $db->super_query($select);
                }
            }

            if (!
    $row[$col] && $member_id['user_id'] != $user_id) {
                
    // Если не лайкал - работаем.
                
    $db->query("UPDATE " PREFIX "_easylike_count SET likes=likes+1 WHERE {$col} ='".$id."'");
                
    $easyLike setLog($col$likes['likes'], $id$name$ip);
                
    sendNotify($id$name$is_comment);
            } else {
                
    // Если лайкал - шлём ему привет :).
                
    $easyLike ':-)';
            }
        }
    }
    Не проверял работоспособность, сделано в блокноте. Если не поможет - завтра поправлю до работоспособного состояния
     
    killoff нравится это.
  3. SPoX

    SPoX

    Регистр.:
    19 апр 2014
    Сообщения:
    172
    Симпатии:
    24
    пока что выдает ошибку при нажатии на лайк

     
  4. Gameer

    Gameer Постоялец Нарушитель

    Регистр.:
    25 апр 2014
    Сообщения:
    99
    Симпатии:
    65
    Нужно передавать автора комментария или новости и сравнивать с member_id вот и все.
     
  5. SPoX

    SPoX

    Регистр.:
    19 апр 2014
    Сообщения:
    172
    Симпатии:
    24
    здесь кто меня знает все знают что в PHP мои возможности равняется к нулю
    если поможете мне буду благодарен а то сам по себе я не очень далеко пойду
    ну если работа сложная готов заплатить
     
  6. Gameer

    Gameer Постоялец Нарушитель

    Регистр.:
    25 апр 2014
    Сообщения:
    99
    Симпатии:
    65
    1) Открыть /engine/modules/easylike/easylike.php найти (2 РАЗА) :
    Код:
    data-'
    Рядом вставить :
    Код:
    data-avtor="' . $author . '" 
    2) Скрипт от модуля
    HTML:
    // Модуль Easy Like by ПафНутиЙ
    $(document).on('click touchstart', '.easylike_count', function (event) {
        event.preventDefault();
        var $this = $(this),
            news_id = $this.data('news_id'),
            comment_id = $this.data('comment_id'),
            count = $this.data('count');
        // показываем прелоадер
        $this.html('<span class="easylike_load"><i class="easylike_circles ec1"></i><i class="easylike_circles ec2"></i><i class="easylike_circles ec3"></i></span>');
        $.post(dle_root + "engine/ajax/easylike.php", {
            news_id: news_id,
            comment_id: comment_id,
            count: count
        }, function (data) {
            if (data > count + 1) {
                // Если вдруг запись лайкнет кто-то ещё пока пользователь смотрит страницу - скажем ему об этом, пусть знает.
                data = (data) + '<span title="Пока вы смотрели страницу, запись понравилась ещё кому-то.">(' + (data - count - 1) + ')</span>';
            };
            $this.html(data);
        });
    });
    Заменить на :
    HTML:
    // Модуль Easy Like by ПафНутиЙ
    $(document).on('click touchstart', '.easylike_count', function (event) {
        event.preventDefault();
        var $this = $(this),
            news_id = $this.data('news_id'),
            comment_id = $this.data('comment_id'),
            count = $this.data('count'),
            avtor = $this.data('avtor');
        // показываем прелоадер
        $this.html('<span class="easylike_load"><i class="easylike_circles ec1"></i><i class="easylike_circles ec2"></i><i class="easylike_circles ec3"></i></span>');
        $.post(dle_root + "engine/ajax/easylike.php", {
            news_id: news_id,
            comment_id: comment_id,
            count: count,
            avtor : avtor
        }, function (data) {
            if (data > count + 1) {
                // Если вдруг запись лайкнет кто-то ещё пока пользователь смотрит страницу - скажем ему об этом, пусть знает.
                data = (data) + '<span title="Пока вы смотрели страницу, запись понравилась ещё кому-то.">(' + (data - count - 1) + ')</span>';
            };
            $this.html(data);
        });
    });
    3) Открыть /engine/ajax/easylike.php найти :
    Код:
    $ip = $db->safesql($_SERVER['REMOTE_ADDR']);
    Ниже вставить :
    PHP:
    $avtor $db->safesql(strip_tags(stripslashes(trim($avtor))));
    Далее найти :
    PHP:
    if (count(explode('.'$ip)) == ) {
    Заменить на :
    PHP:
    if (count(explode('.'$ip)) == ) {
    if(
    $avtor != $member_id['name']) {
    Далее найти :
    PHP:
    } else {
        
    // Если IP не получили (бывает такое с ipv6 :)) - показываем грустный смайлик.
    Заменить на :
    PHP:
    }
    else
    $easyLike 'Нельзя голосовать за самого себя!';
    4) После изменить подключение :
    Код:
    {include file="engine/modules/easylike/easylike.php?news_id={news-id}"}
    На :
    Код:
    {include file="engine/modules/easylike/easylike.php?news_id={news-id}&author={login}"}
    И для комментариев :
    Код:
    {include file="engine/modules/easylike/easylike.php?comment_id={id}"}
    Заменить на :
    Код:
    {include file="engine/modules/easylike/easylike.php?comment_id={id}&author={login}"}
     
    Последнее редактирование: 5 окт 2015
  7. SPoX

    SPoX

    Регистр.:
    19 апр 2014
    Сообщения:
    172
    Симпатии:
    24
    что-то не получилось
    когда голосуешь за свой коммент без проблем лайкает и если нажать заново пишет уже :)

    и так тоже с новостями
     
  8. Gameer

    Gameer Постоялец Нарушитель

    Регистр.:
    25 апр 2014
    Сообщения:
    99
    Симпатии:
    65
    Все должно работать, смотрите у себя. Почистье кэш
     
  9. SPoX

    SPoX

    Регистр.:
    19 апр 2014
    Сообщения:
    172
    Симпатии:
    24
    почистил кеш в браузере + в ДЛЕ
    сделал все по инструкции как вы написали, но не работает
    можете проверить у себя
     
  10. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.034
    Симпатии:
    2.035
    Сори, в моём случае заменить на (вместо else написал elseif) :

    PHP:
    $user_id = -1;

    if (
    count(explode('.'$ip)) == ) {
        
    // Если получен IP посетителя - работаем.
        
    if (!$like_id) {
            
    // Если записи о лайках нет - добавим.
            
    $db->query("INSERT INTO " PREFIX "_easylike_count ($col, likes) VALUES ($id, '1')");
            
    $easyLike setLog($col$likes['likes'], $id$name$ip);
            
    sendNotify($id$name$is_comment);
        } else {
            
    // Если запись есть, то проверяем, не лайкал ли этот посетитель.
            
    $select "SELECT {$col} FROM " PREFIX "_easylike_log WHERE {$col} = $id AND {$where}";
            
    $row $db->super_query($select);

            if (
    $member_id['user_group'] != 5) {
                if (
    $col == 'news_id') {
                    
    $select "SELECT `user_id` FROM " PREFIX "_post_extras WHERE {$col} = $id";
                    
    $user_id $row $db->super_query($select);
                } elseif {
                    
    $select "SELECT `user_id` FROM " PREFIX "_comments WHERE {$col} = $id";
                    
    $user_id $row $db->super_query($select);
                }
            }

            if (!
    $row[$col] && $member_id['user_id'] != $user_id) {
                
    // Если не лайкал - работаем.
                
    $db->query("UPDATE " PREFIX "_easylike_count SET likes=likes+1 WHERE {$col} ='".$id."'");
                
    $easyLike setLog($col$likes['likes'], $id$name$ip);
                
    sendNotify($id$name$is_comment);
            } else {
                
    // Если лайкал - шлём ему привет :).
                
    $easyLike ':-)';
            }
        }
    }
    Gameer, не нужно передавать автора, мы же уже подключаем:
    require_once ENGINE_DIR . '/modules/sitelogin.php';
    Значит по кукам ID автора узнаем...

    Разве что вообще скрыть кнопки... Но тогда опять же ничего не мешает подключить sitelogin.php
    Получать данные из GET - самая плохая идея.. Твою проверку обойти раз плюнуть - я могу подделать свой ID