Core/InternalModule.php
public function checkExtendedClasses()
    {
        $aMetadataExtend = $this->getInfo('extend');
        $aMetadataExtend = is_array($aMetadataExtend) ? $aMetadataExtend : [];

        $aResult = [];

        /**
         * only convert class names to lower if we don't use namespace
         */
        if (!$this->isMetadataVersionGreaterEqual('2.0')) {
            $aMetadataExtend = array_change_key_case($aMetadataExtend, CASE_LOWER);
            //convert legacy classnames because $aAllModules dos not contain legacy classes
            if (method_exists(Registry::class ,'getBackwardsCompatibilityClassMap')) {
                $map = Registry::getBackwardsCompatibilityClassMap();
                foreach ($aMetadataExtend as $legacyName => $file) {
                    if (isset($map[$legacyName])) {
                        $namespaceName = $map[$legacyName];
                        $aMetadataExtend[$namespaceName] = $file;
                        unset($aMetadataExtend[$legacyName]);
                    }
                }
            }
        }

        foreach ($aMetadataExtend as $sClassName => $sModuleName) {
            $key_state = $iState = self::OK;

            if (strpos($sClassName,'OxidEsales\\EshopCommunity\\') === 0 ||
                strpos($sClassName,'OxidEsales\\EshopEnterprise\\') === 0 ||
                strpos($sClassName,'OxidEsales\\EshopProfessional\\') === 0 ||
                !class_exists($sClassName)
            ) {
                if (strpos($sClassName,'oxerp') === 0) {
                    //AS ERP module does still use a own autoloader
                    //classes of oxerp will not be found with class_exists
                    $erp_dir = Registry::getConfig()->getModulesDir() .'erp/';
                    if (strpos($sClassName,'oxerptype_') === 0) {
                        $dir = $erp_dir.'objects/';
                    } else {
                        $dir = $erp_dir;
                    }

                    $sFullPath  = $dir.$sClassName.'.php';

                    if (!file_exists($sFullPath)) {
                        $key_state = self::SHOP_FILE_NOT_FOUND;
                        $this->state |= self::NEED_MANUAL_FIXED;
                    }
                } else {
                    $key_state = self::SHOP_FILE_NOT_FOUND;
                    $this->state |= self::NEED_MANUAL_FIXED;
                }
            }

            $aResult[ $sClassName ]['key_state'] = $key_state;

            if (!$this->checkPhpFileExists($sModuleName)) {
                $iState = self::MODULE_FILE_NOT_FOUND;
                $this->state |= self::NEED_MANUAL_FIXED;
            }

            $aResult[ $sClassName ][ 'data' ] = $sModuleName;
            $aResult[ $sClassName ][ 'state' ] = $iState;
        }

        return $aResult;
    }
public function checkExtendedClasses()
    {
        $aMetadataExtend = $this->getInfo('extend');
        $aMetadataExtend = is_array($aMetadataExtend) ? $aMetadataExtend : [];

        $aResult = [];

        /**
         * only convert class names to lower if we don't use namespace
         */
        if (!$this->isMetadataVersionGreaterEqual('2.0')) {
            $aMetadataExtend = array_change_key_case($aMetadataExtend, CASE_LOWER);
            //convert legacy classnames because $aAllModules dos not contain legacy classes
            if (method_exists(Registry::class ,'getBackwardsCompatibilityClassMap')) {
                $map = Registry::getBackwardsCompatibilityClassMap();
                foreach ($aMetadataExtend as $legacyName => $file) {
                    if (isset($map[$legacyName])) {
                        $namespaceName = $map[$legacyName];
                        $aMetadataExtend[$namespaceName] = $file;
                        unset($aMetadataExtend[$legacyName]);
                    }
                }
            }
        }

        foreach ($aMetadataExtend as $sClassName => $sModuleName) {
            $key_state = $iState = self::OK;

            if (strpos($sClassName,'OxidEsales\\EshopCommunity\\') === 0 ||
                strpos($sClassName,'OxidEsales\\EshopEnterprise\\') === 0 ||
                strpos($sClassName,'OxidEsales\\EshopProfessional\\') === 0 ||
                !class_exists($sClassName)
            ) {
                if (strpos($sClassName,'oxerp') === 0) {
                    //AS ERP module does still use a own autoloader
                    //classes of oxerp will not be found with class_exists
                    $erp_dir = Registry::getConfig()->getModulesDir() .'erp/';
                    if (strpos($sClassName,'oxerptype_') === 0) {
                        $dir = $erp_dir.'objects/';
                    } else {
                        $dir = $erp_dir;
                    }

                    $sFullPath  = $dir.$sClassName.'.php';

                    if (!file_exists($sFullPath)) {
                        $key_state = self::SHOP_FILE_NOT_FOUND;
                        $this->state |= self::NEED_MANUAL_FIXED;
                    }
                } else {
                    $key_state = self::SHOP_FILE_NOT_FOUND;
                    $this->state |= self::NEED_MANUAL_FIXED;
                }
            }

            $aResult[ $sClassName ]['key_state'] = $key_state;

            if (!$this->checkPhpFileExists($sModuleName)) {
                $iState = self::MODULE_FILE_NOT_FOUND;
                $this->state |= self::NEED_MANUAL_FIXED;
            }

            $aResult[ $sClassName ][ 'data' ] = $sModuleName;
            $aResult[ $sClassName ][ 'state' ] = $iState;
        }

        return $aResult;
    }
Analyze extended class information in metadata and database.

@return array