| Current Path : /var/www/html/plugins/user/lettergravatar/ |
| 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 );
}
}
}
}
?>