Index: composer.json =================================================================== --- composer.json +++ composer.json @@ -1,5 +1,9 @@ { + "name": "In-Portal", "require-dev": { "aik099/coding-standard": "dev-in-portal" + }, + "require": { + "nikic/php-parser": "~1.2" } } Index: composer.lock =================================================================== --- composer.lock +++ composer.lock @@ -4,8 +4,54 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "4c8225aabf36f626240d5615afd5c66b", - "packages": [], + "hash": "724474a099f4e1badc9f755095fb58df", + "packages": [ + { + "name": "nikic/php-parser", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "08f97eb4efa029e2fafb6d8c98b71731bf0cf621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/08f97eb4efa029e2fafb6d8c98b71731bf0cf621", + "reference": "08f97eb4efa029e2fafb6d8c98b71731bf0cf621", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "files": [ + "lib/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2015-04-03 14:33:59" + } + ], "packages-dev": [ { "name": "aik099/coding-standard", @@ -54,6 +100,7 @@ "aik099/coding-standard": 20 }, "prefer-stable": false, + "prefer-lowest": false, "platform": [], "platform-dev": [] } Index: core/install.php =================================================================== --- core/install.php +++ core/install.php @@ -674,7 +674,7 @@ case 2: // Upload License File $file_data = array_map('trim', file($_FILES['license_file']['tmp_name'])); if ((count($file_data) == 3) && $file_data[1]) { - $modules_helper = $this->Application->recallObject('ModulesHelper'); + $modules_helper = $this->Application->recallObject('kModulesHelper'); /* @var $modules_helper kModulesHelper */ if ($modules_helper->verifyLicense($file_data[1])) { @@ -694,7 +694,7 @@ case 3: // Use Existing License $license_hash = $this->toolkit->systemConfig->get('License', 'Intechnic'); if ($license_hash) { - $modules_helper = $this->Application->recallObject('ModulesHelper'); + $modules_helper = $this->Application->recallObject('kModulesHelper'); /* @var $modules_helper kModulesHelper */ if (!$modules_helper->verifyLicense($license_hash)) { @@ -795,7 +795,7 @@ break; case 'select_domain': - $modules_helper = $this->Application->recallObject('ModulesHelper'); + $modules_helper = $this->Application->recallObject('kModulesHelper'); /* @var $modules_helper kModulesHelper */ // get domain name as entered by user on the form Index: core/install/cache/.gitignore =================================================================== --- /dev/null +++ core/install/cache/.gitignore @@ -0,0 +1 @@ +file_hashes.php Index: core/install/cache/class_structure.php =================================================================== --- /dev/null +++ core/install/cache/class_structure.php @@ -0,0 +1,341 @@ + 1, + 'classes' => array( + 'AdminEventsHandler' => '/core/units/admin/admin_events_handler.php', + 'AdminTagProcessor' => '/core/units/admin/admin_tag_processor.php', + 'AjaxFormHelper' => '/core/units/helpers/ajax_form_helper.php', + 'ApcCacheHandler' => '/core/kernel/utility/cache.php', + 'BackupHelper' => '/core/units/helpers/backup_helper.php', + 'BaseSession' => '/core/kernel/session/session.php', + 'BaseSessionStorage' => '/core/kernel/session/session_storage.php', + 'CacheSettings' => '/core/kernel/startup.php', + 'CaptchaEventHandler' => '/core/units/captcha/captcha_eh.php', + 'CategoriesEventHandler' => '/core/units/categories/categories_event_handler.php', + 'CategoriesItem' => '/core/units/categories/categories_item.php', + 'CategoriesTagProcessor' => '/core/units/categories/categories_tag_processor.php', + 'CategoryHelper' => '/core/units/helpers/category_helper.php', + 'CategoryItemRewrite' => '/core/units/helpers/mod_rewrite_helper.php', + 'CategoryItemsEventHandler' => '/core/units/category_items/category_items_event_handler.php', + 'CategoryItemsTagProcessor' => '/core/units/category_items/category_items_tag_processor.php', + 'CategoryPermissionRebuild' => '/core/kernel/constants.php', + 'ChangeLog' => '/core/kernel/constants.php', + 'ChangeLogEventHandler' => '/core/units/logs/change_logs/change_log_eh.php', + 'ChangeLogTagProcessor' => '/core/units/logs/change_logs/change_log_tp.php', + 'ColumnSet' => '/core/units/helpers/col_picker_helper.php', + 'ConfigSearchEventHandler' => '/core/units/config_search/config_search_event_handler.php', + 'ConfigSearchTagProcessor' => '/core/units/config_search/config_search_tag_processor.php', + 'ConfigurationEventHandler' => '/core/units/configuration/configuration_event_handler.php', + 'ConfigurationItem' => '/core/units/configuration/configuration.php', + 'ConfigurationTagProcessor' => '/core/units/configuration/configuration_tag_processor.php', + 'ConfigurationValidator' => '/core/units/configuration/configuration_validator.php', + 'ContentEventHandler' => '/core/units/content/content_eh.php', + 'ContentTagProcessor' => '/core/units/content/content_tp.php', + 'CoreUpgrades' => '/core/install/upgrades.php', + 'CountryStateEventHandler' => '/core/units/country_states/country_state_eh.php', + 'CssMinifyHelper' => '/core/units/helpers/minifiers/css_minify_helper.php', + 'CustomDataEventHandler' => '/core/units/custom_data/custom_data_event_handler.php', + 'CustomFieldsEventHandler' => '/core/units/custom_fields/custom_fields_event_handler.php', + 'CustomFieldsTagProcessor' => '/core/units/custom_fields/custom_fields_tag_processor.php', + 'Debugger' => '/core/kernel/utility/debugger.php', + 'DebuggerUtil' => '/core/kernel/utility/debugger.php', + 'DeploymentHelper' => '/core/units/helpers/deployment_helper.php', + 'DraftEventHandler' => '/core/units/forms/drafts/draft_eh.php', + 'EditPickerHelper' => '/core/units/helpers/controls/edit_picker_helper.php', + 'EmailDelivery' => '/core/kernel/constants.php', + 'EmailLogEventHandler' => '/core/units/logs/email_logs/email_log_eh.php', + 'EmailLogStatus' => '/core/kernel/constants.php', + 'EmailLogTagProcessor' => '/core/units/logs/email_logs/email_log_tp.php', + 'EmailQueueEventHandler' => '/core/units/email_queue/email_queue_eh.php', + 'EmailQueueTagProcessor' => '/core/units/email_queue/email_queue_tp.php', + 'EmailTemplate' => '/core/kernel/constants.php', + 'EmailTemplateEventHandler' => '/core/units/email_templates/email_template_eh.php', + 'EmailTemplateTagProcessor' => '/core/units/email_templates/email_template_tp.php', + 'FakeCacheHandler' => '/core/kernel/utility/cache.php', + 'FavoritesEventHandler' => '/core/units/favorites/favorites_eh.php', + 'FckEventHandler' => '/core/units/fck/fck_eh.php', + 'FckTagProcessor' => '/core/units/fck/fck_tp.php', + 'FileEventHandler' => '/core/units/files/file_eh.php', + 'FileHelper' => '/core/units/helpers/file_helper.php', + 'FileTagProcessor' => '/core/units/files/file_tp.php', + 'FormFieldEventHandler' => '/core/units/forms/form_fields/form_field_eh.php', + 'FormFieldsTagProcessor' => '/core/units/forms/form_fields/form_fields_tp.php', + 'FormSubmissionHelper' => '/core/units/helpers/form_submission_helper.php', + 'FormSubmissionTagProcessor' => '/core/units/forms/form_submissions/form_submission_tp.php', + 'FormSubmissionsEventHandler' => '/core/units/forms/form_submissions/form_submissions_eh.php', + 'FormsEventHandler' => '/core/units/forms/forms/forms_eh.php', + 'FormsTagProcessor' => '/core/units/forms/forms/forms_tp.php', + 'GeoCodeHelper' => '/core/units/helpers/geocode_helper.php', + 'GroupTagProcessor' => '/core/units/groups/group_tp.php', + 'GroupsEventHandler' => '/core/units/groups/groups_event_handler.php', + 'IDBConnection' => '/core/kernel/db/i_db_connection.php', + 'ImageEventHandler' => '/core/units/images/image_event_handler.php', + 'ImageHelper' => '/core/units/helpers/image_helper.php', + 'ImageTagProcessor' => '/core/units/images/image_tag_processor.php', + 'ImagesItem' => '/core/units/images/images.php', + 'InPortalPrerequisites' => '/core/install/prerequisites.php', + 'InpCustomFieldsHelper' => '/core/units/helpers/custom_fields_helper.php', + 'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassDetector' => '/core/kernel/utility/ClassDiscovery/ClassDetector.php', + 'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassMapBuilder' => '/core/kernel/utility/ClassDiscovery/ClassMapBuilder.php', + 'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\CodeFolderFilterIterator' => '/core/kernel/utility/ClassDiscovery/CodeFolderFilterIterator.php', + 'ItemFilterEventHandler' => '/core/units/filters/item_filter_eh.php', + 'ItemFilterTagProcessor' => '/core/units/filters/item_filter_tp.php', + 'JSONHelper' => '/core/units/helpers/json_helper.php', + 'JsMinifyHelper' => '/core/units/helpers/minifiers/js_minify_helper.php', + 'Language' => '/core/kernel/constants.php', + 'LanguageImportHelper' => '/core/units/helpers/language_import_helper.php', + 'LanguagesEventHandler' => '/core/units/languages/languages_event_handler.php', + 'LanguagesItem' => '/core/units/languages/languages_item.php', + 'LanguagesTagProcessor' => '/core/units/languages/languages_tag_processor.php', + 'LeftJoinOptimizer' => '/core/kernel/db/dblist.php', + 'ListHelper' => '/core/units/helpers/list_helper.php', + 'LoginResult' => '/core/kernel/constants.php', + 'MInputHelper' => '/core/units/helpers/controls/minput_helper.php', + 'MailboxHelper' => '/core/units/helpers/mailbox_helper.php', + 'MailingList' => '/core/kernel/constants.php', + 'MailingListEventHandler' => '/core/units/mailing_lists/mailing_list_eh.php', + 'MailingListHelper' => '/core/units/helpers/mailing_list_helper.php', + 'MailingListTagProcessor' => '/core/units/mailing_lists/mailing_list_tp.php', + 'MaintenanceMode' => '/core/kernel/startup.php', + 'MassImageResizer' => '/core/units/admin/admin_events_handler.php', + 'MemcacheCacheHandler' => '/core/kernel/utility/cache.php', + 'MenuHelper' => '/core/units/helpers/menu_helper.php', + 'MimeDecodeHelper' => '/core/units/helpers/mime_decode_helper.php', + 'MinifyHelper' => '/core/units/helpers/minifiers/minify_helper.php', + 'ModuleDeploymentLog' => '/core/kernel/constants.php', + 'ModuleDeploymentLogEventHandler' => '/core/units/logs/module_deployment_logs/module_deployment_log_eh.php', + 'ModulesEventHandler' => '/core/units/modules/modules_event_handler.php', + 'ModulesTagProcessor' => '/core/units/modules/modules_tag_processor.php', + 'NParser' => '/core/kernel/nparser/nparser.php', + 'NParserCompiler' => '/core/kernel/nparser/compiler.php', + 'POP3Helper' => '/core/units/helpers/pop3_helper.php', + 'PageHelper' => '/core/units/helpers/page_helper.php', + 'PageRevisionEventHandler' => '/core/units/page_revisions/page_revision_eh.php', + 'PageRevisionTagProcessor' => '/core/units/page_revisions/page_revision_tp.php', + 'Params' => '/core/kernel/utility/params.php', + 'ParserException' => '/core/kernel/nparser/nparser.php', + 'PasswordHash' => '/core/kernel/utility/php_pass.php', + 'PasswordHashingMethod' => '/core/kernel/constants.php', + 'PermissionTypeEventHandler' => '/core/units/permission_types/permission_type_eh.php', + 'PermissionsEventHandler' => '/core/units/permissions/permissions_event_handler.php', + 'PermissionsTagProcessor' => '/core/units/permissions/permissions_tag_processor.php', + 'PhraseTagProcessor' => '/core/units/phrases/phrase_tp.php', + 'PhrasesEventHandler' => '/core/units/phrases/phrases_event_handler.php', + 'PriorityEventHandler' => '/core/units/priorites/priority_eh.php', + 'PromoBlockEventHandler' => '/core/units/promo_blocks/promo_block_eh.php', + 'PromoBlockGroupEventHandler' => '/core/units/promo_block_groups/promo_block_group_eh.php', + 'PromoBlockGroupTagProcessor' => '/core/units/promo_block_groups/promo_block_group_tp.php', + 'PromoBlockTagProcessor' => '/core/units/promo_blocks/promo_block_tp.php', + 'PromoBlockType' => '/core/kernel/constants.php', + 'RatingHelper' => '/core/units/helpers/rating_helper.php', + 'RelatedSearchEventHandler' => '/core/units/related_searches/related_searches_event_handler.php', + 'RelatedSearchTagProcessor' => '/core/units/related_searches/related_searches_tag_processor.php', + 'RelationshipEventHandler' => '/core/units/relationship/relationship_event_handler.php', + 'RelationshipTagProcessor' => '/core/units/relationship/relationship_tp.php', + 'ReviewsEventHandler' => '/core/units/reviews/reviews_event_handler.php', + 'ReviewsTagProcessor' => '/core/units/reviews/reviews_tag_processor.php', + 'ScheduledTask' => '/core/kernel/constants.php', + 'ScheduledTaskEventHandler' => '/core/units/scheduled_tasks/scheduled_task_eh.php', + 'SelectorsEventHandler' => '/core/units/selectors/selectors_event_handler.php', + 'SelectorsItem' => '/core/units/selectors/selectors_item.php', + 'SelectorsTagProcessor' => '/core/units/selectors/selectors_tag_processor.php', + 'Session' => '/core/kernel/session/inp_session.php', + 'SessionLogEventHandler' => '/core/units/logs/session_logs/session_log_eh.php', + 'SessionStorage' => '/core/kernel/session/inp_session_storage.php', + 'SiteConfigEventHandler' => '/core/units/sections/site_config_eh.php', + 'SiteConfigHelper' => '/core/units/helpers/site_config_helper.php', + 'SiteConfigTagProcessor' => '/core/units/sections/site_config_tp.php', + 'SiteDomainEventHandler' => '/core/units/site_domains/site_domain_eh.php', + 'SiteHelper' => '/core/units/helpers/site_helper.php', + 'SkinEventHandler' => '/core/units/skins/skin_eh.php', + 'SkinHelper' => '/core/units/helpers/skin_helper.php', + 'SpamHelper' => '/core/units/helpers/spam_helper.php', + 'SpamReportEventHandler' => '/core/units/spam_reports/spam_report_eh.php', + 'SpamReportTagProcessor' => '/core/units/spam_reports/spam_report_tp.php', + 'StatisticsEventHandler' => '/core/units/statistics/statistics_event_handler.php', + 'StatisticsTagProcessor' => '/core/units/statistics/statistics_tag_processor.php', + 'StorageEngine' => '/core/kernel/constants.php', + 'StylesheetsEventHandler' => '/core/units/stylesheets/stylesheets_event_handler.php', + 'StylesheetsItem' => '/core/units/stylesheets/stylesheets_item.php', + 'SubmissionFormField' => '/core/kernel/constants.php', + 'SubmissionLogEventHandler' => '/core/units/forms/submission_log/submission_log_eh.php', + 'SubmissionLogTagProcessor' => '/core/units/forms/submission_log/submission_log_tp.php', + 'SystemEventSubscriptionEventHandler' => '/core/units/system_event_subscriptions/system_event_subscription_eh.php', + 'SystemEventSubscriptionTagProcessor' => '/core/units/system_event_subscriptions/system_event_subscription_tp.php', + 'SystemLogEventHandler' => '/core/units/logs/system_logs/system_log_eh.php', + 'SystemLogTagProcessor' => '/core/units/logs/system_logs/system_log_tp.php', + 'TemplateHelper' => '/core/units/helpers/template_helper.php', + 'TemplatesCache' => '/core/kernel/nparser/template_cache.php', + 'ThemeFileEventHandler' => '/core/units/theme_files/theme_file_eh.php', + 'ThemeItem' => '/core/units/themes/theme_item.php', + 'ThemesEventHandler' => '/core/units/themes/themes_eh.php', + 'ThemesTagProcessor' => '/core/units/themes/themes_tag_processor.php', + 'ThesaurusEventHandler' => '/core/units/thesaurus/thesaurus_eh.php', + 'ThesaurusTagProcessor' => '/core/units/thesaurus/thesaurus_tp.php', + 'TranslationSaveMode' => '/core/kernel/constants.php', + 'TranslatorEventHandler' => '/core/units/translator/translator_event_handler.php', + 'TranslatorTagProcessor' => '/core/units/translator/translator_tp.php', + 'UnitConfigDecorator' => '/core/units/admin/admin_events_handler.php', + 'UserGroupsEventHandler' => '/core/units/user_groups/user_groups_eh.php', + 'UserHelper' => '/core/units/helpers/user_helper.php', + 'UserProfileEventHandler' => '/core/units/user_profile/user_profile_eh.php', + 'UserProfileTagProcessor' => '/core/units/user_profile/user_profile_tp.php', + 'UserType' => '/core/kernel/constants.php', + 'UsersEventHandler' => '/core/units/users/users_event_handler.php', + 'UsersItem' => '/core/units/users/users_item.php', + 'UsersSyncronize' => '/core/units/users/users_syncronize.php', + 'UsersSyncronizeManager' => '/core/units/users/users_syncronize.php', + 'UsersTagProcessor' => '/core/units/users/users_tag_processor.php', + 'VisitsEventHandler' => '/core/units/visits/visits_event_handler.php', + 'VisitsList' => '/core/units/visits/visits_list.php', + 'VisitsTagProcessor' => '/core/units/visits/visits_tag_processor.php', + 'XCacheCacheHandler' => '/core/kernel/utility/cache.php', + 'XMLIterator' => '/core/units/helpers/xml_helper5.php', + '_BlockTag' => '/core/kernel/nparser/ntags.php', + '_Tag_Cache' => '/core/kernel/nparser/ntags.php', + '_Tag_Capture' => '/core/kernel/nparser/ntags.php', + '_Tag_Comment' => '/core/kernel/nparser/ntags.php', + '_Tag_Compress' => '/core/kernel/nparser/ntags.php', + '_Tag_DefaultParam' => '/core/kernel/nparser/ntags.php', + '_Tag_DefineElement' => '/core/kernel/nparser/ntags.php', + '_Tag_If' => '/core/kernel/nparser/ntags.php', + '_Tag_IfDataExists' => '/core/kernel/nparser/ntags.php', + '_Tag_IfNot' => '/core/kernel/nparser/ntags.php', + '_Tag_Include' => '/core/kernel/nparser/ntags.php', + '_Tag_Param' => '/core/kernel/nparser/ntags.php', + '_Tag_RenderElement' => '/core/kernel/nparser/ntags.php', + '_Tag_RenderElements' => '/core/kernel/nparser/ntags.php', + '_Tag_SetParam' => '/core/kernel/nparser/ntags.php', + 'clsCachedPermissions' => '/core/units/categories/cache_updater.php', + 'clsRecursionStack' => '/core/units/categories/cache_updater.php', + 'fckFCKHelper' => '/core/units/helpers/fck_helper.php', + 'kApplication' => '/core/kernel/application.php', + 'kArray' => '/core/kernel/utility/params.php', + 'kBase' => '/core/kernel/kbase.php', + 'kBracketsHelper' => '/core/units/helpers/brackets_helper.php', + 'kCCDateFormatter' => '/core/kernel/utility/formatters/ccdate_formatter.php', + 'kCSSDefaults' => '/core/units/pdf/css_defaults.php', + 'kCSVHelper' => '/core/units/helpers/csv_helper.php', + 'kCache' => '/core/kernel/utility/cache.php', + 'kCacheHandler' => '/core/kernel/utility/cache.php', + 'kCacheManager' => '/core/kernel/managers/cache_manager.php', + 'kCaptchaHelper' => '/core/units/helpers/captcha_helper.php', + 'kCatDBEventHandler' => '/core/kernel/db/cat_event_handler.php', + 'kCatDBItem' => '/core/kernel/db/cat_dbitem.php', + 'kCatDBItemExportHelper' => '/core/units/helpers/cat_dbitem_export_helper.php', + 'kCatDBList' => '/core/kernel/db/cat_dblist.php', + 'kCatDBTagProcessor' => '/core/kernel/db/cat_tag_processor.php', + 'kChangesFormatter' => '/core/units/logs/change_logs/changes_formatter.php', + 'kChartHelper' => '/core/units/helpers/chart_helper.php', + 'kClipboardHelper' => '/core/units/helpers/clipboard_helper.php', + 'kColumnPickerHelper' => '/core/units/helpers/col_picker_helper.php', + 'kCookieHasher' => '/core/kernel/utility/cookie_hasher.php', + 'kCountHelper' => '/core/units/helpers/count_helper.php', + 'kCountryStatesHelper' => '/core/units/helpers/country_states_helper.php', + 'kCronField' => '/core/units/helpers/cron_helper.php', + 'kCronHelper' => '/core/units/helpers/cron_helper.php', + 'kCurlHelper' => '/core/units/helpers/curl_helper.php', + 'kCustomFieldFormatter' => '/core/kernel/utility/formatters/customfield_formatter.php', + 'kDBBase' => '/core/kernel/kbase.php', + 'kDBConnection' => '/core/kernel/db/db_connection.php', + 'kDBConnectionDebug' => '/core/kernel/db/db_connection.php', + 'kDBEventHandler' => '/core/kernel/db/db_event_handler.php', + 'kDBItem' => '/core/kernel/db/dbitem.php', + 'kDBList' => '/core/kernel/db/dblist.php', + 'kDBLoadBalancer' => '/core/kernel/db/db_load_balancer.php', + 'kDBTagProcessor' => '/core/kernel/db/db_tag_processor.php', + 'kDateFormatter' => '/core/kernel/utility/formatters/date_formatter.php', + 'kEmail' => '/core/kernel/utility/email.php', + 'kEmailSendingHelper' => '/core/kernel/utility/email_send.php', + 'kEmailTemplateHelper' => '/core/units/helpers/email_template_helper.php', + 'kErrorHandlerStack' => '/core/kernel/utility/logger.php', + 'kEvent' => '/core/kernel/utility/event.php', + 'kEventHandler' => '/core/kernel/event_handler.php', + 'kEventManager' => '/core/kernel/event_manager.php', + 'kExceptionHandlerStack' => '/core/kernel/utility/logger.php', + 'kFactory' => '/core/kernel/utility/factory.php', + 'kFactoryException' => '/core/kernel/utility/factory.php', + 'kFilenamesHelper' => '/core/units/helpers/filenames_helper.php', + 'kFilesizeFormatter' => '/core/kernel/utility/formatters/filesize_formatter.php', + 'kFormatter' => '/core/kernel/utility/formatters/formatter.php', + 'kHTTPQuery' => '/core/kernel/utility/http_query.php', + 'kHandlerStack' => '/core/kernel/utility/logger.php', + 'kHelper' => '/core/kernel/kbase.php', + 'kHookManager' => '/core/kernel/managers/hook_manager.php', + 'kInstallToolkit' => '/core/install/install_toolkit.php', + 'kInstallator' => '/core/install.php', + 'kLEFTFormatter' => '/core/kernel/utility/formatters/left_formatter.php', + 'kLogger' => '/core/kernel/utility/logger.php', + 'kMainTagProcessor' => '/core/kernel/processors/main_processor.php', + 'kModulesHelper' => '/core/units/helpers/modules_helper.php', + 'kMultiLanguage' => '/core/kernel/utility/formatters/multilang_formatter.php', + 'kMultiLanguageHelper' => '/core/units/helpers/multilanguage_helper.php', + 'kMultipleFilter' => '/core/kernel/utility/filters.php', + 'kMySQLQuery' => '/core/kernel/db/db_connection.php', + 'kMySQLQueryCol' => '/core/kernel/db/db_connection.php', + 'kNavigationBar' => '/core/units/helpers/navigation_bar.php', + 'kNoPermissionException' => '/core/kernel/kbase.php', + 'kOpenerStack' => '/core/kernel/utility/opener_stack.php', + 'kOptionsFormatter' => '/core/kernel/utility/formatters/options_formatter.php', + 'kPDFElemFactory' => '/core/units/pdf/pdf_helper.php', + 'kPDFElement' => '/core/units/pdf/pdf_helper.php', + 'kPDFHelper' => '/core/units/pdf/pdf_helper.php', + 'kPDFImage' => '/core/units/pdf/pdf_image.php', + 'kPDFLine' => '/core/units/pdf/pdf_helper.php', + 'kPDFRenderer' => '/core/units/pdf/pdf_renderer.php', + 'kPDFStylesheet' => '/core/units/pdf/pdf_styles.php', + 'kPDFTable' => '/core/units/pdf/pdf_table.php', + 'kPDFTableRow' => '/core/units/pdf/pdf_table.php', + 'kPDFTextElement' => '/core/units/pdf/pdf_text.php', + 'kPasswordFormatter' => '/core/kernel/utility/formatters/password_formatter.php', + 'kPermCacheUpdater' => '/core/units/categories/cache_updater.php', + 'kPermissionsHelper' => '/core/units/helpers/permissions_helper.php', + 'kPhraseCache' => '/core/kernel/languages/phrases_cache.php', + 'kPictureFormatter' => '/core/kernel/utility/formatters/upload_formatter.php', + 'kPlainUrlProcessor' => '/core/kernel/managers/plain_url_processor.php', + 'kPriorityHelper' => '/core/units/helpers/priority_helper.php', + 'kRecursiveHelper' => '/core/units/helpers/recursive_helper.php', + 'kRedirectException' => '/core/kernel/kbase.php', + 'kRequestManager' => '/core/kernel/managers/request_manager.php', + 'kRewriteUrlProcessor' => '/core/kernel/managers/rewrite_url_processor.php', + 'kScheduledTaskManager' => '/core/kernel/managers/scheduled_task_manager.php', + 'kSearchHelper' => '/core/units/helpers/search_helper.php', + 'kSectionsHelper' => '/core/units/helpers/sections_helper.php', + 'kSerializedFormatter' => '/core/kernel/utility/formatters/serialized_formatter.php', + 'kSocket' => '/core/kernel/utility/socket.php', + 'kSubscriptionAnalyzer' => '/core/units/system_event_subscriptions/system_event_subscription_tp.php', + 'kSubscriptionItem' => '/core/kernel/managers/subscription_manager.php', + 'kSubscriptionManager' => '/core/kernel/managers/subscription_manager.php', + 'kSystemConfig' => '/core/kernel/utility/system_config.php', + 'kSystemConfigException' => '/core/kernel/utility/system_config.php', + 'kTCPDFRenderer' => '/core/units/pdf/pdf_renderer_tcpdf.php', + 'kTagProcessor' => '/core/kernel/processors/tag_processor.php', + 'kTempHandlerSubTable' => '/core/kernel/utility/temp_handler.php', + 'kTempHandlerTable' => '/core/kernel/utility/temp_handler.php', + 'kTempHandlerTopTable' => '/core/kernel/utility/temp_handler.php', + 'kTempTablesHandler' => '/core/kernel/utility/temp_handler.php', + 'kThemesHelper' => '/core/units/helpers/themes_helper.php', + 'kUnitConfig' => '/core/kernel/utility/unit_config.php', + 'kUnitConfigCloner' => '/core/kernel/utility/unit_config_cloner.php', + 'kUnitConfigReader' => '/core/kernel/utility/unit_config_reader.php', + 'kUnitFormatter' => '/core/kernel/utility/formatters/unit_formatter.php', + 'kUpgradeHelper' => '/core/install/upgrade_helper.php', + 'kUploadFormatter' => '/core/kernel/utility/formatters/upload_formatter.php', + 'kUploadHelper' => '/core/units/helpers/upload_helper.php', + 'kUploaderException' => '/core/units/helpers/upload_helper.php', + 'kUrlManager' => '/core/kernel/managers/url_manager.php', + 'kUrlProcessor' => '/core/kernel/managers/url_processor.php', + 'kUtil' => '/core/kernel/globals.php', + 'kValidator' => '/core/kernel/utility/validator.php', + 'kXMLHelper' => '/core/units/helpers/xml_helper.php', + 'kXMLNode' => '/core/units/helpers/xml_helper.php', + 'kXMLNode5' => '/core/units/helpers/xml_helper5.php', + 'kZendPDFRenderer' => '/core/units/pdf/pdf_renderer_zend.php', + 'kiCacheable' => '/core/kernel/interfaces/cacheable.php', + ), +); Index: core/install/install_toolkit.php =================================================================== --- core/install/install_toolkit.php +++ core/install/install_toolkit.php @@ -175,7 +175,7 @@ */ function processLicense($file_data) { - $modules_helper = $this->Application->recallObject('ModulesHelper'); + $modules_helper = $this->Application->recallObject('kModulesHelper'); /* @var $modules_helper kModulesHelper */ $file_data = explode('Code==:', $file_data); @@ -1025,4 +1025,4 @@ return $compression_engines; } - } \ No newline at end of file + } Index: core/install/step_templates/choose_modules.tpl =================================================================== --- core/install/step_templates/choose_modules.tpl +++ core/install/step_templates/choose_modules.tpl @@ -26,7 +26,7 @@ $selected = Array ('core'); } - $modules_helper = $this->Application->recallObject('ModulesHelper'); + $modules_helper = $this->Application->recallObject('kModulesHelper'); /* @var $modules_helper kModulesHelper */ $licensed_modules = array_map('strtolower', $modules_helper->_GetModules()); @@ -58,4 +58,4 @@ echo sprintf($module_tpl, $module, $module_string, $checked, $error_msg); } -?> \ No newline at end of file +?> Index: core/install/upgrades.php =================================================================== --- core/install/upgrades.php +++ core/install/upgrades.php @@ -638,7 +638,7 @@ $duplicate_phrases = $this->Conn->Query($sql); foreach ($duplicate_phrases as $phrase_record) { - // 1. keep phrase, that was added first, because it is selected in PhrasesCache::LoadPhraseByLabel + // 1. keep phrase, that was added first, because it is selected in kPhraseCache::LoadPhraseByLabel. $where_clause = Array ( 'LanguageId = ' . $phrase_record['LanguageId'], 'Phrase = ' . $this->Conn->qstr($phrase_record['Phrase']), @@ -2498,4 +2498,4 @@ $object->Update(); } } - } \ No newline at end of file + } Index: core/kernel/application.php =================================================================== --- core/kernel/application.php +++ core/kernel/application.php @@ -93,7 +93,7 @@ * Holds all phrases used * in code and template * - * @var PhrasesCache + * @var kPhraseCache * @access public */ public $Phrases; @@ -323,7 +323,7 @@ define('MOD_REWRITE', $this->ConfigValue('UseModRewrite') && !$this->isAdmin ? 1 : 0); // start processing request - $this->HttpQuery = $this->recallObject('HTTPQuery'); + $this->HttpQuery = $this->recallObject('kHTTPQuery'); $this->HttpQuery->process(); if ( defined('DEBUG_MODE') && $this->isDebugMode() ) { @@ -401,7 +401,7 @@ } $this->UrlManager = $this->makeClass('kUrlManager'); - $this->EventManager = $this->makeClass('EventManager'); + $this->EventManager = $this->makeClass('kEventManager'); $this->Phrases = $this->makeClass('kPhraseCache'); $this->RegisterDefaultBuildEvents(); @@ -443,11 +443,13 @@ { if ( defined('IS_INSTALL') && IS_INSTALL && !$this->TableFound('Modules', true) ) { $this->registerModuleConstants(); + $this->Factory->configureAutoloader(); + return; } // use makeClass over recallObject, since used before kApplication initialization during installation - $modules_helper = $this->makeClass('ModulesHelper'); + $modules_helper = $this->makeClass('kModulesHelper'); /* @var $modules_helper kModulesHelper */ $this->Conn->nextQueryCachable = true; @@ -458,6 +460,7 @@ $this->ModuleInfo = $this->Conn->Query($sql, 'Name'); $this->registerModuleConstants(); + $this->Factory->configureAutoloader(); } /** @@ -679,82 +682,49 @@ } /** - * Registers default classes such as kDBEventHandler, kUrlManager + * Registers classes, that are used before unit configs (where class registration usually is done) are read. * - * Called automatically while initializing kApplication + * Called automatically while initializing kApplication. * * @return void * @access public */ public function RegisterDefaultClasses() { - $this->registerClass('kHelper', KERNEL_PATH . '/kbase.php'); - $this->registerClass('kMultipleFilter', KERNEL_PATH . '/utility/filters.php'); - $this->registerClass('kiCacheable', KERNEL_PATH . '/interfaces/cacheable.php'); + // Database. + $this->registerClass('IDBConnection', KERNEL_PATH . '/db/i_db_connection.php'); + $this->registerClass('kDBConnection', KERNEL_PATH . '/db/db_connection.php'); + $this->registerClass('kDBConnectionDebug', KERNEL_PATH . '/db/db_connection.php'); + $this->registerClass('kDBLoadBalancer', KERNEL_PATH . '/db/db_load_balancer.php'); - $this->registerClass('kEventManager', KERNEL_PATH . '/event_manager.php', 'EventManager'); - $this->registerClass('kHookManager', KERNEL_PATH . '/managers/hook_manager.php'); - $this->registerClass('kScheduledTaskManager', KERNEL_PATH . '/managers/scheduled_task_manager.php'); - $this->registerClass('kRequestManager', KERNEL_PATH . '/managers/request_manager.php'); - $this->registerClass('kSubscriptionManager', KERNEL_PATH . '/managers/subscription_manager.php'); + // Cache. + $this->registerClass('kCacheManager', KERNEL_PATH . '/managers/cache_manager.php'); + $this->registerClass('kCache', KERNEL_PATH . '/utility/cache.php'); + + // Unit configs. + $this->registerClass('kUnitConfigReader', KERNEL_PATH . '/utility/unit_config_reader.php'); + $this->registerClass('kUnitConfigCloner', KERNEL_PATH . '/utility/unit_config_cloner.php'); + // Urls. $this->registerClass('kUrlManager', KERNEL_PATH . '/managers/url_manager.php'); $this->registerClass('kUrlProcessor', KERNEL_PATH . '/managers/url_processor.php'); $this->registerClass('kPlainUrlProcessor', KERNEL_PATH . '/managers/plain_url_processor.php'); - $this->registerClass('kRewriteUrlProcessor', KERNEL_PATH . '/managers/rewrite_url_processor.php'); + // $this->registerClass('kRewriteUrlProcessor', KERNEL_PATH . '/managers/rewrite_url_processor.php'); - $this->registerClass('kCacheManager', KERNEL_PATH . '/managers/cache_manager.php'); - $this->registerClass('PhrasesCache', KERNEL_PATH . '/languages/phrases_cache.php', 'kPhraseCache'); - $this->registerClass('kTempTablesHandler', KERNEL_PATH . '/utility/temp_handler.php'); - $this->registerClass('kValidator', KERNEL_PATH . '/utility/validator.php'); - $this->registerClass('kOpenerStack', KERNEL_PATH . '/utility/opener_stack.php'); - $this->registerClass('kLogger', KERNEL_PATH . '/utility/logger.php'); + // Events. + $this->registerClass('kEventManager', KERNEL_PATH . '/event_manager.php'); + $this->registerClass('kHookManager', KERNEL_PATH . '/managers/hook_manager.php'); + $this->registerClass('kScheduledTaskManager', KERNEL_PATH . '/managers/scheduled_task_manager.php'); + $this->registerClass('kRequestManager', KERNEL_PATH . '/managers/request_manager.php'); - $this->registerClass('kUnitConfig', KERNEL_PATH . '/utility/unit_config.php'); - $this->registerClass('kUnitConfigReader', KERNEL_PATH . '/utility/unit_config_reader.php'); - $this->registerClass('kUnitConfigCloner', KERNEL_PATH . '/utility/unit_config_cloner.php'); - $this->registerClass('PasswordHash', KERNEL_PATH . '/utility/php_pass.php'); + // Misc. + $this->registerClass('kPhraseCache', KERNEL_PATH . '/languages/phrases_cache.php'); + $this->registerClass('kModulesHelper', KERNEL_PATH . self::MODULE_HELPER_PATH); - // Params class descendants - $this->registerClass('kArray', KERNEL_PATH . '/utility/params.php'); - $this->registerClass('Params', KERNEL_PATH . '/utility/params.php'); + // Aliased. $this->registerClass('Params', KERNEL_PATH . '/utility/params.php', 'kActions'); - $this->registerClass('kCache', KERNEL_PATH . '/utility/cache.php', 'kCache', 'Params'); - $this->registerClass('kHTTPQuery', KERNEL_PATH . '/utility/http_query.php', 'HTTPQuery'); - - // session - $this->registerClass('kCookieHasher', KERNEL_PATH . '/utility/cookie_hasher.php'); - $this->registerClass('Session', KERNEL_PATH . '/session/session.php'); - $this->registerClass('SessionStorage', KERNEL_PATH . '/session/session_storage.php'); - $this->registerClass('InpSession', KERNEL_PATH . '/session/inp_session.php', 'Session'); - $this->registerClass('InpSessionStorage', KERNEL_PATH . '/session/inp_session_storage.php', 'SessionStorage'); - - // template parser - $this->registerClass('kTagProcessor', KERNEL_PATH . '/processors/tag_processor.php'); $this->registerClass('kMainTagProcessor', KERNEL_PATH . '/processors/main_processor.php', 'm_TagProcessor'); - $this->registerClass('kDBTagProcessor', KERNEL_PATH . '/db/db_tag_processor.php'); - $this->registerClass('kCatDBTagProcessor', KERNEL_PATH . '/db/cat_tag_processor.php'); - $this->registerClass('NParser', KERNEL_PATH . '/nparser/nparser.php'); - $this->registerClass('TemplatesCache', KERNEL_PATH . '/nparser/template_cache.php'); - - // database - $this->registerClass('kDBConnection', KERNEL_PATH . '/db/db_connection.php'); - $this->registerClass('kDBConnectionDebug', KERNEL_PATH . '/db/db_connection.php'); - $this->registerClass('kDBLoadBalancer', KERNEL_PATH . '/db/db_load_balancer.php'); - $this->registerClass('kDBItem', KERNEL_PATH . '/db/dbitem.php'); - $this->registerClass('kCatDBItem', KERNEL_PATH . '/db/cat_dbitem.php'); - $this->registerClass('kDBList', KERNEL_PATH . '/db/dblist.php'); - $this->registerClass('kCatDBList', KERNEL_PATH . '/db/cat_dblist.php'); - $this->registerClass('kDBEventHandler', KERNEL_PATH . '/db/db_event_handler.php'); - $this->registerClass('kCatDBEventHandler', KERNEL_PATH . '/db/cat_event_handler.php'); - - // email sending - $this->registerClass('kEmail', KERNEL_PATH . '/utility/email.php'); $this->registerClass('kEmailSendingHelper', KERNEL_PATH . '/utility/email_send.php', 'EmailSender'); - $this->registerClass('kSocket', KERNEL_PATH . '/utility/socket.php', 'Socket'); - - // do not move to config - this helper is used before configs are read - $this->registerClass('kModulesHelper', KERNEL_PATH . self::MODULE_HELPER_PATH, 'ModulesHelper'); } /** Index: core/kernel/db/cat_event_handler.php =================================================================== --- core/kernel/db/cat_event_handler.php +++ core/kernel/db/cat_event_handler.php @@ -1110,7 +1110,7 @@ $keywords = $this->Application->unescapeRequestVariable(trim($this->Application->GetVar('keywords'))); - $query_object = $this->Application->recallObject('HTTPQuery'); + $query_object = $this->Application->recallObject('kHTTPQuery'); /* @var $query_object kHTTPQuery */ $sql = 'SHOW TABLES LIKE "'.$search_table.'"'; @@ -1423,7 +1423,7 @@ */ function OnAdvancedSearch($event) { - $query_object = $this->Application->recallObject('HTTPQuery'); + $query_object = $this->Application->recallObject('kHTTPQuery'); /* @var $query_object kHTTPQuery */ if ( !isset($query_object->Post['andor']) ) { Index: core/kernel/languages/phrases_cache.php =================================================================== --- core/kernel/languages/phrases_cache.php +++ core/kernel/languages/phrases_cache.php @@ -14,7 +14,8 @@ defined('FULL_PATH') or die('restricted access!'); -class PhrasesCache extends kBase { +class kPhraseCache extends kBase +{ var $Phrases = Array(); var $Ids = Array(); @@ -411,4 +412,4 @@ return str_replace($reserved, $replacement, $text); } -} \ No newline at end of file +} Index: core/kernel/managers/cache_manager.php =================================================================== --- core/kernel/managers/cache_manager.php +++ core/kernel/managers/cache_manager.php @@ -302,7 +302,7 @@ { // maybe discover keys automatically from corresponding classes $cache_keys = Array ( - 'Factory.Files', 'Factory.realClasses', + 'Factory.Files', 'Factory.Namespaces', 'Factory.realClasses', 'ConfigReader.prefixFiles', 'ConfigCloner.clones', 'EventManager.beforeHooks', 'EventManager.afterHooks', 'EventManager.scheduledTasks', 'EventManager.buildEvents', 'Application.ReplacementTemplates', 'Application.RewriteListeners', 'Application.ModuleInfo', @@ -318,7 +318,7 @@ $this->Application->setFromCache($empty_cache); $this->setFromCache($empty_cache); - // otherwise ModulesHelper indirectly used from includeConfigFiles won't work + // Otherwise kModulesHelper indirectly used from includeConfigFiles won't work. $this->Application->RegisterDefaultClasses(); } @@ -849,4 +849,4 @@ return $this->getCache($cache_key); } -} \ No newline at end of file +} Index: core/kernel/managers/plain_url_processor.php =================================================================== --- core/kernel/managers/plain_url_processor.php +++ core/kernel/managers/plain_url_processor.php @@ -114,7 +114,7 @@ $vars = Array (); $prefix_special = array_shift($mixed_part); // l.pick, l - $http_query = $this->Application->recallObject('HTTPQuery'); + $http_query = $this->Application->recallObject('kHTTPQuery'); /* @var $http_query kHTTPQuery */ $query_map = $http_query->discoverUnit($prefix_special); // from $_GET['env'] @@ -260,4 +260,4 @@ return $ret; } -} \ No newline at end of file +} Index: core/kernel/managers/rewrite_url_processor.php =================================================================== --- core/kernel/managers/rewrite_url_processor.php +++ core/kernel/managers/rewrite_url_processor.php @@ -90,7 +90,7 @@ { parent::__construct($manager); - $this->HTTPQuery = $this->Application->recallObject('HTTPQuery'); + $this->HTTPQuery = $this->Application->recallObject('kHTTPQuery'); // domain based primary language $this->primaryLanguageId = $this->Application->siteDomainField('PrimaryLanguageId'); @@ -480,7 +480,7 @@ $this->Application->VerifyThemeId(); $this->Application->VerifyLanguageId(); - // no need, since we don't have any cached phrase IDs + nobody will use PhrasesCache::LanguageId soon + // No need, since we don't have any cached phrase IDs + nobody will use kPhraseCache::LanguageId soon. // $this->Application->Phrases->Init('phrases'); } @@ -1077,4 +1077,4 @@ return $ret; } -} \ No newline at end of file +} Index: core/kernel/processors/main_processor.php =================================================================== --- core/kernel/processors/main_processor.php +++ core/kernel/processors/main_processor.php @@ -998,7 +998,7 @@ $require = $this->Application->ConfigValue('Require_AdminSSL'); } - $http_query = $this->Application->recallObject('HTTPQuery'); + $http_query = $this->Application->recallObject('kHTTPQuery'); /* @var $http_query kHTTPQuery */ $pass = $http_query->getRedirectParams(); Index: core/kernel/session/inp_session.php =================================================================== --- core/kernel/session/inp_session.php +++ core/kernel/session/inp_session.php @@ -14,12 +14,12 @@ defined('FULL_PATH') or die('restricted access!'); -class InpSession extends Session +class Session extends BaseSession { /** * Enter description here... * - * @var InpSessionStorage + * @var SessionStorage * @access protected */ protected $Storage; Index: core/kernel/session/inp_session_storage.php =================================================================== --- core/kernel/session/inp_session_storage.php +++ core/kernel/session/inp_session_storage.php @@ -15,7 +15,8 @@ defined('FULL_PATH') or die('restricted access!'); -class InpSessionStorage extends SessionStorage { +class SessionStorage extends BaseSessionStorage +{ public function Init($prefix, $special) { @@ -94,4 +95,4 @@ } } } -} \ No newline at end of file +} Index: core/kernel/session/session.php =================================================================== --- core/kernel/session/session.php +++ core/kernel/session/session.php @@ -72,7 +72,8 @@ */ -class Session extends kBase { +class BaseSession extends kBase +{ const smAUTO = 1; const smCOOKIES_ONLY = 2; @@ -110,7 +111,7 @@ /** * Enter description here... * - * @var SessionStorage + * @var BaseSessionStorage * @access protected */ protected $Storage; @@ -331,7 +332,7 @@ return false; } - $http_query = $this->Application->recallObject('HTTPQuery'); + $http_query = $this->Application->recallObject('kHTTPQuery'); /* @var $http_query kHTTPQuery */ $cookies_on = array_key_exists('cookies_on', $http_query->Cookie); // not good here @@ -453,7 +454,7 @@ function getFlashSID() { - $http_query = $this->Application->recallObject('HTTPQuery'); + $http_query = $this->Application->recallObject('kHTTPQuery'); /* @var $http_query kHTTPQuery */ return getArrayValue($http_query->Post, 'flashsid'); @@ -469,7 +470,7 @@ $get_sid = $this->getFlashSID(); if (!$get_sid) { - $http_query = $this->Application->recallObject('HTTPQuery'); + $http_query = $this->Application->recallObject('kHTTPQuery'); /* @var $http_query kHTTPQuery */ $get_sid = getArrayValue($http_query->Get, $this->GETName); Index: core/kernel/session/session_storage.php =================================================================== --- core/kernel/session/session_storage.php +++ core/kernel/session/session_storage.php @@ -16,10 +16,10 @@ defined('FULL_PATH') or die('restricted access!'); /** - * Implements Session Store in the Database - * + * Implements Session Store in the Database. */ -class SessionStorage extends kDBBase { +class BaseSessionStorage extends kDBBase +{ /** * Reference to session @@ -525,4 +525,4 @@ throw new BadMethodCallException('Unsupported'); } -} \ No newline at end of file +} Index: core/kernel/utility/ClassDiscovery/ClassDetector.php =================================================================== --- /dev/null +++ core/kernel/utility/ClassDiscovery/ClassDetector.php @@ -0,0 +1,65 @@ +classMapBuilder = $class_map_builder; + } + + /** + * Remembers all encountered classes. + * + * @param Node $node Node. + * + * @return void + */ + public function enterNode(Node $node) + { + if ( $node instanceof ClassLike ) { + $this->classMapBuilder->addClass((string)$node->namespacedName); + } + } + +} Index: core/kernel/utility/ClassDiscovery/ClassMapBuilder.php =================================================================== --- /dev/null +++ core/kernel/utility/ClassDiscovery/ClassMapBuilder.php @@ -0,0 +1,428 @@ + scan everything. + $ret[] = new static(FULL_PATH . DIRECTORY_SEPARATOR . 'core'); + + foreach ( glob(MODULES_PATH . '/*', GLOB_ONLYDIR) as $module_folder ) { + if ( \kModulesHelper::isInPortalModule($module_folder) ) { + $ret[] = new static($module_folder); + } + } + } + else { + // Module information given > scan only these modules. + foreach ( $module_info as $module_name => $module_data ) { + if ( $module_name == 'In-Portal' ) { + continue; + } + + $ret[] = new static(FULL_PATH . DIRECTORY_SEPARATOR . rtrim($module_data['Path'], '/')); + } + } + + return $ret; + } + + /** + * Creates ClassMapBuilder instance. + * + * @param string $scan_path Path to scan. + */ + public function __construct($scan_path) + { + $this->scanPath = $scan_path; + $this->assertPath($this->scanPath); + + $this->cachePath = $this->scanPath . '/install/cache'; + $this->assertPath($this->cachePath); + } + + /** + * Validates that path exists and is directory. + * + * @param string $path Path. + * + * @return void + * @throws \InvalidArgumentException When invalid path is given. + */ + protected function assertPath($path) + { + if ( !file_exists($path) || !is_dir($path) ) { + throw new \InvalidArgumentException('Path "' . $path . '" is not a folder or doesn\'t exist'); + } + } + + /** + * Returns class map, that was build previously. + * + * @return array + */ + public function get() + { + $this->load(self::CACHE_FILE_STRUCTURE, false); + + return $this->classToFileMap; + } + + /** + * Builds class map. + * + * @return void + */ + public function build() + { + $scan_path = preg_replace('/^' . preg_quote(FULL_PATH, '/') . '/', '...', $this->scanPath, 1); + + echo $this->strPad('path "' . $scan_path . '"', 40); + + $this->load(self::CACHE_FILE_STRUCTURE, true); + $this->load(self::CACHE_FILE_HASHES, true); + + $start = microtime(true); + $files = $this->scan(); + echo $this->strPad('scanned in ' . sprintf('%.4f', microtime(true) - $start) . 's', 25); + + $start = microtime(true); + + $this->createParser(); + + foreach ( $files as $file ) { + $this->parseFile($file); + } + + echo $this->strPad('parsed in ' . sprintf('%.4f', microtime(true) - $start) . 's', 25); + echo PHP_EOL; + + ksort($this->classToFileMap); + ksort($this->fileHashes); + + $this->store(self::CACHE_FILE_STRUCTURE); + $this->store(self::CACHE_FILE_HASHES); + } + + /** + * Pads text with spaces from right side. + * + * @param string $text Text. + * @param integer $length Pad length. + * + * @return string + */ + protected function strPad($text, $length) + { + return str_pad($text, $length, ' ', STR_PAD_RIGHT); + } + + /** + * Loads cache from disk. + * + * @param string $filename Filename. + * @param boolean $for_writing Load cache for writing or reading. + * + * @return void + */ + protected function load($filename, $for_writing) + { + $file_path = $this->getCacheFilename($filename); + + if ( !file_exists($file_path) ) { + return; + } + + $cache = include $file_path; + + if ( $cache['cache_format'] < self::CACHE_FORMAT ) { + return; + } + + if ( $filename === self::CACHE_FILE_STRUCTURE ) { + if ( $for_writing ) { + foreach ( $cache['classes'] as $class => $file ) { + if ( !isset($this->fileToClassMap[$file]) ) { + $this->fileToClassMap[$file] = array(); + } + + $this->fileToClassMap[$file][] = $class; + } + } + else { + $this->classToFileMap = $cache['classes']; + } + } + elseif ( $filename === self::CACHE_FILE_HASHES ) { + $this->fileHashes = $cache['file_hashes']; + } + } + + /** + * Scans path for files. + * + * @return array + */ + protected function scan() + { + $files = array(); + $directory_iterator = new \RecursiveDirectoryIterator($this->scanPath); + $filter_iterator = new CodeFolderFilterIterator($directory_iterator); + + foreach ( new \RecursiveIteratorIterator($filter_iterator, \RecursiveIteratorIterator::SELF_FIRST) as $file ) { + /* @var \SplFileInfo $file */ + if ( $file->isFile() && $file->getExtension() === 'php' ) { + $relative_path = preg_replace('/^' . preg_quote(FULL_PATH, '/') . '/', '', $file->getPathname(), 1); + $files[$relative_path] = true; + } + } + + // Don't include cache file itself in cache. + $exclude_file = preg_replace( + '/^' . preg_quote(FULL_PATH, '/') . '/', + '', + $this->getCacheFilename(self::CACHE_FILE_STRUCTURE), + 1 + ); + unset($files[$exclude_file]); + + $exclude_file = preg_replace( + '/^' . preg_quote(FULL_PATH, '/') . '/', + '', + $this->getCacheFilename(self::CACHE_FILE_HASHES), + 1 + ); + unset($files[$exclude_file]); + + return array_keys($files); + } + + /** + * Create parser. + * + * @return void + */ + protected function createParser() + { + ini_set('xdebug.max_nesting_level', 3000); + $this->parser = new Parser(new Lexer()); + $this->traverser = new NodeTraverser(); + $this->traverser->addVisitor(new NameResolver()); + $this->traverser->addVisitor(new ClassDetector($this)); + } + + /** + * Parses a file. + * + * @param string $file Path to file. + * + * @return void + */ + protected function parseFile($file) + { + $this->currentFile = $file; + + $code = file_get_contents(FULL_PATH . $file); + $current_hash = filesize(FULL_PATH . $file); + $previous_hash = isset($this->fileHashes[$file]) ? $this->fileHashes[$file] : 0; + + 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); + } + } + } + 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); + $this->traverser->traverse($statements); + } + } + + /** + * Stores cache to disk. + * + * @param string $filename Cache filename. + * + * @return void + * @throws \RuntimeException When cache could not be written. + */ + protected function store($filename) + { + $cache = array('cache_format' => self::CACHE_FORMAT); + + if ( $filename === self::CACHE_FILE_STRUCTURE ) { + $cache['classes'] = $this->classToFileMap; + } + elseif ( $filename === self::CACHE_FILE_HASHES ) { + $cache['file_hashes'] = $this->fileHashes; + } + + $cache = $this->prettyVarExport($cache); + + $at = '@'; + $file_content = <<getCacheFilename($filename); + + // Don't bother saving, because file wasn't even changed. + if ( file_exists($file_path) && file_get_contents($file_path) === $file_content ) { + return; + } + + if ( file_put_contents($file_path, $file_content) === false ) { + throw new \RuntimeException('Unable to save cache to "' . $file_path . '" file'); + } + } + + /** + * Prettified var_export. + * + * @param mixed $data Data. + * + * @return string + */ + protected function prettyVarExport($data) + { + $result = var_export($data, true); + $result = preg_replace("/=> \n[ ]+array \\(/s", '=> array (', $result); + $result = str_replace(array('array (', ' '), array('array(', "\t"), $result); + + return $result; + } + + /** + * Returns cache filename. + * + * @param string $filename Filename. + * + * @return string + */ + protected function getCacheFilename($filename) + { + return $this->cachePath . '/' . $filename; + } + + /** + * Adds class to the map. + * + * @param string $class Class. + * + * @return void + */ + public function addClass($class) + { + $this->classToFileMap[$class] = $this->currentFile; + $this->fileToClassMap[$this->currentFile][] = $class; + } + +} Index: core/kernel/utility/ClassDiscovery/CodeFolderFilterIterator.php =================================================================== --- /dev/null +++ core/kernel/utility/ClassDiscovery/CodeFolderFilterIterator.php @@ -0,0 +1,58 @@ +skipFolders[] = basename(EDITOR_PATH); + } + + /** + * Accepts only folders with valid names. + * + * @return boolean + */ + public function accept() + { + return !in_array( + $this->current()->getFilename(), + $this->skipFolders, + true + ); + } + +} Index: core/kernel/utility/email_send.php =================================================================== --- core/kernel/utility/email_send.php +++ core/kernel/utility/email_send.php @@ -155,7 +155,7 @@ if ($this->sendMethod == 'SMTP') { // create connection object if we will use SMTP - $this->smtpSocket = $this->Application->makeClass('Socket'); + $this->smtpSocket = $this->Application->makeClass('kSocket'); } $this->SetCharset(null, true); @@ -2091,4 +2091,4 @@ { $this->_logData = $log_data; } - } \ No newline at end of file + } Index: core/kernel/utility/factory.php =================================================================== --- core/kernel/utility/factory.php +++ core/kernel/utility/factory.php @@ -12,6 +12,8 @@ * See http://www.in-portal.org/license for copyright notices and details. */ +use Intechnic\InPortal\Core\kernel\utility\ClassDiscovery\ClassMapBuilder; + defined('FULL_PATH') or die('restricted access!'); class kFactory extends kBase implements kiCacheable { @@ -27,6 +29,13 @@ protected $classMap = Array (); /** + * The PSR-4 compliant namespace-to-folder mapping. + * + * @var array + */ + protected $namespaceMap = array(); + + /** * Map class names to their pseudo * class names, e.g. key=pseudo_class, * value=real_class_name @@ -52,6 +61,45 @@ } /** + * Configures module-based autoloader. + * + * @return void + */ + public function configureAutoloader() + { + if ( !$this->Application->ModuleInfo ) { + $error_msg = 'Autoloader configuration can be only performed after module information is available'; + throw new LogicException($error_msg); + } + + $this->namespaceMap = array(); + + foreach ( $this->Application->ModuleInfo as $module_name => $module_info ) { + if ( $module_name == 'In-Portal' ) { + continue; + } + + $this->namespaceMap[$module_info['ClassNamespace']] = rtrim($module_info['Path'], '/'); + } + + if ( defined('IS_INSTALL') && IS_INSTALL ) { + // During installation process all modules, because unit configs from all modules are scanned too. + $class_map_builders = ClassMapBuilder::createBuilders(); + } + else { + $class_map_builders = ClassMapBuilder::createBuilders($this->Application->ModuleInfo); + } + + foreach ( $class_map_builders as $class_map_builder ) { + $class_map = $class_map_builder->get(); + $class_names = array_keys($class_map); + + $this->classMap = array_merge($this->classMap, $class_map); + $this->realClasses = array_merge($this->realClasses, array_combine($class_names, $class_names)); + } + } + + /** * Sets data from cache to object * * @param Array $data @@ -61,6 +109,7 @@ public function setFromCache(&$data) { $this->classMap = $data['Factory.Files']; + $this->namespaceMap = $data['Factory.Namespaces']; $this->realClasses = $data['Factory.realClasses']; } @@ -116,15 +165,11 @@ $class_path .= str_replace('_', DIRECTORY_SEPARATOR, $class_name) . '.php'; - foreach ($this->Application->ModuleInfo as $module_name => $module_info) { - if ( $module_name == 'In-Portal' ) { - continue; - } - - if ( strpos($class, $module_info['ClassNamespace']) === 0 ) { + foreach ( $this->namespaceMap as $namespace_prefix => $namespace_path ) { + if ( strpos($class, $namespace_prefix) === 0 ) { $test_class_path = str_replace( - str_replace('\\', DIRECTORY_SEPARATOR, $module_info['ClassNamespace']), - rtrim($module_info['Path'], '/'), + str_replace('\\', DIRECTORY_SEPARATOR, $namespace_prefix), + $namespace_path, $class_path ); @@ -145,8 +190,13 @@ */ public function getToCache() { + ksort($this->classMap); + ksort($this->namespaceMap); + ksort($this->realClasses); + return Array ( 'Factory.Files' => $this->classMap, + 'Factory.Namespaces' => $this->namespaceMap, 'Factory.realClasses' => $this->realClasses, ); } @@ -344,4 +394,4 @@ class kFactoryException extends Exception { -} \ No newline at end of file +} Index: core/kernel/utility/unit_config.php =================================================================== --- core/kernel/utility/unit_config.php +++ core/kernel/utility/unit_config.php @@ -1086,11 +1086,8 @@ $register_classes = $this->_getClasses(); foreach ($register_classes as $class_info) { - $this->Application->registerClass( - $class_info['class'], - $this->getBasePath() . DIRECTORY_SEPARATOR . $class_info['file'], - $class_info['pseudo'] - ); + // Thanks to static class map there is no need to specify file during class registration. + $this->Application->registerClass($class_info['class'], '', $class_info['pseudo']); if ( isset($class_info['build_event']) && $class_info['build_event'] && $class_info['build_event'] != 'OnBuild' ) { $this->Application->delayUnitProcessing('registerBuildEvent', Array ($class_info['pseudo'], $class_info['build_event'])); Index: core/units/categories/categories_event_handler.php =================================================================== --- core/units/categories/categories_event_handler.php +++ core/units/categories/categories_event_handler.php @@ -2468,7 +2468,7 @@ $keywords = $this->Application->unescapeRequestVariable(trim($this->Application->GetVar('keywords'))); - $query_object = $this->Application->recallObject('HTTPQuery'); + $query_object = $this->Application->recallObject('kHTTPQuery'); /* @var $query_object kHTTPQuery */ $sql = 'SHOW TABLES LIKE "'.$search_table.'"'; Index: core/units/helpers/helpers_config.php =================================================================== --- core/units/helpers/helpers_config.php +++ core/units/helpers/helpers_config.php @@ -24,7 +24,7 @@ Array ('pseudo' => 'SearchHelper', 'class' => 'kSearchHelper', 'file' => 'search_helper.php', 'build_event' => ''), Array ('pseudo' => 'SectionsHelper', 'class' => 'kSectionsHelper', 'file' => 'sections_helper.php', 'build_event' => ''), Array ('pseudo' => 'PermissionsHelper', 'class' => 'kPermissionsHelper', 'file' => 'permissions_helper.php', 'build_event' => ''), - Array ('pseudo' => 'ModulesHelper', 'class' => 'kModulesHelper', 'file' => 'modules_helper.php', 'build_event' => ''), + Array ('pseudo' => 'kModulesHelper', 'class' => 'kModulesHelper', 'file' => 'modules_helper.php', 'build_event' => ''), Array ('pseudo' => 'CategoryItemRewrite', 'class' => 'CategoryItemRewrite', 'file' => 'mod_rewrite_helper.php', 'build_event' => ''), Array ('pseudo' => 'RecursiveHelper', 'class' => 'kRecursiveHelper', 'file' => 'recursive_helper.php', 'build_event' => ''), Array ('pseudo' => 'FilenamesHelper', 'class' => 'kFilenamesHelper', 'file' => 'filenames_helper.php', 'build_event' => ''), @@ -75,4 +75,4 @@ Array ('pseudo' => 'kCronHelper', 'class' => 'kCronHelper', 'file' => 'cron_helper.php', 'build_event' => ''), Array ('pseudo' => 'kUploadHelper', 'class' => 'kUploadHelper', 'file' => 'upload_helper.php', 'build_event' => ''), ), - ); \ No newline at end of file + ); Index: core/units/modules/modules_event_handler.php =================================================================== --- core/units/modules/modules_event_handler.php +++ core/units/modules/modules_event_handler.php @@ -146,7 +146,7 @@ { parent::OnAfterListQuery($event); - $modules_helper = $this->Application->recallObject('ModulesHelper'); + $modules_helper = $this->Application->recallObject('kModulesHelper'); /* @var $modules_helper kModulesHelper */ $new_modules = $modules_helper->getModules(kModulesHelper::NOT_INSTALLED); @@ -174,4 +174,4 @@ $object->addRecord($module_record); } } - } \ No newline at end of file + } Index: core/units/modules/modules_tag_processor.php =================================================================== --- core/units/modules/modules_tag_processor.php +++ core/units/modules/modules_tag_processor.php @@ -36,7 +36,7 @@ $object = $this->getObject($params); /* @var $object kDBList */ - $modules_helper = $this->Application->recallObject('ModulesHelper'); + $modules_helper = $this->Application->recallObject('kModulesHelper'); /* @var $modules_helper kModulesHelper */ return $modules_helper->moduleInstalled( $object->GetDBField('Name') ); @@ -52,7 +52,7 @@ $object = $this->getObject($params); /* @var $object kDBList */ - $modules_helper = $this->Application->recallObject('ModulesHelper'); + $modules_helper = $this->Application->recallObject('kModulesHelper'); /* @var $modules_helper kModulesHelper */ $licensed_modules = array_map('strtolower', $modules_helper->_GetModules()); @@ -114,4 +114,4 @@ return $this->Application->HREF('dummy', '_FRONT_END_', $url_params, $module_path . 'install.php'); } - } \ No newline at end of file + } Index: core/units/statistics/statistics_tag_processor.php =================================================================== --- core/units/statistics/statistics_tag_processor.php +++ core/units/statistics/statistics_tag_processor.php @@ -270,7 +270,7 @@ */ function getPendingPrefixes() { - $modules_helper = $this->Application->recallObject('ModulesHelper'); + $modules_helper = $this->Application->recallObject('kModulesHelper'); /* @var $modules_helper kModulesHelper */ $licensed_modules = array_map('strtolower', $modules_helper->_GetModules()); @@ -347,4 +347,4 @@ return $ret; } - } \ No newline at end of file + } Index: modules/custom/install/cache/.gitignore =================================================================== --- /dev/null +++ modules/custom/install/cache/.gitignore @@ -0,0 +1 @@ +file_hashes.php Index: modules/custom/install/cache/class_structure.php =================================================================== --- /dev/null +++ modules/custom/install/cache/class_structure.php @@ -0,0 +1,27 @@ + 1, + 'classes' => array( + 'CustomEventHandler' => '/modules/custom/units/sections/custom_eh.php', + 'CustomUpgrades' => '/modules/custom/install/upgrades.php', + 'EArticleEventHandler' => '/modules/custom/units/sections/articles/e_article_eh.php', + 'EArticleTagProcessor' => '/modules/custom/units/sections/articles/e_article_tp.php', + 'ECategoryEventHandler' => '/modules/custom/units/sections/categories/e_category_eh.php', + 'ECategoryTagProcessor' => '/modules/custom/units/sections/categories/e_category_tp.php', + 'ELinkEventHandler' => '/modules/custom/units/sections/links/e_link_eh.php', + 'ELinkTagProcessor' => '/modules/custom/units/sections/links/e_link_tp.php', + 'EProductEventHandler' => '/modules/custom/units/sections/products/e_product_eh.php', + 'EProductTagProcessor' => '/modules/custom/units/sections/products/e_product_tp.php', + 'EReviewEventHandler' => '/modules/custom/units/sections/reviews/e_review_eh.php', + 'EUserEventHandler' => '/modules/custom/units/sections/users/e_user_eh.php', + 'EUserTagProcessor' => '/modules/custom/units/sections/users/e_user_tp.php', + 'SampleHelper' => '/modules/custom/units/helpers/sample_helper.php', + 'WidgetEventHandler' => '/modules/custom/units/widgets/widget_eh.php', + 'WidgetTagProcessor' => '/modules/custom/units/widgets/widget_tp.php', + ), +); Index: modules/in-auction/install/cache/.gitignore =================================================================== --- /dev/null +++ modules/in-auction/install/cache/.gitignore @@ -0,0 +1 @@ +file_hashes.php Index: modules/in-auction/install/cache/class_structure.php =================================================================== --- /dev/null +++ modules/in-auction/install/cache/class_structure.php @@ -0,0 +1,35 @@ + 1, + 'classes' => array( + 'CatSelectHelper' => '/modules/in-auction/units/helpers/catselect_helper.php', + 'CategoryListingEventHandler' => '/modules/in-auction/units/category_listing/category_listing_eh.php', + 'CategoryListingTagProcessor' => '/modules/in-auction/units/category_listing/category_listing_tp.php', + 'DetailTemplateEventHandler' => '/modules/in-auction/units/detail_template/detail_template_eh.php', + 'EbayEventHandler' => '/modules/in-auction/units/sections/ebay_eh.php', + 'EbayShippingEventHandler' => '/modules/in-auction/units/shipping/shipping_eh.php', + 'EbayShippingTagProcessor' => '/modules/in-auction/units/shipping/shipping_tp.php', + 'EbayTagProcessor' => '/modules/in-auction/units/sections/ebay_tp.php', + 'ErrorLogEventHandler' => '/modules/in-auction/units/error_log/error_log_eh.php', + 'ErrorLogTagProcessor' => '/modules/in-auction/units/error_log/error_log_tp.php', + 'InAuctionPrerequisites' => '/modules/in-auction/install/prerequisites.php', + 'InAuctionUpgrades' => '/modules/in-auction/install/upgrades.php', + 'ListingEventHandler' => '/modules/in-auction/units/listing/listing_eh.php', + 'ListingItem' => '/modules/in-auction/units/listing/listing_item.php', + 'ListingTagProcessor' => '/modules/in-auction/units/listing/listing_tp.php', + 'ProductListingEventHandler' => '/modules/in-auction/units/product_listing/product_listing_eh.php', + 'ProductListingTagProcessor' => '/modules/in-auction/units/product_listing/product_listing_tp.php', + 'ScheduleEventHandler' => '/modules/in-auction/units/schedule/schedule_eh.php', + 'XMLHelper' => '/modules/in-auction/units/helpers/xml_helper.php', + 'Xml' => '/modules/in-auction/units/helpers/xml_helper.php', + 'eBayHelper' => '/modules/in-auction/units/helpers/ebay_helper.php', + 'eBayPlatformNotificationListener' => '/modules/in-auction/units/helpers/ebay_listener.php', + 'eBaySOAP' => '/modules/in-auction/units/helpers/ebay_soap.php', + 'eBaySession' => '/modules/in-auction/units/helpers/ebay_soap.php', + ), +); Index: modules/in-bulletin/install/cache/.gitignore =================================================================== --- /dev/null +++ modules/in-bulletin/install/cache/.gitignore @@ -0,0 +1 @@ +file_hashes.php Index: modules/in-bulletin/install/cache/class_structure.php =================================================================== --- /dev/null +++ modules/in-bulletin/install/cache/class_structure.php @@ -0,0 +1,25 @@ + 1, + 'classes' => array( + 'EmoticonEventHandler' => '/modules/in-bulletin/units/emoticons/emoticon_eh.php', + 'InBulletinPrerequisites' => '/modules/in-bulletin/install/prerequisites.php', + 'InBulletinUpgrades' => '/modules/in-bulletin/install/upgrades.php', + 'PollCommentEventHandler' => '/modules/in-bulletin/units/poll_comments/poll_comment_eh.php', + 'PollEventHandler' => '/modules/in-bulletin/units/polls/poll_eh.php', + 'PollTagProcessor' => '/modules/in-bulletin/units/polls/poll_tp.php', + 'PostEventHandler' => '/modules/in-bulletin/units/posts/post_eh.php', + 'PostHelper' => '/modules/in-bulletin/units/helpers/post_helper.php', + 'PostTagProcessor' => '/modules/in-bulletin/units/posts/post_tp.php', + 'PrivateMessageBodyEventHandler' => '/modules/in-bulletin/units/private_message_body/private_message_body_eh.php', + 'PrivateMessageEventHandler' => '/modules/in-bulletin/units/private_messages/private_message_eh.php', + 'PrivateMessageTagProcessor' => '/modules/in-bulletin/units/private_messages/private_message_tp.php', + 'TopicsEventHandler' => '/modules/in-bulletin/units/topics/topics_event_handler.php', + 'TopicsTagProcessor' => '/modules/in-bulletin/units/topics/topics_tag_processor.php', + ), +); Index: modules/in-commerce/install/cache/.gitignore =================================================================== --- /dev/null +++ modules/in-commerce/install/cache/.gitignore @@ -0,0 +1 @@ +file_hashes.php Index: modules/in-commerce/install/cache/class_structure.php =================================================================== --- /dev/null +++ modules/in-commerce/install/cache/class_structure.php @@ -0,0 +1,120 @@ + 1, + 'classes' => array( + 'AddressesEventHandler' => '/modules/in-commerce/units/addresses/addresses_event_handler.php', + 'AddressesItem' => '/modules/in-commerce/units/addresses/addresses_item.php', + 'AddressesList' => '/modules/in-commerce/units/addresses/addresses_list.php', + 'AddressesTagProcessor' => '/modules/in-commerce/units/addresses/addresses_tag_processor.php', + 'AffiliatePaymentTypeTagProcessor' => '/modules/in-commerce/units/affiliate_payment_types/affiliate_payment_types_tp.php', + 'AffiliatePaymentTypesEventHandler' => '/modules/in-commerce/units/affiliate_payment_types/affiliate_payment_types_event_handler.php', + 'AffiliatePaymentsEventHandler' => '/modules/in-commerce/units/affiliate_payments/affiliate_payments_event_handler.php', + 'AffiliatePaymentsTagProcessor' => '/modules/in-commerce/units/affiliate_payments/affiliate_payments_tag_processor.php', + 'AffiliatePlansBracketsEventHandler' => '/modules/in-commerce/units/affiliate_plans_brackets/affiliate_plans_brackets_event_handler.php', + 'AffiliatePlansBracketsTagProcessor' => '/modules/in-commerce/units/affiliate_plans_brackets/affiliate_plans_brackets_tag_processor.php', + 'AffiliatePlansEventHandler' => '/modules/in-commerce/units/affiliate_plans/affiliate_plans_event_handler.php', + 'AffiliatePlansItemsEventHandler' => '/modules/in-commerce/units/affiliate_plans_items/affiliate_plans_items_event_handler.php', + 'AffiliatePlansItemsTagProcessor' => '/modules/in-commerce/units/affiliate_plans_items/affiliate_plans_items_tag_processor.php', + 'AffiliatesEventHandler' => '/modules/in-commerce/units/affiliates/affiliates_event_handler.php', + 'AffiliatesTagProcessor' => '/modules/in-commerce/units/affiliates/affiliates_tag_processor.php', + 'BankLVCurrencyRates' => '/modules/in-commerce/units/helpers/bank_lv_currency_rates.php', + 'BracketsEventHandler' => '/modules/in-commerce/units/brackets/brackets_event_handler.php', + 'BracketsTagProcessor' => '/modules/in-commerce/units/brackets/brackets_tag_processor.php', + 'CouponItemType' => '/modules/in-commerce/constants.php', + 'CouponItemsEventHandler' => '/modules/in-commerce/units/coupon_items/coupon_items_event_handler.php', + 'CouponItemsTagProcessor' => '/modules/in-commerce/units/coupon_items/coupon_items_tag_processor.php', + 'CouponType' => '/modules/in-commerce/constants.php', + 'CouponsEventHandler' => '/modules/in-commerce/units/coupons/coupons_event_handler.php', + 'CouponsTagProcessor' => '/modules/in-commerce/units/coupons/coupons_tag_processor.php', + 'CurrenciesEventHandler' => '/modules/in-commerce/units/currencies/currencies_event_handler.php', + 'CurrenciesTagProcessor' => '/modules/in-commerce/units/currencies/currencies_tag_processor.php', + 'CurrencyRates' => '/modules/in-commerce/units/helpers/currency_rates.php', + 'CustomShippingQuoteEngine' => '/modules/in-commerce/units/shipping_quote_engines/custom_shipping_quote_engine.php', + 'DiscountItemType' => '/modules/in-commerce/constants.php', + 'DiscountItemsEventHandler' => '/modules/in-commerce/units/discount_items/discount_items_event_handler.php', + 'DiscountItemsTagProcessor' => '/modules/in-commerce/units/discount_items/discount_items_tag_processor.php', + 'DiscountType' => '/modules/in-commerce/constants.php', + 'DiscountsEventHandler' => '/modules/in-commerce/units/discounts/discounts_event_handler.php', + 'DownloadHelper' => '/modules/in-commerce/units/downloads/download_helper.php', + 'DstEventHandler' => '/modules/in-commerce/units/destinations/dst_event_handler.php', + 'ECBCurrencyRates' => '/modules/in-commerce/units/helpers/ecb_currency_rates.php', + 'FRNYCurrencyRates' => '/modules/in-commerce/units/helpers/frny_currency_rates.php', + 'FilesEventHandler' => '/modules/in-commerce/units/files/files_event_handler.php', + 'FilesItem' => '/modules/in-commerce/units/files/files.php', + 'GatewayEventHandler' => '/modules/in-commerce/units/gateways/gw_event_handler.php', + 'GatewayTagProcessor' => '/modules/in-commerce/units/gateways/gw_tag_processor.php', + 'GiftCertificateEventHandler' => '/modules/in-commerce/units/gift_certificates/gift_certificates_eh.php', + 'GiftCertificateTagProcessor' => '/modules/in-commerce/units/gift_certificates/gift_certificates_tp.php', + 'InCommerceEventHandler' => '/modules/in-commerce/units/sections/section_eh.php', + 'InCommercePrerequisites' => '/modules/in-commerce/install/prerequisites.php', + 'InCommerceUpgrades' => '/modules/in-commerce/install/upgrades.php', + 'Intershipper' => '/modules/in-commerce/units/shipping_quote_engines/intershipper.php', + 'ManufacturersEventHandler' => '/modules/in-commerce/units/manufacturers/manufacturers_event_handler.php', + 'ManufacturersTagProcessor' => '/modules/in-commerce/units/manufacturers/manufacturers_tag_processor.php', + 'OptionCombinationPriceType' => '/modules/in-commerce/constants.php', + 'OptionType' => '/modules/in-commerce/constants.php', + 'OrderCalculator' => '/modules/in-commerce/units/orders/order_calculator.php', + 'OrderCheckoutError' => '/modules/in-commerce/constants.php', + 'OrderCheckoutErrorType' => '/modules/in-commerce/constants.php', + 'OrderHelper' => '/modules/in-commerce/units/helpers/order_helper.php', + 'OrderItemsEventHandler' => '/modules/in-commerce/units/order_items/order_items_event_handler.php', + 'OrderItemsTagProcessor' => '/modules/in-commerce/units/order_items/order_items_tag_processor.php', + 'OrderManager' => '/modules/in-commerce/units/orders/order_manager.php', + 'OrderValidator' => '/modules/in-commerce/units/orders/order_validator.php', + 'OrdersEventHandler' => '/modules/in-commerce/units/orders/orders_event_handler.php', + 'OrdersItem' => '/modules/in-commerce/units/orders/orders_item.php', + 'OrdersTagProcessor' => '/modules/in-commerce/units/orders/orders_tag_processor.php', + 'PaymentTypeCurrenciesEventHandler' => '/modules/in-commerce/units/payment_type_currencies/payment_type_currencies_event_handler.php', + 'PaymentTypeCurrenciesTagProcessor' => '/modules/in-commerce/units/payment_type_currencies/payment_type_currencies_tag_processor.php', + 'PaymentTypeEventHandler' => '/modules/in-commerce/units/payment_type/payment_type_event_handler.php', + 'PaymentTypeTagProcessor' => '/modules/in-commerce/units/payment_type/payment_type_tag_processor.php', + 'PricingEventHandler' => '/modules/in-commerce/units/pricing/pricing_event_handler.php', + 'PricingTagProcessor' => '/modules/in-commerce/units/pricing/pricing_tag_processor.php', + 'ProductBackorder' => '/modules/in-commerce/constants.php', + 'ProductInventory' => '/modules/in-commerce/constants.php', + 'ProductOptionCombinationsEventHandler' => '/modules/in-commerce/units/product_option_combinations/product_option_combinations_event_handler.php', + 'ProductOptionCombinationsTagProcessor' => '/modules/in-commerce/units/product_option_combinations/product_option_combinations_tag_processor.php', + 'ProductOptionsEventHandler' => '/modules/in-commerce/units/product_options/product_options_event_handler.php', + 'ProductOptionsTagProcessor' => '/modules/in-commerce/units/product_options/product_options_tag_processor.php', + 'ProductsEventHandler' => '/modules/in-commerce/units/products/products_event_handler.php', + 'ProductsItem' => '/modules/in-commerce/units/products/products_item.php', + 'ProductsTagProcessor' => '/modules/in-commerce/units/products/products_tag_processor.php', + 'ReportsEventHandler' => '/modules/in-commerce/units/reports/reports_event_handler.php', + 'ReportsTagProcessor' => '/modules/in-commerce/units/reports/reports_tag_processor.php', + 'ShippingCostsEventHandler' => '/modules/in-commerce/units/shipping_costs/shipping_costs_event_handler.php', + 'ShippingEventHandler' => '/modules/in-commerce/units/shipping/shipping_event_handler.php', + 'ShippingQuoteCollector' => '/modules/in-commerce/units/shipping_quote_engines/shipping_quote_collector.php', + 'ShippingQuoteEngine' => '/modules/in-commerce/units/shipping_quote_engines/shipping_quote_engine.php', + 'ShippingQuoteEngineEventHandler' => '/modules/in-commerce/units/shipping_quote_engines/shipping_quote_engine_event_handler.php', + 'ShippingTagProcessor' => '/modules/in-commerce/units/shipping/shipping_tag_processor.php', + 'TaxDstEventHandler' => '/modules/in-commerce/units/taxesdestinations/taxes_dst_event_handler.php', + 'TaxesEventHandler' => '/modules/in-commerce/units/taxes/taxes_event_handler.php', + 'TaxesTagProcessor' => '/modules/in-commerce/units/taxes/taxes_tag_processor.php', + 'USPS' => '/modules/in-commerce/units/shipping_quote_engines/usps.php', + 'ZonesEventHandler' => '/modules/in-commerce/units/zones/zones_event_handler.php', + 'ZonesTagProcessor' => '/modules/in-commerce/units/zones/zones_tag_processor.php', + 'kAtosOriginGW' => '/modules/in-commerce/units/gateways/gw_classes/atosorigin.php', + 'kCombPriceFormatter' => '/modules/in-commerce/units/product_option_combinations/product_option_formatters.php', + 'kCombinationFormatter' => '/modules/in-commerce/units/product_option_combinations/product_option_formatters.php', + 'kGWAuthorizeNet' => '/modules/in-commerce/units/gateways/gw_classes/authorizenet.php', + 'kGWBase' => '/modules/in-commerce/units/gateways/gw_classes/gw_base.php', + 'kGWGoogleCheckout' => '/modules/in-commerce/units/gateways/gw_classes/google_checkout.php', + 'kGWPayPal' => '/modules/in-commerce/units/gateways/gw_classes/paypal.php', + 'kGWPaypalDirect' => '/modules/in-commerce/units/gateways/gw_classes/paypal_direct.php', + 'kGWRightConnect' => '/modules/in-commerce/units/gateways/gw_classes/rightconnect.php', + 'kGWWorldPay' => '/modules/in-commerce/units/gateways/gw_classes/worldpay.php', + 'kGWiDEALnl' => '/modules/in-commerce/units/gateways/gw_classes/ideal_nl.php', + 'kMultiCardsGW' => '/modules/in-commerce/units/gateways/gw_classes/multicards.php', + 'kPOCItem' => '/modules/in-commerce/units/product_option_combinations/products_option_combination_item.php', + 'kPayboxGW' => '/modules/in-commerce/units/gateways/gw_classes/paybox.php', + 'kPaymentechGW' => '/modules/in-commerce/units/gateways/gw_classes/paymentech.php', + 'kProductOptionsHelper' => '/modules/in-commerce/units/product_options/product_options_helper.php', + 'kSellaGuestPayGW' => '/modules/in-commerce/units/gateways/gw_classes/sella_guestpay.php', + 'kVerisignPfLinkGW' => '/modules/in-commerce/units/gateways/gw_classes/verisign_pflink.php', + ), +); Index: modules/in-link/install/cache/.gitignore =================================================================== --- /dev/null +++ modules/in-link/install/cache/.gitignore @@ -0,0 +1 @@ +file_hashes.php Index: modules/in-link/install/cache/class_structure.php =================================================================== --- /dev/null +++ modules/in-link/install/cache/class_structure.php @@ -0,0 +1,23 @@ + 1, + 'classes' => array( + 'InLinkPrerequisites' => '/modules/in-link/install/prerequisites.php', + 'InLinkUpgrades' => '/modules/in-link/install/upgrades.php', + 'LinkHelper' => '/modules/in-link/units/helpers/link_helper.php', + 'LinkTagProcessor' => '/modules/in-link/units/links/link_tag_processor.php', + 'LinkValidationEventHandler' => '/modules/in-link/units/link_validation/link_validation_eh.php', + 'LinkValidationTagProcessor' => '/modules/in-link/units/link_validation/link_validation_tp.php', + 'LinkVisitEventHandler' => '/modules/in-link/units/l-visits/l-visit_eh.php', + 'LinksEventHandler' => '/modules/in-link/units/links/links_event_handler.php', + 'ListingTypesEventHandler' => '/modules/in-link/units/listing_types/listing_types_event_handler.php', + 'ListingTypesTagProcessor' => '/modules/in-link/units/listing_types/listing_types_tag_processor.php', + 'ListingsEventHandler' => '/modules/in-link/units/listings/listings_event_handler.php', + 'ListingsTagProcessor' => '/modules/in-link/units/listings/listings_tag_processor.php', + ), +); Index: modules/in-news/install/cache/.gitignore =================================================================== --- /dev/null +++ modules/in-news/install/cache/.gitignore @@ -0,0 +1 @@ +file_hashes.php Index: modules/in-news/install/cache/class_structure.php =================================================================== --- /dev/null +++ modules/in-news/install/cache/class_structure.php @@ -0,0 +1,15 @@ + 1, + 'classes' => array( + 'ArticlesEventHandler' => '/modules/in-news/units/articles/articles_event_handler.php', + 'ArticlesTagProcessor' => '/modules/in-news/units/articles/articles_tag_processor.php', + 'InNewsPrerequisites' => '/modules/in-news/install/prerequisites.php', + 'InNewsUpgrades' => '/modules/in-news/install/upgrades.php', + ), +); Index: tools/build_class_map.php =================================================================== --- /dev/null +++ tools/build_class_map.php @@ -0,0 +1,19 @@ +Init(); + +foreach ( ClassMapBuilder::createBuilders() as $class_map_builder ) { + $class_map_builder->build(); +}