Vergleich inc/class_datacache.php - 1.8.15 - 1.8.37

  Keine Änderungen   Hinzugefügt   Modifiziert   Entfernt
Zeile 51Zeile 51
	 * @var string
*/
public $cache_debug;

	 * @var string
*/
public $cache_debug;

 

/**
* @var array
*/
public $moderators;

/**
* @var array
*/
public $built_moderators;

/**
* @var array
*/
public $moderators_forum_cache;


/**
* Build cache data.


/**
* Build cache data.

Zeile 93Zeile 108
			case "apc":
require_once MYBB_ROOT."/inc/cachehandlers/apc.php";
$this->handler = new apcCacheHandler();

			case "apc":
require_once MYBB_ROOT."/inc/cachehandlers/apc.php";
$this->handler = new apcCacheHandler();

 
				break;
// APCu cache
case "apcu":
require_once MYBB_ROOT."/inc/cachehandlers/apcu.php";
$this->handler = new apcuCacheHandler();
break;
// Redis cache
case "redis":
require_once MYBB_ROOT."/inc/cachehandlers/redis.php";
$this->handler = new redisCacheHandler();

				break;
}

if($this->handler instanceof CacheHandlerInterface)

				break;
}

if($this->handler instanceof CacheHandlerInterface)

		{

		{

			if(!$this->handler->connect())

			if(!$this->handler->connect())

			{

			{

				$this->handler = null;

				$this->handler = null;

			}

			}

		}
else
{
// Database cache
$query = $db->simple_select("datacache", "title,cache");
while($data = $db->fetch_array($query))

		}
else
{
// Database cache
$query = $db->simple_select("datacache", "title,cache");
while($data = $db->fetch_array($query))

			{
$this->cache[$data['title']] = unserialize($data['cache']);
}
}
}


			{
// use native_unserialize() over my_unserialize() for performance reasons
$this->cache[$data['title']] = native_unserialize($data['cache']);
}
}
}


/**
* Read cache from files or db.


/**
* Read cache from files or db.

Zeile 163Zeile 189
				// Fetch from database
$query = $db->simple_select("datacache", "title,cache", "title='".$db->escape_string($name)."'");
$cache_data = $db->fetch_array($query);

				// Fetch from database
$query = $db->simple_select("datacache", "title,cache", "title='".$db->escape_string($name)."'");
$cache_data = $db->fetch_array($query);

				$data = unserialize($cache_data['cache']);

 




				// Update cache for handler
get_execution_time();

$hit = $this->handler->put($name, $data);






				if($cache_data)
{
// use native_unserialize() over my_unserialize() for performance reasons
$data = native_unserialize($cache_data['cache']);

// Update cache for handler
get_execution_time();

$hit = $this->handler->put($name, $data);





				$call_time = get_execution_time();
$this->call_time += $call_time;
$this->call_count++;

					$call_time = get_execution_time();
$this->call_time += $call_time;
$this->call_count++;





				if($mybb->debug_mode)






					if($mybb->debug_mode)
{
$this->debug_call('set:'.$name, $call_time, $hit);
}
}
else

				{

				{

					$this->debug_call('set:'.$name, $call_time, $hit);

					$data = false;

				}

				}

			}
}

			}
}

		// Else, using internal database cache
else
{
$query = $db->simple_select("datacache", "title,cache", "title='$name'");
$cache_data = $db->fetch_array($query);


		// Else, using internal database cache
else
{
$query = $db->simple_select("datacache", "title,cache", "title='$name'");
$cache_data = $db->fetch_array($query);


			if(!$cache_data['title'])

			if(empty($cache_data['title']))

			{
$data = false;
}
else
{

			{
$data = false;
}
else
{

				$data = unserialize($cache_data['cache']);


				// use native_unserialize() over my_unserialize() for performance reasons
$data = native_unserialize($cache_data['cache']);

			}
}


			}
}


Zeile 200Zeile 236
		$this->cache[$name] = $data;

if($data !== false)

		$this->cache[$name] = $data;

if($data !== false)

		{

		{

			return $data;
}
else

			return $data;
}
else

Zeile 213Zeile 249
	 * Update cache contents.
*
* @param string $name The cache content identifier.

	 * Update cache contents.
*
* @param string $name The cache content identifier.

	 * @param string $contents The cache content.

	 * @param mixed $contents The cache content.

	 */
function update($name, $contents)

	 */
function update($name, $contents)

	{
global $db, $mybb;

$this->cache[$name] = $contents;


	{
global $db, $mybb;

$this->cache[$name] = $contents;


		// We ALWAYS keep a running copy in the db just incase we need it

		// We ALWAYS keep a running copy in the db just incase we need it

		$dbcontents = $db->escape_string(serialize($contents));


		$dbcontents = $db->escape_string(my_serialize($contents));


		$replace_array = array(
"title" => $db->escape_string($name),
"cache" => $dbcontents
);
$db->replace_query("datacache", $replace_array, "", false);

		$replace_array = array(
"title" => $db->escape_string($name),
"cache" => $dbcontents
);
$db->replace_query("datacache", $replace_array, "", false);





		// Do we have a cache handler we're using?

		// Do we have a cache handler we're using?

		if($this->handler instanceof CacheHandlerInterface)
{
get_execution_time();

$hit = $this->handler->put($name, $contents);

$call_time = get_execution_time();
$this->call_time += $call_time;
$this->call_count++;

if($mybb->debug_mode)

		if($this->handler instanceof CacheHandlerInterface)
{
get_execution_time();

$hit = $this->handler->put($name, $contents);

$call_time = get_execution_time();
$this->call_time += $call_time;
$this->call_count++;

if($mybb->debug_mode)

			{
$this->debug_call('update:'.$name, $call_time, $hit);
}

			{
$this->debug_call('update:'.$name, $call_time, $hit);
}

Zeile 258Zeile 294
	 */
function delete($name, $greedy = false)
{

	 */
function delete($name, $greedy = false)
{

		 global $db, $mybb, $cache;

		global $db, $mybb, $cache;


// Prepare for database query.
$dbname = $db->escape_string($name);


// Prepare for database query.
$dbname = $db->escape_string($name);

Zeile 358Zeile 394
	function debug_call($string, $qtime, $hit)
{
global $mybb, $plugins;

	function debug_call($string, $qtime, $hit)
{
global $mybb, $plugins;





		$debug_extra = '';
if($plugins->current_hook)

		$debug_extra = '';
if($plugins->current_hook)

		{

		{

			$debug_extra = "<div style=\"float_right\">(Plugin Hook: {$plugins->current_hook})</div>";

			$debug_extra = "<div style=\"float_right\">(Plugin Hook: {$plugins->current_hook})</div>";

		}

		}


if($hit)


if($hit)

		{

		{

			$hit_status = 'HIT';

			$hit_status = 'HIT';

		}

		}

		else
{
$hit_status = 'MISS';

		else
{
$hit_status = 'MISS';

Zeile 377Zeile 413
		$cache_data = explode(':', $string);
$cache_method = $cache_data[0];
$cache_key = $cache_data[1];

		$cache_data = explode(':', $string);
$cache_method = $cache_data[0];
$cache_key = $cache_data[1];





		$this->cache_debug = "<table style=\"background-color: #666;\" width=\"95%\" cellpadding=\"4\" cellspacing=\"1\" align=\"center\">
<tr>
<td style=\"background-color: #ccc;\">{$debug_extra}<div><strong>#{$this->call_count} - ".ucfirst($cache_method)." Call</strong></div></td>

		$this->cache_debug = "<table style=\"background-color: #666;\" width=\"95%\" cellpadding=\"4\" cellspacing=\"1\" align=\"center\">
<tr>
<td style=\"background-color: #ccc;\">{$debug_extra}<div><strong>#{$this->call_count} - ".ucfirst($cache_method)." Call</strong></div></td>

Zeile 531Zeile 567
		}

$this->update("badwords", $badwords);

		}

$this->update("badwords", $badwords);

	}


	}


	/**
* Update the usergroups cache.
*

	/**
* Update the usergroups cache.
*

Zeile 561Zeile 597
	{
global $forum_cache, $db;


	{
global $forum_cache, $db;


		$this->built_forum_permissions = array(0);

		$this->forum_permissions = $this->built_forum_permissions = array(0);


// Get our forum list
cache_forums(true);
if(!is_array($forum_cache))
{
return false;


// Get our forum list
cache_forums(true);
if(!is_array($forum_cache))
{
return false;

		}


		}


		reset($forum_cache);
$fcache = array();


		reset($forum_cache);
$fcache = array();


Zeile 609Zeile 645
	private function build_forum_permissions($permissions=array(), $pid=0)
{
$usergroups = array_keys($this->read("usergroups", true));

	private function build_forum_permissions($permissions=array(), $pid=0)
{
$usergroups = array_keys($this->read("usergroups", true));

		if($this->forum_permissions_forum_cache[$pid])

		if(!empty($this->forum_permissions_forum_cache[$pid]))

		{
foreach($this->forum_permissions_forum_cache[$pid] as $main)
{

		{
foreach($this->forum_permissions_forum_cache[$pid] as $main)
{

Zeile 618Zeile 654
					$perms = $permissions;
foreach($usergroups as $gid)
{

					$perms = $permissions;
foreach($usergroups as $gid)
{

						if($this->forum_permissions[$forum['fid']][$gid])

						if(isset($this->forum_permissions[$forum['fid']][$gid]) && $this->forum_permissions[$forum['fid']][$gid])

						{
$perms[$gid] = $this->forum_permissions[$forum['fid']][$gid];
}

						{
$perms[$gid] = $this->forum_permissions[$forum['fid']][$gid];
}

						if($perms[$gid])

						if(!empty($perms[$gid]))

						{
$perms[$gid]['fid'] = $forum['fid'];
$this->built_forum_permissions[$forum['fid']][$gid] = $perms[$gid];

						{
$perms[$gid]['fid'] = $forum['fid'];
$this->built_forum_permissions[$forum['fid']][$gid] = $perms[$gid];

Zeile 656Zeile 692
		$topreferrer = $db->fetch_array($query);

$timesearch = TIME_NOW - 86400;

		$topreferrer = $db->fetch_array($query);

$timesearch = TIME_NOW - 86400;

		switch($db->type)
{
case 'pgsql':
$group_by = $db->build_fields_string('users', 'u.');
break;
default:
$group_by = 'p.uid';
break;
}

 

$query = $db->query("
SELECT u.uid, u.username, COUNT(*) AS poststoday
FROM {$db->table_prefix}posts p
LEFT JOIN {$db->table_prefix}users u ON (p.uid=u.uid)
WHERE p.dateline > {$timesearch} AND p.visible=1


$query = $db->query("
SELECT u.uid, u.username, COUNT(*) AS poststoday
FROM {$db->table_prefix}posts p
LEFT JOIN {$db->table_prefix}users u ON (p.uid=u.uid)
WHERE p.dateline > {$timesearch} AND p.visible=1

			GROUP BY {$group_by}
ORDER BY NULL DESC

			GROUP BY u.uid, u.username
ORDER BY poststoday DESC

		");

$most_posts = 0;

		");

$most_posts = 0;

 
		$topposter = array();

		while($user = $db->fetch_array($query))
{
if($user['poststoday'] > $most_posts)

		while($user = $db->fetch_array($query))
{
if($user['poststoday'] > $most_posts)

Zeile 696Zeile 724
		);

$this->update('statistics', $statistics);

		);

$this->update('statistics', $statistics);

	}

/**

	}

/**

	 * Update the moderators cache.
*
* @return bool Returns false on failure

	 * Update the moderators cache.
*
* @return bool Returns false on failure

Zeile 707Zeile 735
	{
global $forum_cache, $db;


	{
global $forum_cache, $db;


		$this->built_moderators = array(0);


		$this->built_moderators = array(0);


		// Get our forum list
cache_forums(true);
if(!is_array($forum_cache))

		// Get our forum list
cache_forums(true);
if(!is_array($forum_cache))

Zeile 718Zeile 746

reset($forum_cache);
$fcache = array();


reset($forum_cache);
$fcache = array();





		// Resort in to the structure we require
foreach($forum_cache as $fid => $forum)

		// Resort in to the structure we require
foreach($forum_cache as $fid => $forum)

		{

		{

			$this->moderators_forum_cache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum;

			$this->moderators_forum_cache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum;

		}

		}


// Sort children
foreach($fcache as $pid => $value)


// Sort children
foreach($fcache as $pid => $value)

Zeile 737Zeile 765
		// Fetch moderators from the database
$query = $db->query("
SELECT m.*, u.username, u.usergroup, u.displaygroup

		// Fetch moderators from the database
$query = $db->query("
SELECT m.*, u.username, u.usergroup, u.displaygroup

			FROM ".TABLE_PREFIX."moderators m

			FROM ".TABLE_PREFIX."moderators m

			LEFT JOIN ".TABLE_PREFIX."users u ON (m.id=u.uid)
WHERE m.isgroup = '0'
ORDER BY u.username

			LEFT JOIN ".TABLE_PREFIX."users u ON (m.id=u.uid)
WHERE m.isgroup = '0'
ORDER BY u.username

Zeile 768Zeile 796
			$this->moderators[$moderator['fid']]['usergroups'][$moderator['id']] = $moderator;
}


			$this->moderators[$moderator['fid']]['usergroups'][$moderator['id']] = $moderator;
}


		if(is_array($this->moderators))

		foreach(array_keys($this->moderators) as $fid)

		{

		{

			foreach(array_keys($this->moderators) as $fid)

			if(isset($this->moderators[$fid]['users']))

			{

			{

				uasort($this->moderators[$fid], 'sort_moderators_by_usernames');

				uasort($this->moderators[$fid]['users'], 'sort_moderators_by_usernames');

			}
}

$this->build_moderators();

$this->update("moderators", $this->built_moderators);

			}
}

$this->build_moderators();

$this->update("moderators", $this->built_moderators);





		return true;
}

		return true;
}





	/**
* Update the users awaiting activation cache.
*

	/**
* Update the users awaiting activation cache.
*

Zeile 798Zeile 826
			'users'	=> $awaitingusers,
'time' => TIME_NOW
);

			'users'	=> $awaitingusers,
'time' => TIME_NOW
);





		$this->update('awaitingactivation', $data);
}


		$this->update('awaitingactivation', $data);
}


Zeile 856Zeile 884

$query = $db->simple_select("forums", "*", "", array('order_by' => 'pid,disporder'));
while($forum = $db->fetch_array($query))


$query = $db->simple_select("forums", "*", "", array('order_by' => 'pid,disporder'));
while($forum = $db->fetch_array($query))

		{

		{

			foreach($forum as $key => $val)
{
if(in_array($key, $exclude))

			foreach($forum as $key => $val)
{
if(in_array($key, $exclude))

Zeile 872Zeile 900

/**
* Update usertitles cache.


/**
* Update usertitles cache.

	 *
*/

	 *
*/

	function update_usertitles()
{
global $db;

	function update_usertitles()
{
global $db;

Zeile 894Zeile 922
	 */
function update_reportedcontent()
{

	 */
function update_reportedcontent()
{

		global $db, $mybb;


		global $db;


		$query = $db->simple_select("reportedcontent", "COUNT(rid) AS unreadcount", "reportstatus='0'");

		$query = $db->simple_select("reportedcontent", "COUNT(rid) AS unreadcount", "reportstatus='0'");

		$num = $db->fetch_array($query);

		$unreadcount = $db->fetch_field($query, 'unreadcount');


$query = $db->simple_select("reportedcontent", "COUNT(rid) AS reportcount");


$query = $db->simple_select("reportedcontent", "COUNT(rid) AS reportcount");

		$total = $db->fetch_array($query);

$query = $db->simple_select("reportedcontent", "dateline", "reportstatus='0'", array('order_by' => 'dateline', 'order_dir' => 'DESC'));
$latest = $db->fetch_array($query);

		$reportcount = $db->fetch_field($query, 'reportcount');

$query = $db->simple_select("reportedcontent", "dateline", "reportstatus='0'", array('order_by' => 'dateline', 'order_dir' => 'DESC', 'limit' => 1));
$dateline = $db->fetch_field($query, 'dateline');


$reports = array(


$reports = array(

			"unread" => $num['unreadcount'],
"total" => $total['reportcount'],
"lastdateline" => $latest['dateline']

			'unread' => $unreadcount,
'total' => $reportcount,
'lastdateline' => $dateline,

		);

$this->update("reportedcontent", $reports);

		);

$this->update("reportedcontent", $reports);

Zeile 1089Zeile 1117
		$this->update("most_viewed_threads", $threads);
}


		$this->update("most_viewed_threads", $threads);
}


 
	/**
* @deprecated
*/

	function update_banned()
{

	function update_banned()
{

		global $db;

$bans = array();

$query = $db->simple_select("banned");
while($ban = $db->fetch_array($query))
{
$bans[$ban['uid']] = $ban;
}

$this->update("banned", $bans);

		// "banned" cache removed











	}

function update_birthdays()

	}

function update_birthdays()

Zeile 1115Zeile 1136
		$bdaydate = my_date("j-n", $bdaytime, '', 0);
$bdaydatetomorrow = my_date("j-n", ($bdaytime+86400), '', 0);
$bdaydateyesterday = my_date("j-n", ($bdaytime-86400), '', 0);

		$bdaydate = my_date("j-n", $bdaytime, '', 0);
$bdaydatetomorrow = my_date("j-n", ($bdaytime+86400), '', 0);
$bdaydateyesterday = my_date("j-n", ($bdaytime-86400), '', 0);





		$query = $db->simple_select("users", "uid, username, usergroup, displaygroup, birthday, birthdayprivacy", "birthday LIKE '$bdaydate-%' OR birthday LIKE '$bdaydateyesterday-%' OR birthday LIKE '$bdaydatetomorrow-%'");
while($bday = $db->fetch_array($query))
{

		$query = $db->simple_select("users", "uid, username, usergroup, displaygroup, birthday, birthdayprivacy", "birthday LIKE '$bdaydate-%' OR birthday LIKE '$bdaydateyesterday-%' OR birthday LIKE '$bdaydatetomorrow-%'");
while($bday = $db->fetch_array($query))
{

Zeile 1125Zeile 1146
			$bday['bday'] = implode('-', $bday['bday']);

if($bday['birthdayprivacy'] != 'all')

			$bday['bday'] = implode('-', $bday['bday']);

if($bday['birthdayprivacy'] != 'all')

			{
++$birthdays[$bday['bday']]['hiddencount'];








			{
if(isset($birthdays[$bday['bday']]['hiddencount']))
{
++$birthdays[$bday['bday']]['hiddencount'];
}
else
{
$birthdays[$bday['bday']]['hiddencount'] = 1;
}

				continue;

				continue;

			}


			}


			// We don't need any excess caleries in the cache
unset($bday['birthdayprivacy']);

			// We don't need any excess caleries in the cache
unset($bday['birthdayprivacy']);









if(!isset($birthdays[$bday['bday']]['users']))
{
$birthdays[$bday['bday']]['users'] = array();
}


			$birthdays[$bday['bday']]['users'][] = $bday;
}

$this->update("birthdays", $birthdays);

			$birthdays[$bday['bday']]['users'][] = $bday;
}

$this->update("birthdays", $birthdays);

	}

	}


function update_groupleaders()
{


function update_groupleaders()
{

Zeile 1177Zeile 1210

$time = TIME_NOW; // Look for announcements that don't end, or that are ending some time in the future
$query = $db->simple_select("announcements", "fid", "enddate = '0' OR enddate > '{$time}'", array("order_by" => "aid"));


$time = TIME_NOW; // Look for announcements that don't end, or that are ending some time in the future
$query = $db->simple_select("announcements", "fid", "enddate = '0' OR enddate > '{$time}'", array("order_by" => "aid"));


if($db->num_rows($query))
{


if($db->num_rows($query))
{

			while($forum = $db->fetch_array($query))
{
if(!isset($fd_statistics[$forum['fid']]['announcements']))

			while($forum = $db->fetch_array($query))
{
if(!isset($fd_statistics[$forum['fid']]['announcements']))

Zeile 1256Zeile 1289
		while($reason = $db->fetch_array($query))
{
if($reason['appliesto'] == 'all')

		while($reason = $db->fetch_array($query))
{
if($reason['appliesto'] == 'all')

			{

			{

				foreach($content_types as $content)
{
$reasons[$content][] = array(

				foreach($content_types as $content)
{
$reasons[$content][] = array(

Zeile 1289Zeile 1322
		global $db;

$query = $db->simple_select("datacache", "title,cache", "title='mostonline'");

		global $db;

$query = $db->simple_select("datacache", "title,cache", "title='mostonline'");

		$this->update("mostonline", unserialize($db->fetch_field($query, "cache")));

		$this->update("mostonline", my_unserialize($db->fetch_field($query, "cache")));

	}

function reload_plugins()

	}

function reload_plugins()

Zeile 1297Zeile 1330
		global $db;

$query = $db->simple_select("datacache", "title,cache", "title='plugins'");

		global $db;

$query = $db->simple_select("datacache", "title,cache", "title='plugins'");

		$this->update("plugins", unserialize($db->fetch_field($query, "cache")));

		$this->update("plugins", my_unserialize($db->fetch_field($query, "cache")));

	}

function reload_last_backup()

	}

function reload_last_backup()

Zeile 1305Zeile 1338
		global $db;

$query = $db->simple_select("datacache", "title,cache", "title='last_backup'");

		global $db;

$query = $db->simple_select("datacache", "title,cache", "title='last_backup'");

		$this->update("last_backup", unserialize($db->fetch_field($query, "cache")));

		$this->update("last_backup", my_unserialize($db->fetch_field($query, "cache")));

	}

function reload_internal_settings()

	}

function reload_internal_settings()

Zeile 1313Zeile 1346
		global $db;

$query = $db->simple_select("datacache", "title,cache", "title='internal_settings'");

		global $db;

$query = $db->simple_select("datacache", "title,cache", "title='internal_settings'");

		$this->update("internal_settings", unserialize($db->fetch_field($query, "cache")));

		$this->update("internal_settings", my_unserialize($db->fetch_field($query, "cache")));

	}

function reload_version_history()

	}

function reload_version_history()

	{
global $db;


	{
global $db;


		$query = $db->simple_select("datacache", "title,cache", "title='version_history'");

		$query = $db->simple_select("datacache", "title,cache", "title='version_history'");

		$this->update("version_history", unserialize($db->fetch_field($query, "cache")));
}

		$this->update("version_history", my_unserialize($db->fetch_field($query, "cache")));
}


function reload_modnotes()


function reload_modnotes()

	{
global $db;

	{
global $db;


$query = $db->simple_select("datacache", "title,cache", "title='modnotes'");


$query = $db->simple_select("datacache", "title,cache", "title='modnotes'");

		$this->update("modnotes", unserialize($db->fetch_field($query, "cache")));
}

		$this->update("modnotes", my_unserialize($db->fetch_field($query, "cache")));
}


function reload_adminnotes()
{
global $db;

$query = $db->simple_select("datacache", "title,cache", "title='adminnotes'");


function reload_adminnotes()
{
global $db;

$query = $db->simple_select("datacache", "title,cache", "title='adminnotes'");

		$this->update("adminnotes", unserialize($db->fetch_field($query, "cache")));
}

function reload_mybb_credits()
{
admin_redirect('index.php?module=home-credits&amp;fetch_new=-2');

		$this->update("adminnotes", my_unserialize($db->fetch_field($query, "cache")));






	}
}

	}
}