Вход Регистрация
Файл: forsoc.ru/manul/classes/CmsVersionDetector.inc.php
Строк: 308
<?php
/*
Example of usage:

<?php
include 'CmsVersionDetector.inc.php';

$detector = new CmsVersionDetector($argv[1]);
var_dump($detector->getCmsList());
var_dump($detector->getCmsVersions());
?>

*/

define('CMS_BITRIX''Bitrix');
define('CMS_WORDPRESS''Wordpress');
define('CMS_JOOMLA''Joomla');
define('CMS_DLE''Data Life Engine');
define('CMS_IPB''Invision Power Board');
define('CMS_WEBASYST''WebAsyst');
define('CMS_OSCOMMERCE''OsCommerce');
define('CMS_DRUPAL''Drupal');
define('CMS_MODX''MODX');
define('CMS_INSTANTCMS''Instant CMS');
define('CMS_PHPBB''PhpBB');
define('CMS_VBULLETIN''vBulletin');
define('CMS_SHOPSCRIPT''PHP ShopScript Premium');

define('CMS_VERSION_UNDEFINED''0.0');

class 
CmsVersionDetector
{
    private 
$rootPath;
    private 
$versions;
    private 
$types;

    public function 
__construct($rootPath '.')
    {
        
$this->rootPath $rootPath;
        
$this->versions = array();
        
$this->types = array();

        
$version '';

        if (
$this->checkBitrix($version)) {
            
$this->addCms(CMS_BITRIX$version);
        }

        if (
$this->checkWordpress($version)) {
            
$this->addCms(CMS_WORDPRESS$version);
        }

        if (
$this->checkJoomla($version)) {
            
$this->addCms(CMS_JOOMLA$version);
        }

        if (
$this->checkDle($version)) {
            
$this->addCms(CMS_DLE$version);
        }

        if (
$this->checkIpb($version)) {
            
$this->addCms(CMS_IPB$version);
        }

        if (
$this->checkWebAsyst($version)) {
            
$this->addCms(CMS_WEBASYST$version);
        }

        if (
$this->checkOsCommerce($version)) {
            
$this->addCms(CMS_OSCOMMERCE$version);
        }

        if (
$this->checkDrupal($version)) {
            
$this->addCms(CMS_DRUPAL$version);
        }

        if (
$this->checkMODX($version)) {
            
$this->addCms(CMS_MODX$version);
        }

        if (
$this->checkInstantCms($version)) {
            
$this->addCms(CMS_INSTANTCMS$version);
        }

        if (
$this->checkPhpBb($version)) {
            
$this->addCms(CMS_PHPBB$version);
        }

        if (
$this->checkVBulletin($version)) {
            
$this->addCms(CMS_VBULLETIN$version);
        }

        if (
$this->checkPhpShopScript($version)) {
            
$this->addCms(CMS_SHOPSCRIPT$version);
        }

    }

    function 
getCmsList()
    {
        return 
$this->types;
    }

    function 
getCmsVersions()
    {
        return 
$this->versions;
    }

    function 
getCmsNumber()
    {
        return 
count($this->types);
    }

    function 
getCmsName($index 0)
    {
        return 
$this->types[$index];
    }

    function 
getCmsVersion($index 0)
    {
        return 
$this->versions[$index];
    }

    private function 
addCms($type$version)
    {
        
$this->types[] = $type;
        
$this->versions[] = $version;
    }

    private function 
checkBitrix(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/bitrix')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/bitrix/modules/main/classes/general/version.php'));
            if (
preg_match('|define("SM_VERSION","(.+?)")|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }

        }

        return 
$res;
    }

    private function 
