Like (модуль phpFOX 3)

Форум поддержки движка социальной сети phpFOX.
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

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
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

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');

Вот и все. Теперь если вы не лайкали чью то дружбу, то и кнопки правильно отображаются.

Вернуться в «phpFOX»

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

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