Index: branches/5.3.x/core/install/cache/class_structure.php =================================================================== --- branches/5.3.x/core/install/cache/class_structure.php +++ branches/5.3.x/core/install/cache/class_structure.php @@ -5,7 +5,7 @@ * This file is automatically @generated. Use 'php tools/build_class_map.php' to rebuild it. */ return array( - 'cache_format' => 1, + 'cache_format' => 2, 'classes' => array( 'AdminEventsHandler' => '/core/units/admin/admin_events_handler.php', 'AdminTagProcessor' => '/core/units/admin/admin_tag_processor.php', @@ -338,4 +338,2200 @@ 'kZendPDFRenderer' => '/core/units/pdf/pdf_renderer_zend.php', 'kiCacheable' => '/core/kernel/interfaces/cacheable.php', ), + 'class_info' => array( + 'AdminEventsHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'AdminTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'AjaxFormHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'ApcCacheHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kCacheHandler', + ), + ), + 'BackupHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'BaseSession' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'BaseSessionStorage' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBBase', + ), + ), + 'CacheSettings' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'CaptchaEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kEventHandler', + ), + ), + 'CategoriesEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'CategoriesItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBItem', + ), + ), + 'CategoriesTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'CategoryHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'CategoryItemRewrite' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'CategoryItemsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'CategoryItemsTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'CategoryPermissionRebuild' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'ChangeLog' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'ChangeLogEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ChangeLogTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'ColumnSet' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'ConfigSearchEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ConfigSearchTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'ConfigurationEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ConfigurationItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBItem', + ), + ), + 'ConfigurationTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'ConfigurationValidator' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kValidator', + ), + ), + 'ContentEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ContentTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'CoreUpgrades' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kUpgradeHelper', + ), + ), + 'CountryStateEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'CssMinifyHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'CustomDataEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'CustomFieldsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'CustomFieldsTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'Debugger' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'DebuggerUtil' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'DeploymentHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'DraftEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'EditPickerHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'EmailDelivery' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'EmailLogEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'EmailLogStatus' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'EmailLogTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'EmailQueueEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'EmailQueueTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'EmailTemplate' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'EmailTemplateEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'EmailTemplateTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'FakeCacheHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kCacheHandler', + ), + ), + 'FavoritesEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'FckEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'FckTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'FileEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'FileHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'FileTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'FormFieldEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'FormFieldsTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'FormSubmissionHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'FormSubmissionTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'FormSubmissionsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'FormsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'FormsTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'GeoCodeHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'GroupTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'GroupsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'IDBConnection' => array( + 'type' => 2, + ), + 'ImageEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ImageHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'ImageTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'ImagesItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBItem', + ), + ), + 'InPortalPrerequisites' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'InpCustomFieldsHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassDetector' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'PhpParser\\NodeVisitorAbstract', + ), + ), + 'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassMapBuilder' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\CodeFolderFilterIterator' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'RecursiveFilterIterator', + ), + ), + 'ItemFilterEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ItemFilterTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'JSONHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'JsMinifyHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'Language' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'LanguageImportHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'LanguagesEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'LanguagesItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBItem', + ), + ), + 'LanguagesTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'LeftJoinOptimizer' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'ListHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'LoginResult' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'MInputHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'MailboxHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'MailingList' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'MailingListEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'MailingListHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'MailingListTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'MaintenanceMode' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'MassImageResizer' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'MemcacheCacheHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kCacheHandler', + ), + ), + 'MenuHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'MimeDecodeHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'MinifyHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'ModuleDeploymentLog' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'ModuleDeploymentLogEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ModulesEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ModulesTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'NParser' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'NParserCompiler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'POP3Helper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'PageHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'PageRevisionEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'PageRevisionTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'Params' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'ParserException' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'Exception', + ), + ), + 'PasswordHash' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'PasswordHashingMethod' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'PermissionTypeEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'PermissionsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'PermissionsTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'PhraseTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'PhrasesEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'PriorityEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'PromoBlockEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'PromoBlockGroupEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'PromoBlockGroupTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'PromoBlockTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'PromoBlockType' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'RatingHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'RelatedSearchEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'RelatedSearchTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'RelationshipEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'RelationshipTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'ReviewsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ReviewsTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'ScheduledTask' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'ScheduledTaskEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'SelectorsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'SelectorsItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBItem', + ), + ), + 'SelectorsTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'Session' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'BaseSession', + ), + ), + 'SessionLogEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'SessionStorage' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'BaseSessionStorage', + ), + ), + 'SiteConfigEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kEventHandler', + ), + ), + 'SiteConfigHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'SiteConfigTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kTagProcessor', + ), + ), + 'SiteDomainEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'SiteHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'SkinEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'SkinHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'SpamHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'SpamReportEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'SpamReportTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'StatisticsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'StatisticsTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'StorageEngine' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'StylesheetsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'StylesheetsItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBItem', + ), + ), + 'SubmissionFormField' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'SubmissionLogEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'SubmissionLogTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'SystemEventSubscriptionEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'SystemEventSubscriptionTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'SystemLogEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'SystemLogTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'TemplateHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'TemplatesCache' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'ThemeFileEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ThemeItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBItem', + ), + ), + 'ThemesEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ThemesTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'ThesaurusEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'ThesaurusTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'TranslationSaveMode' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'TranslatorEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'TranslatorTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'UnitConfigDecorator' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'UserGroupsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'UserHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'UserProfileEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'UserProfileTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'UserType' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'UsersEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'UsersItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBItem', + ), + ), + 'UsersSyncronize' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'UsersSyncronizeManager' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'UsersTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'VisitsEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'VisitsList' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBList', + ), + ), + 'VisitsTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'XCacheCacheHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kCacheHandler', + ), + ), + 'XMLIterator' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'Iterator', + ), + ), + '_BlockTag' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + '_Tag_Cache' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_Capture' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_Tag_DefineElement', + ), + ), + '_Tag_Comment' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_Compress' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_DefaultParam' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_DefineElement' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_If' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_IfDataExists' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_IfNot' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_Tag_If', + ), + ), + '_Tag_Include' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_Param' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_RenderElement' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_Tag_DefineElement', + ), + ), + '_Tag_RenderElements' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + '_Tag_SetParam' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => '_BlockTag', + ), + ), + 'clsCachedPermissions' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'clsRecursionStack' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'fckFCKHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kApplication' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kiCacheable', + ), + ), + 'kArray' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'kiCacheable', + ), + ), + 'kBase' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kBracketsHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kCCDateFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kCSSDefaults' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kCSVHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kCache' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kCacheHandler' => array( + 'type' => 1, + 'modifiers' => 1, + ), + 'kCacheManager' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'kiCacheable', + ), + ), + 'kCaptchaHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kCatDBEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBEventHandler', + ), + ), + 'kCatDBItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBItem', + ), + ), + 'kCatDBItemExportHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kCatDBList' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBList', + ), + ), + 'kCatDBTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBTagProcessor', + ), + ), + 'kChangesFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kChartHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kClipboardHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kColumnPickerHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kCookieHasher' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kCountHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kCountryStatesHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kCronField' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kCronHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kCurlHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kCustomFieldFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kDBBase' => array( + 'type' => 1, + 'modifiers' => 1, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kDBConnection' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'IDBConnection', + ), + ), + 'kDBConnectionDebug' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBConnection', + ), + ), + 'kDBEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kEventHandler', + ), + ), + 'kDBItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBBase', + ), + ), + 'kDBList' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kDBBase', + 1 => 'Iterator', + 2 => 'Countable', + ), + ), + 'kDBLoadBalancer' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'IDBConnection', + ), + ), + 'kDBTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kTagProcessor', + ), + ), + 'kDateFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kEmail' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kEmailSendingHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kEmailTemplateHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kErrorHandlerStack' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHandlerStack', + ), + ), + 'kEvent' => array( + 'type' => 1, + 'modifiers' => 2, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kEventHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kEventManager' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'kiCacheable', + ), + ), + 'kExceptionHandlerStack' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHandlerStack', + ), + ), + 'kFactory' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'kiCacheable', + ), + ), + 'kFactoryException' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'Exception', + ), + ), + 'kFilenamesHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kFilesizeFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kHTTPQuery' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'Params', + ), + ), + 'kHandlerStack' => array( + 'type' => 1, + 'modifiers' => 1, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kHookManager' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'kiCacheable', + ), + ), + 'kInstallToolkit' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kInstallator' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kLEFTFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kLogger' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kMainTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kTagProcessor', + ), + ), + 'kModulesHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kMultiLanguage' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kMultiLanguageHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kMultipleFilter' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kMySQLQuery' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'Iterator', + 1 => 'Countable', + 2 => 'SeekableIterator', + ), + ), + 'kMySQLQueryCol' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kMySQLQuery', + ), + ), + 'kNavigationBar' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kNoPermissionException' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kRedirectException', + ), + ), + 'kOpenerStack' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kOptionsFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kPDFElemFactory' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kPDFElement' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kPDFHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kPDFImage' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kPDFElement', + ), + ), + 'kPDFLine' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kPDFElement', + ), + ), + 'kPDFRenderer' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kPDFStylesheet' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kPDFTable' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kPDFElement', + ), + ), + 'kPDFTableRow' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kPDFElement', + ), + ), + 'kPDFTextElement' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kPDFElement', + ), + ), + 'kPasswordFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kPermCacheUpdater' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kPermissionsHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kPhraseCache' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kPictureFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kUploadFormatter', + ), + ), + 'kPlainUrlProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kUrlProcessor', + ), + ), + 'kPriorityHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kRecursiveHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kRedirectException' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'Exception', + ), + ), + 'kRequestManager' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kRewriteUrlProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kUrlProcessor', + ), + ), + 'kScheduledTaskManager' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'kiCacheable', + ), + ), + 'kSearchHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kSectionsHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kSerializedFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kSocket' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kSubscriptionAnalyzer' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kSubscriptionItem' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kSubscriptionManager' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kSystemConfig' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kSystemConfigException' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'Exception', + ), + ), + 'kTCPDFRenderer' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kPDFRenderer', + ), + ), + 'kTagProcessor' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kTempHandlerSubTable' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kTempHandlerTable', + ), + ), + 'kTempHandlerTable' => array( + 'type' => 1, + 'modifiers' => 1, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kTempHandlerTopTable' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kTempHandlerTable', + ), + ), + 'kTempTablesHandler' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kThemesHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kUnitConfig' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kUnitConfigCloner' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'kiCacheable', + ), + ), + 'kUnitConfigReader' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + 1 => 'kiCacheable', + ), + ), + 'kUnitFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kUpgradeHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kUploadFormatter' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kFormatter', + ), + ), + 'kUploadHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kUploaderException' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'Exception', + ), + ), + 'kUrlManager' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kUrlProcessor' => array( + 'type' => 1, + 'modifiers' => 1, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kUtil' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kValidator' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kBase', + ), + ), + 'kXMLHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), + 'kXMLNode' => array( + 'type' => 1, + 'modifiers' => 0, + ), + 'kXMLNode5' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kXMLNode', + 1 => 'IteratorAggregate', + ), + ), + 'kZendPDFRenderer' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kPDFRenderer', + ), + ), + 'kiCacheable' => array( + 'type' => 2, + ), + ), ); Index: branches/5.3.x/core/kernel/application.php =================================================================== --- branches/5.3.x/core/kernel/application.php +++ branches/5.3.x/core/kernel/application.php @@ -2275,6 +2275,19 @@ } /** + * Returns sub-classes of given ancestor class. + * + * @param string $ancestor_class Ancestor class. + * @param boolean $concrete_only Return only non-abstract classes. + * + * @return array + */ + public function getSubClasses($ancestor_class, $concrete_only = true) + { + return $this->Factory->getSubClasses($ancestor_class, $concrete_only); + } + + /** * Checks if application is in debug mode * * @param bool $check_debugger check if kApplication debugger is initialized too, not only for defined DEBUG_MODE constant Index: branches/5.3.x/core/kernel/managers/cache_manager.php =================================================================== --- branches/5.3.x/core/kernel/managers/cache_manager.php +++ branches/5.3.x/core/kernel/managers/cache_manager.php @@ -302,7 +302,7 @@ { // maybe discover keys automatically from corresponding classes $cache_keys = Array ( - 'Factory.Files', 'Factory.Namespaces', 'Factory.realClasses', + 'Factory.Files', 'Factory.ClassInfo', 'Factory.ClassTree', 'Factory.Namespaces', 'Factory.realClasses', 'ConfigReader.prefixFiles', 'ConfigCloner.clones', 'EventManager.beforeHooks', 'EventManager.afterHooks', 'EventManager.scheduledTasks', 'EventManager.buildEvents', 'Application.ReplacementTemplates', 'Application.RewriteListeners', 'Application.ModuleInfo', Index: branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassDetector.php =================================================================== --- branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassDetector.php +++ branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassDetector.php @@ -16,7 +16,10 @@ use PhpParser\Node; +use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassLike; +use PhpParser\Node\Stmt\Interface_; +use PhpParser\Node\Stmt\Trait_; use PhpParser\NodeVisitorAbstract; defined('FULL_PATH') or die('restricted access!'); @@ -58,7 +61,54 @@ public function enterNode(Node $node) { if ( $node instanceof ClassLike ) { - $this->classMapBuilder->addClass((string)$node->namespacedName); + $class_info = array(); + + if ( $node instanceof Class_ ) { + $class_info['type'] = \kFactory::TYPE_CLASS; + $class_info['modifiers'] = 0; + + if ( $node->isAbstract() ) { + $class_info['modifiers'] |= \kFactory::MODIFIER_ABSTRACT; + } + + if ( $node->isFinal() ) { + $class_info['modifiers'] |= \kFactory::MODIFIER_FINAL; + } + + $extends = array(); + + if ( $node->extends ) { + $extends[] = (string)$node->extends; + } + + if ( $node->implements ) { + foreach ( $node->implements as $interface ) { + $extends[] = (string)$interface; + } + } + + if ( $extends ) { + $class_info['extends'] = $extends; + } + } + elseif ( $node instanceof Interface_ ) { + $class_info['type'] = \kFactory::TYPE_INTERFACE; + + if ( $node->extends ) { + $extends = array(); + + foreach ( $node->extends as $interface ) { + $extends[] = (string)$interface; + } + + $class_info['extends'] = $extends; + } + } + elseif ( $node instanceof Trait_ ) { + $class_info['type'] = \kFactory::TYPE_TRAIT; + } + + $this->classMapBuilder->addClass((string)$node->namespacedName, $class_info); } } Index: branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassMapBuilder.php =================================================================== --- branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassMapBuilder.php +++ branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassMapBuilder.php @@ -25,7 +25,7 @@ class ClassMapBuilder { - const CACHE_FORMAT = 1; + const CACHE_FORMAT = 2; const CACHE_FILE_STRUCTURE = 'class_structure.php'; @@ -53,11 +53,18 @@ protected $classToFileMap = array(); /** - * List of classes, declared in each file (key - file, value - class list). + * Class information used during cache building (file > class > class_info). * * @var array */ - protected $fileToClassMap = array(); + protected $buildingCache = array(); + + /** + * Class information (type, extends, implements, etc.). + * + * @var array + */ + protected $classInfo = array(); /** * Stores hash of each file on given path. @@ -152,7 +159,7 @@ } /** - * Returns class map, that was build previously. + * Returns class map and class information, that was built previously. * * @return array */ @@ -160,7 +167,7 @@ { $this->load(self::CACHE_FILE_STRUCTURE, false); - return $this->classToFileMap; + return array($this->classToFileMap, $this->classInfo); } /** @@ -172,8 +179,8 @@ public function build() { if ( !class_exists('PhpParser\Parser') ) { - $error_msg = 'PHP Parser not found. '; - $error_msg .= 'Make sure, that Composer dependencies were installed using "php composer.phar install --dev" command.'; + $error_msg = 'PHP Parser not found. Make sure, that Composer dependencies were '; + $error_msg .= 'installed using "php composer.phar install --dev" command.'; throw new \RuntimeException($error_msg); } @@ -201,6 +208,7 @@ ksort($this->classToFileMap); ksort($this->fileHashes); + ksort($this->classInfo); $this->store(self::CACHE_FILE_STRUCTURE); $this->store(self::CACHE_FILE_HASHES); @@ -237,22 +245,25 @@ $cache = include $file_path; - if ( $cache['cache_format'] < self::CACHE_FORMAT ) { + if ( $cache['cache_format'] != self::CACHE_FORMAT ) { return; } if ( $filename === self::CACHE_FILE_STRUCTURE ) { + $class_info = $cache['class_info']; + if ( $for_writing ) { foreach ( $cache['classes'] as $class => $file ) { - if ( !isset($this->fileToClassMap[$file]) ) { - $this->fileToClassMap[$file] = array(); + if ( !isset($this->buildingCache[$file]) ) { + $this->buildingCache[$file] = array(); } - $this->fileToClassMap[$file][] = $class; + $this->buildingCache[$file][$class] = $class_info[$class]; } } else { $this->classToFileMap = $cache['classes']; + $this->classInfo = $class_info; } } elseif ( $filename === self::CACHE_FILE_HASHES ) { @@ -306,6 +317,7 @@ */ protected function createParser() { + \kUtil::setResourceLimit(); ini_set('xdebug.max_nesting_level', 3000); $this->parser = new Parser(new Lexer()); $this->traverser = new NodeTraverser(); @@ -330,15 +342,14 @@ if ( $current_hash === $previous_hash ) { // File wasn't change since time, when cache was built. - if ( isset($this->fileToClassMap[$file]) ) { - foreach ( $this->fileToClassMap[$file] as $class ) { - $this->addClass($class); + if ( isset($this->buildingCache[$file]) ) { + foreach ( $this->buildingCache[$file] as $class => $class_info ) { + $this->addClass($class, $class_info); } } } else { // Parse file, because it's content doesn't match the cache. - $this->fileToClassMap[$file] = array(); $this->fileHashes[$file] = $current_hash; $statements = $this->parser->parse($code); @@ -360,6 +371,7 @@ if ( $filename === self::CACHE_FILE_STRUCTURE ) { $cache['classes'] = $this->classToFileMap; + $cache['class_info'] = $this->classInfo; } elseif ( $filename === self::CACHE_FILE_HASHES ) { $cache['file_hashes'] = $this->fileHashes; @@ -422,14 +434,15 @@ /** * Adds class to the map. * - * @param string $class Class. + * @param string $class Class. + * @param array $class_info Class info. * * @return void */ - public function addClass($class) + public function addClass($class, array $class_info) { + $this->classInfo[$class] = $class_info; $this->classToFileMap[$class] = $this->currentFile; - $this->fileToClassMap[$this->currentFile][] = $class; } } Index: branches/5.3.x/core/kernel/utility/factory.php =================================================================== --- branches/5.3.x/core/kernel/utility/factory.php +++ branches/5.3.x/core/kernel/utility/factory.php @@ -18,6 +18,13 @@ class kFactory extends kBase implements kiCacheable { + const TYPE_CLASS = 1; + const TYPE_INTERFACE = 2; + const TYPE_TRAIT = 3; + + const MODIFIER_ABSTRACT = 1; + const MODIFIER_FINAL = 2; + /** * Mapping between class name and file name * where class definition can be found. @@ -29,6 +36,20 @@ protected $classMap = Array (); /** + * Class information. + * + * @var array + */ + protected $classInfo = array(); + + /** + * Information about class usage among other classes. + * + * @var array + */ + protected $classTree = array(); + + /** * The PSR-4 compliant namespace-to-folder mapping. * * @var array @@ -91,11 +112,24 @@ } foreach ( $class_map_builders as $class_map_builder ) { - $class_map = $class_map_builder->get(); + list($class_map, $class_info) = $class_map_builder->get(); $class_names = array_keys($class_map); $this->classMap = array_merge($this->classMap, $class_map); + $this->classInfo = array_merge($this->classInfo, $class_info); $this->realClasses = array_merge($this->realClasses, array_combine($class_names, $class_names)); + + foreach ( $class_info as $class => $class_data ) { + if ( isset($class_data['extends']) ) { + foreach ( $class_data['extends'] as $extends_class ) { + if ( !isset($this->classTree[$extends_class]) ) { + $this->classTree[$extends_class] = array(); + } + + $this->classTree[$extends_class][] = $class; + } + } + } } } @@ -109,6 +143,8 @@ public function setFromCache(&$data) { $this->classMap = $data['Factory.Files']; + $this->classInfo = $data['Factory.ClassInfo']; + $this->classTree = $data['Factory.ClassTree']; $this->namespaceMap = $data['Factory.Namespaces']; $this->realClasses = $data['Factory.realClasses']; } @@ -191,11 +227,15 @@ public function getToCache() { ksort($this->classMap); + ksort($this->classInfo); + ksort($this->classTree); ksort($this->namespaceMap); ksort($this->realClasses); return Array ( 'Factory.Files' => $this->classMap, + 'Factory.ClassInfo' => $this->classInfo, + 'Factory.ClassTree' => $this->classTree, 'Factory.Namespaces' => $this->namespaceMap, 'Factory.realClasses' => $this->realClasses, ); @@ -352,6 +392,65 @@ } /** + * Returns sub-classes of given ancestor class. + * + * @param string $ancestor_class Ancestor class. + * @param boolean $concrete_only Return only non-abstract classes. + * + * @return array + * @throws kFactoryException When ancestor class not found. + */ + public function getSubClasses($ancestor_class, $concrete_only = true) + { + if ( !isset($this->classMap[$ancestor_class]) ) { + throw new kFactoryException( + 'Class "' . $ancestor_class . '" is not registered in the Factory' + ); + } + + if ( !isset($this->classTree[$ancestor_class]) ) { + return array(); + } + + $all_sub_classes = array(); + + foreach ( $this->classTree[$ancestor_class] as $sub_class ) { + $real_sub_class = $this->realClasses[$sub_class]; + $all_sub_classes[$real_sub_class] = $sub_class; + $all_sub_classes = array_merge($all_sub_classes, $this->getSubClasses($sub_class, false)); + } + + if ( $concrete_only ) { + $concrete_sub_classes = array(); + + foreach ( $all_sub_classes as $real_sub_class => $sub_class ) { + if ( $this->classInfo[$sub_class]['type'] == self::TYPE_CLASS + && !$this->classHasModifier($sub_class, self::MODIFIER_ABSTRACT) + ) { + $concrete_sub_classes[$real_sub_class] = $sub_class; + } + } + + return $concrete_sub_classes; + } + + return $all_sub_classes; + } + + /** + * Determines of class has modifier. + * + * @param string $class Class. + * @param integer $modifier Modifier. + * + * @return boolean + */ + protected function classHasModifier($class, $modifier) + { + return ($this->classInfo[$class]['modifiers'] & $modifier) == $modifier; + } + + /** * Registers new class in the factory * * @param string $real_class Real name of class as in class declaration