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_json');
require_once('./global.php');

/* DB handle garanti */
if (!isset($db) || !is_object($db))
{
	$db =& $vbulletin->db;
}

/* JSON helper (charset sorunlarına karşı) */
function ft_utf8ize($mixed, $fromCharset)
{
	if (is_array($mixed))
	{
		foreach ($mixed as $k => $v)
		{
			$mixed[$k] = ft_utf8ize($v, $fromCharset);
		}
		return $mixed;
	}

	if (is_string($mixed))
	{
		if (!strcasecmp($fromCharset, 'utf-8'))
		{
			return $mixed;
		}
		if (function_exists('mb_convert_encoding'))
		{
			return @mb_convert_encoding($mixed, 'UTF-8', $fromCharset);
		}

		return utf8_encode($mixed);
	}

	return $mixed;
}

function ft_json_exit($arr)
{
	global $stylevar;

	$fromCharset = 'UTF-8';
	if (!empty($stylevar['charset']))
	{
		$fromCharset = $stylevar['charset'];
	}

	$json = json_encode($arr, JSON_UNESCAPED_UNICODE);
	if ($json === false)
	{
		$arr  = ft_utf8ize($arr, $fromCharset);
		$json = json_encode($arr, JSON_UNESCAPED_UNICODE);
	}

	if (function_exists('ob_get_length') && ob_get_length())
	{
		@ob_clean();
	}

	header('Content-Type: application/json; charset=UTF-8');
	header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
	header('Pragma: no-cache');

	if ($json === false)
	{
		echo json_encode(array(
			'ok'    => 0,
			'error' => 'json_encode_failed',
			'code'  => json_last_error()
		));
		exit;
	}

	echo $json;
	exit;
}

/*
  Visibility:
  1 = Forum Üyeleri
  3 = Sadece Arkadaşlar
*/

function ft_story_get_buddy_ids($userid)
{
	global $db;

	static $cache = array();

	$userid = intval($userid);
	if ($userid < 1)
	{
		return array();
	}
	if (isset($cache[$userid]))
	{
		return $cache[$userid];
	}

	$row = $db->query_first("
		SELECT buddylist
		FROM usertextfield
		WHERE userid = $userid
	");

	$list = array();
	if (!empty($row['buddylist']))
	{
		$parts = preg_split('/[\s,]+/', trim($row['buddylist']));
		if (is_array($parts))
		{
			foreach ($parts as $id)
			{
				$id = intval($id);
				if ($id > 0)
				{
					$list[$id] = 1;
				}
			}
		}
	}

	$cache[$userid] = $list;
	return $list;
}

function ft_is_on_buddy_list($userid, $buddyid)
{
	$userid  = intval($userid);
	$buddyid = intval($buddyid);
	if ($userid < 1 || $buddyid < 1)
	{
		return false;
	}

	$list = ft_story_get_buddy_ids($userid);
	return !empty($list[$buddyid]);
}

function ft_are_mutual_friends($userA, $userB)
{
	$userA = intval($userA);
	$userB = intval($userB);

	if ($userA < 1 || $userB < 1 || $userA == $userB)
	{
		return false;
	}

	return (ft_is_on_buddy_list($userA, $userB) && ft_is_on_buddy_list($userB, $userA));
}

function ft_can_view_story_visibility($ownerid, $viewerid, $visibility)
{
	$ownerid    = intval($ownerid);
	$viewerid   = intval($viewerid);
	$visibility = intval($visibility);

	// Misafir görmesin
	if ($viewerid < 1)
	{
		return false;
	}

	// Sahibi her zaman görsün
	if ($ownerid == $viewerid)
	{
		return true;
	}

	if ($visibility == 1)
	{
		return true;
	}
	if ($visibility == 3)
	{
		return ft_are_mutual_friends($ownerid, $viewerid);
	}

	return false;
}

/* YouTube: filepath "yt:VIDEOID" -> VIDEOID */
function ft_extract_youtube_id($filepath)
{
	$filepath = trim((string)$filepath);
	if ($filepath === '')
	{
		return '';
	}

	// beklenen format: yt:XXXXXXXXXXX
	if (strpos($filepath, 'yt:') === 0)
	{
		$id = substr($filepath, 3);
		$id = trim($id);
		if (preg_match('~^[A-Za-z0-9_-]{11}$~', $id))
		{
			return $id;
		}
		return '';
	}

	// ileride yanlışlıkla URL saklanmışsa, son şans (çok temel)
	// (MVP’de normalde gerekmez)
	if (preg_match('~([A-Za-z0-9_-]{11})~', $filepath, $m))
	{
		$id = $m[1];
		if (preg_match('~^[A-Za-z0-9_-]{11}$~', $id))
		{
			return $id;
		}
	}

	return '';
}

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

$target_userid = intval($vbulletin->GPC['u']);
if ($target_userid <= 0)
{
	ft_json_exit(array('ok' => 0, 'error' => 'invalid_user'));
}

$viewerid = intval($vbulletin->userinfo['userid']);
if ($viewerid < 1)
{
	ft_json_exit(array('ok' => 0, 'error' => 'not_logged_in'));
}

$now = TIMENOW;

$stories  = array();
$username = '';
$avatar   = '';

$res = $db->query_read("
	SELECT
		s.storyid, s.userid, s.visibility, s.dateline,
		m.filepath,
		m.mediatype,
		u.username, u.avatarrevision, u.avatarid,
		a.avatarpath
	FROM ft_story AS s
	INNER JOIN user AS u ON (u.userid = s.userid)
	INNER JOIN ft_story_media AS m ON (m.storyid = s.storyid)
	LEFT JOIN avatar AS a ON (a.avatarid = u.avatarid)
	WHERE s.userid = $target_userid
	  AND s.state = 1
	  AND s.expiretime > $now
	ORDER BY s.dateline ASC
");

while ($r = $db->fetch_array($res))
{
	if (!ft_can_view_story_visibility($r['userid'], $viewerid, $r['visibility']))
	{
		continue;
	}

	$username = $r['username'];

	// Avatar 1 kere set
	if (!$avatar)
	{
		if (!empty($r['avatarpath']))
		{
			$avatar = $r['avatarpath'];
		}
		else
		{
			$avatar = 'image.php?u=' . $target_userid . '&dateline=' . intval($r['avatarrevision']);
		}
	}

	$mediatype = intval($r['mediatype']);
	$filepath  = (string)$r['filepath'];

	$item = array(
		'storyid'    => intval($r['storyid']),
		'dateline'   => intval($r['dateline']),
		'visibility' => intval($r['visibility']),
		'mediatype'  => $mediatype, // 1=image, 2=video, 4=youtube
		'url'        => $filepath,
		'ownerid'    => intval($r['userid']),
	);

	// YouTube (mediatype=4)
	if ($mediatype === 4)
	{
		$ytid = ft_extract_youtube_id($filepath);
		if ($ytid === '')
		{
			// bozuk kayıt: atla
			continue;
		}
		$item['youtube_id'] = $ytid;
	}

	// Görsel/Video için boş filepath gelirse atla
	if (($mediatype === 1 || $mediatype === 2) && trim($filepath) === '')
	{
		continue;
	}

	$stories[] = $item;
}

if (empty($stories))
{
	ft_json_exit(array('ok' => 0, 'error' => 'no_visible_stories'));
}

ft_json_exit(array(
	'ok'       => 1,
	'userid'   => $target_userid,
	'ownerid'  => $target_userid,
	'username' => $username,
	'avatar'   => $avatar,
	'stories'  => $stories
));

 

Revise this Paste

Parent: 130982
Children: 130984
Your Name: Code Language: