Your IP : 216.73.216.224


Current Path : /var/www/html/plugins/user/lettergravatar/
Upload File :
Current File : /var/www/html/plugins/user/lettergravatar/lettergravatar.php

<?php
/*
 * Letter Gravatar plugin
 * @copyright Copyright (C) 2010-2017 Adrien Roussel
 * @license : GNU/GPL
 * @Website : https://www.nordmograph.com/extensions
 */

// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die( 'Restricted access' );
class plgUserLettergravatar extends JPlugin
{
	public function onUserLogin( $user, $options = array() )
	{
		$app = JFactory::getApplication();
		$id = intval(JUserHelper::getUserId($user['username']));
		$profileman	= $this->params->get('profileman','cb');
		$batchmode	= $this->params->get('batchmode',0);
		$debug		= $this->params->get('debug',0);
		
		if ($batchmode)
			$this->batch();
			
		$hasAvatar = $this->hasAvatar( $id );
		
		if($hasAvatar)
			return;
		if($debug)
			$app->enqueueMessage('No avatar yet, processing ... ','message');
		$use_gravatar 	= $this->params->get('use_gravatar', 1 );
		$initials_from 	= $this->params->get('initials_from', 'name' );
		$large_size = $this->params->get('large_size','256');
		$font	= $this->params->get('font','arial.ttf');
		$email = JFactory::getUser($id)->email;
		
		if($use_gravatar)
		{
			$default_gravatar	= $this->params->get('default_gravatar','identicon');
			
			$random_keys = array_rand($default_gravatar);
			$default_gravatar = $default_gravatar[$random_keys];
			
			
			$md5_email = md5($email);
			$gravatar_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s=32&d='.$default_gravatar;
			$data = $this->url_get_contents( $gravatar_url );
			if( strpos($data , '404 Not Found') !== false)
				$this->storeLetterAvatar(   $id );
			else
				$this->storeGravatar(   $id , $md5_email  ,$default_gravatar );
		}
		else
			$this->storeLetterAvatar(  $id );
		//$app->enqueueMessage('Avatar Generated successfully','message');
	}
	public function storeLetterAvatar(  $id  )
	{
		$app 	= JFactory::getApplication();
		$db 	= JFactory::getDBO();
		$debug			= $this->params->get('debug',0);
		if($debug)
			$app->enqueueMessage('Processing letter avatar ... ','message');
			
		$profileman		= $this->params->get('profileman','cb');	
		$initials_from 	= $this->params->get('initials_from', 'name' );
		$large_size 	= $this->params->get('large_size','256');
		$font			= $this->params->get('font','arial.ttf');
		
		
		jimport( 'joomla.filesystem.file' );
		
		$from = JFactory::getUser($id)->$initials_from; // name, username or email	
		$name_initials = '';

		$temp_word_arr = explode(' ', $from);
        $words = array();
        foreach ($temp_word_arr as $key => $word)
		{
            if( $word != "" && $word != ",")
			{
                $words[] = $word;
            }
        }	
		$number_of_word = 1;
		foreach ($words as $word)
		{
            if ($number_of_word > 2)
                break;
            $name_initials .= strtoupper(trim($word[0]));
            $number_of_word++;
        }
		
		if($debug)
			$app->enqueueMessage('Initals: '.$name_initials ,'message');

		 $colors = [
        [198, 125, 40],
        [61, 155, 243],
        [74, 243, 75],
        [238, 89, 166],
        [52, 240, 224],
        [177, 156, 155],
        [240, 120, 145],
        [111, 154, 78],
        [237, 179, 245],
        [237, 101, 95],
        [89, 239, 155],
        [43, 254, 70],
        [163, 212, 245],
        [65, 152, 142],
        [165, 135, 246],
        [181, 166, 38],
        [187, 229, 206],
        [77, 164, 25],
        [179, 246, 101],
        [234, 93, 37],
        [225, 155, 115],
        [142, 140, 188],
        [223, 120, 140],
        [249, 174, 27],
        [244, 117, 225],
        [137, 141, 102],
        [75, 191, 146],
        [188, 239, 142],
        [164, 199, 145],
        [173, 120, 149],
        [59, 195, 89],
        [222, 198, 220],
        [68, 145, 187],
        [236, 204, 179],
        [159, 195, 72],
        [188, 121, 189],
        [166, 160, 85],
        [181, 233, 37],
        [236, 177, 85],
        [121, 147, 160],
        [234, 218, 110],
        [241, 157, 191],
        [62, 200, 234],
        [133, 243, 34],
        [88, 149, 110],
        [59, 228, 248],
        [183, 119, 118],
        [251, 195, 45],
        [113, 196, 122],
        [197, 115, 70],
        [80, 175, 187],
        [103, 231, 238],
        [240, 72, 133],
        [228, 149, 241],
        [180, 188, 159],
        [172, 132, 85],
        [180, 135, 251],
        [236, 194, 58],
        [217, 176, 109],
        [88, 244, 199],
        [186, 157, 239],
        [113, 230, 96],
        [206, 115, 165],
        [244, 178, 163],
        [230, 139, 26],
        [241, 125, 89],
        [83, 160, 66],
        [107, 190, 166],
        [197, 161, 210],
        [198, 203, 245],
        [238, 117, 19],
        [228, 119, 116],
        [131, 156, 41],
        [145, 178, 168],
        [139, 170, 220],
        [233, 95, 125],
        [87, 178, 230],
        [157, 200, 119],
        [237, 140, 76],
        [229, 185, 186],
        [144, 206, 212],
        [236, 209, 158],
        [185, 189, 79],
        [34, 208, 66],
        [84, 238, 129],
        [133, 140, 134],
        [67, 157, 94],
        [168, 179, 25],
        [140, 145, 240],
        [151, 241, 125],
        [67, 162, 107],
        [200, 156, 21],
        [169, 173, 189],
        [226, 116, 189],
        [133, 231, 191],
        [194, 161, 63],
        [241, 77, 99],
        [241, 217, 53],
        [123, 204, 105],
        [210, 201, 119],
        [229, 108, 155],
        [240, 91, 72],
        [187, 115, 210],
        [240, 163, 100],
        [178, 217, 57],
        [179, 135, 116],
        [204, 211, 24],
        [186, 135, 57],
        [223, 176, 135],
        [204, 148, 151],
        [116, 223, 50],
        [95, 195, 46],
        [123, 160, 236],
        [181, 172, 131],
        [142, 220, 202],
        [240, 140, 112],
        [172, 145, 164],
        [228, 124, 45],
        [135, 151, 243],
        [42, 205, 125],
        [192, 233, 116],
        [119, 170, 114],
        [158, 138, 26],
        [73, 190, 183],
        [185, 229, 243],
        [227, 107, 55],
        [196, 205, 202],
        [132, 143, 60],
        [233, 192, 237],
        [62, 150, 220],
        [205, 201, 141],
        [106, 140, 190],
        [161, 131, 205],
        [135, 134, 158],
        [198, 139, 81],
        [115, 171, 32],
        [101, 181, 67],
        [149, 137, 119],
        [37, 142, 183],
        [183, 130, 175],
        [168, 125, 133],
        [124, 142, 87],
        [236, 156, 171],
        [232, 194, 91],
        [219, 200, 69],
        [144, 219, 34],
        [219, 95, 187],
        [145, 154, 217],
        [165, 185, 100],
        [127, 238, 163],
        [224, 178, 198],
        [119, 153, 120],
        [124, 212, 92],
        [172, 161, 105],
        [231, 155, 135],
        [157, 132, 101],
        [122, 185, 146],
        [53, 166, 51],
        [70, 163, 90],
        [150, 190, 213],
        [210, 107, 60],
        [166, 152, 185],
        [159, 194, 159],
        [39, 141, 222],
        [202, 176, 161],
        [95, 140, 229],
        [168, 142, 87],
        [93, 170, 203],
        [159, 142, 54],
        [14, 168, 39],
        [94, 150, 149],
        [187, 206, 136],
        [157, 224, 166],
        [235, 158, 208],
        [109, 232, 216],
        [141, 201, 87],
        [208, 124, 118],
        [142, 125, 214],
        [19, 237, 174],
        [72, 219, 41],
        [234, 102, 111],
        [168, 142, 79],
        [188, 135, 35],
        [95, 155, 143],
        [148, 173, 116],
        [223, 112, 95],
        [228, 128, 236],
        [206, 114, 54],
        [195, 119, 88],
        [235, 140, 94],
        [235, 202, 125],
        [233, 155, 153],
        [214, 214, 238],
        [246, 200, 35],
        [151, 125, 171],
        [132, 145, 172],
        [131, 142, 118],
        [199, 126, 150],
        [61, 162, 123],
        [58, 176, 151],
        [215, 141, 69],
        [225, 154, 220],
        [220, 77, 167],
        [233, 161, 64],
        [130, 221, 137],
        [81, 191, 129],
        [169, 162, 140],
        [174, 177, 222],
        [236, 174, 47],
        [233, 188, 180],
        [69, 222, 172],
        [71, 232, 93],
        [118, 211, 238],
        [157, 224, 83],
        [218, 105, 73],
        [126, 169, 36]
    ];
		
		$char_index  = ord($name_initials[0]) - 64;
        $color_index = $char_index % 20;
        $color       = $colors[$color_index];
		
		$color = $colors[array_rand($colors)];

		// Création de l'image
		$im = imagecreatetruecolor( $large_size,$large_size);
		$color  = imagecolorallocate($im ,$color[0], $color[2], $color[1]) ;

		$white = imagecolorallocate($im, 255, 255, 255);

		imagefilledrectangle($im, 0, 0, $large_size, $large_size, $color);
		
		// Le texte à dessiner
		$text =  $name_initials;
		$font = JPATH_SITE . '/plugins/user/lettergravatar/fonts/'.$font;
		
		if(strlen($text)=='2')
			imagettftext($im, 80, 0, 55, 166, $white, $font, $text);
		elseif(strlen($text)=='1')
			imagettftext($im, 80, 0, 90, 166, $white, $font, $text);	
		
		
		if( $profileman =='cb')
		{
			$avatar_path = JPATH_SITE.'/images/comprofiler/';	
			imagepng($im , $avatar_path.$id.'.png');	
			$avatar = $id.'.png';
			$dest = $this->resize_imagepng( $avatar_path.$id.'.png' , 60 , 60);
			imagepng($dest , $avatar_path.'/tn'.$id.'.png');
			$q ="UPDATE #__comprofiler SET avatar='".$avatar."' , avatarapproved='1' WHERE user_id='".$id."' ";
			$db->setQuery($q);
			$db->execute();	
		}
		elseif( $profileman =='js')
		{
			$avatar_path = JPATH_SITE.'/images/avatar/';	
			imagepng($im , $avatar_path.$id.'.png');			
			$avatar = 'images/avatar/'.$id.'.png';
			$dest = $this->resize_imagepng( $avatar_path.$id.'.png' , 64 , 64);
			imagepng($dest , $avatar_path.'/thumb_'.$id.'.png');
			$thumb = 'images/avatar/thumb_'.$id.'.png';
			$q ="UPDATE #__community_users SET avatar='".$avatar."' , thumb='".$thumb."' WHERE userid='".$id."' ";
			$db->setQuery($q);
			$db->execute();	
			imagedestroy($im);
			imagedestroy($dest);	
		}
		elseif( $profileman =='es')
		{
			$foundry 	= JPATH_ROOT . '/administrator/components/com_easysocial/includes/foundry.php';
			require_once $foundry;// Include main Easysocial engine
			$config = Foundry::config();
			$avatars_storage_container 	= $config->get( 'avatars.storage.container' ); 	
			
			$avatar_path = JPATH_SITE.$avatars_storage_container.'/users/'.$id.'/';
			
			if($debug)
				$app->enqueueMessage('ES Avatar Path: '.$avatar_path ,'message');
				
			JFolder::create($avatar_path);					
			imagepng($im , $avatar_path.$id.'_large.png');		
			$square = $this->resize_imagepng( $avatar_path.$id.'_large.png' , 180 , 180);
			imagepng($square , $avatar_path.$id.'_square.png');						
			$medium = $this->resize_imagepng( $avatar_path.$id.'_large.png' , 64 , 64);
			imagepng($medium , $avatar_path.$id.'_medium.png');				
			$small = $this->resize_imagepng( $avatar_path.$id.'_large.png' , 32 , 32);
			imagepng($medium , $avatar_path.$id.'_small.png');
			
			$q = "SELECT * FROM #__social_avatars WHERE uid='".$id."' AND type='user' ";
			$db->setQuery($q);
			$exists = $db->loadObject();
			if($exists)
			{
				$q = "UPDATE #__social_avatars SET avatar_id='-1' , photo_id='' , small='".$id."_small.png' ,
				 medium='".$id."_medium.png' , square='".$id."_square.png' , large='".$id."_large.png' , modified='".date('Y-m-d H:i:s')."' , storage='joomla' 
				 WHERE uid=".$db->quote($id)." AND type='user' ";
				$db->setQuery($q);
				$db->execute();	
			}
			else
			{
				$q = "INSERT INTO #__social_avatars 
				(uid,type,avatar_id,photo_id,small,medium, square,large,modified,storage)
				VALUES
				('".$id."','user','-1','','".$id."_small.png',
				'".$id."_medium.png','".$id."_square.png',
				'".$id."_large.png','".date('Y-m-d H:i:s')."','joomla')";
				$db->setQuery($q);
				$db->execute();	
			}
			
			if($debug)
				$app->enqueueMessage('ES Query: '.$q ,'message');
			
			imagedestroy($im);
			imagedestroy($square);
			imagedestroy($medium);
			imagedestroy($small);
		}
		elseif( $profileman =='ed')
		{
			
			$large_side = 160;
			$small_side = 60;
			$avatar_path = JPATH_SITE.'/images/discuss_avatar/';
			$rnd = rand(1,1000);
			if($debug)
				$app->enqueueMessage('ED Avatar Path: '.$avatar_path ,'message');
				
			JFolder::create($avatar_path);					
			imagepng($im , $avatar_path.'original_'.$id.'_lettergravatar'.$rnd.'.png');		
			
			$original = $this->resize_imagepng( $avatar_path.'original_'.$id.'_lettergravatar'.$rnd.'.png' , 180 , 180);
			imagepng($original , $avatar_path.'original_'.$id.'_lettergravatar'.$rnd.'.png');						
			
			$large = $this->resize_imagepng( $avatar_path.'original_'.$id.'_lettergravatar'.$rnd.'.png' , $large_side , $large_side );
			imagepng($large , $avatar_path.$id.'_lettergravatar'.$rnd.'.png');
			
			$q = "UPDATE #__discuss_users 
			SET avatar='".$id."_lettergravatar".$rnd.".png' 
				 WHERE id=".$db->quote($id);
				$db->setQuery($q);
				$db->execute();	
			
			
			if($debug)
				$app->enqueueMessage('ED Query: '.$q ,'message');
			
			imagedestroy($im);
			imagedestroy($original);
			imagedestroy($small);
		}	
	}
	
	
	public function storeGravatar(  $id, $md5_email ,$default_gravatar )
	{
		$profileman	= $this->params->get('profileman','cb');
		$large_size = $this->params->get('large_size','256');		
		
		$db = JFactory::getDBO();
		jimport( 'joomla.filesystem.file' );
		if( $profileman =='cb')
		{
			$avatar_path = JPATH_SITE.'/images/comprofiler/';	
			$large_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s='.$large_size.'&d='.$default_gravatar;
			$thumb_url	= 'https://www.gravatar.com/avatar/'.$md5_email.'?s=60&d='.$default_gravatar;
			copy( $large_url , $avatar_path.$id.'_gravatar.png' );
			copy( $thumb_url , $avatar_path.'tn'.$id.'_gravatar.png' );					
					$avatar = $id.'_gravatar.png';
				
			$q ="UPDATE #__comprofiler SET avatar='".$avatar."' , avatarapproved='1' WHERE user_id='".$id."' ";
			$db->setQuery($q);
			$db->execute();	
		}
		elseif( $profileman =='js')
		{
			$avatar_path = JPATH_SITE.'/images/avatar/';	
			
			$large_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s='.$large_size.'&d='.$default_gravatar;
			copy( $large_url , $avatar_path.$id.'.png' );
			
			$avatar = 'images/avatar/'.$id.'.png';
			
			$medium_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s=64&d='.$default_gravatar;
			copy( $medium_url ,$avatar_path.'thumb_'.$id.'.png' );
			
			$thumb = 'images/avatar/thumb_'.$id.'.png';
			
			$q ="UPDATE #__community_users SET avatar='".$avatar."' , thumb='".$thumb."' WHERE userid=".$db->quote($id);
			$db->setQuery($q);
			$db->execute();	
			
			
		}
		elseif( $profileman =='es')
		{
			$foundry 	= JPATH_ROOT . '/administrator/components/com_easysocial/includes/foundry.php';
			require_once $foundry;// Include main Easysocial engine
			$config = Foundry::config();
			$avatars_storage_container 	= $config->get( 'avatars.storage.container' ); 	
			//$avatars_storage_container = '/media/com_easysocial/avatars';  
			
			$avatar_path = JPATH_SITE.$avatars_storage_container.'/users/'.$id.'/';
				
			JFolder::create($avatar_path);
			//userid_gender_large.png						
			$large_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s='.$large_size.'&d='.$default_gravatar;
			copy( $large_url , $avatar_path.$id.'_large.png' );
				
			$square_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s=180&d='.$default_gravatar;
			copy( $square_url ,$avatar_path.$id.'_square.png' );
						
			$medium_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s=64&d='.$default_gravatar;
			copy( $medium_url ,$avatar_path.$id.'_medium.png' );
				
			$small_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s=32&d='.$default_gravatar;	
			copy( $small_url ,$avatar_path.$id.'_small.png' );
			
			$q = "SELECT * FROM #__social_avatars WHERE uid='".$id."' AND type='user' ";
			$db->setQuery($q);
			$exists = $db->loadObject();
			if($exists)
			{
				$q = "UPDATE #__social_avatars SET avatar_id='-1' , photo_id='' , small='".$id."_small.png' ,
				 medium='".$id."_medium.png' , square='".$id."_square.png' , large='".$id."_large.png' , modified='".date('Y-m-d H:i:s')."' , storage='joomla' 
				 WHERE uid='".$id."' AND type='user' ";
				$db->setQuery($q);
				$db->execute();	
			}
			else
			{
				$q = "INSERT INTO #__social_avatars 
				(uid,type,avatar_id,photo_id,small,medium, square,large,modified,storage)
				VALUES
				('".$id."','user','-1','','".$id."_small.png',
				'".$id."_medium.png','".$id."_square.png',
				'".$id."_large.png','".date('Y-m-d H:i:s')."','joomla')";
				$db->setQuery($q);
				$db->execute();	
			}
		}	
		elseif( $profileman =='ed')
		{
			
			$large_size = 160;
			$avatar_path = JPATH_SITE.'/images/discuss_avatar/';
			$rnd = rand(1,1000);

				
			JFolder::create($avatar_path);
			//userid_gender_large.png						
			$original_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s=180&d='.$default_gravatar;
			copy( $large_url , $avatar_path.'original_'.$id.'_lettergravatar'.$rnd.'.png' );
			
			$large_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s='.$large_size.'&d='.$default_gravatar;
			copy( $large_url , $avatar_path.$id.'_lettergravatar'.$rnd.'.png' );
				
			$q = "UPDATE #__discuss_users 
			SET avatar='".$id."_lettergravatar".$rnd.".png' 
				 WHERE id='".$id."' ";
			$db->setQuery($q);
			$db->execute();	
		}	
	}
	
	
	public function hasAvatar(  $id )
	{
		$app = JFactory::getApplication();
		$profileman	= $this->params->get('profileman','cb');
		$debug		= $this->params->get('debug',0);
		$db	   = JFactory::getDBO();
		if( $profileman =='cb')
		{
			$q = "SELECT avatar FROM #__comprofiler WHERE user_id='".$id."' ";		
		}
		elseif( $profileman =='js')
		{
			$q = "SELECT avatar FROM #__community_users WHERE userid='".$id."' ";
		}
		elseif( $profileman =='es')
		{
			$q = "SELECT small FROM #__social_avatars WHERE uid='".$id."' AND type='user' ";
		}
		elseif( $profileman =='ed')
		{
			$q = "SELECT avatar FROM #__discuss_users WHERE id='".$id."' AND avatar!='default.png' ";
		}
		$db->setQuery($q);
		$avatar = $db->loadResult();	
		return $avatar;
	}
	
