Like (модуль phpFOX 3)

Форум поддержки движка социальной сети phpFOX.
Аватара пользователя
Slash
Администратор
Сообщения: 2122
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 75 раз

Like (модуль phpFOX 3)

Сообщение Slash » Вт мар 08, 2016 8:45 pm

Как же без этого модуля? Какая социальная сеть без лайков? Не помню таких, хотя не много та я их и знаю.
В общем данный модуль позволяет лайкнуть любую запись на всем сайте: блог, комментарий, сообщение на форуме, фотографию, видео и так далее, можно лайкнуть даже то, что кто та обновил свою аватарку. В PHPFOX 3 есть возможность, как лайкнуть канал, так его дизлакнуть, но дизлайк я отключил, а лайк перевел, как Плюс. Нажав на Плюс, под каналом появится маленькая аватарка лайкнувшего пользователя, а слово Плюс сменится на Минус, то есть если пользователь вдруг передумал и ему канал больше не нравится он может забрать свой голос, отрицательно это на канал не повлияет.

Я набросал инструмент для зачистки таблицы лайков phpfox_like, так как разработчики во многих местах (почти везде) не предусмотрели возможность удаления записей из этой таблицы, вместе с удаляемым каналом. Значит, создаем файл tool.php, с таким содержимым:

Код: Выделить всё

<html> 
<head>
    <meta charset="utf-8">
    <title>Поиск лишних записей</title>
</head>
<body>

<?php
# Ошибки скрипта на экране
ini_set('display_errors', 'On');
error_reporting(E_ALL);

# Ключ для включения phpFox
define('PHPFOX', true);

include('include/setting/server.sett.php');

$connect = mysqli_connect($_CONF['db']['host'], $_CONF['db']['user'], $_CONF['db']['pass'], $_CONF['db']['name']);
if (!$connect)
{
    echo 'Ошибка подключения MySQL: ' . mysqli_connect_error($connect);
    exit;
}

if (isset($_GET['del']))
{
    if (!$_GET['del'])
    {
        echo 'Ошибка GET.<br />';
    }
    else
    {
        $q = 'DELETE FROM phpfox_like WHERE like_id = ' . $_GET['del'];
        $r = mysqli_query($connect, $q);
        if (!$r)
        {
            echo 'Ошибка MySQL: ' . mysqli_error($connect) . '<br />';
        }
        else
        {
            echo 'Запись успешно удалена!<br />';            
        }
    }

    echo '<a href="tool.php">Продолжить проверку</a>.';
    exit;
}

$q = 'SELECT * FROM phpfox_like';
$r = mysqli_query($connect, $q);

$list = array();
while($row = mysqli_fetch_assoc($r))
{
    $list[] = $row;
}

echo '---------------<br />';
echo 'Проверка таблицы <strong>phpfox_like</strong><br />';
echo 'Всего записей: <strong>' . count($list) . '</strong><br />';
echo '---------------<br />';

# Удалять сразу (true - да | false - нет)
$allow = false;
$yes   = 0;
$del   = array();
foreach ($list as $value)
{
    # Комменты
    if ($value['type_id'] == 'feed_mini')
    {
        $q = 'SELECT * FROM phpfox_comment WHERE comment_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
            
        }        
    }
    
    # Видео
    else if ($value['type_id'] == 'video')
    {
        $q = 'SELECT * FROM phpfox_video WHERE video_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }

    # Фото
    else if ($value['type_id'] == 'photo')
    {
        $q = 'SELECT * FROM phpfox_photo WHERE photo_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }

    # Сообщение форума
    else if ($value['type_id'] == 'forum_post')
    {
        $q = 'SELECT * FROM phpfox_forum_post WHERE post_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }

    # Музыка
    else if ($value['type_id'] == 'music_song')
    {
        $q = 'SELECT * FROM phpfox_music_song WHERE song_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }
    
    # Страницы
    else if ($value['type_id'] == 'pages')
    {
        $q = 'SELECT * FROM phpfox_pages WHERE page_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }

    # Фото пользователей
    else if ($value['type_id'] == 'user_photo')
    {
        $q = 'SELECT * FROM phpfox_photo WHERE photo_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }

    # Блог
    else if ($value['type_id'] == 'blog')
    {
        $q = 'SELECT * FROM phpfox_blog WHERE blog_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }

    # Комменты страницы
    else if ($value['type_id'] == 'pages_comment')
    {
        $q = 'SELECT * FROM phpfox_pages_feed_comment WHERE feed_comment_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }
    
    # Событие
    else if ($value['type_id'] == 'event')
    {
        $q = 'SELECT * FROM phpfox_event WHERE event_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }
    
    # Статус пользователя
    else if ($value['type_id'] == 'user_status')
    {
        $q = 'SELECT * FROM phpfox_user_status WHERE status_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }

    # Фотоальбомы
    else if ($value['type_id'] == 'photo_album')
    {
        $q = 'SELECT * FROM phpfox_photo_album WHERE album_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }

    # Ссылки
    else if ($value['type_id'] == 'link')
    {
        $q = 'SELECT * FROM phpfox_link WHERE link_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }

    # Опросы
    else if ($value['type_id'] == 'poll')
    {
        $q = 'SELECT * FROM phpfox_poll WHERE poll_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }
    
    # Друзья
    else if ($value['type_id'] == 'friend')
    {
        $q = 'SELECT * FROM phpfox_friend WHERE friend_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }
    
    # Custom Relation
    else if ($value['type_id'] == 'custom_relation')
    {
        $q = 'SELECT * FROM phpfox_custom_relation_data WHERE relation_data_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }    

    # Custom
    else if ($value['type_id'] == 'custom')
    {
        $q = 'SELECT * FROM phpfox_feed WHERE type_id = \'custom\' AND item_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }    
    
    # Подарки
    else if ($value['type_id'] == 'feed_egift')
    {
        $q = 'SELECT * FROM phpfox_feed WHERE type_id = \'feed_egift\' AND item_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }
    
    # Коммент на стене пользователя
    else if ($value['type_id'] == 'feed_comment')
    {
        $q = 'SELECT * FROM phpfox_feed_comment WHERE feed_comment_id = ' . $value['item_id'];
        $r = mysqli_query($connect, $q);
        if (mysqli_num_rows($r) > 0)
        {
            $yes++;            
            $like = mysqli_fetch_assoc($r);
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * Yes | Лайков: ' . $like['total_like'] . '<br />';
        }
        else
        {
            $del[] = $value['like_id'];            
            echo $value['like_id'] . ' | ' . $value['type_id'] . ': ' . $value['item_id'] . ' * No | <a href="tool.php?del=' . $value['like_id'] . '">Удалить</a><br />';
        }        
    }
    
    else
    {
        echo '<font color="#FF0000">' . $value['like_id'] . ' | <strong>' . $value['type_id'] . '</strong>: ' . $value['item_id'] . '</font><br />';
    }    
}

echo '---------------<br />';
echo 'Всего записей <strong>' . count($list) . '</strong> | Верные записи: <strong>' . $yes . '</strong> | Мусор: <strong>' . count($del) . '</strong> | +/-: <strong>' . ($yes + count($del)) . '</strong><br />';
echo '---------------<br />';

if ($allow && $del)
{
    foreach ($del as $d)
    {
        $q = 'DELETE FROM phpfox_like WHERE like_id = ' . $d;
        $r = mysqli_query($connect, $q);
        if (!$r)
        {
            echo 'Ошибка MySQL: ' . mysqli_error($connect) . '<br />';
        }
        else
        {
            echo 'Запись ' . $d . ' успешно удалена!<br />';            
        }    
    }
}
?>

</body>
</html>
Заливаем файл в корень сайта и переходим по адресу: site.ru/tool.php, появится список всех записей, которые есть в таблице phpfox_like, каждая запись будет иметь пометку Yes | No (верная запись или мусор). Если запись не используется, то есть канал был удален, а записи о его лайках остались, то рядом с информацией будет ссылка Удалить, нажмете и мусорная запись будет стерта. Так же сценарий инструмента имеет возможность удалить весь мусор сразу, для этого необходимо строку:

Код: Выделить всё

$allow = false; 
заменить на:

Код: Выделить всё

$allow = true; 
И все не используемые записи будут удалены при следующем запуске инструмента. Будет составлен список о удаляемых записях.

После проверки таблицы, файл tool.php, следует удалить.

Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2122
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 75 раз

Re: Like (модуль phpFOX 3)

Сообщение Slash » Сб авг 06, 2016 11:05 am

Информация о том, что кто та подружился на стене появляется сразу с кнопкой МИНУС, будто вы уже лайкнули эту новость, хотя на самом деле это не так. Я исправил это так: открываю: module/friend/include/service/callback.class.php, нахожу:

Код: Выделить всё

        $iIsLiked = $this->database()->select('COUNT(*)')
            ->from(Phpfox::getT('like'))
            ->where('item_id = ' . $aFeed['item_id'] . ' AND user_id = ' . Phpfox::getUserId())
            ->execute('getSlaveField');
И меняю на:

Код: Выделить всё

        $iIsLiked = $this->database()
            ->select('COUNT(*)')
            ->from(Phpfox::getT('like'))
            ->where('type_id = \'friend\' AND item_id = ' . $aFeed['item_id'] . ' AND user_id = ' . Phpfox::getUserId())
            ->execute('getSlaveField');
Вот и все. Теперь если вы не лайкали чью то дружбу, то и кнопки правильно отображаются.

Ответить Пред. темаСлед. тема

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость