21.09.2017 05:33:48 pm
Как же без этого модуля? Какая социальная сеть без лайков? Не помню таких, хотя не много та я их и знаю.
В общем данный модуль позволяет лайкнуть любую запись на всем сайте: блог, комментарий, сообщение на форуме, фотографию, видео и так далее, можно лайкнуть даже то, что кто та обновил свою аватарку. В PHPFOX 3 есть возможность, как лайкнуть канал, так его дизлакнуть, но дизлайк я отключил, а лайк перевел, как Плюс. Нажав на Плюс, под каналом появится маленькая аватарка лайкнувшего пользователя, а слово Плюс сменится на Минус, то есть если пользователь вдруг передумал и ему канал больше не нравится он может забрать свой голос, отрицательно это на канал не повлияет.
Я набросал инструмент для зачистки таблицы лайков phpfox_like, так как разработчики во многих местах (почти везде) не предусмотрели возможность удаления записей из этой таблицы, вместе с удаляемым каналом. Значит, создаем файл tool.php, с таким содержимым:
Заливаем файл в корень сайта и переходим по адресу: site.ru/tool.php, появится список всех записей, которые есть в таблице phpfox_like, каждая запись будет иметь пометку Yes | No (верная запись или мусор). Если запись не используется, то есть канал был удален, а записи о его лайках остались, то рядом с информацией будет ссылка Удалить, нажмете и мусорная запись будет стерта. Так же сценарий инструмента имеет возможность удалить весь мусор сразу, для этого необходимо строку:
заменить на:
И все не используемые записи будут удалены при следующем запуске инструмента. Будет составлен список о удаляемых записях.
После проверки таблицы, файл tool.php, следует удалить.
Информация о том, что кто та подружился на стене появляется сразу с кнопкой МИНУС, будто вы уже лайкнули эту новость, хотя на самом деле это не так. Я исправил это так: открываю: module/friend/include/service/callback.class.php, нахожу:
И меняю на:
Вот и все. Теперь если вы не лайкали чью то дружбу, то и кнопки правильно отображаются.
В общем данный модуль позволяет лайкнуть любую запись на всем сайте: блог, комментарий, сообщение на форуме, фотографию, видео и так далее, можно лайкнуть даже то, что кто та обновил свою аватарку. В 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, следует удалить.
Информация о том, что кто та подружился на стене появляется сразу с кнопкой МИНУС, будто вы уже лайкнули эту новость, хотя на самом деле это не так. Я исправил это так: открываю: 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');
Вот и все. Теперь если вы не лайкали чью то дружбу, то и кнопки правильно отображаются.
- Жалоба