checkWordpress(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;


        if (
file_exists($this->rootPath '/wp-admin')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/wp-includes/version.php'));
            if (
preg_match('|$wp_versions*=s*'(.+?)'|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }
        }
        return 
$res;
    }

    private function 
checkJoomla(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/libraries/joomla')) {
            
$res true;

            
// for 1.5.x
            
$tmpContent = @implode('', @file($this->rootPath '/libraries/joomla/version.php'));
            if (
preg_match('|vars+$RELEASEs*=s*'(.+?)'|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];

                if (
preg_match('|vars+$DEV_LEVELs*=s*'(.+?)'|smi'$tmpContent$tmpVer)) {
                    
$version .= '.' $tmpVer[1];
                }
            }

            
// for 1.7.x
            
$tmpContent = @implode('', @file($this->rootPath '/includes/version.php'));
            if (
preg_match('|publics+$RELEASEs*=s*'(.+?)'|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];

                if (
preg_match('|publics+$DEV_LEVELs*=s*'(.+?)'|smi'$tmpContent$tmpVer)) {
                    
$version .= '.' $tmpVer[1];
                }
            }

            
// for 2.5.x and 3.x
            
$tmpContent = @implode('', @file($this->rootPath '/libraries/cms/version/version.php'));
            if (
preg_match('|publics+$RELEASEs*=s*'(.+?)'|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];

                if (
preg_match('|publics+$DEV_LEVELs*=s*'(.+?)'|smi'$tmpContent$tmpVer)) {
                    
$version .= '.' $tmpVer[1];
                }
            }
        }

        return 
$res;
    }

    private function 
checkDle(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/engine/engine.php')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/engine/data/config.php'));
            if (
preg_match('|'version_id's*=>s*"(.+?)"|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }

            
$tmpContent = @implode('', @file($this->rootPath '/install.php'));
            if (
preg_match('|'version_id's*=>s*"(.+?)"|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }
        }

        return 
$res;
    }

    private function 
checkIpb(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/ips_kernel')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/ips_kernel/class_xml.php'));
            if (
preg_match('|IP.Boards+v([0-9.]+)|si'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }
        }

        return 
$res;
    }

    private function 
checkWebAsyst(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/wbs/installer')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/license.txt'));
            if (
preg_match('|v([0-9.]+)|si'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }
        }

        return 
$res;
    }

    private function 
checkOsCommerce(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/includes/version.php')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/includes/version.php'));
            if (
preg_match('|([0-9.]+)|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }
        }

        return 
$res;
    }

    private function 
checkDrupal(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/sites/all')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/CHANGELOG.txt'));
            if (
preg_match('|Drupals+([0-9.]+)|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }
        }

        return 
$res;
    }

    private function 
checkMODX(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/manager/assets')) {
            
$res true;
            
// no way to pick up version
        
}

        return 
$res;
    }

    private function 
checkInstantCms(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/plugins/p_usertab')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/index.php'));
            if (
preg_match('|InstantCMSs+v([0-9.]+)|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }
        }

        return 
$res;
    }

    private function 
checkPhpBb(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/includes/acp')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/config.php'));
            if (
preg_match('|phpBBs+([0-9.x]+)|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }
        }

        return 
$res;
    }

    private function 
checkVBulletin(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/core/admincp')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/core/api.php'));
            if (
preg_match('|vBulletins+([0-9.x]+)|smi'$tmpContent$tmpVer)) {
                
$version $tmpVer[1];
            }
        }

        return 
$res;
    }

    private function 
checkPhpShopScript(&$version)
    {
        
$version CMS_VERSION_UNDEFINED;
        
$res false;

        if (
file_exists($this->rootPath '/install/consts.php')) {
            
$res true;

            
$tmpContent = @implode('', @file($this->rootPath '/install/consts.php'));
            if (
preg_match('|STRING_VERSION',s*'(.+?)'|smi', $tmpContent, $tmpVer)) {
                $version = $tmpVer[1];
            }
        }

        return $res;
    }

    public function getXMLNode()
    {
        $cmsNames = $this->getCmsList();
        $cmsVersions = $this->getCmsVersions();

        $dom = new DOMDocument('
1.0', 'utf-8');
        $cmsListNode = $dom->createElement('
cms_list');

        for ($i = 0; $i < count($cmsNames); ++$i) {
            $cmsNode = $dom->createElement('
cms');
            $cmsNode->setAttribute('
name', $cmsNames[$i]);
            $cmsNode->setAttribute('
version', $cmsVersions[$i]);
            $cmsListNode->appendChild($cmsNode);
        }

        $dom->appendChild($cmsListNode);
        return $dom->getElementsByTagName('
cms_list')->item(0);
    }
}
Онлайн: 3
Реклама