Current File : /home/lecoinf/www/iwp/includes/favicon.php
<?php

/************************************************************
 * InfiniteWP Admin panel									*
 * Copyright (c) 2015 Revmakx								*
 * www.revmakx.com											*
 *															*
 ************************************************************/

#class providing functions for getting favicon

class Favicon{

	public static $localPath 		= 'uploads/favicon/';
	public static $defaultTimeout 	= 5; //sec
	public static function getFaviconsCronJob($cronStartTime){
		if(self::checkFolderAccessibility() === false){
			return false;
		}
		$sitesData = DB::getArray("?:sites", "siteID, favicon, URL, lastFaviconUpdate", "type = 'normal' ORDER BY siteID ASC");
		foreach ($sitesData as $siteData) {
			if(($cronStartTime + CRON_TIMEOUT) > time()){ 
				self::validateFavicon($siteData);
			}
		}		
	}
	public static function refreshFaviconSite($siteID){
		if(self::checkFolderAccessibility() === false){
			return false;
		}
		
		$where = array(
		      		'query' =>  "siteID=':siteID' AND type = 'normal'",
			      	'params' => array(
		               ':siteID'=>$siteID
					)
				);
		$siteData = DB::getArray("?:sites", "siteID, favicon, URL, lastFaviconUpdate", $where);
		self::getFavicon($siteData[0]);
	}
	public static function getFaviconsPanelIdle(){
		if(self::checkFolderAccessibility() === false){
			return false;
		}
		$limit = 10;	
		$limitChecker=0;
		$sitesData = DB::getArray("?:sites", "siteID, favicon, URL, lastFaviconUpdate", "type = 'normal' ORDER BY siteID ASC");
		foreach ($sitesData as $siteData) {
			if ($limitChecker < $limit) {
				if(self::validateFavicon($siteData) != false){
					$limitChecker++;
				}
			}else {
				break;
			}
		}
	}

	public static function checkFolderAccessibility(){
		if(self::checkFaviconFolderExist() === false){
			return false;
		}
		return true;
	}

	public static function checkLastFaviconAppNotificationTime(){
		$failedTime = self::getLastFaviconAppNotificationTime();
		$retryTime = 60 * 60 * 24 * 14; // send notification again after two weeks
		$failedTime += $retryTime;
		if ($failedTime <= time()) {
			return true;
		}
		return false;
	}

	public static function checkFaviconFolderExist(){
		if (!file_exists(APP_ROOT."/".self::$localPath)) {
			$status = self::createFolder();
			if(!$status){
				return false;
			}
		}
		if (is_writable(APP_ROOT."/".self::$localPath)) {
			return true;
		}
		self::makeNotification(2);
		return false;
	}

	public static function validateFavicon($siteData){
		$checkUpdateFavicon	= 7*24*60*60; // 7 days
		$checkAddNewFavicon = 2*24*60*60; // 2 days    
		$lastFaviconUpdate 	= $siteData['lastFaviconUpdate']; 
		$faviconPath 		= $siteData['favicon'];
		$timeDifference 	= time() - $lastFaviconUpdate ;
		
		if (($faviconPath == 'default' && $timeDifference >= $checkAddNewFavicon )|| $timeDifference >= $checkUpdateFavicon || ($lastFaviconUpdate == 0 || $faviconPath == NULL)) {
			self::getFavicon($siteData);
		} else {
			return false;
		}
	}

	public static function getFavicon($siteData){
		if(self::getFaviconFromPageContent($siteData) !== false){
			return '';
		}
		if(self::getFaviconFromRootPath($siteData) !== false ){
			return '';
		}
		self::defaultFavicon($siteData['siteID']);
	}

	public static function getFaviconFromRootPath($siteData) {
		$URL 	= $siteData['URL']."favicon.ico";
		$siteID = $siteData['siteID'];
		$lastFaviconUpdate = $siteData['lastFaviconUpdate']; 
		list( , , , $curlInfo,) = doCall($URL, $data = '', self::$defaultTimeout);
	   	$curlInfo = $curlInfo['info'];
	    if ($curlInfo['size_download'] > 1 && $curlInfo['size_download'] > $curlInfo['download_content_length']) {
	        $downloadSize = $curlInfo['size_download'];
	    } elseif ($curlInfo['download_content_length'] > 1) {
	        $downloadSize = $curlInfo['download_content_length'];
	    } 
		if (self::isImageFound($curlInfo['content_type'])) {
		    if ($curlInfo['http_code'] == 200 && $downloadSize > 1) {
		       	return self::storeFaviconAndDBUpdate($URL, $siteID, $lastFaviconUpdate);	
		     } else {
				return false;
		     }
	 	} else {
			return false;
	 	}
	}

	public static function isImageFound($contentType){
		if (strstr($contentType, "image") !== false || strstr($contentType, "text/plain") !== false) {
	        return true;
	    }else {
	    	return false;
	    }
	}

	public static function getFaviconFromPageContent($siteData) {
		$siteID = $siteData['siteID'];
		$lastFaviconUpdate = $siteData['lastFaviconUpdate'];
		$faviconNotFound = 0;
		$URL 	= $siteData['URL'];

		list($HTMLContent, , , $curlInfo,) = doCall($URL, $data = '', self::$defaultTimeout);
	   	$curlInfo = $curlInfo['info'];
		if (self::isFaviconFound($curlInfo['http_code'],$HTMLContent)) {
        	$faviconURL = self::parseHTMLContent($HTMLContent, $URL);
        	if($faviconURL){
        		return self::storeFaviconAndDBUpdate($faviconURL, $siteID, $lastFaviconUpdate); 
        	} else {
        		$faviconNotFound = 1 ;
        	}       
		} else {
			$faviconNotFound = 1 ;
		}
		if ($faviconNotFound == 1) {
			return false;
		}
	}
	public static function isFaviconFound($httpStatus,$HTMLContent){
		if ($httpStatus == 200 && (stripos($HTMLContent, "icon") !== false || stripos($HTMLContent, "shortcut icon") !== false)) {
			return true;
		} else{
			return false;
		} 
	}

	public static function parseHTMLContent($HTMLContent, $URL) {
		include_once(APP_ROOT."/lib/htmlParser/simple_html_dom.php");
		$DOM = str_get_html($HTMLContent);
		$relTypesofFavicon = array('link[rel*=shortcut icon]', 'link[rel*=icon]');
		foreach ($relTypesofFavicon as $relTypeofFavicon) {
			if (!empty($DOM)) {
				foreach($DOM->find($relTypeofFavicon) as $element) {
	   				$faviconURL = $element->href;
	   				if ($faviconURL) {
						$faviconFound =  self::findFaviconURLType($faviconURL, $URL);
						if ($faviconFound !== false) {
							return $faviconFound;
						}
			  		
	   				}
	  			}
  			} else {
  				break;
  			}
		}
		return false;
	}

	public static function storeFaviconAndDBUpdate($URL,$siteID, $lastFaviconUpdate){
		$currentTime = time();
		$fileName  = $siteID."_".$currentTime;
	    if(!defined('APP_ROOT_V2')){
		    $localPath = self::$localPath.''.$fileName . '.ico';
		}else{
		    $localPath = 'v3/'.self::$localPath.''.$fileName . '.ico';
		}
            $localSavePath = APP_ROOT.'/'.self::$localPath.''.$fileName . '.ico';
	    $result = self::storeFavicontoLocalstorage($URL, $localSavePath, $siteID, $lastFaviconUpdate); //to store icon into local
	  	if ($result) {
	 		return self::updateFavicon($siteID, $localPath, $lastFaviconUpdate, $currentTime, true); 	
	  	} else {
	 		return self::updateFavicon($siteID, $localPath, $lastFaviconUpdate, $currentTime, false); 	
	  	}
	}
	public static function createFolder(){
		$localPath =  APP_ROOT.'/'.self::$localPath;
		if(!file_exists($localPath)){
			 if(!mkdir(APP_ROOT.'/'.self::$localPath, 0755, true)){
			 	self::makeNotification(1);
				return false;
			 }
		}
		return true;
	}
	public static function makeNotification($type){
		if (self::checkLastFaviconAppNotificationTime()) {
			if ($type == 1) {
				addNotification($type='E', $title='Cannot create folder to save favicons', $message='As of v2.6, we are storing your website\'s favicons locally to avoid multiple calls. But we do not have enough permission to create a new folder to save them. <br><br>Please change the default folder permission for the <strong>[IWP Admin Panel]/uploads</strong> folder to 755 or 777.', $state='U', $callbackOnClose='', $callbackReference='');
			} else if($type == 2){
				addNotification($type='E', $title='Cannot store favicons', $message='As of v2.6, we are storing your website\'s favicons locally to avoid multiple calls. But we do not have enough permission to save them. <br><br>Please change the default folder permission for the <strong>[IWP Admin Panel]/uploads</strong> folder to 755 or 777.', $state='U', $callbackOnClose='', $callbackReference='');
			}
			self::saveLastFaviconAppNotificationTime();
		}
	}

	public static function updateFavicon($siteID, $localPath, $lastFaviconUpdate, $currentTime,$status){
		$where = array(
		      		'query' =>  "siteID=:siteID",
			      	'params' => array(
		               ':siteID'=>$siteID
					)
				);
	  	if ($status) {
	  		DB::update("?:sites", array( //update local path
	        'favicon' => $localPath,
	        'lastFaviconUpdate' => $currentTime
		    ), $where); 
		    $deleteFavicon = $siteID."_".$lastFaviconUpdate;
		    $deleteFavicon = self::$localPath.''.$deleteFavicon.'.ico';
		    if (file_exists($deleteFavicon)) {
		       		unlink($deleteFavicon);
			}	
	  	} else {
	  		DB::update("?:sites", array( //update local path
	        'lastFaviconUpdate' => time()
		    ), $where); 
		    
	  	} 	  
	  	return true;
	}
	public static function findFaviconURLType($faviconURL, $URL){
			if (!empty($faviconURL)) {
			$HREFInfo = parse_url($faviconURL);
	        if (!empty($HREFInfo['scheme']) && !empty($HREFInfo['host']) && !empty($HREFInfo['path'])) {
	        	return self::verifyFaviconURL($faviconURL);
	        } else if (empty($HREFInfo['scheme']) && empty($HREFInfo['host'])) {
	        	return self::relativeURL($HREFInfo, $URL);
	        } else if (empty($HREFInfo['scheme']) && (!empty($HREFInfo['host']) && !empty($HREFInfo['path']))) {
	    		return self::absoluteURLWithoutScheme($HREFInfo);
	        } else {
	            return false;
	    	} 
	    }
	}

	public static function relativeURL($HREFInfo, $URL){
        $faviconURL = $URL.''.ltrim($HREFInfo['path'], '/');
        return self::verifyFaviconURL($faviconURL);
	}

	public static function absoluteURLWithoutScheme($HREFInfo){
		$faviconURL = $HREFInfo['host'].''.$HREFInfo['path'];
		return self::verifyFaviconURL($faviconURL);
	}

	public static function verifyFaviconURL($faviconURL){
		list(, , , $curlInfo,)  	= doCall($faviconURL, $data = '', self::$defaultTimeout);
	    $curlInfo = $curlInfo['info'];
	    if ($curlInfo['http_code'] == 200 && strstr($curlInfo['content_type'], "image") != null) {
	      return $faviconURL;
        } else {
            return false;
        }
	}
	public static function storeFavicontoLocalstorage($URL, $saveTo)
	{	
		
		list($faviconData, , , $curlInfo, )  = doCall($URL, $data = '', self::$defaultTimeout);
		$curlInfo = $curlInfo['info'];
	    if ($curlInfo['size_download'] > 1 && $curlInfo['size_download'] > $curlInfo['download_content_length']) {
	        $downloadSize = $curlInfo['size_download'];
	    } elseif ($curlInfo['download_content_length'] > 1) {
	        $downloadSize = $curlInfo['download_content_length'];
	    } 

		if (self::isImageFound($curlInfo['content_type'])) {
			if ($curlInfo['http_code'] == 200 && $downloadSize > 1) {
		        $fp = @fopen($saveTo, 'x');
				if ($fp === false) {
					return false;
				}
				$writeStatus = fwrite($fp, $faviconData);
				if ($writeStatus === false) {
					return false;
				}
			    fclose($fp);
                            return (file_exists($saveTo))?true:false;
		     } else {
		     	return false;
		     }
		} else {
			return false;
		}
	}

	public static function saveLastFaviconAppNotificationTime(){
		return updateOption('lastFaviconAppNotificationTime', time());
	}

	public static function getLastFaviconAppNotificationTime(){
		return getOption('lastFaviconAppNotificationTime');
	}

	public static function defaultFavicon($siteID){
		$where = array(
		      		'query' =>  "siteID=:siteID",
			      	'params' => array(
		               ':siteID'=>$siteID
					)
				);
		$time = time();
	    DB::update("?:sites", array(//update local path
	            'favicon' => 'default',
	            'lastFaviconUpdate' => $time
	    ), $where);
	}
	public static function removeFavicon($siteID){
		$where = array(
		      		'query' =>  "siteID=':siteID'",
			      	'params' => array(
		               ':siteID'=>$siteID
					)
				);
		$removeSiteData = DB::getArray("?:sites", "favicon, lastFaviconUpdate",$where);
   		$deleteFavicon = $removeSiteData[0]['favicon'];
		 if (file_exists($deleteFavicon)) {
	       		unlink($deleteFavicon);
		}	
	}
	public static function clearAllFavicon(){
		$faviconFolderPath = APP_ROOT.'/uploads/favicon/';
		self::clearFilesFromFolder($faviconFolderPath);
		$isDone = DB::UPDATE("?:sites",array('favicon' => NULL , 'lastFaviconUpdate' => 0 ), "1");
		if(!$isDone){ return false; }
	}
	public static function clearFilesFromFolder($path){
		$files = @glob($path."*.ico");
		if (empty($files)) {
			return false;
		}
		foreach ($files as $file) {
			@unlink($file);
		}
	}

} 
Le coin du marchand VO vente véhicule entre professionnels

Accès réservé aux professionnels

Site regroupant des annonces de véhicules marchands en vente entre professionnels. Vendez, achetez vos V.O entre pros en toute simplicité et sans intermédiaires.

Déposez gratuitement vos annonces*

*Offre de lancement

Marques
Nous avons trouvé annonces pour vous.

Slide Slide Slide Slide Slide En savoir plus

A propos de nous

Le Coin du Marchand
VO

Le Coin du Marchand
VO

Parce que le métier de marchand V.O. est en perpétuelle évolution
Le coin du marchand V.O. a décidé de vous accompagner à travers cette plateforme qui vous propose un service de petites annonces pour la vente et l’achat de véhicules entre professionnels revendeurs.

Pour l’approvisionnement de votre parc, pour une recherche personnalisée ou vendre des véhicules stockés , assurez-vous des transactions uniquement entre pros.
L’accès à la plateforme est sécurisé et exclusivement réservé aux professionnels.

Soigneusement sélectionnées

Annonces Récentes

Pourquoi Nous Choisir

Professionnalisme

Plateforme regroupant les professionnels qui proposent des véhicules de divers modèles à la vente

Sur toute la France

Les ventes se font uniquement entre professionnels

Meilleurs Tarifs

Vous trouverez de très bonnes occasions de véhicules à des tarifs marchands

Partenaires

  • Développement
  • Bénéfices Mutuelles
  • Collaborations
  • Visibilité
  • Soutenir d’autres Projets

Newsletter

Abonnez-vous à notre newsletter et restez informé de nos offres

Copyright © 2023 Le Coin du Marchand VO | All Rights Reserved | Yanacom