misc performance: cache contact details by url during script
This commit is contained in:
		
					parent
					
						
							
								27a2e44d89
							
						
					
				
			
			
				commit
				
					
						bae9f0852f
					
				
			
		
					 1 changed files with 36 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -196,6 +196,7 @@ function unmark_for_death($contact) {
 | 
			
		|||
 * @brief Get contact data for a given profile link
 | 
			
		||||
 *
 | 
			
		||||
 * The function looks at several places (contact table and gcontact table) for the contact
 | 
			
		||||
 * It caches its result for the same script execution to prevent duplicate calls
 | 
			
		||||
 *
 | 
			
		||||
 * @param string $url The profile link
 | 
			
		||||
 * @param int $uid User id
 | 
			
		||||
| 
						 | 
				
			
			@ -204,8 +205,15 @@ function unmark_for_death($contact) {
 | 
			
		|||
 * @return array Contact data
 | 
			
		||||
 */
 | 
			
		||||
function get_contact_details_by_url($url, $uid = -1, $default = array()) {
 | 
			
		||||
	if ($uid == -1)
 | 
			
		||||
	static $cache = array();
 | 
			
		||||
 | 
			
		||||
	if ($uid == -1) {
 | 
			
		||||
		$uid = local_user();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (isset($cache[$url][$uid])) {
 | 
			
		||||
		return $cache[$url][$uid];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Fetch contact data from the contact table for the given user
 | 
			
		||||
	$r = q("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
 | 
			
		||||
| 
						 | 
				
			
			@ -229,10 +237,13 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) {
 | 
			
		|||
 | 
			
		||||
	if ($r) {
 | 
			
		||||
		// If there is more than one entry we filter out the connector networks
 | 
			
		||||
		if (count($r) > 1)
 | 
			
		||||
			foreach ($r AS $id => $result)
 | 
			
		||||
				if ($result["network"] == NETWORK_STATUSNET)
 | 
			
		||||
		if (count($r) > 1) {
 | 
			
		||||
			foreach ($r AS $id => $result) {
 | 
			
		||||
				if ($result["network"] == NETWORK_STATUSNET) {
 | 
			
		||||
					unset($r[$id]);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$profile = array_shift($r);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -251,31 +262,40 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) {
 | 
			
		|||
			$profile["bd"] = $current_year."-".$month."-".$day;
 | 
			
		||||
			$current = $current_year."-".$current_month."-".$current_day;
 | 
			
		||||
 | 
			
		||||
			if ($profile["bd"] < $current)
 | 
			
		||||
			if ($profile["bd"] < $current) {
 | 
			
		||||
				$profile["bd"] = (++$current_year)."-".$month."-".$day;
 | 
			
		||||
		} else
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			$profile["bd"] = "0000-00-00";
 | 
			
		||||
	} else
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		$profile = $default;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (($profile["photo"] == "") AND isset($default["photo"]))
 | 
			
		||||
	if (($profile["photo"] == "") AND isset($default["photo"])) {
 | 
			
		||||
		$profile["photo"] = $default["photo"];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (($profile["name"] == "") AND isset($default["name"]))
 | 
			
		||||
	if (($profile["name"] == "") AND isset($default["name"])) {
 | 
			
		||||
		$profile["name"] = $default["name"];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (($profile["network"] == "") AND isset($default["network"]))
 | 
			
		||||
	if (($profile["network"] == "") AND isset($default["network"])) {
 | 
			
		||||
		$profile["network"] = $default["network"];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (($profile["thumb"] == "") AND isset($profile["photo"]))
 | 
			
		||||
	if (($profile["thumb"] == "") AND isset($profile["photo"])) {
 | 
			
		||||
		$profile["thumb"] = $profile["photo"];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (($profile["micro"] == "") AND isset($profile["thumb"]))
 | 
			
		||||
	if (($profile["micro"] == "") AND isset($profile["thumb"])) {
 | 
			
		||||
		$profile["micro"] = $profile["thumb"];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((($profile["addr"] == "") OR ($profile["name"] == "")) AND ($profile["gid"] != 0) AND
 | 
			
		||||
		in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS)))
 | 
			
		||||
		in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) {
 | 
			
		||||
		proc_run(PRIORITY_LOW, "include/update_gcontact.php", $profile["gid"]);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Show contact details of Diaspora contacts only if connected
 | 
			
		||||
	if (($profile["cid"] == 0) AND ($profile["network"] == NETWORK_DIASPORA)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -285,7 +305,9 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) {
 | 
			
		|||
		$profile["birthday"] = "0000-00-00";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return($profile);
 | 
			
		||||
	$cache[$url][$uid] = $profile;
 | 
			
		||||
 | 
			
		||||
	return $profile;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (! function_exists('contact_photo_menu')) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue