2016-10-06 15:57:01 +00:00
< ? php
/**
* Project :
* ConLite CMS
*
* Description :
* Generate metatags for current article if they are not set in article properties
*
* @ package ConLite Core
* @ subpackage Chains
2019-07-03 11:58:28 +00:00
* @ version $Id $ :
2016-10-06 15:57:01 +00:00
* @ author Ortwin Pinke
*
* based on CONTENIDO 4.8 . 15 [ 2011 - 07 - 31 ]
* @ author Andreas Lindner , Unknown
* @ copyright four for business AG < www . 4 fb . de >
* @ license http :// www . contenido . org / license / LIZENZ . txt
* @ link http :// www . 4 fb . de
* @ link http :// www . contenido . org
*
*/
/**
* No direct call
*/
if ( ! defined ( 'CON_FRAMEWORK' )) {
die ( 'Illegal call' );
}
// Compatibility for php < 5.3 using closures or not, @todo remove if we only support PHP >= 5.3
if ( version_compare ( PHP_VERSION , " 5.3 " , " < " )) {
cInclude ( " plugins " , " chains/createmetatags/includes/keyword_density_php52.php " );
} else {
cInclude ( " plugins " , " chains/createmetatags/includes/keyword_density.php " );
}
cInclude ( " plugins " , " chains/createmetatags/classes/class.metatag.creator.html5.php " );
function cecCreateMetatags ( $metatags ) {
global $cfg , $lang , $idart , $client , $cfgClient , $idcat , $idartlang ;
$bIsHTML5 = (( getEffectiveSetting ( 'generator' , 'html5' , 'false' ) == 'false' ) ? false : true );
if ( $bIsHTML5 ) {
$aConfig = array (
'cachetime' => 3600 ,
'cachedir' => $cfgClient [ $client ][ 'path' ][ 'frontend' ] . " cache/ "
);
$oHtml5MetaCreator = new MetaTagCreatorHtml5 ( $metatags , $aConfig );
return $oHtml5MetaCreator -> generateMetaTags ();
}
//Basic settings
$cachetime = 3600 ; // measured in seconds
$cachedir = $cfgClient [ $client ][ 'path' ][ 'frontend' ] . " cache/ " ;
if ( ! is_array ( $metatags )) {
$metatags = array ();
}
$hash = 'metatag_' . md5 ( $idart . '/' . $lang );
$cachefilename = $cachedir . $hash . '.tmp' ;
#Check if rebuilding of metatags is necessary
$reload = true ;
$fileexists = false ;
if ( file_exists ( $cachefilename )) {
$fileexists = true ;
2019-08-19 03:13:29 +00:00
$diff = time () - filemtime ( $cachefilename );
2016-10-06 15:57:01 +00:00
if ( $diff > $cachetime ) {
$reload = true ;
} else {
$reload = false ;
}
}
if ( $reload ) {
//(Re)build metatags
$db = new DB_ConLite ();
#Get encoding
$sql = " SELECT * FROM " . $cfg [ 'tab' ][ 'lang' ] . " WHERE idlang= " . ( int ) $lang ;
$db -> query ( $sql );
if ( $db -> next_record ()) {
$sEncoding = strtoupper ( $db -> f ( 'encoding' ));
} else {
$sEncoding = " ISO-8859-1 " ;
}
#Get idcat of homepage
$sql = " SELECT a.idcat
FROM
" . $cfg['tab'] ['cat_tree']. " AS a ,
" . $cfg['tab'] ['cat_lang']. " AS b
WHERE
( a . idcat = b . idcat ) AND
( b . visible = 1 ) AND
( b . idlang = " .Contenido_Security::toInteger( $lang ). " )
ORDER BY a . idtree LIMIT 1 " ;
$db -> query ( $sql );
if ( $db -> next_record ()) {
$idcat_homepage = $db -> f ( 'idcat' );
}
$availableTags = conGetAvailableMetaTagTypes ();
#Get first headline and first text for current article
$oArt = new Article ( $idart , $client , $lang );
#Set idartlang, if not set
if ( $idartlang == '' ) {
$idartlang = $oArt -> getIdArtLang ();
}
$arrHead1 = $oArt -> getContent ( " htmlhead " );
$arrHead2 = $oArt -> getContent ( " head " );
if ( ! is_array ( $arrHead1 )) {
$arrHead1 = array ();
}
if ( ! is_array ( $arrHead2 )) {
$arrHead2 = array ();
}
$arrHeadlines = array_merge ( $arrHead1 , $arrHead2 );
foreach ( $arrHeadlines as $key => $value ) {
if ( $value != '' ) {
$sHeadline = $value ;
break ;
}
}
$sHeadline = strip_tags ( $sHeadline );
$sHeadline = substr ( str_replace ( chr ( 13 ) . chr ( 10 ), ' ' , $sHeadline ), 0 , 100 );
$arrText1 = $oArt -> getContent ( " html " );
$arrText2 = $oArt -> getContent ( " text " );
if ( ! is_array ( $arrText1 )) {
$arrText1 = array ();
}
if ( ! is_array ( $arrText2 )) {
$arrText2 = array ();
}
$arrText = array_merge ( $arrText1 , $arrText2 );
foreach ( $arrText as $key => $value ) {
if ( $value != '' ) {
$sText = $value ;
break ;
}
}
$sText = strip_tags ( urldecode ( $sText ));
$sText = keywordDensity ( '' , $sText );
//Get metatags for homeapge
$arrHomepageMetaTags = array ();
$sql = " SELECT startidartlang FROM " . $cfg [ " tab " ][ " cat_lang " ] . " WHERE (idcat= " . Contenido_Security :: toInteger ( $idcat_homepage ) . " ) AND(idlang= " . Contenido_Security :: toInteger ( $lang ) . " ) " ;
$db -> query ( $sql );
if ( $db -> next_record ()){
$iIdArtLangHomepage = $db -> f ( 'startidartlang' );
#get idart of homepage
$sql = " SELECT idart FROM " . $cfg [ " tab " ][ " art_lang " ] . " WHERE idartlang = " . Contenido_Security :: toInteger ( $iIdArtLangHomepage );
$db -> query ( $sql );
if ( $db -> next_record ()) {
$iIdArtHomepage = $db -> f ( 'idart' );
}
$t1 = $cfg [ " tab " ][ " meta_tag " ];
$t2 = $cfg [ " tab " ][ " meta_type " ];
$sql = " SELECT " . $t1 . " .metavalue, " . $t2 . " .metatype FROM " . $t1 .
" INNER JOIN " . $t2 . " ON " . $t1 . " .idmetatype = " . $t2 . " .idmetatype WHERE " .
$t1 . " .idartlang = " . $iIdArtLangHomepage .
" ORDER BY " . $t2 . " .metatype " ;
$db -> query ( $sql );
while ( $db -> next_record ()) {
$arrHomepageMetaTags [ $db -> f ( " metatype " )] = $db -> f ( " metavalue " );
}
$oArt = new Article ( $iIdArtHomepage , $client , $lang );
$arrHomepageMetaTags [ 'pagetitle' ] = $oArt -> getField ( 'title' );
}
//Cycle through all metatags
foreach ( $availableTags as $key => $value ) {
$metavalue = conGetMetaValue ( $idartlang , $key );
if ( strlen ( $metavalue ) == 0 ){
//Add values for metatags that don't have a value in the current article
switch ( strtolower ( $value [ " name " ])){
case 'author' :
//Build author metatag from name of last modifier
$oArt = new Article ( $idart , $client , $lang );
$lastmodifier = $oArt -> getField ( " modifiedby " );
$oUser = new User ();
$oUser -> loadUserByUserID ( md5 ( $lastmodifier ));
$lastmodifier_real = $oUser -> getRealname ( md5 ( $lastmodifier ));
$iCheck = CheckIfMetaTagExists ( $metatags , 'author' );
$metatags [ $iCheck ][ 'name' ] = 'author' ;
$metatags [ $iCheck ][ 'content' ] = $lastmodifier_real ;
break ;
case 'date' :
//Build date metatag from date of last modification
$oArt = new Article ( $idart , $client , $lang );
$lastmodified = $oArt -> getField ( " lastmodified " );
$iCheck = CheckIfMetaTagExists ( $metatags , 'date' );
$metatags [ $iCheck ][ 'name' ] = 'date' ;
$metatags [ $iCheck ][ 'content' ] = $lastmodified ;
break ;
case 'description' :
//Build description metatag from first headline on page
$iCheck = CheckIfMetaTagExists ( $metatags , 'description' );
$metatags [ $iCheck ][ 'name' ] = 'description' ;
$metatags [ $iCheck ][ 'content' ] = $sHeadline ;
break ;
case 'keywords' :
$iCheck = CheckIfMetaTagExists ( $metatags , 'keywords' );
$metatags [ $iCheck ][ 'name' ] = 'keywords' ;
$metatags [ $iCheck ][ 'content' ] = $sText ;
break ;
case 'revisit-after' :
case 'robots' :
case 'expires' :
//Build these 3 metatags from entries in homepage
$sCurrentTag = strtolower ( $value [ " name " ]);
$iCheck = CheckIfMetaTagExists ( $metatags , $sCurrentTag );
$metatags [ $iCheck ][ 'name' ] = $sCurrentTag ;
$metatags [ $iCheck ][ 'content' ] = $arrHomepageMetaTags [ $sCurrentTag ];
break ;
}
}
}
// save metatags in cache file
file_put_contents ( $cachefilename , serialize ( $metatags ));
} else {
#Get metatags from file system cache
$metatags = unserialize ( file_get_contents ( $cachefilename ));
}
return $metatags ;
}
/**
* Checks if the metatag allready exists inside the metatag list .
*
* @ param array | mixed $arrMetatags List of metatags or not a list
* @ param string $sCheckForMetaTag The metatag to check
* @ return int Position of metatag inside the metatag list or the next
* available position
*/
function CheckIfMetaTagExists ( $arrMetatags , $sCheckForMetaTag ) {
if ( ! is_array ( $arrMetatags ) || count ( $arrMetatags ) == 0 ) {
// metatag list ist not set or empty, return initial position
return 0 ;
}
// loop thru existing metatags and check against the listitem name
foreach ( $arrMetatags as $pos => $item ) {
if ( $item [ 'name' ] == $sCheckForMetaTag ) {
// metatag found -> return the position
return $pos ;
}
}
// metatag doesn't exists, return next position
return count ( $arrMetatags );
}
?>