	// test gravatar result
	public function url_get_contents ($url) {
		if (function_exists('curl_exec')){ 
			$conn = curl_init($url);
			curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
			curl_setopt($conn, CURLOPT_FRESH_CONNECT,  true);
			curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
			$url_get_contents_data = (curl_exec($conn));
			curl_close($conn);
		}elseif(function_exists('file_get_contents')){
			$url_get_contents_data = file_get_contents($url);
		}elseif(function_exists('fopen') && function_exists('stream_get_contents')){
			$handle = fopen ($url, "r");
			$url_get_contents_data = stream_get_contents($handle);
		}else{
			$url_get_contents_data = false;
		}
		return $url_get_contents_data;
	} 
	
	// resize letter avatars for thumbs
	public function resize_imagepng($file, $w, $h)
	{
	   list($width, $height) = getimagesize($file);
	   $src = imagecreatefrompng($file);
	   $dst = imagecreatetruecolor($w, $h);
	   imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
	   return $dst;
	}
	
	public function batch()
	{
		$profileman	= $this->params->get('profileman','cb');
		$use_gravatar 	= $this->params->get('use_gravatar', 1 );
		
		
		$db = JFactory::getDBO();
		$q = "SELECT id,email FROM #__users WHERE block='0' AND lastvisitDate!='00-00-0000 00:00:00' ";
		$db->setQuery($q);
		$users = $db->loadObjectList();
		foreach($users as $u)
		{
			if(!$this->hasAvatar($u->id) )
			{
				if($use_gravatar)
				{
					$default_gravatar	= $this->params->get('default_gravatar','identicon');
				
					$random_keys = array_rand($default_gravatar);
					$default_gravatar = $default_gravatar[$random_keys];
					
					$md5_email = md5($u->email);
					$gravatar_url = 'https://www.gravatar.com/avatar/'.$md5_email.'?s=32&d='.$default_gravatar;
					$data = $this->url_get_contents( $gravatar_url );
					if( strpos($data , '404 Not Found') !== false)
						$this->storeLetterAvatar(   $u->id );
					else
						$this->storeGravatar(   $u->id , $md5_email  ,$default_gravatar );
				}
				else
					$this->storeLetterAvatar(  $u->id );	
			}	
		} 
	}
}
?>