Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so dont bother with any of their useless mail servers here and just use oauth login instead. Thank the nice Russians for causing that. :)

Paste

Pasted as PHP by registered user atmaca ( 3 months ago )
<?php
define('THIS_SCRIPT', 'ft_story_reactors');
require_once('./global.php');

header('Content-Type: application/json; charset=UTF-8');

function ft_story_json_exit($arr)
{
	echo json_encode($arr);
	exit;
}

function ft_story_fail($error)
{
	ft_story_json_exit(array(
		'success' => false,
		'error'   => $error
	));
}

function ft_story_get_valid_reactions()
{
	return array(
		'like'    => '????',
		'dislike' => '????',
		'love'    => '❤️',
		'laugh'   => '????',
		'wow'     => '????',
		'sad'     => '????',
		'angry'   => '????'
	);
}

function ft_story_empty_counts($valid_reactions)
{
	$out = array();
	foreach ($valid_reactions as $k => $v)
	{
		$out[$k] = 0;
	}
	return $out;
}

function ft_story_fetch_reaction_counts($storyid, $db, $valid_reactions)
{
	$counts = ft_story_empty_counts($valid_reactions);
	$total  = 0;

	$result = $db->query_read("
		SELECT reaction, COUNT(*) AS cnt
		FROM " . TABLE_PREFIX . "ft_story_reaction
		WHERE storyid = " . intval($storyid) . "
		GROUP BY reaction
	");

	while ($row = $db->fetch_array($result))
	{
		$reaction = trim($row['reaction']);
		$cnt      = intval($row['cnt']);

		if (isset($counts[$reaction]))
		{
			$counts[$reaction] = $cnt;
			$total += $cnt;
		}
	}

	return array(
		'counts' => $counts,
		'total'  => $total
	);
}

$vbulletin->input->clean_array_gpc('g', array(
	'storyid' => TYPE_UINT,
));

if (intval($vbulletin->userinfo['userid']) < 1)
{
	ft_story_fail('not_logged_in');
}

$storyid = intval($vbulletin->GPC['storyid']);
$userid  = intval($vbulletin->userinfo['userid']);
$db      = $vbulletin->db;

if ($storyid < 1)
{
	ft_story_fail('invalid_story');
}

$story = $db->query_first("
	SELECT storyid, userid, dateline
	FROM " . TABLE_PREFIX . "ft_story
	WHERE storyid = $storyid
	LIMIT 1
");

if (!$story OR empty($story['storyid']))
{
	ft_story_fail('story_not_found');
}

if (intval($story['userid']) !== $userid)
{
	ft_story_fail('no_permission');
}

$valid_reactions = ft_story_get_valid_reactions();
$stats           = ft_story_fetch_reaction_counts($storyid, $db, $valid_reactions);
$items           = array();

$result = $db->query_read("
	SELECT r.userid, r.reaction, r.dateline, u.username
	FROM " . TABLE_PREFIX . "ft_story_reaction AS r
	INNER JOIN " . TABLE_PREFIX . "user AS u ON (u.userid = r.userid)
	WHERE r.storyid = $storyid
	ORDER BY r.dateline DESC
");

while ($row = $db->fetch_array($result))
{
	$reaction_key = trim($row['reaction']);

	$items[] = array(
		'userid'   => intval($row['userid']),
		'username' => $row['username'],
		'reaction' => $reaction_key,
		'emoji'    => (isset($valid_reactions[$reaction_key]) ? $valid_reactions[$reaction_key] : ''),
		'dateline' => intval($row['dateline'])
	);
}

ft_story_json_exit(array(
	'success'         => true,
	'storyid'         => $storyid,
	'reaction_total'  => $stats['total'],
	'reaction_counts' => $stats['counts'],
	'reaction_labels' => $valid_reactions,
	'items'           => $items
));

 

Revise this Paste

Your Name: Code Language: