From 697b07e1f9f9a12695671285cfa881248126f470 Mon Sep 17 00:00:00 2001 From: padams Date: Tue, 23 Jan 2007 04:55:14 +0000 Subject: [PATCH] checking in initial framework/module refactoring. --- asyncEventProcessor.php | 565 +- conf/messages.php | 80 + eventQueue.php | 6 +- includes/Log-1.9.8/Log.php | 3 + includes/base64.js | 142 + includes/jpgraph-1.20.3/src/jpg-config.inc | 400 +- includes/phpmailer-1.73/ChangeLog.txt | 184 + includes/phpmailer-1.73/LICENSE | 504 + includes/phpmailer-1.73/README | 102 + includes/phpmailer-1.73/class.phpmailer.php | 1499 ++ includes/phpmailer-1.73/class.smtp.php | 1045 + includes/phpmailer-1.73/docs/extending.html | 148 + includes/phpmailer-1.73/docs/faq.html | 66 + includes/phpmailer-1.73/docs/timeoutfix.diff | 23 + .../language/phpmailer.lang-br.php | 21 + .../language/phpmailer.lang-ca.php | 22 + .../language/phpmailer.lang-cz.php | 24 + .../language/phpmailer.lang-de.php | 23 + .../language/phpmailer.lang-dk.php | 24 + .../language/phpmailer.lang-en.php | 23 + .../language/phpmailer.lang-es.php | 23 + .../language/phpmailer.lang-fi.php | 23 + .../language/phpmailer.lang-fo.php | 25 + .../language/phpmailer.lang-fr.php | 24 + .../language/phpmailer.lang-hu.php | 23 + .../language/phpmailer.lang-it.php | 28 + .../language/phpmailer.lang-ja.php | 25 + .../language/phpmailer.lang-nl.php | 23 + .../language/phpmailer.lang-no.php | 23 + .../language/phpmailer.lang-pl.php | 24 + .../language/phpmailer.lang-ro.php | 23 + .../language/phpmailer.lang-ru.php | 23 + .../language/phpmailer.lang-se.php | 24 + .../language/phpmailer.lang-tr.php | 25 + .../phpdoc/PHPMailer/PHPMailer.html | 1475 ++ .../phpmailer-1.73/phpdoc/PHPMailer/SMTP.html | 734 + .../PHPMailer/_class_phpmailer_php.html | 60 + .../phpdoc/PHPMailer/_class_smtp_php.html | 60 + includes/phpmailer-1.73/phpdoc/blank.html | 13 + .../phpdoc/classtrees_PHPMailer.html | 28 + .../phpmailer-1.73/phpdoc/elementindex.html | 734 + .../phpdoc/elementindex_PHPMailer.html | 731 + includes/phpmailer-1.73/phpdoc/errors.html | 23 + includes/phpmailer-1.73/phpdoc/index.html | 24 + .../phpmailer-1.73/phpdoc/li_PHPMailer.html | 36 + .../phpmailer-1.73/phpdoc/media/banner.css | 32 + .../phpdoc/media/stylesheet.css | 133 + includes/phpmailer-1.73/phpdoc/packages.html | 27 + .../phpmailer-1.73/test/phpmailer_test.php | 572 + includes/phpmailer-1.73/test/phpunit.php | 376 + includes/phpmailer-1.73/test/test.png | Bin 0 -> 1280 bytes includes/urlencode.js | 78 + modules/base/classes/abstractJpGraphView.php | 106 + modules/base/classes/column.php | 46 + modules/base/classes/column2.php | 19 + modules/base/classes/event.php | 373 + modules/base/classes/mailer.php | 105 + modules/base/classes/requestEvent.php | 290 + modules/base/classes/test.php | 34 + modules/base/data/php_browscap.ini | 16927 ++++++++++++++++ modules/base/entities/click.php | 88 + modules/base/entities/document.php | 52 + modules/base/entities/feed_request.php | 71 + modules/base/entities/host.php | 56 + modules/base/entities/referer.php | 57 + modules/base/entities/request.php | 84 + modules/base/entities/session.php | 83 + modules/base/entities/site.php | 56 + modules/base/entities/ua.php | 52 + modules/base/entities/user.php | 60 + modules/base/entities/visitor.php | 62 + modules/base/error.php | 73 + modules/base/graphDashboardTrend.php | 99 + modules/base/graphFeedFormats.php | 89 + modules/base/graphFeedReaderTypes.php | 89 + modules/base/graphFeedRequests.php | 113 + modules/base/graphPageTypes.php | 92 + modules/base/graphVisitorSources.php | 130 + modules/base/graphVisitorTypes.php | 96 + modules/base/graphs/jpBarAreaGraph.php | 114 + modules/base/graphs/jpErrorGraph.php | 65 + modules/base/graphs/jpPieGraph.php | 108 + modules/base/handlers/clickHandlers.php | 71 + modules/base/handlers/commentHandlers.php | 63 + modules/base/handlers/documentHandlers.php | 63 + modules/base/handlers/feedRequestHandlers.php | 63 + modules/base/handlers/hostHandlers.php | 63 + modules/base/handlers/notifyHandlers.php | 75 + modules/base/handlers/refererHandlers.php | 66 + modules/base/handlers/requestHandlers.php | 71 + modules/base/handlers/sessionHandlers.php | 72 + modules/base/handlers/userAgentHandlers.php | 63 + modules/base/handlers/userHandlers.php | 74 + modules/base/handlers/visitorHandlers.php | 73 + modules/base/helperPageTags.php | 118 + modules/base/install.php | 73 + modules/base/install/install_base_mysql.php | 702 + modules/base/installAdminUser.php | 135 + modules/base/installBase.php | 68 + modules/base/installCheckEnv.php | 124 + modules/base/installDefaultSiteProfile.php | 138 + modules/base/installEmbedded.php | 82 + modules/base/installFinish.php | 79 + modules/base/installStart.php | 80 + modules/base/jsDomClickLib.php | 108 + modules/base/jsLogLib.php | 72 + modules/base/logClick.php | 77 + modules/base/logComment.php | 66 + modules/base/logDocument.php | 63 + modules/base/logFeedRequest.php | 77 + modules/base/logHost.php | 74 + modules/base/logPageRequest.php | 81 + modules/base/logReferer.php | 155 + modules/base/logSession.php | 105 + modules/base/logSessionUpdate.php | 75 + modules/base/logUserAgent.php | 63 + modules/base/logVisitor.php | 73 + modules/base/logVisitorUpdate.php | 69 + modules/base/login.php | 102 + modules/base/logout.php | 60 + modules/base/metrics/clickstream.php | 62 + modules/base/metrics/dashCoreByDay.php | 74 + modules/base/metrics/dashCounts.php | 66 + modules/base/metrics/feedFormatsCount.php | 89 + modules/base/metrics/feedReaderTypesCount.php | 96 + modules/base/metrics/feedViewsTrend.php | 98 + modules/base/metrics/latestVisits.php | 66 + modules/base/metrics/pageTypesCount.php | 99 + modules/base/metrics/pageViewsByDay.php | 96 + modules/base/metrics/pageViewsCount.php | 68 + modules/base/metrics/requestCounts.php | 93 + modules/base/metrics/requestCountsByDay.php | 100 + modules/base/metrics/sessionBrowserTypes.php | 100 + modules/base/metrics/sessionsCount.php | 61 + modules/base/metrics/topClicks.php | 103 + modules/base/metrics/topEntryPages.php | 73 + modules/base/metrics/topExitPages.php | 73 + modules/base/metrics/topHosts.php | 101 + modules/base/metrics/topPages.php | 77 + modules/base/metrics/topReferers.php | 78 + modules/base/metrics/topReferingAnchors.php | 100 + modules/base/metrics/topReferingHosts.php | 97 + modules/base/metrics/topReferingKeywords.php | 99 + modules/base/metrics/topVisitors.php | 97 + modules/base/metrics/visitorTypesCount.php | 64 + modules/base/metrics/visitorsAge.php | 104 + modules/base/metrics/visitorsList.php | 75 + .../base/metrics/visitorsUserAgentCount.php | 77 + .../base/metrics/visitsFromDirectNavCount.php | 84 + modules/base/metrics/visitsFromFeedsCount.php | 88 + .../metrics/visitsFromSearchEnginesCount.php | 86 + modules/base/metrics/visitsFromSitesCount.php | 89 + modules/base/module.php | 151 + modules/base/notifyNewSession.php | 106 + modules/base/notifyNewSessionPlainText.php | 57 + modules/base/options.php | 80 + modules/base/optionsGeneral.php | 64 + modules/base/optionsUpdate.php | 78 + modules/base/passwordResetRequest.php | 109 + modules/base/pixel.php | 68 + modules/base/processEvent.php | 83 + modules/base/processFirstRequest.php | 76 + modules/base/processRequest.php | 132 + modules/base/report.php | 193 + modules/base/reportClicks.php | 111 + modules/base/reportContent.php | 123 + modules/base/reportDashboard.php | 194 + modules/base/reportDocument.php | 163 + modules/base/reportFeeds.php | 127 + modules/base/reportTraffic.php | 189 + modules/base/reportVisit.php | 133 + modules/base/reportVisitor.php | 116 + modules/base/reportVisitors.php | 110 + modules/base/sites.php | 66 + modules/base/sitesAdd.php | 134 + modules/base/sitesDelete.php | 57 + modules/base/sitesEdit.php | 118 + modules/base/sitesInvocation.php | 58 + modules/base/templates/css.tpl | 93 + modules/base/templates/generic_error.tpl | 1 + modules/base/templates/header.tpl | 26 + modules/base/templates/install.tpl | 32 + modules/base/templates/install_check_env.tpl | 53 + .../base/templates/install_default_user.tpl | 45 + modules/base/templates/install_finish.tpl | 19 + .../templates/install_schema_detected.tpl | 9 + modules/base/templates/install_start.tpl | 14 + modules/base/templates/invocation.tpl | 28 + modules/base/templates/js_helper_tags.tpl | 14 + modules/base/templates/js_log_lib.tpl | 419 + modules/base/templates/js_log_tag.tpl | 5 + modules/base/templates/js_logger.tpl | 82 + modules/base/templates/js_owa_params.tpl | 2 + modules/base/templates/js_url_encode_lib.tpl | 78 + modules/base/templates/login_form.tpl | 42 + modules/base/templates/msgs.tpl | 7 + modules/base/templates/new_session_email.tpl | 8 + .../new_session_email_plain_text.tpl | 7 + modules/base/templates/news.tpl | 20 + modules/base/templates/options.tpl | 36 + modules/base/templates/options_db.tpl | 54 + modules/base/templates/options_errors.tpl | 24 + modules/base/templates/options_general.tpl | 184 + modules/base/templates/options_reporting.tpl | 18 + .../templates/options_request_processing.tpl | 99 + modules/base/templates/pixel.tpl | 1 + modules/base/templates/report.tpl | 8 + modules/base/templates/report_anchors.tpl | 20 + .../base/templates/report_browser_types.tpl | 32 + modules/base/templates/report_clicks.tpl | 67 + modules/base/templates/report_content.tpl | 37 + modules/base/templates/report_dashboard.tpl | 84 + .../report_dashboard_core_metrics.tpl | 44 + .../report_dashboard_summary_stats.tpl | 27 + modules/base/templates/report_document.tpl | 35 + .../report_document_core_metrics.tpl | 42 + .../base/templates/report_document_detail.tpl | 14 + .../report_document_summary_stats.tpl | 19 + .../templates/report_feed_core_metrics.tpl | 35 + modules/base/templates/report_feeds.tpl | 39 + modules/base/templates/report_hosts.tpl | 20 + .../base/templates/report_latest_visits.tpl | 96 + modules/base/templates/report_nav.tpl | 16 + .../base/templates/report_period_filters.tpl | 360 + modules/base/templates/report_referers.tpl | 44 + modules/base/templates/report_se_hosts.tpl | 25 + .../base/templates/report_top_entry_pages.tpl | 21 + .../base/templates/report_top_exit_pages.tpl | 21 + .../base/templates/report_top_keywords.tpl | 20 + modules/base/templates/report_top_pages.tpl | 21 + .../base/templates/report_top_referers.tpl | 21 + .../base/templates/report_top_visitors.tpl | 34 + modules/base/templates/report_traffic.tpl | 65 + .../report_traffic_summary_stats.tpl | 27 + modules/base/templates/report_visit.tpl | 31 + modules/base/templates/report_visitor.tpl | 10 + modules/base/templates/report_visitors.tpl | 6 + .../base/templates/report_visitors_age.tpl | 19 + modules/base/templates/sites.tpl | 38 + modules/base/templates/sites_addoredit.tpl | 46 + modules/base/templates/sites_invocation.tpl | 6 + modules/base/templates/users.tpl | 43 + modules/base/templates/users_addoredit.tpl | 56 + .../base/templates/users_change_password.tpl | 36 + .../templates/users_new_account_email.tpl | 11 + .../users_password_reset_request.tpl | 29 + .../templates/users_reset_password_email.tpl | 6 + .../templates/users_set_password_email.tpl | 1 + modules/base/templates/wrapper_blank.tpl | 1 + modules/base/templates/wrapper_default.tpl | 30 + modules/base/templates/wrapper_email.tpl | 8 + modules/base/templates/wrapper_public.tpl | 43 + modules/base/templates/wrapper_subview.tpl | 1 + modules/base/templates/wrapper_wordpress.tpl | 8 + modules/base/users.php | 71 + modules/base/usersAdd.php | 131 + modules/base/usersChangePassword.php | 137 + modules/base/usersDelete.php | 57 + modules/base/usersEdit.php | 119 + modules/base/usersNewAccount.php | 104 + modules/base/usersResetPassword.php | 98 + modules/base/usersSetPassword.php | 99 + mw_plugin.php | 5 +- owa_api.php | 17 +- owa_auth.php | 623 +- owa_base.php | 211 +- owa_browscap.php | 113 +- owa_caller.php | 846 +- owa_click.php | 2 +- owa_controller.php | 90 + owa_coreAPI.php | 408 + owa_db.php | 27 +- owa_entity.php | 263 + owa_env.php | 83 +- owa_error.php | 611 +- owa_event_class.php | 112 +- owa_graph.php | 591 +- owa_httpRequest.php | 336 +- owa_install.php | 26 +- owa_lib.php | 1379 +- owa_metric.php | 884 +- owa_module.php | 333 + owa_observer.php | 79 +- owa_php.php | 3 +- owa_requestContainer.php | 76 + owa_request_class.php | 12 +- owa_session_class.php | 2 - owa_settings_class.php | 641 +- owa_site.php | 90 +- owa_template.php | 591 +- owa_tracking_controller.php | 11 +- owa_user.php | 1 + owa_view.php | 317 + owa_wp.php | 207 +- plugins/auth/none.php | 5 +- plugins/auth/simple.php | 307 +- plugins/auth/wordpress.php | 155 + plugins/db/owa_db_mysql.php | 695 +- .../observer_password_reset.php | 121 +- plugins/install/mysql/owa_install_base.php | 32 +- plugins/location/hostip.php | 226 +- plugins/metrics/dashboard.php | 4 +- public/action.php | 7 +- public/install.php | 52 + public/main.php | 42 + templates/default_wrap.tpl | 10 + templates/installer_env_status.tpl | 2 +- templates/options_edit_user_profile.tpl | 24 +- templates/session.tpl | 58 +- templates/top_pages.tpl | 4 +- templates/wordpress.tpl | 2 +- wp_plugin.php | 783 +- 312 files changed, 49689 insertions(+), 5219 deletions(-) create mode 100644 conf/messages.php create mode 100644 includes/base64.js create mode 100644 includes/phpmailer-1.73/ChangeLog.txt create mode 100644 includes/phpmailer-1.73/LICENSE create mode 100644 includes/phpmailer-1.73/README create mode 100644 includes/phpmailer-1.73/class.phpmailer.php create mode 100644 includes/phpmailer-1.73/class.smtp.php create mode 100644 includes/phpmailer-1.73/docs/extending.html create mode 100644 includes/phpmailer-1.73/docs/faq.html create mode 100644 includes/phpmailer-1.73/docs/timeoutfix.diff create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-br.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-ca.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-cz.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-de.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-dk.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-en.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-es.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-fi.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-fo.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-fr.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-hu.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-it.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-ja.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-nl.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-no.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-pl.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-ro.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-ru.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-se.php create mode 100644 includes/phpmailer-1.73/language/phpmailer.lang-tr.php create mode 100644 includes/phpmailer-1.73/phpdoc/PHPMailer/PHPMailer.html create mode 100644 includes/phpmailer-1.73/phpdoc/PHPMailer/SMTP.html create mode 100644 includes/phpmailer-1.73/phpdoc/PHPMailer/_class_phpmailer_php.html create mode 100644 includes/phpmailer-1.73/phpdoc/PHPMailer/_class_smtp_php.html create mode 100644 includes/phpmailer-1.73/phpdoc/blank.html create mode 100644 includes/phpmailer-1.73/phpdoc/classtrees_PHPMailer.html create mode 100644 includes/phpmailer-1.73/phpdoc/elementindex.html create mode 100644 includes/phpmailer-1.73/phpdoc/elementindex_PHPMailer.html create mode 100644 includes/phpmailer-1.73/phpdoc/errors.html create mode 100644 includes/phpmailer-1.73/phpdoc/index.html create mode 100644 includes/phpmailer-1.73/phpdoc/li_PHPMailer.html create mode 100644 includes/phpmailer-1.73/phpdoc/media/banner.css create mode 100644 includes/phpmailer-1.73/phpdoc/media/stylesheet.css create mode 100644 includes/phpmailer-1.73/phpdoc/packages.html create mode 100644 includes/phpmailer-1.73/test/phpmailer_test.php create mode 100644 includes/phpmailer-1.73/test/phpunit.php create mode 100644 includes/phpmailer-1.73/test/test.png create mode 100644 includes/urlencode.js create mode 100644 modules/base/classes/abstractJpGraphView.php create mode 100644 modules/base/classes/column.php create mode 100644 modules/base/classes/column2.php create mode 100644 modules/base/classes/event.php create mode 100644 modules/base/classes/mailer.php create mode 100644 modules/base/classes/requestEvent.php create mode 100644 modules/base/classes/test.php create mode 100644 modules/base/data/php_browscap.ini create mode 100644 modules/base/entities/click.php create mode 100644 modules/base/entities/document.php create mode 100644 modules/base/entities/feed_request.php create mode 100644 modules/base/entities/host.php create mode 100644 modules/base/entities/referer.php create mode 100644 modules/base/entities/request.php create mode 100644 modules/base/entities/session.php create mode 100644 modules/base/entities/site.php create mode 100644 modules/base/entities/ua.php create mode 100644 modules/base/entities/user.php create mode 100644 modules/base/entities/visitor.php create mode 100644 modules/base/error.php create mode 100644 modules/base/graphDashboardTrend.php create mode 100644 modules/base/graphFeedFormats.php create mode 100644 modules/base/graphFeedReaderTypes.php create mode 100644 modules/base/graphFeedRequests.php create mode 100644 modules/base/graphPageTypes.php create mode 100644 modules/base/graphVisitorSources.php create mode 100644 modules/base/graphVisitorTypes.php create mode 100644 modules/base/graphs/jpBarAreaGraph.php create mode 100644 modules/base/graphs/jpErrorGraph.php create mode 100644 modules/base/graphs/jpPieGraph.php create mode 100644 modules/base/handlers/clickHandlers.php create mode 100644 modules/base/handlers/commentHandlers.php create mode 100644 modules/base/handlers/documentHandlers.php create mode 100644 modules/base/handlers/feedRequestHandlers.php create mode 100644 modules/base/handlers/hostHandlers.php create mode 100644 modules/base/handlers/notifyHandlers.php create mode 100644 modules/base/handlers/refererHandlers.php create mode 100644 modules/base/handlers/requestHandlers.php create mode 100644 modules/base/handlers/sessionHandlers.php create mode 100644 modules/base/handlers/userAgentHandlers.php create mode 100644 modules/base/handlers/userHandlers.php create mode 100644 modules/base/handlers/visitorHandlers.php create mode 100644 modules/base/helperPageTags.php create mode 100644 modules/base/install.php create mode 100644 modules/base/install/install_base_mysql.php create mode 100644 modules/base/installAdminUser.php create mode 100644 modules/base/installBase.php create mode 100644 modules/base/installCheckEnv.php create mode 100644 modules/base/installDefaultSiteProfile.php create mode 100644 modules/base/installEmbedded.php create mode 100644 modules/base/installFinish.php create mode 100644 modules/base/installStart.php create mode 100644 modules/base/jsDomClickLib.php create mode 100644 modules/base/jsLogLib.php create mode 100644 modules/base/logClick.php create mode 100644 modules/base/logComment.php create mode 100644 modules/base/logDocument.php create mode 100644 modules/base/logFeedRequest.php create mode 100644 modules/base/logHost.php create mode 100644 modules/base/logPageRequest.php create mode 100644 modules/base/logReferer.php create mode 100644 modules/base/logSession.php create mode 100644 modules/base/logSessionUpdate.php create mode 100644 modules/base/logUserAgent.php create mode 100644 modules/base/logVisitor.php create mode 100644 modules/base/logVisitorUpdate.php create mode 100644 modules/base/login.php create mode 100644 modules/base/logout.php create mode 100644 modules/base/metrics/clickstream.php create mode 100644 modules/base/metrics/dashCoreByDay.php create mode 100644 modules/base/metrics/dashCounts.php create mode 100644 modules/base/metrics/feedFormatsCount.php create mode 100644 modules/base/metrics/feedReaderTypesCount.php create mode 100644 modules/base/metrics/feedViewsTrend.php create mode 100644 modules/base/metrics/latestVisits.php create mode 100644 modules/base/metrics/pageTypesCount.php create mode 100644 modules/base/metrics/pageViewsByDay.php create mode 100644 modules/base/metrics/pageViewsCount.php create mode 100644 modules/base/metrics/requestCounts.php create mode 100644 modules/base/metrics/requestCountsByDay.php create mode 100644 modules/base/metrics/sessionBrowserTypes.php create mode 100644 modules/base/metrics/sessionsCount.php create mode 100644 modules/base/metrics/topClicks.php create mode 100644 modules/base/metrics/topEntryPages.php create mode 100644 modules/base/metrics/topExitPages.php create mode 100644 modules/base/metrics/topHosts.php create mode 100644 modules/base/metrics/topPages.php create mode 100644 modules/base/metrics/topReferers.php create mode 100644 modules/base/metrics/topReferingAnchors.php create mode 100644 modules/base/metrics/topReferingHosts.php create mode 100644 modules/base/metrics/topReferingKeywords.php create mode 100644 modules/base/metrics/topVisitors.php create mode 100644 modules/base/metrics/visitorTypesCount.php create mode 100644 modules/base/metrics/visitorsAge.php create mode 100644 modules/base/metrics/visitorsList.php create mode 100644 modules/base/metrics/visitorsUserAgentCount.php create mode 100644 modules/base/metrics/visitsFromDirectNavCount.php create mode 100644 modules/base/metrics/visitsFromFeedsCount.php create mode 100644 modules/base/metrics/visitsFromSearchEnginesCount.php create mode 100644 modules/base/metrics/visitsFromSitesCount.php create mode 100644 modules/base/module.php create mode 100644 modules/base/notifyNewSession.php create mode 100644 modules/base/notifyNewSessionPlainText.php create mode 100644 modules/base/options.php create mode 100644 modules/base/optionsGeneral.php create mode 100644 modules/base/optionsUpdate.php create mode 100644 modules/base/passwordResetRequest.php create mode 100644 modules/base/pixel.php create mode 100644 modules/base/processEvent.php create mode 100644 modules/base/processFirstRequest.php create mode 100644 modules/base/processRequest.php create mode 100644 modules/base/report.php create mode 100644 modules/base/reportClicks.php create mode 100644 modules/base/reportContent.php create mode 100644 modules/base/reportDashboard.php create mode 100644 modules/base/reportDocument.php create mode 100644 modules/base/reportFeeds.php create mode 100644 modules/base/reportTraffic.php create mode 100644 modules/base/reportVisit.php create mode 100644 modules/base/reportVisitor.php create mode 100644 modules/base/reportVisitors.php create mode 100644 modules/base/sites.php create mode 100644 modules/base/sitesAdd.php create mode 100644 modules/base/sitesDelete.php create mode 100644 modules/base/sitesEdit.php create mode 100644 modules/base/sitesInvocation.php create mode 100644 modules/base/templates/css.tpl create mode 100644 modules/base/templates/generic_error.tpl create mode 100644 modules/base/templates/header.tpl create mode 100644 modules/base/templates/install.tpl create mode 100644 modules/base/templates/install_check_env.tpl create mode 100644 modules/base/templates/install_default_user.tpl create mode 100644 modules/base/templates/install_finish.tpl create mode 100644 modules/base/templates/install_schema_detected.tpl create mode 100644 modules/base/templates/install_start.tpl create mode 100644 modules/base/templates/invocation.tpl create mode 100644 modules/base/templates/js_helper_tags.tpl create mode 100644 modules/base/templates/js_log_lib.tpl create mode 100644 modules/base/templates/js_log_tag.tpl create mode 100644 modules/base/templates/js_logger.tpl create mode 100644 modules/base/templates/js_owa_params.tpl create mode 100644 modules/base/templates/js_url_encode_lib.tpl create mode 100644 modules/base/templates/login_form.tpl create mode 100644 modules/base/templates/msgs.tpl create mode 100644 modules/base/templates/new_session_email.tpl create mode 100644 modules/base/templates/new_session_email_plain_text.tpl create mode 100644 modules/base/templates/news.tpl create mode 100644 modules/base/templates/options.tpl create mode 100644 modules/base/templates/options_db.tpl create mode 100644 modules/base/templates/options_errors.tpl create mode 100644 modules/base/templates/options_general.tpl create mode 100644 modules/base/templates/options_reporting.tpl create mode 100644 modules/base/templates/options_request_processing.tpl create mode 100644 modules/base/templates/pixel.tpl create mode 100644 modules/base/templates/report.tpl create mode 100644 modules/base/templates/report_anchors.tpl create mode 100644 modules/base/templates/report_browser_types.tpl create mode 100644 modules/base/templates/report_clicks.tpl create mode 100644 modules/base/templates/report_content.tpl create mode 100644 modules/base/templates/report_dashboard.tpl create mode 100644 modules/base/templates/report_dashboard_core_metrics.tpl create mode 100644 modules/base/templates/report_dashboard_summary_stats.tpl create mode 100644 modules/base/templates/report_document.tpl create mode 100644 modules/base/templates/report_document_core_metrics.tpl create mode 100644 modules/base/templates/report_document_detail.tpl create mode 100644 modules/base/templates/report_document_summary_stats.tpl create mode 100644 modules/base/templates/report_feed_core_metrics.tpl create mode 100644 modules/base/templates/report_feeds.tpl create mode 100644 modules/base/templates/report_hosts.tpl create mode 100644 modules/base/templates/report_latest_visits.tpl create mode 100644 modules/base/templates/report_nav.tpl create mode 100644 modules/base/templates/report_period_filters.tpl create mode 100644 modules/base/templates/report_referers.tpl create mode 100644 modules/base/templates/report_se_hosts.tpl create mode 100644 modules/base/templates/report_top_entry_pages.tpl create mode 100644 modules/base/templates/report_top_exit_pages.tpl create mode 100644 modules/base/templates/report_top_keywords.tpl create mode 100644 modules/base/templates/report_top_pages.tpl create mode 100644 modules/base/templates/report_top_referers.tpl create mode 100644 modules/base/templates/report_top_visitors.tpl create mode 100644 modules/base/templates/report_traffic.tpl create mode 100644 modules/base/templates/report_traffic_summary_stats.tpl create mode 100644 modules/base/templates/report_visit.tpl create mode 100644 modules/base/templates/report_visitor.tpl create mode 100644 modules/base/templates/report_visitors.tpl create mode 100644 modules/base/templates/report_visitors_age.tpl create mode 100644 modules/base/templates/sites.tpl create mode 100644 modules/base/templates/sites_addoredit.tpl create mode 100644 modules/base/templates/sites_invocation.tpl create mode 100644 modules/base/templates/users.tpl create mode 100644 modules/base/templates/users_addoredit.tpl create mode 100644 modules/base/templates/users_change_password.tpl create mode 100644 modules/base/templates/users_new_account_email.tpl create mode 100644 modules/base/templates/users_password_reset_request.tpl create mode 100644 modules/base/templates/users_reset_password_email.tpl create mode 100644 modules/base/templates/users_set_password_email.tpl create mode 100644 modules/base/templates/wrapper_blank.tpl create mode 100644 modules/base/templates/wrapper_default.tpl create mode 100644 modules/base/templates/wrapper_email.tpl create mode 100644 modules/base/templates/wrapper_public.tpl create mode 100644 modules/base/templates/wrapper_subview.tpl create mode 100644 modules/base/templates/wrapper_wordpress.tpl create mode 100644 modules/base/users.php create mode 100644 modules/base/usersAdd.php create mode 100644 modules/base/usersChangePassword.php create mode 100644 modules/base/usersDelete.php create mode 100644 modules/base/usersEdit.php create mode 100644 modules/base/usersNewAccount.php create mode 100644 modules/base/usersResetPassword.php create mode 100644 modules/base/usersSetPassword.php create mode 100644 owa_controller.php create mode 100644 owa_coreAPI.php create mode 100644 owa_entity.php create mode 100644 owa_module.php create mode 100644 owa_requestContainer.php create mode 100644 owa_view.php create mode 100644 plugins/auth/wordpress.php create mode 100644 public/install.php create mode 100644 public/main.php diff --git a/asyncEventProcessor.php b/asyncEventProcessor.php index cc4a5e7bc..5878f796d 100644 --- a/asyncEventProcessor.php +++ b/asyncEventProcessor.php @@ -1,281 +1,284 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class asyncEventProcessor extends owa_caller { - - - /** - * Processing Errors - * - * @var array - */ - var $errors = array(); - - /** - * Error Logger - * - * @var object - */ - var $error_logger; - - /** - * Event Queue - * - * @var object - */ - var $eq; - - /** - * Database acces object - * - * @var object - */ - var $db; - - /** - * Constructor - * - * @return asyncEventProcessor - * @access public - */ - function asyncEventProcessor($config = null) { - $this->owa_caller($config); - - if ($this->config['error_handler'] == 'development'): - $this->config['error_handler'] = 'async_development'; - endif; - - $this->e = &owa_error::get_instance(); - - // Turns off async setting so that the proper event queue is created - $this->config['async_db'] = false; - $this->eq = &eventQueue::get_instance(); - $this->db = &owa_db::get_instance(); - - // Create Error Logger - NEEDED? - $conf = array('mode' => 640, 'timeFormat' => '%X %x'); - $this->error_logger = &Log::singleton('file', $this->config['async_error_log_file'], 'ident', $conf); - $this->error_logger->_lineFormat = '[%3$s]'; - $this->error_logger->_filename = $this->config['async_error_log_file']; - - return; - } - - /** - * Processes a named file - * - * @param string $event_file - */ - function process_specific($event_file) { - - $this->process_events($event_file); - return; - } - - /** - * Processes the file name specified in configuration array - * - * @access public - */ - function process_standard() { - - $this->process_events($this->config['async_log_dir'].$this->config['async_log_file']); - return; - } - /** - * Process Events from standard event log file - * - * @access public - * - */ - function process_events($event_file) { - $this->e->info(sprintf('Starting Async Event Processing Run for: %s', - $event_file)); - //check for lock file - if (file_exists($this->config['async_log_dir'].$this->config['async_lock_file'])): - //read contents of lock file for last PID - $lock_file = fopen($this->config['async_log_dir'].$this->config['async_lock_file'], "r") or die ("Could not create lock file"); - if ($lock_file): - while (!feof($lock_file)) { - $former_pid = fgets($lock_file, 4096); - } - fclose($lock_file); - endif; - //check to see if former PID is still running - $ps_check = $this->is_running($former_pid); - //if the process is still running, exit. - if ($ps_check == true): - $this->e->info(sprintf('Previous Process (%d) still active. Terminating Run.', - $former_pid)); - exit; - //if it's not running remove the lock file and proceead. - else: - $this->e->info(sprintf('Process %d is not running. Continuing Run... \n', - $former_pid)); - unlink ($this->config['async_log_dir'].$this->config['async_lock_file']); - $this->process_event_log($event_file); - endif; - - else: - $this->process_event_log($event_file); - - endif; - return; - } - - function create_lock_file() { - - $lock_file = fopen($this->config['async_log_dir'].$this->config['async_lock_file'], "w+") or die ("Could not create lock file"); - - // Write PID to lock file - if (fwrite($lock_file, posix_getpid()) === FALSE) { - $this->e->alert('Cannot write to lock file. Terminating Run.'); - exit; - } - - return; - } - - function process_event_log($file) { - // check to see if event log file exisits - - if (file_exists($file)): - if($this->db->connection_status == true): - $this->create_lock_file(); - - // Create a new log file name - $new_file_name = $this->config['async_log_dir'].time().".".posix_getpid(); - $new_file = $new_file_name.".processing"; - // Rename current log file - rename ($file, $new_file ) or die ("Could not rename file"); - // open file for reading - $handle = @fopen($new_file, "r"); - if ($handle): - while (!feof($handle)) { - // Read row - $buffer = fgets($handle, 14096); // big enough? - - // Parse the row - $event = $this->parse_log_row($buffer); - - // Log event to the event queue - if (!empty($event['event_obj'])): - - $this->eq->log($event['event_obj'], $event['event_type']); - // print status - $this->e->info(sprintf('Processing: %s', $event['event_type'])); - - endif; - /* - if ($result === false): - $this->error_logger->log($buffer); - else: - print "Could not open async error log"; - endif; - */ - } - //Close file - fclose($handle); - - // rename file to mark it as processed - $processed_file_name = $new_file_name.".processed"; - rename ($new_file, $processed_file_name) or die ("Could not rename file"); - $this->e->info(sprintf('Processing Complete. Renaming File to %s', - $processed_file_name )); - //Delete processed file - unlink($processed_file_name); - $this->e->info(sprintf('Deleting File %s', - $processed_file_name )); - - else: - //print error - $this->e->alert(sprintf('Could not open file %s. Terminating Run.', - $new_file)); - exit; - endif; - - //Delete Lock file - unlink($this->config['async_log_dir'].$this->config['async_lock_file']); - - else: - $this->e->err('Database Connection is down.'); - endif; - - endif; - - return; - } - - /** - * Check if application is already running - * - */ - function is_running($PID){ - exec("ps $PID", $process_state); - - if (count($process_state) >= 2): - - return true; - else: - - return false; - endif; - } - - - /** - * Parse row from event log file - * - * @param string $row - * @return array - */ - function parse_log_row($row) { - - $raw_event = explode("|*|", $row); - - return array( 'timestamp' => $raw_event[0], - 'event_type' => $raw_event[3], - 'event_obj' => unserialize(urldecode($raw_event[4])) - ); - } - - -} - -?> + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class asyncEventProcessor extends owa_caller { + + + /** + * Processing Errors + * + * @var array + */ + var $errors = array(); + + /** + * Error Logger + * + * @var object + */ + var $error_logger; + + /** + * Event Queue + * + * @var object + */ + var $eq; + + /** + * Database acces object + * + * @var object + */ + var $db; + + /** + * Constructor + * + * @return asyncEventProcessor + * @access public + */ + function asyncEventProcessor($config = null) { + $this->owa_caller($config); + + if ($this->config['error_handler'] == 'development'): + $this->config['error_handler'] = 'async_development'; + endif; + + $this->e = &owa_error::get_instance(); + + // Turns off async setting so that the proper event queue is created + $this->config['async_db'] = false; + $this->eq = &eventQueue::get_instance(); + $this->db = &owa_db::get_instance(); + + // Create Error Logger - NEEDED? + $conf = array('mode' => 640, 'timeFormat' => '%X %x'); + $this->error_logger = &Log::singleton('file', $this->config['async_error_log_file'], 'ident', $conf); + $this->error_logger->_lineFormat = '[%3$s]'; + $this->error_logger->_filename = $this->config['async_error_log_file']; + + return; + } + + /** + * Processes a named file + * + * @param string $event_file + */ + function process_specific($event_file) { + + $this->process_events($event_file); + return; + } + + /** + * Processes the file name specified in configuration array + * + * @access public + */ + function process_standard() { + + $this->process_events($this->config['async_log_dir'].$this->config['async_log_file']); + return; + } + /** + * Process Events from standard event log file + * + * @access public + * + */ + function process_events($event_file) { + $this->e->info(sprintf('Starting Async Event Processing Run for: %s', + $event_file)); + //check for lock file + if (file_exists($this->config['async_log_dir'].$this->config['async_lock_file'])): + //read contents of lock file for last PID + $lock_file = fopen($this->config['async_log_dir'].$this->config['async_lock_file'], "r") or die ("Could not create lock file"); + if ($lock_file): + while (!feof($lock_file)) { + $former_pid = fgets($lock_file, 4096); + } + fclose($lock_file); + endif; + //check to see if former PID is still running + $ps_check = $this->is_running($former_pid); + //if the process is still running, exit. + if ($ps_check == true): + $this->e->info(sprintf('Previous Process (%d) still active. Terminating Run.', + $former_pid)); + exit; + //if it's not running remove the lock file and proceead. + else: + $this->e->info(sprintf('Process %d is not running. Continuing Run... \n', + $former_pid)); + unlink ($this->config['async_log_dir'].$this->config['async_lock_file']); + $this->process_event_log($event_file); + endif; + + else: + $this->process_event_log($event_file); + + endif; + return; + } + + function create_lock_file() { + + $lock_file = fopen($this->config['async_log_dir'].$this->config['async_lock_file'], "w+") or die ("Could not create lock file"); + + // Write PID to lock file + if (fwrite($lock_file, posix_getpid()) === FALSE) { + $this->e->alert('Cannot write to lock file. Terminating Run.'); + exit; + } + + return; + } + + function process_event_log($file) { + // check to see if event log file exisits + + if (file_exists($file)): + if($this->db->connection_status == true): + $this->create_lock_file(); + + // Create a new log file name + $new_file_name = $this->config['async_log_dir'].time().".".posix_getpid(); + $new_file = $new_file_name.".processing"; + // Rename current log file + rename ($file, $new_file ) or die ("Could not rename file"); + // open file for reading + $handle = @fopen($new_file, "r"); + if ($handle): + while (!feof($handle)) { + // Read row + $buffer = fgets($handle, 14096); // big enough? + + // Parse the row + $event = $this->parse_log_row($buffer); + + // Log event to the event queue + if (!empty($event['event_obj'])): + + $this->eq->log($event['event_obj'], $event['event_type']); + // print status + $this->e->info(sprintf('Processing: %s', $event['event_type'])); + + endif; + /* + if ($result === false): + $this->error_logger->log($buffer); + else: + print "Could not open async error log"; + endif; + */ + } + //Close file + fclose($handle); + + // rename file to mark it as processed + $processed_file_name = $new_file_name.".processed"; + rename ($new_file, $processed_file_name) or die ("Could not rename file"); + $this->e->info(sprintf('Processing Complete. Renaming File to %s', + $processed_file_name )); + //Delete processed file + unlink($processed_file_name); + $this->e->info(sprintf('Deleting File %s', + $processed_file_name )); + + else: + //print error + $this->e->alert(sprintf('Could not open file %s. Terminating Run.', + $new_file)); + exit; + endif; + + //Delete Lock file + unlink($this->config['async_log_dir'].$this->config['async_lock_file']); + + else: + $this->e->err('Database Connection is down.'); + endif; + + endif; + + return; + } + + /** + * Check if application is already running + * + */ + function is_running($PID){ + + $process_state = ''; + + exec("ps $PID", $process_state); + + if (count($process_state) >= 2): + + return true; + else: + + return false; + endif; + } + + + /** + * Parse row from event log file + * + * @param string $row + * @return array + */ + function parse_log_row($row) { + + $raw_event = explode("|*|", $row); + + return array( 'timestamp' => $raw_event[0], + 'event_type' => $raw_event[3], + 'event_obj' => unserialize(urldecode($raw_event[4])) + ); + } + + +} + +?> diff --git a/conf/messages.php b/conf/messages.php new file mode 100644 index 000000000..27cc0a370 --- /dev/null +++ b/conf/messages.php @@ -0,0 +1,80 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +$_owa_messages = array( + +// Login related +2000 => array("An e-mail containing instructions on how to complete the password reset process has been sent to %s",1), +2001 => array("The e-mail %s was not found in our database. Please check the address and try again.",1), +2002 => array("Login Failed. Your user name or password did not match.",0), +2003 => array("Your Account lacks the necessary priviledges to access the requested resource.",0), +2004 => array("You must login to access the requested resource."), +2010 => array("Sucess. Logout Complete.",0), + +// Options/Configuration related +2500 => array("Options Saved."), + +//User managment +3000 => array("Success. User Added.", 0), +3001 => array("Error. That user name is already taken.",0), +3002 => array("The form data that you entered contained one or more errors. Please check the data and submit the from again."), +3003 => array("Success. User profile saved.",0), +3004 => array("Success. User acount deleted."), +3005 => array("Enter Your New Password", 0), +3006 => array("Success. Your password will be changed shortly. This may take a few minutes.",0), +3007 => array("Error. Your passwords must match.",0), +3008 => array("Error. Your password must be %s characters long.", 1), + +//sites management +3200 => array("Error. Please fill in all required fields.",0), +3201 => array("Success. Site Profile Updated.",0), +3202 => array("Success. Site Added.",0), +3203 => array("Error. Site Could not be added",0), +3204 => array("Success. Site Deleted.",0), +3206 => array("Error. I site with that domain already exists.",0), +3207 => array("Error. You must enter a domain when adding a web site.",0), + +//install +3300 => array("Could not connect to the database. Please check the database connection settings in your configuration file and try again.",0), +3301 => array("The version of PHP installed on this server is too old. Please upgrade to at least PHP 4."), +3302 => array("Database Schema Installation failed. Please check the error log file for more details.",0), +3303 => array("Success. Default Site Added.",0), +3304 => array("Success. Admin User Added.",0), +3305 => array("Success. Base Database Schema Installed.",0), +3306 => array("Error. User id already exists for some reason.",0), + +// Graph related +3500 => array("There is no data for\nthis time period.",0) + +); + + +?> \ No newline at end of file diff --git a/eventQueue.php b/eventQueue.php index 592ef40f3..41217bc48 100644 --- a/eventQueue.php +++ b/eventQueue.php @@ -81,7 +81,7 @@ function &get_instance() { //Create a normal event queue using 'queue' which is an extension to PEAR LOG. $eq = Log::singleton('queue', '', 'event_queue'); - if ($dir = @opendir(OWA_PLUGINS_DIR.'/event_handlers')): + /* if ($dir = @opendir(OWA_PLUGINS_DIR.'/event_handlers')): while (($file = @readdir($dir)) !== false) { if (strstr($file, '.php') && substr($file, -1, 1) != "~" && @@ -95,8 +95,8 @@ function &get_instance() { } @closedir($dir); - endif; - endif; + endif; */ + endif; endif; return $eq; diff --git a/includes/Log-1.9.8/Log.php b/includes/Log-1.9.8/Log.php index 312365a15..8ffcfd1b7 100644 --- a/includes/Log-1.9.8/Log.php +++ b/includes/Log-1.9.8/Log.php @@ -777,7 +777,10 @@ function detach($observer) function _announce($event) { foreach ($this->_listeners as $id => $listener) { + if ($event['priority'] <= $this->_listeners[$id]->_priority) { + + $this->_listeners[$id]->notify($event); } } diff --git a/includes/base64.js b/includes/base64.js new file mode 100644 index 000000000..ee50fcdc9 --- /dev/null +++ b/includes/base64.js @@ -0,0 +1,142 @@ +/** +* +* Base64 encode / decode +* http://www.webtoolkit.info/ +* +**/ + +var Base64 = { + + // private property + _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + + // public method for encoding + encode : function (input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + input = Base64._utf8_encode(input); + + while (i < input.length) { + + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); + + } + + return output; + }, + + // public method for decoding + decode : function (input) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + while (i < input.length) { + + enc1 = this._keyStr.indexOf(input.charAt(i++)); + enc2 = this._keyStr.indexOf(input.charAt(i++)); + enc3 = this._keyStr.indexOf(input.charAt(i++)); + enc4 = this._keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + + } + + output = Base64._utf8_decode(output); + + return output; + + }, + + // private method for UTF-8 encoding + _utf8_encode : function (string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; + }, + + // private method for UTF-8 decoding + _utf8_decode : function (utftext) { + var string = ""; + var i = 0; + var c = c1 = c2 = 0; + + while ( i < utftext.length ) { + + c = utftext.charCodeAt(i); + + if (c < 128) { + string += String.fromCharCode(c); + i++; + } + else if((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i+1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } + else { + c2 = utftext.charCodeAt(i+1); + c3 = utftext.charCodeAt(i+2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + + } + + return string; + } + +} \ No newline at end of file diff --git a/includes/jpgraph-1.20.3/src/jpg-config.inc b/includes/jpgraph-1.20.3/src/jpg-config.inc index f9fb1a7c9..43cf39ebb 100644 --- a/includes/jpgraph-1.20.3/src/jpg-config.inc +++ b/includes/jpgraph-1.20.3/src/jpg-config.inc @@ -1,201 +1,201 @@ - \ No newline at end of file diff --git a/includes/phpmailer-1.73/ChangeLog.txt b/includes/phpmailer-1.73/ChangeLog.txt new file mode 100644 index 000000000..6c4f6e0c5 --- /dev/null +++ b/includes/phpmailer-1.73/ChangeLog.txt @@ -0,0 +1,184 @@ +ChangeLog + +Version 1.73 (Sun, Jun 10 2005) +* Fixed denial of service bug: http://www.cybsec.com/vuln/PHPMailer-DOS.pdf +* Now has a total of 20 translations +* Fixed alt attachments bug: http://tinyurl.com/98u9k + +Version 1.72 (Wed, May 25 2004) +* Added Dutch, Swedish, Czech, Norwegian, and Turkish translations. +* Received: Removed this method because spam filter programs like +SpamAssassin reject this header. +* Fixed error count bug. +* SetLanguage default is now "language/". +* Fixed magic_quotes_runtime bug. + +Version 1.71 (Tue, Jul 28 2003) +* Made several speed enhancements +* Added German and Italian translation files +* Fixed HELO/AUTH bugs on keep-alive connects +* Now provides an error message if language file does not load +* Fixed attachment EOL bug +* Updated some unclear documentation +* Added additional tests and improved others + +Version 1.70 (Mon, Jun 20 2003) +* Added SMTP keep-alive support +* Added IsError method for error detection +* Added error message translation support (SetLanguage) +* Refactored many methods to increase library performance +* Hello now sends the newer EHLO message before HELO as per RFC 2821 +* Removed the boundary class and replaced it with GetBoundary +* Removed queue support methods +* New $Hostname variable +* New Message-ID header +* Received header reformat +* Helo variable default changed to $Hostname +* Removed extra spaces in Content-Type definition (#667182) +* Return-Path should be set to Sender when set +* Adds Q or B encoding to headers when necessary +* quoted-encoding should now encode NULs \000 +* Fixed encoding of body/AltBody (#553370) +* Adds "To: undisclosed-recipients:;" when all recipients are hidden (BCC) +* Multiple bug fixes + +Version 1.65 (Fri, Aug 09 2002) +* Fixed non-visible attachment bug (#585097) for Outlook +* SMTP connections are now closed after each transaction +* Fixed SMTP::Expand return value +* Converted SMTP class documentation to phpDocumentor format + +Version 1.62 (Wed, Jun 26 2002) +* Fixed multi-attach bug +* Set proper word wrapping +* Reduced memory use with attachments +* Added more debugging +* Changed documentation to phpDocumentor format + +Version 1.60 (Sat, Mar 30 2002) +* Sendmail pipe and address patch (Christian Holtje) +* Added embedded image and read confirmation support (A. Ognio) +* Added unit tests +* Added SMTP timeout support (*nix only) +* Added possibly temporary PluginDir variable for SMTP class +* Added LE message line ending variable +* Refactored boundary and attachment code +* Eliminated SMTP class warnings +* Added SendToQueue method for future queuing support + +Version 1.54 (Wed, Dec 19 2001) +* Add some queuing support code +* Fixed a pesky multi/alt bug +* Messages are no longer forced to have "To" addresses + +Version 1.50 (Thu, Nov 08 2001) +* Fix extra lines when not using SMTP mailer +* Set WordWrap variable to int with a zero default + +Version 1.47 (Tue, Oct 16 2001) +* Fixed Received header code format +* Fixed AltBody order error +* Fixed alternate port warning + +Version 1.45 (Tue, Sep 25 2001) +* Added enhanced SMTP debug support +* Added support for multiple ports on SMTP +* Added Received header for tracing +* Fixed AddStringAttachment encoding +* Fixed possible header name quote bug +* Fixed wordwrap() trim bug +* Couple other small bug fixes + +Version 1.41 (Wed, Aug 22 2001) +* Fixed AltBody bug w/o attachments +* Fixed rfc_date() for certain mail servers + +Version 1.40 (Sun, Aug 12 2001) +* Added multipart/alternative support (AltBody) +* Documentation update +* Fixed bug in Mercury MTA + +Version 1.29 (Fri, Aug 03 2001) +* Added AddStringAttachment() method +* Added SMTP authentication support + +Version 1.28 (Mon, Jul 30 2001) +* Fixed a typo in SMTP class +* Fixed header issue with Imail (win32) SMTP server +* Made fopen() calls for attachments use "rb" to fix win32 error + +Version 1.25 (Mon, Jul 02 2001) +* Added RFC 822 date fix (Patrice) +* Added improved error handling by adding a $ErrorInfo variable +* Removed MailerDebug variable (obsolete with new error handler) + +Version 1.20 (Mon, Jun 25 2001) +* Added quoted-printable encoding (Patrice) +* Set Version as public and removed PrintVersion() +* Changed phpdoc to only display public variables and methods + +Version 1.19 (Thu, Jun 21 2001) +* Fixed MS Mail header bug +* Added fix for Bcc problem with mail(). *Does not work on Win32* + (See PHP bug report: http://www.php.net/bugs.php?id=11616) +* mail() no longer passes a fifth parameter when not needed + +Version 1.15 (Fri, Jun 15 2001) +[Note: these changes contributed by Patrice Fournier] +* Changed all remaining \n to \r\n +* Bcc: header no longer writen to message except +when sent directly to sendmail +* Added a small message to non-MIME compliant mail reader +* Added Sender variable to change the Sender email +used in -f for sendmail/mail and in 'MAIL FROM' for smtp mode +* Changed boundary setting to a place it will be set only once +* Removed transfer encoding for whole message when using multipart +* Message body now uses Encoding in multipart messages +* Can set encoding and type to attachments 7bit, 8bit +and binary attachment are sent as is, base64 are encoded +* Can set Encoding to base64 to send 8 bits body +through 7 bits servers + +Version 1.10 (Tue, Jun 12 2001) +* Fixed win32 mail header bug (printed out headers in message body) + +Version 1.09 (Fri, Jun 08 2001) +* Changed date header to work with Netscape mail programs +* Altered phpdoc documentation + +Version 1.08 (Tue, Jun 05 2001) +* Added enhanced error-checking +* Added phpdoc documentation to source + +Version 1.06 (Fri, Jun 01 2001) +* Added optional name for file attachments + +Version 1.05 (Tue, May 29 2001) +* Code cleanup +* Eliminated sendmail header warning message +* Fixed possible SMTP error + +Version 1.03 (Thu, May 24 2001) +* Fixed problem where qmail sends out duplicate messages + +Version 1.02 (Wed, May 23 2001) +* Added multiple recipient and attachment Clear* methods +* Added Sendmail public variable +* Fixed problem with loading SMTP library multiple times + +Version 0.98 (Tue, May 22 2001) +* Fixed problem with redundant mail hosts sending out multiple messages +* Added additional error handler code +* Added AddCustomHeader() function +* Added support for Microsoft mail client headers (affects priority) +* Fixed small bug with Mailer variable +* Added PrintVersion() function + +Version 0.92 (Tue, May 15 2001) +* Changed file names to class.phpmailer.php and class.smtp.php to match + current PHP class trend. +* Fixed problem where body not being printed when a message is attached +* Several small bug fixes + +Version 0.90 (Tue, April 17 2001) +* Intial public release diff --git a/includes/phpmailer-1.73/LICENSE b/includes/phpmailer-1.73/LICENSE new file mode 100644 index 000000000..03851a338 --- /dev/null +++ b/includes/phpmailer-1.73/LICENSE @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/includes/phpmailer-1.73/README b/includes/phpmailer-1.73/README new file mode 100644 index 000000000..5c8d65807 --- /dev/null +++ b/includes/phpmailer-1.73/README @@ -0,0 +1,102 @@ +PHPMailer +Full Featured Email Transfer Class for PHP +========================================== + +http://phpmailer.sourceforge.net/ + +This software is licenced under the LGPL. Please read LICENSE for information on the +software availability and distribution. + +Class Features: +- Send emails with multiple TOs, CCs, BCCs and REPLY-TOs +- Redundant SMTP servers +- Multipart/alternative emails for mail clients that do not read HTML email +- Support for 8bit, base64, binary, and quoted-printable encoding +- Uses the same methods as the very popular AspEmail active server (COM) component +- SMTP authentication +- Native language support +- Word wrap, and more! + +Why you might need it: + +Many PHP developers utilize email in their code. The only PHP function +that supports this is the mail() function. However, it does not expose +any of the popular features that many email clients use nowadays like +HTML-based emails and attachments. There are two proprietary +development tools out there that have all the functionality built into +easy to use classes: AspEmail(tm) and AspMail. Both of these +programs are COM components only available on Windows. They are also a +little pricey for smaller projects. + +Since I do Linux development I’ve missed these tools for my PHP coding. +So I built a version myself that implements the same methods (object +calls) that the Windows-based components do. It is open source and the +LGPL license allows you to place the class in your proprietary PHP +projects. + + +Installation: + +Copy class.phpmailer.php into your php.ini include_path. If you are +using the SMTP mailer then place class.smtp.php in your path as well. +In the language directory you will find several files like +phpmailer.lang-en.php. If you look right before the .php extension +that there are two letters. These represent the language type of the +translation file. For instance "en" is the English file and "br" is +the Portuguese file. Chose the file that best fits with your language +and place it in the PHP include path. If your language is English +then you have nothing more to do. If it is a different language then +you must point PHPMailer to the correct translation. To do this, call +the PHPMailer SetLanguage method like so: + +// To load the Portuguese version +$mail->SetLanguage("br", "/optional/path/to/language/directory/"); + +That's it. You should now be ready to use PHPMailer! + + +A Simple Example: + +IsSMTP(); // set mailer to use SMTP +$mail->Host = "smtp1.example.com;smtp2.example.com"; // specify main and backup server +$mail->SMTPAuth = true; // turn on SMTP authentication +$mail->Username = "jswan"; // SMTP username +$mail->Password = "secret"; // SMTP password + +$mail->From = "from@example.com"; +$mail->FromName = "Mailer"; +$mail->AddAddress("josh@example.net", "Josh Adams"); +$mail->AddAddress("ellen@example.com"); // name is optional +$mail->AddReplyTo("info@example.com", "Information"); + +$mail->WordWrap = 50; // set word wrap to 50 characters +$mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments +$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name +$mail->IsHTML(true); // set email format to HTML + +$mail->Subject = "Here is the subject"; +$mail->Body = "This is the HTML message body in bold!"; +$mail->AltBody = "This is the body in plain text for non-HTML mail clients"; + +if(!$mail->Send()) +{ + echo "Message could not be sent.

"; + echo "Mailer Error: " . $mail->ErrorInfo; + exit; +} + +echo "Message has been sent"; +?> + +CHANGELOG + +See ChangeLog.txt + +Download: http://sourceforge.net/project/showfiles.php?group_id=26031 + +Brent R. Matzelle diff --git a/includes/phpmailer-1.73/class.phpmailer.php b/includes/phpmailer-1.73/class.phpmailer.php new file mode 100644 index 000000000..5eb7ac05a --- /dev/null +++ b/includes/phpmailer-1.73/class.phpmailer.php @@ -0,0 +1,1499 @@ +ContentType = "text/html"; + else + $this->ContentType = "text/plain"; + } + + /** + * Sets Mailer to send message using SMTP. + * @return void + */ + function IsSMTP() { + $this->Mailer = "smtp"; + } + + /** + * Sets Mailer to send message using PHP mail() function. + * @return void + */ + function IsMail() { + $this->Mailer = "mail"; + } + + /** + * Sets Mailer to send message using the $Sendmail program. + * @return void + */ + function IsSendmail() { + $this->Mailer = "sendmail"; + } + + /** + * Sets Mailer to send message using the qmail MTA. + * @return void + */ + function IsQmail() { + $this->Sendmail = "/var/qmail/bin/sendmail"; + $this->Mailer = "sendmail"; + } + + + ///////////////////////////////////////////////// + // RECIPIENT METHODS + ///////////////////////////////////////////////// + + /** + * Adds a "To" address. + * @param string $address + * @param string $name + * @return void + */ + function AddAddress($address, $name = "") { + $cur = count($this->to); + $this->to[$cur][0] = trim($address); + $this->to[$cur][1] = $name; + } + + /** + * Adds a "Cc" address. Note: this function works + * with the SMTP mailer on win32, not with the "mail" + * mailer. + * @param string $address + * @param string $name + * @return void + */ + function AddCC($address, $name = "") { + $cur = count($this->cc); + $this->cc[$cur][0] = trim($address); + $this->cc[$cur][1] = $name; + } + + /** + * Adds a "Bcc" address. Note: this function works + * with the SMTP mailer on win32, not with the "mail" + * mailer. + * @param string $address + * @param string $name + * @return void + */ + function AddBCC($address, $name = "") { + $cur = count($this->bcc); + $this->bcc[$cur][0] = trim($address); + $this->bcc[$cur][1] = $name; + } + + /** + * Adds a "Reply-to" address. + * @param string $address + * @param string $name + * @return void + */ + function AddReplyTo($address, $name = "") { + $cur = count($this->ReplyTo); + $this->ReplyTo[$cur][0] = trim($address); + $this->ReplyTo[$cur][1] = $name; + } + + + ///////////////////////////////////////////////// + // MAIL SENDING METHODS + ///////////////////////////////////////////////// + + /** + * Creates message and assigns Mailer. If the message is + * not sent successfully then it returns false. Use the ErrorInfo + * variable to view description of the error. + * @return bool + */ + function Send() { + $header = ""; + $body = ""; + $result = true; + + if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) + { + $this->SetError($this->Lang("provide_address")); + return false; + } + + // Set whether the message is multipart/alternative + if(!empty($this->AltBody)) + $this->ContentType = "multipart/alternative"; + + $this->error_count = 0; // reset errors + $this->SetMessageType(); + $header .= $this->CreateHeader(); + $body = $this->CreateBody(); + + if($body == "") { return false; } + + // Choose the mailer + switch($this->Mailer) + { + case "sendmail": + $result = $this->SendmailSend($header, $body); + break; + case "mail": + $result = $this->MailSend($header, $body); + break; + case "smtp": + $result = $this->SmtpSend($header, $body); + break; + default: + $this->SetError($this->Mailer . $this->Lang("mailer_not_supported")); + $result = false; + break; + } + + return $result; + } + + /** + * Sends mail using the $Sendmail program. + * @access private + * @return bool + */ + function SendmailSend($header, $body) { + if ($this->Sender != "") + $sendmail = sprintf("%s -oi -f %s -t", $this->Sendmail, $this->Sender); + else + $sendmail = sprintf("%s -oi -t", $this->Sendmail); + + if(!@$mail = popen($sendmail, "w")) + { + $this->SetError($this->Lang("execute") . $this->Sendmail); + return false; + } + + fputs($mail, $header); + fputs($mail, $body); + + $result = pclose($mail) >> 8 & 0xFF; + if($result != 0) + { + $this->SetError($this->Lang("execute") . $this->Sendmail); + return false; + } + + return true; + } + + /** + * Sends mail using the PHP mail() function. + * @access private + * @return bool + */ + function MailSend($header, $body) { + $to = ""; + for($i = 0; $i < count($this->to); $i++) + { + if($i != 0) { $to .= ", "; } + $to .= $this->to[$i][0]; + } + + if ($this->Sender != "" && strlen(ini_get("safe_mode"))< 1) + { + $old_from = ini_get("sendmail_from"); + ini_set("sendmail_from", $this->Sender); + $params = sprintf("-oi -f %s", $this->Sender); + $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, + $header, $params); + } + else + $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header); + + if (isset($old_from)) + ini_set("sendmail_from", $old_from); + + if(!$rt) + { + $this->SetError($this->Lang("instantiate")); + return false; + } + + return true; + } + + /** + * Sends mail via SMTP using PhpSMTP (Author: + * Chris Ryan). Returns bool. Returns false if there is a + * bad MAIL FROM, RCPT, or DATA input. + * @access private + * @return bool + */ + function SmtpSend($header, $body) { + include_once($this->PluginDir . "class.smtp.php"); + $error = ""; + $bad_rcpt = array(); + + if(!$this->SmtpConnect()) + return false; + + $smtp_from = ($this->Sender == "") ? $this->From : $this->Sender; + if(!$this->smtp->Mail($smtp_from)) + { + $error = $this->Lang("from_failed") . $smtp_from; + $this->SetError($error); + $this->smtp->Reset(); + return false; + } + + // Attempt to send attach all recipients + for($i = 0; $i < count($this->to); $i++) + { + if(!$this->smtp->Recipient($this->to[$i][0])) + $bad_rcpt[] = $this->to[$i][0]; + } + for($i = 0; $i < count($this->cc); $i++) + { + if(!$this->smtp->Recipient($this->cc[$i][0])) + $bad_rcpt[] = $this->cc[$i][0]; + } + for($i = 0; $i < count($this->bcc); $i++) + { + if(!$this->smtp->Recipient($this->bcc[$i][0])) + $bad_rcpt[] = $this->bcc[$i][0]; + } + + if(count($bad_rcpt) > 0) // Create error message + { + for($i = 0; $i < count($bad_rcpt); $i++) + { + if($i != 0) { $error .= ", "; } + $error .= $bad_rcpt[$i]; + } + $error = $this->Lang("recipients_failed") . $error; + $this->SetError($error); + $this->smtp->Reset(); + return false; + } + + if(!$this->smtp->Data($header . $body)) + { + $this->SetError($this->Lang("data_not_accepted")); + $this->smtp->Reset(); + return false; + } + if($this->SMTPKeepAlive == true) + $this->smtp->Reset(); + else + $this->SmtpClose(); + + return true; + } + + /** + * Initiates a connection to an SMTP server. Returns false if the + * operation failed. + * @access private + * @return bool + */ + function SmtpConnect() { + if($this->smtp == NULL) { $this->smtp = new SMTP(); } + + $this->smtp->do_debug = $this->SMTPDebug; + $hosts = explode(";", $this->Host); + $index = 0; + $connection = ($this->smtp->Connected()); + + // Retry while there is no connection + while($index < count($hosts) && $connection == false) + { + if(strstr($hosts[$index], ":")) + list($host, $port) = explode(":", $hosts[$index]); + else + { + $host = $hosts[$index]; + $port = $this->Port; + } + + if($this->smtp->Connect($host, $port, $this->Timeout)) + { + if ($this->Helo != '') + $this->smtp->Hello($this->Helo); + else + $this->smtp->Hello($this->ServerHostname()); + + if($this->SMTPAuth) + { + if(!$this->smtp->Authenticate($this->Username, + $this->Password)) + { + $this->SetError($this->Lang("authenticate")); + $this->smtp->Reset(); + $connection = false; + } + } + $connection = true; + } + $index++; + } + if(!$connection) + $this->SetError($this->Lang("connect_host")); + + return $connection; + } + + /** + * Closes the active SMTP session if one exists. + * @return void + */ + function SmtpClose() { + if($this->smtp != NULL) + { + if($this->smtp->Connected()) + { + $this->smtp->Quit(); + $this->smtp->Close(); + } + } + } + + /** + * Sets the language for all class error messages. Returns false + * if it cannot load the language file. The default language type + * is English. + * @param string $lang_type Type of language (e.g. Portuguese: "br") + * @param string $lang_path Path to the language file directory + * @access public + * @return bool + */ + function SetLanguage($lang_type, $lang_path = "language/") { + if(file_exists($lang_path.'phpmailer.lang-'.$lang_type.'.php')) + include($lang_path.'phpmailer.lang-'.$lang_type.'.php'); + else if(file_exists($lang_path.'phpmailer.lang-en.php')) + include($lang_path.'phpmailer.lang-en.php'); + else + { + $this->SetError("Could not load language file"); + return false; + } + $this->language = $PHPMAILER_LANG; + + return true; + } + + ///////////////////////////////////////////////// + // MESSAGE CREATION METHODS + ///////////////////////////////////////////////// + + /** + * Creates recipient headers. + * @access private + * @return string + */ + function AddrAppend($type, $addr) { + $addr_str = $type . ": "; + $addr_str .= $this->AddrFormat($addr[0]); + if(count($addr) > 1) + { + for($i = 1; $i < count($addr); $i++) + $addr_str .= ", " . $this->AddrFormat($addr[$i]); + } + $addr_str .= $this->LE; + + return $addr_str; + } + + /** + * Formats an address correctly. + * @access private + * @return string + */ + function AddrFormat($addr) { + if(empty($addr[1])) + $formatted = $addr[0]; + else + { + $formatted = $this->EncodeHeader($addr[1], 'phrase') . " <" . + $addr[0] . ">"; + } + + return $formatted; + } + + /** + * Wraps message for use with mailers that do not + * automatically perform wrapping and for quoted-printable. + * Original written by philippe. + * @access private + * @return string + */ + function WrapText($message, $length, $qp_mode = false) { + $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; + + $message = $this->FixEOL($message); + if (substr($message, -1) == $this->LE) + $message = substr($message, 0, -1); + + $line = explode($this->LE, $message); + $message = ""; + for ($i=0 ;$i < count($line); $i++) + { + $line_part = explode(" ", $line[$i]); + $buf = ""; + for ($e = 0; $e $length)) + { + $space_left = $length - strlen($buf) - 1; + if ($e != 0) + { + if ($space_left > 20) + { + $len = $space_left; + if (substr($word, $len - 1, 1) == "=") + $len--; + elseif (substr($word, $len - 2, 1) == "=") + $len -= 2; + $part = substr($word, 0, $len); + $word = substr($word, $len); + $buf .= " " . $part; + $message .= $buf . sprintf("=%s", $this->LE); + } + else + { + $message .= $buf . $soft_break; + } + $buf = ""; + } + while (strlen($word) > 0) + { + $len = $length; + if (substr($word, $len - 1, 1) == "=") + $len--; + elseif (substr($word, $len - 2, 1) == "=") + $len -= 2; + $part = substr($word, 0, $len); + $word = substr($word, $len); + + if (strlen($word) > 0) + $message .= $part . sprintf("=%s", $this->LE); + else + $buf = $part; + } + } + else + { + $buf_o = $buf; + $buf .= ($e == 0) ? $word : (" " . $word); + + if (strlen($buf) > $length and $buf_o != "") + { + $message .= $buf_o . $soft_break; + $buf = $word; + } + } + } + $message .= $buf . $this->LE; + } + + return $message; + } + + /** + * Set the body wrapping. + * @access private + * @return void + */ + function SetWordWrap() { + if($this->WordWrap < 1) + return; + + switch($this->message_type) + { + case "alt": + // fall through + case "alt_attachments": + $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); + break; + default: + $this->Body = $this->WrapText($this->Body, $this->WordWrap); + break; + } + } + + /** + * Assembles message header. + * @access private + * @return string + */ + function CreateHeader() { + $result = ""; + + // Set the boundaries + $uniq_id = md5(uniqid(time())); + $this->boundary[1] = "b1_" . $uniq_id; + $this->boundary[2] = "b2_" . $uniq_id; + + $result .= $this->HeaderLine("Date", $this->RFCDate()); + if($this->Sender == "") + $result .= $this->HeaderLine("Return-Path", trim($this->From)); + else + $result .= $this->HeaderLine("Return-Path", trim($this->Sender)); + + // To be created automatically by mail() + if($this->Mailer != "mail") + { + if(count($this->to) > 0) + $result .= $this->AddrAppend("To", $this->to); + else if (count($this->cc) == 0) + $result .= $this->HeaderLine("To", "undisclosed-recipients:;"); + if(count($this->cc) > 0) + $result .= $this->AddrAppend("Cc", $this->cc); + } + + $from = array(); + $from[0][0] = trim($this->From); + $from[0][1] = $this->FromName; + $result .= $this->AddrAppend("From", $from); + + // sendmail and mail() extract Bcc from the header before sending + if((($this->Mailer == "sendmail") || ($this->Mailer == "mail")) && (count($this->bcc) > 0)) + $result .= $this->AddrAppend("Bcc", $this->bcc); + + if(count($this->ReplyTo) > 0) + $result .= $this->AddrAppend("Reply-to", $this->ReplyTo); + + // mail() sets the subject itself + if($this->Mailer != "mail") + $result .= $this->HeaderLine("Subject", $this->EncodeHeader(trim($this->Subject))); + + $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); + $result .= $this->HeaderLine("X-Priority", $this->Priority); + $result .= $this->HeaderLine("X-Mailer", "PHPMailer [version " . $this->Version . "]"); + + if($this->ConfirmReadingTo != "") + { + $result .= $this->HeaderLine("Disposition-Notification-To", + "<" . trim($this->ConfirmReadingTo) . ">"); + } + + // Add custom headers + for($index = 0; $index < count($this->CustomHeader); $index++) + { + $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), + $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); + } + $result .= $this->HeaderLine("MIME-Version", "1.0"); + + switch($this->message_type) + { + case "plain": + $result .= $this->HeaderLine("Content-Transfer-Encoding", $this->Encoding); + $result .= sprintf("Content-Type: %s; charset=\"%s\"", + $this->ContentType, $this->CharSet); + break; + case "attachments": + // fall through + case "alt_attachments": + if($this->InlineImageExists()) + { + $result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", + "multipart/related", $this->LE, $this->LE, + $this->boundary[1], $this->LE); + } + else + { + $result .= $this->HeaderLine("Content-Type", "multipart/mixed;"); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + } + break; + case "alt": + $result .= $this->HeaderLine("Content-Type", "multipart/alternative;"); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + } + + if($this->Mailer != "mail") + $result .= $this->LE.$this->LE; + + return $result; + } + + /** + * Assembles the message body. Returns an empty string on failure. + * @access private + * @return string + */ + function CreateBody() { + $result = ""; + + $this->SetWordWrap(); + + switch($this->message_type) + { + case "alt": + $result .= $this->GetBoundary($this->boundary[1], "", + "text/plain", ""); + $result .= $this->EncodeString($this->AltBody, $this->Encoding); + $result .= $this->LE.$this->LE; + $result .= $this->GetBoundary($this->boundary[1], "", + "text/html", ""); + + $result .= $this->EncodeString($this->Body, $this->Encoding); + $result .= $this->LE.$this->LE; + + $result .= $this->EndBoundary($this->boundary[1]); + break; + case "plain": + $result .= $this->EncodeString($this->Body, $this->Encoding); + break; + case "attachments": + $result .= $this->GetBoundary($this->boundary[1], "", "", ""); + $result .= $this->EncodeString($this->Body, $this->Encoding); + $result .= $this->LE; + + $result .= $this->AttachAll(); + break; + case "alt_attachments": + $result .= sprintf("--%s%s", $this->boundary[1], $this->LE); + $result .= sprintf("Content-Type: %s;%s" . + "\tboundary=\"%s\"%s", + "multipart/alternative", $this->LE, + $this->boundary[2], $this->LE.$this->LE); + + // Create text body + $result .= $this->GetBoundary($this->boundary[2], "", + "text/plain", "") . $this->LE; + + $result .= $this->EncodeString($this->AltBody, $this->Encoding); + $result .= $this->LE.$this->LE; + + // Create the HTML body + $result .= $this->GetBoundary($this->boundary[2], "", + "text/html", "") . $this->LE; + + $result .= $this->EncodeString($this->Body, $this->Encoding); + $result .= $this->LE.$this->LE; + + $result .= $this->EndBoundary($this->boundary[2]); + + $result .= $this->AttachAll(); + break; + } + if($this->IsError()) + $result = ""; + + return $result; + } + + /** + * Returns the start of a message boundary. + * @access private + */ + function GetBoundary($boundary, $charSet, $contentType, $encoding) { + $result = ""; + if($charSet == "") { $charSet = $this->CharSet; } + if($contentType == "") { $contentType = $this->ContentType; } + if($encoding == "") { $encoding = $this->Encoding; } + + $result .= $this->TextLine("--" . $boundary); + $result .= sprintf("Content-Type: %s; charset = \"%s\"", + $contentType, $charSet); + $result .= $this->LE; + $result .= $this->HeaderLine("Content-Transfer-Encoding", $encoding); + $result .= $this->LE; + + return $result; + } + + /** + * Returns the end of a message boundary. + * @access private + */ + function EndBoundary($boundary) { + return $this->LE . "--" . $boundary . "--" . $this->LE; + } + + /** + * Sets the message type. + * @access private + * @return void + */ + function SetMessageType() { + if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) + $this->message_type = "plain"; + else + { + if(count($this->attachment) > 0) + $this->message_type = "attachments"; + if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) + $this->message_type = "alt"; + if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) + $this->message_type = "alt_attachments"; + } + } + + /** + * Returns a formatted header line. + * @access private + * @return string + */ + function HeaderLine($name, $value) { + return $name . ": " . $value . $this->LE; + } + + /** + * Returns a formatted mail line. + * @access private + * @return string + */ + function TextLine($value) { + return $value . $this->LE; + } + + ///////////////////////////////////////////////// + // ATTACHMENT METHODS + ///////////////////////////////////////////////// + + /** + * Adds an attachment from a path on the filesystem. + * Returns false if the file could not be found + * or accessed. + * @param string $path Path to the attachment. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + function AddAttachment($path, $name = "", $encoding = "base64", + $type = "application/octet-stream") { + if(!@is_file($path)) + { + $this->SetError($this->Lang("file_access") . $path); + return false; + } + + $filename = basename($path); + if($name == "") + $name = $filename; + + $cur = count($this->attachment); + $this->attachment[$cur][0] = $path; + $this->attachment[$cur][1] = $filename; + $this->attachment[$cur][2] = $name; + $this->attachment[$cur][3] = $encoding; + $this->attachment[$cur][4] = $type; + $this->attachment[$cur][5] = false; // isStringAttachment + $this->attachment[$cur][6] = "attachment"; + $this->attachment[$cur][7] = 0; + + return true; + } + + /** + * Attaches all fs, string, and binary attachments to the message. + * Returns an empty string on failure. + * @access private + * @return string + */ + function AttachAll() { + // Return text of body + $mime = array(); + + // Add all attachments + for($i = 0; $i < count($this->attachment); $i++) + { + // Check for string attachment + $bString = $this->attachment[$i][5]; + if ($bString) + $string = $this->attachment[$i][0]; + else + $path = $this->attachment[$i][0]; + + $filename = $this->attachment[$i][1]; + $name = $this->attachment[$i][2]; + $encoding = $this->attachment[$i][3]; + $type = $this->attachment[$i][4]; + $disposition = $this->attachment[$i][6]; + $cid = $this->attachment[$i][7]; + + $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE); + $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE); + $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); + + if($disposition == "inline") + $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); + + $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", + $disposition, $name, $this->LE.$this->LE); + + // Encode as string attachment + if($bString) + { + $mime[] = $this->EncodeString($string, $encoding); + if($this->IsError()) { return ""; } + $mime[] = $this->LE.$this->LE; + } + else + { + $mime[] = $this->EncodeFile($path, $encoding); + if($this->IsError()) { return ""; } + $mime[] = $this->LE.$this->LE; + } + } + + $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE); + + return join("", $mime); + } + + /** + * Encodes attachment in requested format. Returns an + * empty string on failure. + * @access private + * @return string + */ + function EncodeFile ($path, $encoding = "base64") { + if(!@$fd = fopen($path, "rb")) + { + $this->SetError($this->Lang("file_open") . $path); + return ""; + } + $magic_quotes = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + $file_buffer = fread($fd, filesize($path)); + $file_buffer = $this->EncodeString($file_buffer, $encoding); + fclose($fd); + set_magic_quotes_runtime($magic_quotes); + + return $file_buffer; + } + + /** + * Encodes string to requested format. Returns an + * empty string on failure. + * @access private + * @return string + */ + function EncodeString ($str, $encoding = "base64") { + $encoded = ""; + switch(strtolower($encoding)) { + case "base64": + // chunk_split is found in PHP >= 3.0.6 + $encoded = chunk_split(base64_encode($str), 76, $this->LE); + break; + case "7bit": + case "8bit": + $encoded = $this->FixEOL($str); + if (substr($encoded, -(strlen($this->LE))) != $this->LE) + $encoded .= $this->LE; + break; + case "binary": + $encoded = $str; + break; + case "quoted-printable": + $encoded = $this->EncodeQP($str); + break; + default: + $this->SetError($this->Lang("encoding") . $encoding); + break; + } + return $encoded; + } + + /** + * Encode a header string to best of Q, B, quoted or none. + * @access private + * @return string + */ + function EncodeHeader ($str, $position = 'text') { + $x = 0; + + switch (strtolower($position)) { + case 'phrase': + if (!preg_match('/[\200-\377]/', $str)) { + // Can't use addslashes as we don't know what value has magic_quotes_sybase. + $encoded = addcslashes($str, "\0..\37\177\\\""); + + if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) + return ($encoded); + else + return ("\"$encoded\""); + } + $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); + break; + case 'comment': + $x = preg_match_all('/[()"]/', $str, $matches); + // Fall-through + case 'text': + default: + $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); + break; + } + + if ($x == 0) + return ($str); + + $maxlen = 75 - 7 - strlen($this->CharSet); + // Try to select the encoding which should produce the shortest output + if (strlen($str)/3 < $x) { + $encoding = 'B'; + $encoded = base64_encode($str); + $maxlen -= $maxlen % 4; + $encoded = trim(chunk_split($encoded, $maxlen, "\n")); + } else { + $encoding = 'Q'; + $encoded = $this->EncodeQ($str, $position); + $encoded = $this->WrapText($encoded, $maxlen, true); + $encoded = str_replace("=".$this->LE, "\n", trim($encoded)); + } + + $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded); + $encoded = trim(str_replace("\n", $this->LE, $encoded)); + + return $encoded; + } + + /** + * Encode string to quoted-printable. + * @access private + * @return string + */ + function EncodeQP ($str) { + $encoded = $this->FixEOL($str); + if (substr($encoded, -(strlen($this->LE))) != $this->LE) + $encoded .= $this->LE; + + // Replace every high ascii, control and = characters + $encoded = preg_replace('/([\000-\010\013\014\016-\037\075\177-\377])/e', + "'='.sprintf('%02X', ord('\\1'))", $encoded); + // Replace every spaces and tabs when it's the last character on a line + $encoded = preg_replace("/([\011\040])".$this->LE."/e", + "'='.sprintf('%02X', ord('\\1')).'".$this->LE."'", $encoded); + + // Maximum line length of 76 characters before CRLF (74 + space + '=') + $encoded = $this->WrapText($encoded, 74, true); + + return $encoded; + } + + /** + * Encode string to q encoding. + * @access private + * @return string + */ + function EncodeQ ($str, $position = "text") { + // There should not be any EOL in the string + $encoded = preg_replace("[\r\n]", "", $str); + + switch (strtolower($position)) { + case "phrase": + $encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); + break; + case "comment": + $encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); + case "text": + default: + // Replace every high ascii, control =, ? and _ characters + $encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e', + "'='.sprintf('%02X', ord('\\1'))", $encoded); + break; + } + + // Replace every spaces to _ (more readable than =20) + $encoded = str_replace(" ", "_", $encoded); + + return $encoded; + } + + /** + * Adds a string or binary attachment (non-filesystem) to the list. + * This method can be used to attach ascii or binary data, + * such as a BLOB record from a database. + * @param string $string String attachment data. + * @param string $filename Name of the attachment. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return void + */ + function AddStringAttachment($string, $filename, $encoding = "base64", + $type = "application/octet-stream") { + // Append to $attachment array + $cur = count($this->attachment); + $this->attachment[$cur][0] = $string; + $this->attachment[$cur][1] = $filename; + $this->attachment[$cur][2] = $filename; + $this->attachment[$cur][3] = $encoding; + $this->attachment[$cur][4] = $type; + $this->attachment[$cur][5] = true; // isString + $this->attachment[$cur][6] = "attachment"; + $this->attachment[$cur][7] = 0; + } + + /** + * Adds an embedded attachment. This can include images, sounds, and + * just about any other document. Make sure to set the $type to an + * image type. For JPEG images use "image/jpeg" and for GIF images + * use "image/gif". + * @param string $path Path to the attachment. + * @param string $cid Content ID of the attachment. Use this to identify + * the Id for accessing the image in an HTML form. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + function AddEmbeddedImage($path, $cid, $name = "", $encoding = "base64", + $type = "application/octet-stream") { + + if(!@is_file($path)) + { + $this->SetError($this->Lang("file_access") . $path); + return false; + } + + $filename = basename($path); + if($name == "") + $name = $filename; + + // Append to $attachment array + $cur = count($this->attachment); + $this->attachment[$cur][0] = $path; + $this->attachment[$cur][1] = $filename; + $this->attachment[$cur][2] = $name; + $this->attachment[$cur][3] = $encoding; + $this->attachment[$cur][4] = $type; + $this->attachment[$cur][5] = false; // isStringAttachment + $this->attachment[$cur][6] = "inline"; + $this->attachment[$cur][7] = $cid; + + return true; + } + + /** + * Returns true if an inline attachment is present. + * @access private + * @return bool + */ + function InlineImageExists() { + $result = false; + for($i = 0; $i < count($this->attachment); $i++) + { + if($this->attachment[$i][6] == "inline") + { + $result = true; + break; + } + } + + return $result; + } + + ///////////////////////////////////////////////// + // MESSAGE RESET METHODS + ///////////////////////////////////////////////// + + /** + * Clears all recipients assigned in the TO array. Returns void. + * @return void + */ + function ClearAddresses() { + $this->to = array(); + } + + /** + * Clears all recipients assigned in the CC array. Returns void. + * @return void + */ + function ClearCCs() { + $this->cc = array(); + } + + /** + * Clears all recipients assigned in the BCC array. Returns void. + * @return void + */ + function ClearBCCs() { + $this->bcc = array(); + } + + /** + * Clears all recipients assigned in the ReplyTo array. Returns void. + * @return void + */ + function ClearReplyTos() { + $this->ReplyTo = array(); + } + + /** + * Clears all recipients assigned in the TO, CC and BCC + * array. Returns void. + * @return void + */ + function ClearAllRecipients() { + $this->to = array(); + $this->cc = array(); + $this->bcc = array(); + } + + /** + * Clears all previously set filesystem, string, and binary + * attachments. Returns void. + * @return void + */ + function ClearAttachments() { + $this->attachment = array(); + } + + /** + * Clears all custom headers. Returns void. + * @return void + */ + function ClearCustomHeaders() { + $this->CustomHeader = array(); + } + + + ///////////////////////////////////////////////// + // MISCELLANEOUS METHODS + ///////////////////////////////////////////////// + + /** + * Adds the error message to the error container. + * Returns void. + * @access private + * @return void + */ + function SetError($msg) { + $this->error_count++; + $this->ErrorInfo = $msg; + } + + /** + * Returns the proper RFC 822 formatted date. + * @access private + * @return string + */ + function RFCDate() { + $tz = date("Z"); + $tzs = ($tz < 0) ? "-" : "+"; + $tz = abs($tz); + $tz = ($tz/3600)*100 + ($tz%3600)/60; + $result = sprintf("%s %s%04d", date("D, j M Y H:i:s"), $tzs, $tz); + + return $result; + } + + /** + * Returns the appropriate server variable. Should work with both + * PHP 4.1.0+ as well as older versions. Returns an empty string + * if nothing is found. + * @access private + * @return mixed + */ + function ServerVar($varName) { + global $HTTP_SERVER_VARS; + global $HTTP_ENV_VARS; + + if(!isset($_SERVER)) + { + $_SERVER = $HTTP_SERVER_VARS; + if(!isset($_SERVER["REMOTE_ADDR"])) + $_SERVER = $HTTP_ENV_VARS; // must be Apache + } + + if(isset($_SERVER[$varName])) + return $_SERVER[$varName]; + else + return ""; + } + + /** + * Returns the server hostname or 'localhost.localdomain' if unknown. + * @access private + * @return string + */ + function ServerHostname() { + if ($this->Hostname != "") + $result = $this->Hostname; + elseif ($this->ServerVar('SERVER_NAME') != "") + $result = $this->ServerVar('SERVER_NAME'); + else + $result = "localhost.localdomain"; + + return $result; + } + + /** + * Returns a message in the appropriate language. + * @access private + * @return string + */ + function Lang($key) { + if(count($this->language) < 1) + $this->SetLanguage("en"); // set the default language + + if(isset($this->language[$key])) + return $this->language[$key]; + else + return "Language string failed to load: " . $key; + } + + /** + * Returns true if an error occurred. + * @return bool + */ + function IsError() { + return ($this->error_count > 0); + } + + /** + * Changes every end of line from CR or LF to CRLF. + * @access private + * @return string + */ + function FixEOL($str) { + $str = str_replace("\r\n", "\n", $str); + $str = str_replace("\r", "\n", $str); + $str = str_replace("\n", $this->LE, $str); + return $str; + } + + /** + * Adds a custom header. + * @return void + */ + function AddCustomHeader($custom_header) { + $this->CustomHeader[] = explode(":", $custom_header, 2); + } +} + +?> \ No newline at end of file diff --git a/includes/phpmailer-1.73/class.smtp.php b/includes/phpmailer-1.73/class.smtp.php new file mode 100644 index 000000000..df3cfb58b --- /dev/null +++ b/includes/phpmailer-1.73/class.smtp.php @@ -0,0 +1,1045 @@ +smtp_conn = 0; + $this->error = null; + $this->helo_rply = null; + + $this->do_debug = 0; + } + + /************************************************************* + * CONNECTION FUNCTIONS * + ***********************************************************/ + + /** + * Connect to the server specified on the port specified. + * If the port is not specified use the default SMTP_PORT. + * If tval is specified then a connection will try and be + * established with the server for that number of seconds. + * If tval is not specified the default is 30 seconds to + * try on the connection. + * + * SMTP CODE SUCCESS: 220 + * SMTP CODE FAILURE: 421 + * @access public + * @return bool + */ + function Connect($host,$port=0,$tval=30) { + # set the error val to null so there is no confusion + $this->error = null; + + # make sure we are __not__ connected + if($this->connected()) { + # ok we are connected! what should we do? + # for now we will just give an error saying we + # are already connected + $this->error = + array("error" => "Already connected to a server"); + return false; + } + + if(empty($port)) { + $port = $this->SMTP_PORT; + } + + #connect to the smtp server + $this->smtp_conn = fsockopen($host, # the host of the server + $port, # the port to use + $errno, # error number if any + $errstr, # error message if any + $tval); # give up after ? secs + # verify we connected properly + if(empty($this->smtp_conn)) { + $this->error = array("error" => "Failed to connect to server", + "errno" => $errno, + "errstr" => $errstr); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": $errstr ($errno)" . $this->CRLF; + } + return false; + } + + # sometimes the SMTP server takes a little longer to respond + # so we will give it a longer timeout for the first read + // Windows still does not have support for this timeout function + if(substr(PHP_OS, 0, 3) != "WIN") + socket_set_timeout($this->smtp_conn, $tval, 0); + + # get any announcement stuff + $announce = $this->get_lines(); + + # set the timeout of any socket functions at 1/10 of a second + //if(function_exists("socket_set_timeout")) + // socket_set_timeout($this->smtp_conn, 0, 100000); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce; + } + + return true; + } + + /** + * Performs SMTP authentication. Must be run after running the + * Hello() method. Returns true if successfully authenticated. + * @access public + * @return bool + */ + function Authenticate($username, $password) { + // Start authentication + fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "AUTH not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + + // Send encoded username + fputs($this->smtp_conn, base64_encode($username) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "Username not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + + // Send encoded password + fputs($this->smtp_conn, base64_encode($password) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 235) { + $this->error = + array("error" => "Password not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + + return true; + } + + /** + * Returns true if connected to a server otherwise false + * @access private + * @return bool + */ + function Connected() { + if(!empty($this->smtp_conn)) { + $sock_status = socket_get_status($this->smtp_conn); + if($sock_status["eof"]) { + # hmm this is an odd situation... the socket is + # valid but we aren't connected anymore + if($this->do_debug >= 1) { + echo "SMTP -> NOTICE:" . $this->CRLF . + "EOF caught while checking if connected"; + } + $this->Close(); + return false; + } + return true; # everything looks good + } + return false; + } + + /** + * Closes the socket and cleans up the state of the class. + * It is not considered good to use this function without + * first trying to use QUIT. + * @access public + * @return void + */ + function Close() { + $this->error = null; # so there is no confusion + $this->helo_rply = null; + if(!empty($this->smtp_conn)) { + # close the connection and cleanup + fclose($this->smtp_conn); + $this->smtp_conn = 0; + } + } + + + /*************************************************************** + * SMTP COMMANDS * + *************************************************************/ + + /** + * Issues a data command and sends the msg_data to the server + * finializing the mail transaction. $msg_data is the message + * that is to be send with the headers. Each header needs to be + * on a single line followed by a with the message headers + * and the message body being seperated by and additional . + * + * Implements rfc 821: DATA + * + * SMTP CODE INTERMEDIATE: 354 + * [data] + * . + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 552,554,451,452 + * SMTP CODE FAILURE: 451,554 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @return bool + */ + function Data($msg_data) { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Data() without being connected"); + return false; + } + + fputs($this->smtp_conn,"DATA" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 354) { + $this->error = + array("error" => "DATA command not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + + # the server is ready to accept data! + # according to rfc 821 we should not send more than 1000 + # including the CRLF + # characters on a single line so we will break the data up + # into lines by \r and/or \n then if needed we will break + # each of those into smaller lines to fit within the limit. + # in addition we will be looking for lines that start with + # a period '.' and append and additional period '.' to that + # line. NOTE: this does not count towards are limit. + + # normalize the line breaks so we know the explode works + $msg_data = str_replace("\r\n","\n",$msg_data); + $msg_data = str_replace("\r","\n",$msg_data); + $lines = explode("\n",$msg_data); + + # we need to find a good way to determine is headers are + # in the msg_data or if it is a straight msg body + # currently I'm assuming rfc 822 definitions of msg headers + # and if the first field of the first line (':' sperated) + # does not contain a space then it _should_ be a header + # and we can process all lines before a blank "" line as + # headers. + $field = substr($lines[0],0,strpos($lines[0],":")); + $in_headers = false; + if(!empty($field) && !strstr($field," ")) { + $in_headers = true; + } + + $max_line_length = 998; # used below; set here for ease in change + + while(list(,$line) = @each($lines)) { + $lines_out = null; + if($line == "" && $in_headers) { + $in_headers = false; + } + # ok we need to break this line up into several + # smaller lines + while(strlen($line) > $max_line_length) { + $pos = strrpos(substr($line,0,$max_line_length)," "); + + # Patch to fix DOS attack + if(!$pos) { + $pos = $max_line_length - 1; + } + + $lines_out[] = substr($line,0,$pos); + $line = substr($line,$pos + 1); + # if we are processing headers we need to + # add a LWSP-char to the front of the new line + # rfc 822 on long msg headers + if($in_headers) { + $line = "\t" . $line; + } + } + $lines_out[] = $line; + + # now send the lines to the server + while(list(,$line_out) = @each($lines_out)) { + if(strlen($line_out) > 0) + { + if(substr($line_out, 0, 1) == ".") { + $line_out = "." . $line_out; + } + } + fputs($this->smtp_conn,$line_out . $this->CRLF); + } + } + + # ok all the message data has been sent so lets get this + # over with aleady + fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) { + $this->error = + array("error" => "DATA not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + return true; + } + + /** + * Expand takes the name and asks the server to list all the + * people who are members of the _list_. Expand will return + * back and array of the result or false if an error occurs. + * Each value in the array returned has the format of: + * [ ] + * The definition of is defined in rfc 821 + * + * Implements rfc 821: EXPN + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 550 + * SMTP CODE ERROR : 500,501,502,504,421 + * @access public + * @return string array + */ + function Expand($name) { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Expand() without being connected"); + return false; + } + + fputs($this->smtp_conn,"EXPN " . $name . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) { + $this->error = + array("error" => "EXPN not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + + # parse the reply and place in our array to return to user + $entries = explode($this->CRLF,$rply); + while(list(,$l) = @each($entries)) { + $list[] = substr($l,4); + } + + return $list; + } + + /** + * Sends the HELO command to the smtp server. + * This makes sure that we and the server are in + * the same known state. + * + * Implements from rfc 821: HELO + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500, 501, 504, 421 + * @access public + * @return bool + */ + function Hello($host="") { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Hello() without being connected"); + return false; + } + + # if a hostname for the HELO wasn't specified determine + # a suitable one to send + if(empty($host)) { + # we need to determine some sort of appopiate default + # to send to the server + $host = "localhost"; + } + + // Send extended hello first (RFC 2821) + if(!$this->SendHello("EHLO", $host)) + { + if(!$this->SendHello("HELO", $host)) + return false; + } + + return true; + } + + /** + * Sends a HELO/EHLO command. + * @access private + * @return bool + */ + function SendHello($hello, $host) { + fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER: " . $this->CRLF . $rply; + } + + if($code != 250) { + $this->error = + array("error" => $hello . " not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + + $this->helo_rply = $rply; + + return true; + } + + /** + * Gets help information on the keyword specified. If the keyword + * is not specified then returns generic help, ussually contianing + * A list of keywords that help is available on. This function + * returns the results back to the user. It is up to the user to + * handle the returned data. If an error occurs then false is + * returned with $this->error set appropiately. + * + * Implements rfc 821: HELP [ ] + * + * SMTP CODE SUCCESS: 211,214 + * SMTP CODE ERROR : 500,501,502,504,421 + * @access public + * @return string + */ + function Help($keyword="") { + $this->error = null; # to avoid confusion + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Help() without being connected"); + return false; + } + + $extra = ""; + if(!empty($keyword)) { + $extra = " " . $keyword; + } + + fputs($this->smtp_conn,"HELP" . $extra . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 211 && $code != 214) { + $this->error = + array("error" => "HELP not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + + return $rply; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. + * + * Implements rfc 821: MAIL FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,421 + * @access public + * @return bool + */ + function Mail($from) { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Mail() without being connected"); + return false; + } + + fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) { + $this->error = + array("error" => "MAIL not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + return true; + } + + /** + * Sends the command NOOP to the SMTP server. + * + * Implements from rfc 821: NOOP + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500, 421 + * @access public + * @return bool + */ + function Noop() { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Noop() without being connected"); + return false; + } + + fputs($this->smtp_conn,"NOOP" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) { + $this->error = + array("error" => "NOOP not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + return true; + } + + /** + * Sends the quit command to the server and then closes the socket + * if there is no error or the $close_on_error argument is true. + * + * Implements from rfc 821: QUIT + * + * SMTP CODE SUCCESS: 221 + * SMTP CODE ERROR : 500 + * @access public + * @return bool + */ + function Quit($close_on_error=true) { + $this->error = null; # so there is no confusion + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Quit() without being connected"); + return false; + } + + # send the quit command to the server + fputs($this->smtp_conn,"quit" . $this->CRLF); + + # get any good-bye messages + $byemsg = $this->get_lines(); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $byemsg; + } + + $rval = true; + $e = null; + + $code = substr($byemsg,0,3); + if($code != 221) { + # use e as a tmp var cause Close will overwrite $this->error + $e = array("error" => "SMTP server rejected quit command", + "smtp_code" => $code, + "smtp_rply" => substr($byemsg,4)); + $rval = false; + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $e["error"] . ": " . + $byemsg . $this->CRLF; + } + } + + if(empty($e) || $close_on_error) { + $this->Close(); + } + + return $rval; + } + + /** + * Sends the command RCPT to the SMTP server with the TO: argument of $to. + * Returns true if the recipient was accepted false if it was rejected. + * + * Implements from rfc 821: RCPT TO: + * + * SMTP CODE SUCCESS: 250,251 + * SMTP CODE FAILURE: 550,551,552,553,450,451,452 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @return bool + */ + function Recipient($to) { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Recipient() without being connected"); + return false; + } + + fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250 && $code != 251) { + $this->error = + array("error" => "RCPT not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + return true; + } + + /** + * Sends the RSET command to abort and transaction that is + * currently in progress. Returns true if successful false + * otherwise. + * + * Implements rfc 821: RSET + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500,501,504,421 + * @access public + * @return bool + */ + function Reset() { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Reset() without being connected"); + return false; + } + + fputs($this->smtp_conn,"RSET" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) { + $this->error = + array("error" => "RSET failed", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. This command + * will send the message to the users terminal if they are logged + * in. + * + * Implements rfc 821: SEND FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,502,421 + * @access public + * @return bool + */ + function Send($from) { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Send() without being connected"); + return false; + } + + fputs($this->smtp_conn,"SEND FROM:" . $from . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) { + $this->error = + array("error" => "SEND not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. This command + * will send the message to the users terminal if they are logged + * in and send them an email. + * + * Implements rfc 821: SAML FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,502,421 + * @access public + * @return bool + */ + function SendAndMail($from) { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called SendAndMail() without being connected"); + return false; + } + + fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) { + $this->error = + array("error" => "SAML not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. This command + * will send the message to the users terminal if they are logged + * in or mail it to them if they are not. + * + * Implements rfc 821: SOML FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,502,421 + * @access public + * @return bool + */ + function SendOrMail($from) { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called SendOrMail() without being connected"); + return false; + } + + fputs($this->smtp_conn,"SOML FROM:" . $from . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) { + $this->error = + array("error" => "SOML not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + return true; + } + + /** + * This is an optional command for SMTP that this class does not + * support. This method is here to make the RFC821 Definition + * complete for this class and __may__ be implimented in the future + * + * Implements from rfc 821: TURN + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 502 + * SMTP CODE ERROR : 500, 503 + * @access public + * @return bool + */ + function Turn() { + $this->error = array("error" => "This method, TURN, of the SMTP ". + "is not implemented"); + if($this->do_debug >= 1) { + echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF; + } + return false; + } + + /** + * Verifies that the name is recognized by the server. + * Returns false if the name could not be verified otherwise + * the response from the server is returned. + * + * Implements rfc 821: VRFY + * + * SMTP CODE SUCCESS: 250,251 + * SMTP CODE FAILURE: 550,551,553 + * SMTP CODE ERROR : 500,501,502,421 + * @access public + * @return int + */ + function Verify($name) { + $this->error = null; # so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Verify() without being connected"); + return false; + } + + fputs($this->smtp_conn,"VRFY " . $name . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250 && $code != 251) { + $this->error = + array("error" => "VRFY failed on name '$name'", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . + ": " . $rply . $this->CRLF; + } + return false; + } + return $rply; + } + + /******************************************************************* + * INTERNAL FUNCTIONS * + ******************************************************************/ + + /** + * Read in as many lines as possible + * either before eof or socket timeout occurs on the operation. + * With SMTP we can tell if we have more lines to read if the + * 4th character is '-' symbol. If it is a space then we don't + * need to read anything else. + * @access private + * @return string + */ + function get_lines() { + $data = ""; + while($str = fgets($this->smtp_conn,515)) { + if($this->do_debug >= 4) { + echo "SMTP -> get_lines(): \$data was \"$data\"" . + $this->CRLF; + echo "SMTP -> get_lines(): \$str is \"$str\"" . + $this->CRLF; + } + $data .= $str; + if($this->do_debug >= 4) { + echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF; + } + # if the 4th character is a space then we are done reading + # so just break the loop + if(substr($str,3,1) == " ") { break; } + } + return $data; + } + +} + + + ?> diff --git a/includes/phpmailer-1.73/docs/extending.html b/includes/phpmailer-1.73/docs/extending.html new file mode 100644 index 000000000..f7c3200af --- /dev/null +++ b/includes/phpmailer-1.73/docs/extending.html @@ -0,0 +1,148 @@ + + +Examples using phpmailer + + + + +

Examples using phpmailer

+ +

1. Advanced Example

+

+ +This demonstrates sending out multiple email messages with binary attachments +from a MySQL database with multipart/alternative support.

+ + + + +
+
+require("class.phpmailer.php");
+
+$mail = new phpmailer();
+
+$mail->From     = "list@example.com";
+$mail->FromName = "List manager";
+$mail->Host     = "smtp1.example.com;smtp2.example.com";
+$mail->Mailer   = "smtp";
+
+@MYSQL_CONNECT("localhost","root","password");
+@mysql_select_db("my_company");
+$query  = "SELECT full_name, email, photo FROM employee WHERE id=$id";
+$result = @MYSQL_QUERY($query);
+
+while ($row = mysql_fetch_array ($result))
+{
+    // HTML body
+    $body  = "Hello <font size=\"4\">" . $row["full_name"] . "</font>, <p>";
+    $body .= "<i>Your</i> personal photograph to this message.<p>";
+    $body .= "Sincerely, <br>";
+    $body .= "phpmailer List manager";
+
+    // Plain text body (for mail clients that cannot read HTML)
+    $text_body  = "Hello " . $row["full_name"] . ", \n\n";
+    $text_body .= "Your personal photograph to this message.\n\n";
+    $text_body .= "Sincerely, \n";
+    $text_body .= "phpmailer List manager";
+
+    $mail->Body    = $body;
+    $mail->AltBody = $text_body;
+    $mail->AddAddress($row["email"], $row["full_name"]);
+    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");
+
+    if(!$mail->Send())
+        echo "There has been a mail error sending to " . $row["email"] . "<br>";
+
+    // Clear all addresses and attachments for next loop
+    $mail->ClearAddresses();
+    $mail->ClearAttachments();
+}
+
+
+

+ +

2. Extending phpmailer

+

+ +Extending classes with inheritance is one of the most +powerful features of object-oriented +programming. It allows you to make changes to the +original class for your +own personal use without hacking the original +classes. Plus, it is very +easy to do. I've provided an example: + +

+Here's a class that extends the phpmailer class and sets the defaults +for the particular site:
+PHP include file: mail.inc.php +

+ + + + + +
+
+require("class.phpmailer.php");
+
+class my_phpmailer extends phpmailer {
+    // Set default variables for all new objects
+    var $From     = "from@example.com";
+    var $FromName = "Mailer";
+    var $Host     = "smtp1.example.com;smtp2.example.com";
+    var $Mailer   = "smtp";                         // Alternative to IsSMTP()
+    var $WordWrap = 75;
+
+    // Replace the default error_handler
+    function error_handler($msg) {
+        print("My Site Error");
+        print("Description:");
+        printf("%s", $msg);
+        exit;
+    }
+
+    // Create an additional function
+    function do_something($something) {
+        // Place your new code here
+    }
+}
+
+
+ +Now here's a normal PHP page in the site, which will have all the defaults set +above:
+Normal PHP file: mail_test.php +

+ + + + + +
+
+require("mail.inc.php");
+
+// Instantiate your new class
+$mail = new my_phpmailer;
+
+// Now you only need to add the necessary stuff
+$mail->AddAddress("josh@example.com", "Josh Adams");
+$mail->Subject = "Here is the subject";
+$mail->Body    = "This is the message body";
+$mail->AddAttachment("c:/temp/11-10-00.zip", "new_name.zip");  // optional name
+
+if(!$mail->Send())
+{
+   echo "There was an error sending the message";
+   exit;
+}
+
+echo "Message was sent successfully";
+
+
+

+ + + diff --git a/includes/phpmailer-1.73/docs/faq.html b/includes/phpmailer-1.73/docs/faq.html new file mode 100644 index 000000000..18dfafda9 --- /dev/null +++ b/includes/phpmailer-1.73/docs/faq.html @@ -0,0 +1,66 @@ + + +phpmailer FAQ + + + + +

phpmailer FAQ

+ +

+I'm using the SMTP mailer and I keep on getting a timeout message +well before the X seconds I set it for. What gives? +
+PHP versions 4.0.4pl1 and earlier have a bug in which sockets timeout +early. You can fix this by re-compiling PHP 4.0.4pl1 with this fix: +timeoutfix.diff. Otherwise you can wait +for the new PHP release. +

+ +

+I am concerned that using include files will take up too much +processing time on my computer. How can I make it run faster? +
+PHP by itself is very fast. Much faster than ASP or JSP running on +the same type of server. This is because it has very little overhead compared +to its competitors and it pre-compiles all of +its code before it runs each script (in PHP4). However, all of +this compiling and re-compiling can take up a lot of valuable +computer resources. However, there are programs out there that compile +PHP code and store it in memory (or on mmaped files) to reduce the +processing immensely. Two of these: APC +(Alternative PHP Cache) and Afterburner +(Win32 download) +are excellent free tools that do just this. If you have the money +you might also try Zend Cache, it is +even faster than the open source varieties. All of these tools make your +scripts run faster while also reducing the load on your server. I have tried +them myself and they are quite stable too. +

+ + +

+What mailer gives me the best performance? +
+On a single machine the mail() or sendmail mailers give you the best +performance because they do not have the added overhead of SMTP. +If you have you have your mail server on a another machine then +SMTP is your only option, but you do get the benefit of redundant +mail servers. +

+ +

+When I try to attach a file with on my server I get a +"Could not find {file} on filesystem error". Why is this? +
+If you are using a Unix machine this is probably because the user +running your web server does not have read access to the directory +in question. If you are using Windows, then the problem probably is +that you have used single backslashes to denote directories ("\"). +A single backslash has a special meaning to PHP so these are not +valid. Instead use double backslashes ("\\") or a single forward +slash ("/"). +

+ + + \ No newline at end of file diff --git a/includes/phpmailer-1.73/docs/timeoutfix.diff b/includes/phpmailer-1.73/docs/timeoutfix.diff new file mode 100644 index 000000000..8821f001b --- /dev/null +++ b/includes/phpmailer-1.73/docs/timeoutfix.diff @@ -0,0 +1,23 @@ +*** /usr/local/src/php-4.0.4pl1/ext/standard/fsock.c.old Mon Mar 26 13:07:40 2001 +--- /usr/local/src/php-4.0.4pl1/ext/standard/fsock.c Mon Mar 26 13:12:03 2001 +*************** +*** 559,564 **** +--- 559,565 ---- + + static void php_sockread_total(php_sockbuf *sock, size_t maxread) + { ++ sock->timeout_event = 0; + while(!sock->eof && TOREAD(sock) < maxread && !sock->timeout_event) { + php_sockread_internal(sock); + } +*************** +*** 619,624 **** +--- 620,627 ---- + } + + SEARCHCR(); ++ ++ sock->timeout_event = 0; + + if(!p) { + if(sock->is_blocked) { diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-br.php b/includes/phpmailer-1.73/language/phpmailer.lang-br.php new file mode 100644 index 000000000..39141d6b5 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-br.php @@ -0,0 +1,21 @@ + diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-ca.php b/includes/phpmailer-1.73/language/phpmailer.lang-ca.php new file mode 100644 index 000000000..29a464c84 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-ca.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-cz.php b/includes/phpmailer-1.73/language/phpmailer.lang-cz.php new file mode 100644 index 000000000..eee630a55 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-cz.php @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-de.php b/includes/phpmailer-1.73/language/phpmailer.lang-de.php new file mode 100644 index 000000000..7c5f7a599 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-de.php @@ -0,0 +1,23 @@ + diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-dk.php b/includes/phpmailer-1.73/language/phpmailer.lang-dk.php new file mode 100644 index 000000000..c5d33b500 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-dk.php @@ -0,0 +1,24 @@ + + */ + +$PHPMAILER_LANG = array(); + +$PHPMAILER_LANG["provide_address"] = 'Du skal indtaste mindst en ' . + 'modtagers emailadresse.'; +$PHPMAILER_LANG["mailer_not_supported"] = ' mailer understøttes ikke.'; +$PHPMAILER_LANG["execute"] = 'Kunne ikke køre: '; +$PHPMAILER_LANG["instantiate"] = 'Kunne ikke initialisere email funktionen.'; +$PHPMAILER_LANG["authenticate"] = 'SMTP fejl: Kunne ikke logge på.'; +$PHPMAILER_LANG["from_failed"] = 'Følgende afsenderadresse er forkert: '; +$PHPMAILER_LANG["recipients_failed"] = 'SMTP fejl: Følgende' . + 'modtagere er forkerte: '; +$PHPMAILER_LANG["data_not_accepted"] = 'SMTP fejl: Data kunne ikke accepteres.'; +$PHPMAILER_LANG["connect_host"] = 'SMTP fejl: Kunne ikke tilslutte SMTP serveren.'; +$PHPMAILER_LANG["file_access"] = 'Ingen adgang til fil: '; +$PHPMAILER_LANG["file_open"] = 'Fil fejl: Kunne ikke åbne filen: '; +$PHPMAILER_LANG["encoding"] = 'Ukendt encode-format: '; +?> \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-en.php b/includes/phpmailer-1.73/language/phpmailer.lang-en.php new file mode 100644 index 000000000..14b677ff1 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-en.php @@ -0,0 +1,23 @@ + diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-es.php b/includes/phpmailer-1.73/language/phpmailer.lang-es.php new file mode 100644 index 000000000..2a496fae2 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-es.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-fi.php b/includes/phpmailer-1.73/language/phpmailer.lang-fi.php new file mode 100644 index 000000000..cdb4fc22d --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-fi.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-fo.php b/includes/phpmailer-1.73/language/phpmailer.lang-fo.php new file mode 100644 index 000000000..fb257adb5 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-fo.php @@ -0,0 +1,25 @@ + diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-fr.php b/includes/phpmailer-1.73/language/phpmailer.lang-fr.php new file mode 100644 index 000000000..ea4008f41 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-fr.php @@ -0,0 +1,24 @@ + diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-hu.php b/includes/phpmailer-1.73/language/phpmailer.lang-hu.php new file mode 100644 index 000000000..ff17a6bdf --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-hu.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-it.php b/includes/phpmailer-1.73/language/phpmailer.lang-it.php new file mode 100644 index 000000000..16edbf056 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-it.php @@ -0,0 +1,28 @@ + +*/ + +$PHPMAILER_LANG = array(); + +$PHPMAILER_LANG["provide_address"] = 'Deve essere fornito almeno un'. + ' indirizzo ricevente'; +$PHPMAILER_LANG["mailer_not_supported"] = 'Mailer non supportato'; +$PHPMAILER_LANG["execute"] = "Impossibile eseguire l'operazione: "; +$PHPMAILER_LANG["instantiate"] = 'Impossibile istanziare la funzione mail'; +$PHPMAILER_LANG["authenticate"] = 'SMTP Error: Impossibile autenticarsi.'; +$PHPMAILER_LANG["from_failed"] = 'I seguenti indirizzi mittenti hanno'. + ' generato errore: '; +$PHPMAILER_LANG["recipients_failed"] = 'SMTP Error: I seguenti indirizzi'. + 'destinatari hanno generato errore: '; +$PHPMAILER_LANG["data_not_accepted"] = 'SMTP Error: Data non accettati dal'. + 'server.'; +$PHPMAILER_LANG["connect_host"] = 'SMTP Error: Impossibile connettersi'. + ' all\'host SMTP.'; +$PHPMAILER_LANG["file_access"] = 'Impossibile accedere al file: '; +$PHPMAILER_LANG["file_open"] = 'File Error: Impossibile aprire il file: '; +$PHPMAILER_LANG["encoding"] = 'Encoding set dei caratteri sconosciuto: '; +?> diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-ja.php b/includes/phpmailer-1.73/language/phpmailer.lang-ja.php new file mode 100644 index 000000000..9e90d6345 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-ja.php @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-nl.php b/includes/phpmailer-1.73/language/phpmailer.lang-nl.php new file mode 100644 index 000000000..eef11f067 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-nl.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-no.php b/includes/phpmailer-1.73/language/phpmailer.lang-no.php new file mode 100644 index 000000000..972fac48c --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-no.php @@ -0,0 +1,23 @@ + diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-pl.php b/includes/phpmailer-1.73/language/phpmailer.lang-pl.php new file mode 100644 index 000000000..960f2ff82 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-pl.php @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-ro.php b/includes/phpmailer-1.73/language/phpmailer.lang-ro.php new file mode 100644 index 000000000..871eac0b0 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-ro.php @@ -0,0 +1,23 @@ + + */ + +$PHPMAILER_LANG = array(); + +$PHPMAILER_LANG["provide_address"] = 'Trebuie sa adaugati cel putin un recipient (adresa de mail).'; +$PHPMAILER_LANG["mailer_not_supported"] = ' mailer nu este suportat.'; +$PHPMAILER_LANG["execute"] = 'Nu pot executa: '; +$PHPMAILER_LANG["instantiate"] = 'Nu am putut instantia functia mail.'; +$PHPMAILER_LANG["authenticate"] = 'Eroare SMTP: Nu a functionat autentificarea.'; +$PHPMAILER_LANG["from_failed"] = 'Urmatoarele adrese From au dat eroare: '; +$PHPMAILER_LANG["recipients_failed"] = 'Eroare SMTP: Urmatoarele adrese de mail au dat eroare: '; +$PHPMAILER_LANG["data_not_accepted"] = 'Eroare SMTP: Continutul mailului nu a fost acceptat.'; +$PHPMAILER_LANG["connect_host"] = 'Eroare SMTP: Nu m-am putut conecta la adresa SMTP.'; +$PHPMAILER_LANG["file_access"] = 'Nu pot accesa fisierul: '; +$PHPMAILER_LANG["file_open"] = 'Eroare de fisier: Nu pot deschide fisierul: '; +$PHPMAILER_LANG["encoding"] = 'Encodare necunoscuta: '; +?> diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-ru.php b/includes/phpmailer-1.73/language/phpmailer.lang-ru.php new file mode 100644 index 000000000..77a894c6b --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-ru.php @@ -0,0 +1,23 @@ + diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-se.php b/includes/phpmailer-1.73/language/phpmailer.lang-se.php new file mode 100644 index 000000000..e41778bb6 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-se.php @@ -0,0 +1,24 @@ + + */ + +$PHPMAILER_LANG = array(); + +$PHPMAILER_LANG["provide_address"] = 'Du måste ange minst en ' . + 'mottagares e-postadress.'; +$PHPMAILER_LANG["mailer_not_supported"] = ' mailer stöds inte.'; +$PHPMAILER_LANG["execute"] = 'Kunde inte köra: '; +$PHPMAILER_LANG["instantiate"] = 'Kunde inte initiera e-postfunktion.'; +$PHPMAILER_LANG["authenticate"] = 'SMTP fel: Kunde inte autentisera.'; +$PHPMAILER_LANG["from_failed"] = 'Följande avsändaradress är felaktig: '; +$PHPMAILER_LANG["recipients_failed"] = 'SMTP fel: Följande ' . + 'mottagare är felaktig: '; +$PHPMAILER_LANG["data_not_accepted"] = 'SMTP fel: Data accepterades inte.'; +$PHPMAILER_LANG["connect_host"] = 'SMTP fel: Kunde inte ansluta till SMTP-server.'; +$PHPMAILER_LANG["file_access"] = 'Ingen åtkomst till fil: '; +$PHPMAILER_LANG["file_open"] = 'Fil fel: Kunde inte öppna fil: '; +$PHPMAILER_LANG["encoding"] = 'Okänt encode-format: '; +?> \ No newline at end of file diff --git a/includes/phpmailer-1.73/language/phpmailer.lang-tr.php b/includes/phpmailer-1.73/language/phpmailer.lang-tr.php new file mode 100644 index 000000000..05bf6a2c8 --- /dev/null +++ b/includes/phpmailer-1.73/language/phpmailer.lang-tr.php @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/PHPMailer/PHPMailer.html b/includes/phpmailer-1.73/phpdoc/PHPMailer/PHPMailer.html new file mode 100644 index 000000000..87be4024b --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/PHPMailer/PHPMailer.html @@ -0,0 +1,1475 @@ + + + + + + Docs For Class PHPMailer + + + + +
+

Class PHPMailer

+ + +
+
Description
+ +
+ +

PHPMailer - PHP email transport class

+
    +
  • copyright:

    2001 - 2003 Brent R. Matzelle

  • +
  • author:

    Brent R. Matzelle

  • +
+

+ Located in Program_Root/class.phpmailer.php (line 20) +

+ + +

+	
+			
+
+ + + +
+
Variable Summary
+ +
+
+
+ string + $AltBody +
+
+ string + $Body +
+
+ string + $CharSet +
+
+ string + $ConfirmReadingTo +
+
+ string + $ContentType +
+
+ string + $Encoding +
+
+ string + $ErrorInfo +
+
+ string + $From +
+
+ string + $FromName +
+
+ string + $Helo +
+
+ string + $Host +
+
+ string + $Hostname +
+
+ string + $Mailer +
+
+ string + $Password +
+
+ string + $PluginDir +
+
+ int + $Port +
+
+ int + $Priority +
+
+ string + $Sender +
+
+ string + $Sendmail +
+
+ bool + $SMTPAuth +
+
+ bool + $SMTPDebug +
+
+ bool + $SMTPKeepAlive +
+
+ string + $Subject +
+
+ int + $Timeout +
+
+ string + $Username +
+
+ string + $Version +
+
+ int + $WordWrap +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ void + AddAddress + (string $address, [string $name = ""]) +
+ +
+ bool + AddAttachment + (string $path, [string $name = ""], [string $encoding = "base64"], [string $type = "application/octet-stream"]) +
+ +
+ void + AddBCC + (string $address, [string $name = ""]) +
+ +
+ void + AddCC + (string $address, [string $name = ""]) +
+ +
+ void + AddCustomHeader + (mixed $custom_header) +
+ +
+ bool + AddEmbeddedImage + (string $path, string $cid, [string $name = ""], [string $encoding = "base64"], [string $type = "application/octet-stream"]) +
+ +
+ void + AddReplyTo + (string $address, [string $name = ""]) +
+ +
+ void + AddStringAttachment + (string $string, string $filename, [string $encoding = "base64"], [string $type = "application/octet-stream"]) +
+ +
+ void + ClearAddresses + () +
+ +
+ void + ClearAllRecipients + () +
+ +
+ void + ClearAttachments + () +
+ +
+ void + ClearBCCs + () +
+ +
+ void + ClearCCs + () +
+ +
+ void + ClearCustomHeaders + () +
+ +
+ void + ClearReplyTos + () +
+ +
+ bool + IsError + () +
+ +
+ void + IsHTML + (bool $bool) +
+ +
+ void + IsMail + () +
+ +
+ void + IsQmail + () +
+ +
+ void + IsSendmail + () +
+ +
+ void + IsSMTP + () +
+ +
+ bool + Send + () +
+ +
+ bool + SetLanguage + (string $lang_type, [string $lang_path = ""]) +
+ +
+ void + SmtpClose + () +
+
+
+
+ + +
+
Variables
+ +
+ +
+ +
+ + string + $AltBody + = "" (line 96) + +
+ + +

Sets the text-only body of the message. This automatically sets the email to multipart/alternative. This body can be read by mail clients that do not have HTML email capability such as mutt. Clients that can read HTML will view the normal Body.

+ + + + + +
+ +
+ +
+ + string + $Body + = "" (line 87) + +
+ + +

Sets the Body of the message. This can be either an HTML or text body.

+

If HTML then run IsHTML(true).

+ + + + + +
+ +
+ +
+ + string + $CharSet + = "iso-8859-1" (line 36) + +
+ + +

Sets the CharSet of the message.

+ + + + + +
+ +
+ +
+ + string + $ConfirmReadingTo + = "" (line 134) + +
+ + +

Sets the email address that a reading confirmation will be sent.

+ + + + + +
+ +
+ +
+ + string + $ContentType + = "text/plain" (line 42) + +
+ + +

Sets the Content-type of the message.

+ + + + + +
+ +
+ +
+ + string + $Encoding + = "8bit" (line 49) + +
+ + +

Sets the Encoding of the message. Options for this are "8bit", "7bit", "binary", "base64", and "quoted-printable".

+ + + + + +
+ +
+ +
+ + string + $ErrorInfo + = "" (line 55) + +
+ + +

Holds the most recent mailer error message.

+ + + + + +
+ +
+ +
+ + string + $From + = "root@localhost" (line 61) + +
+ + +

Sets the From email address for the message.

+ + + + + +
+ +
+ +
+ + string + $FromName + = "Root User" (line 67) + +
+ + +

Sets the From name of the message.

+ + + + + +
+ +
+ +
+ + string + $Helo + = "" (line 169) + +
+ + +

Sets the SMTP HELO of the message (Default is $Hostname).

+ + + + + +
+ +
+ +
+ + string + $Host + = "localhost" (line 157) + +
+ + +

Sets the SMTP hosts. All hosts must be separated by a semicolon. You can also specify a different port for each host by using this format: [hostname:port] (e.g. "smtp1.example.com:25;smtp2.example.com").

+

Hosts will be tried in order.

+ + + + + +
+ +
+ +
+ + string + $Hostname + = "" (line 142) + +
+ + +

Sets the hostname to use in Message-Id and Received headers and as default HELO string. If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'.

+ + + + + +
+ +
+ +
+ + string + $Mailer + = "mail" (line 109) + +
+ + +

Method to send mail: ("mail", "sendmail", or "smtp").

+ + + + + +
+ +
+ +
+ + string + $Password + = "" (line 187) + +
+ + +

Sets SMTP password.

+ + + + + +
+ +
+ +
+ + string + $PluginDir + = "" (line 122) + +
+ + +

Path to PHPMailer plugins. This is now only useful if the SMTP class is in a different directory than the PHP include path.

+ + + + + +
+ +
+ +
+ + int + $Port + = 25 (line 163) + +
+ + +

Sets the default SMTP server port.

+ + + + + +
+ +
+ +
+ + int + $Priority + = 3 (line 30) + +
+ + +

Email priority (1 = High, 3 = Normal, 5 = low).

+ + + + + +
+ +
+ +
+ + string + $Sender + = "" (line 74) + +
+ + +

Sets the Sender email (Return-Path) of the message. If not empty, will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.

+ + + + + +
+ +
+ +
+ + string + $Sendmail + = "/usr/sbin/sendmail" (line 115) + +
+ + +

Sets the path of the sendmail program.

+ + + + + +
+ +
+ +
+ + bool + $SMTPAuth + = false (line 175) + +
+ + +

Sets SMTP authentication. Utilizes the Username and Password variables.

+ + + + + +
+ +
+ +
+ + bool + $SMTPDebug + = false (line 200) + +
+ + +

Sets SMTP class debugging on or off.

+ + + + + +
+ +
+ +
+ + bool + $SMTPKeepAlive + = false (line 208) + +
+ + +

Prevents the SMTP connection from being closed after each mail sending. If this is set to true then to close the connection requires an explicit call to SmtpClose().

+ + + + + +
+ +
+ +
+ + string + $Subject + = "" (line 80) + +
+ + +

Sets the Subject of the message.

+ + + + + +
+ +
+ +
+ + int + $Timeout + = 10 (line 194) + +
+ + +

Sets the SMTP server timeout in seconds. This function will not work with the win32 version.

+ + + + + +
+ +
+ +
+ + string + $Username + = "" (line 181) + +
+ + +

Sets SMTP username.

+ + + + + +
+ +
+ +
+ + string + $Version + = "1.71" (line 128) + +
+ + +

Holds PHPMailer version.

+ + + + + +
+ +
+ +
+ + int + $WordWrap + = 0 (line 103) + +
+ + +

Sets word wrapping on the body of the message to a given number of characters.

+ + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ AddAddress (line 287) +
+ + +

Adds a "To" address.

+ +
+ void + + AddAddress + + (string $address, [string $name = ""]) +
+ +
    +
  • + string + $address
  • +
  • + string + $name
  • +
+ + +
+ +
+ +
+ AddAttachment (line 1000) +
+ + +

Adds an attachment from a path on the filesystem.

+

Returns false if the file could not be found or accessed.

+ +
+ bool + + AddAttachment + + (string $path, [string $name = ""], [string $encoding = "base64"], [string $type = "application/octet-stream"]) +
+ +
    +
  • + string + $path:

    Path to the attachment.

  • +
  • + string + $name:

    Overrides the attachment name.

  • +
  • + string + $encoding:

    File encoding (see $Encoding).

  • +
  • + string + $type:

    File extension (MIME) type.

  • +
+ + +
+ +
+ +
+ AddBCC (line 315) +
+ + +

Adds a "Bcc" address. Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.

+ +
+ void + + AddBCC + + (string $address, [string $name = ""]) +
+ +
    +
  • + string + $address
  • +
  • + string + $name
  • +
+ + +
+ +
+ +
+ AddCC (line 301) +
+ + +

Adds a "Cc" address. Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.

+ +
+ void + + AddCC + + (string $address, [string $name = ""]) +
+ +
    +
  • + string + $address
  • +
  • + string + $name
  • +
+ + +
+ +
+ +
+ AddCustomHeader (line 1525) +
+ + +

Adds a custom header.

+ +
+ void + + AddCustomHeader + + (mixed $custom_header) +
+ + + +
+ +
+ +
+ AddEmbeddedImage (line 1275) +
+ + +

Adds an embedded attachment. This can include images, sounds, and just about any other document. Make sure to set the $type to an image type. For JPEG images use "image/jpeg" and for GIF images use "image/gif".

+ +
+ bool + + AddEmbeddedImage + + (string $path, string $cid, [string $name = ""], [string $encoding = "base64"], [string $type = "application/octet-stream"]) +
+ +
    +
  • + string + $path:

    Path to the attachment.

  • +
  • + string + $cid:

    Content ID of the attachment. Use this to identify the Id for accessing the image in an HTML form.

  • +
  • + string + $name:

    Overrides the attachment name.

  • +
  • + string + $encoding:

    File encoding (see $Encoding).

  • +
  • + string + $type:

    File extension (MIME) type.

  • +
+ + +
+ +
+ +
+ AddReplyTo (line 327) +
+ + +

Adds a "Reply-to" address.

+ +
+ void + + AddReplyTo + + (string $address, [string $name = ""]) +
+ +
    +
  • + string + $address
  • +
  • + string + $name
  • +
+ + +
+ +
+ +
+ AddStringAttachment (line 1248) +
+ + +

Adds a string or binary attachment (non-filesystem) to the list.

+

This method can be used to attach ascii or binary data, such as a BLOB record from a database.

+ +
+ void + + AddStringAttachment + + (string $string, string $filename, [string $encoding = "base64"], [string $type = "application/octet-stream"]) +
+ +
    +
  • + string + $string:

    String attachment data.

  • +
  • + string + $filename:

    Name of the attachment.

  • +
  • + string + $encoding:

    File encoding (see $Encoding).

  • +
  • + string + $type:

    File extension (MIME) type.

  • +
+ + +
+ +
+ +
+ ClearAddresses (line 1329) +
+ + +

Clears all recipients assigned in the TO array. Returns void.

+ +
+ void + + ClearAddresses + + () +
+ + + +
+ +
+ +
+ ClearAllRecipients (line 1362) +
+ + +

Clears all recipients assigned in the TO, CC and BCC array. Returns void.

+ +
+ void + + ClearAllRecipients + + () +
+ + + +
+ +
+ +
+ ClearAttachments (line 1373) +
+ + +

Clears all previously set filesystem, string, and binary attachments. Returns void.

+ +
+ void + + ClearAttachments + + () +
+ + + +
+ +
+ +
+ ClearBCCs (line 1345) +
+ + +

Clears all recipients assigned in the BCC array. Returns void.

+ +
+ void + + ClearBCCs + + () +
+ + + +
+ +
+ +
+ ClearCCs (line 1337) +
+ + +

Clears all recipients assigned in the CC array. Returns void.

+ +
+ void + + ClearCCs + + () +
+ + + +
+ +
+ +
+ ClearCustomHeaders (line 1381) +
+ + +

Clears all custom headers. Returns void.

+ +
+ void + + ClearCustomHeaders + + () +
+ + + +
+ +
+ +
+ ClearReplyTos (line 1353) +
+ + +

Clears all recipients assigned in the ReplyTo array. Returns void.

+ +
+ void + + ClearReplyTos + + () +
+ + + +
+ +
+ +
+ IsError (line 1505) +
+ + +

Returns true if an error occurred.

+ +
+ bool + + IsError + + () +
+ + + +
+ +
+ +
+ IsHTML (line 236) +
+ + +

Sets message type to HTML.

+ +
+ void + + IsHTML + + (bool $bool) +
+ +
    +
  • + bool + $bool
  • +
+ + +
+ +
+ +
+ IsMail (line 255) +
+ + +

Sets Mailer to send message using PHP mail() function.

+ +
+ void + + IsMail + + () +
+ + + +
+ +
+ +
+ IsQmail (line 271) +
+ + +

Sets Mailer to send message using the qmail MTA.

+ +
+ void + + IsQmail + + () +
+ + + +
+ +
+ +
+ IsSendmail (line 263) +
+ + +

Sets Mailer to send message using the $Sendmail program.

+ +
+ void + + IsSendmail + + () +
+ + + +
+ +
+ +
+ IsSMTP (line 247) +
+ + +

Sets Mailer to send message using SMTP.

+ +
+ void + + IsSMTP + + () +
+ + + +
+ +
+ +
+ Send (line 344) +
+ + +

Creates message and assigns Mailer. If the message is not sent successfully then it returns false. Use the ErrorInfo variable to view description of the error.

+ +
+ bool + + Send + + () +
+ + + +
+ +
+ +
+ SetLanguage (line 599) +
+ + +

Sets the language for all class error messages. Returns false if it cannot load the language file. The default language type is English.

+
    +
  • access: public
  • +
+ +
+ bool + + SetLanguage + + (string $lang_type, [string $lang_path = ""]) +
+ +
    +
  • + string + $lang_type:

    Type of language (e.g. Portuguese: "br")

  • +
  • + string + $lang_path:

    Path to the language file directory

  • +
+ + +
+ +
+ +
+ SmtpClose (line 579) +
+ + +

Closes the active SMTP session if one exists.

+ +
+ void + + SmtpClose + + () +
+ + + +
+ +
+
+ +

+ Documention generated on Mon, 28 Jul 2003 23:25:49 -0400 by phpDocumentor 1.2.0 +

+
+ \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/PHPMailer/SMTP.html b/includes/phpmailer-1.73/phpdoc/PHPMailer/SMTP.html new file mode 100644 index 000000000..4fdecb1bd --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/PHPMailer/SMTP.html @@ -0,0 +1,734 @@ + + + + + + Docs For Class SMTP + + + + +
+

Class SMTP

+ + +
+
Description
+ +
+ +

SMTP is rfc 821 compliant and implements all the rfc 821 SMTP commands except TURN which will always return a not implemented error. SMTP also provides some utility methods for sending mail to an SMTP server.

+
    +
  • author:

    Chris Ryan

  • +
+

+ Located in Program_Root/class.smtp.php (line 24) +

+ + +

+	
+			
+
+ + + +
+
Variable Summary
+ +
+
+
+ string + $CRLF +
+
+ bool + $do_debug +
+
+ int + $SMTP_PORT +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ void + SMTP + () +
+ +
+ bool + Authenticate + (mixed $username, mixed $password) +
+ +
+ void + Close + () +
+ +
+ bool + Connect + (mixed $host, mixed $port, [mixed $tval = 30]) +
+ +
+ bool + Data + (mixed $msg_data) +
+ +
+ string + Expand + (mixed $name) +
+ +
+ bool + Hello + ([mixed $host = ""]) +
+ +
+ string + Help + ([mixed $keyword = ""]) +
+ +
+ bool + Mail + (mixed $from) +
+ +
+ bool + Noop + () +
+ +
+ bool + Quit + ([mixed $close_on_error = true]) +
+ +
+ bool + Recipient + (mixed $to) +
+ +
+ bool + Reset + () +
+ +
+ bool + Send + (mixed $from) +
+ +
+ bool + SendAndMail + (mixed $from) +
+ +
+ bool + SendOrMail + (mixed $from) +
+ +
+ bool + Turn + () +
+ +
+ int + Verify + (mixed $name) +
+
+
+
+ + +
+
Variables
+ +
+ +
+ +
+ + string + $CRLF + = "\r\n" (line 36) + +
+ + +

SMTP reply line ending

+ + + + + +
+ +
+ +
+ + bool + $do_debug + (line 42) + +
+ + +

Sets whether debugging is turned on

+ + + + + +
+ +
+ +
+ + int + $SMTP_PORT + = 25 (line 30) + +
+ + +

SMTP server port

+ + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor SMTP (line 57) +
+ + +

Initialize the class so that the data is in a known state.

+
    +
  • access: public
  • +
+ +
+ void + + SMTP + + () +
+ + + +
+ +
+ +
+ Authenticate (line 144) +
+ + +

Performs SMTP authentication. Must be run after running the Hello() method. Returns true if successfully authenticated.

+
    +
  • access: public
  • +
+ +
+ bool + + Authenticate + + (mixed $username, mixed $password) +
+ + + +
+ +
+ +
+ Close (line 232) +
+ + +

Closes the socket and cleans up the state of the class.

+

It is not considered good to use this function without first trying to use QUIT.

+
    +
  • access: public
  • +
+ +
+ void + + Close + + () +
+ + + +
+ +
+ +
+ Connect (line 82) +
+ + +

Connect to the server specified on the port specified.

+

If the port is not specified use the default SMTP_PORT. If tval is specified then a connection will try and be established with the server for that number of seconds. If tval is not specified the default is 30 seconds to try on the connection.

SMTP CODE SUCCESS: 220 SMTP CODE FAILURE: 421

+
    +
  • access: public
  • +
+ +
+ bool + + Connect + + (mixed $host, mixed $port, [mixed $tval = 30]) +
+ + + +
+ +
+ +
+ Data (line 266) +
+ + +

Issues a data command and sends the msg_data to the server

+

finializing the mail transaction. $msg_data is the message that is to be send with the headers. Each header needs to be on a single line followed by a <CRLF> with the message headers and the message body being seperated by and additional <CRLF>.

Implements rfc 821: DATA <CRLF>

SMTP CODE INTERMEDIATE: 354 [data] <CRLF>.<CRLF> SMTP CODE SUCCESS: 250 SMTP CODE FAILURE: 552,554,451,452 SMTP CODE FAILURE: 451,554 SMTP CODE ERROR : 500,501,503,421

+
    +
  • access: public
  • +
+ +
+ bool + + Data + + (mixed $msg_data) +
+ + + +
+ +
+ +
+ Expand (line 399) +
+ + +

Expand takes the name and asks the server to list all the people who are members of the _list_. Expand will return back and array of the result or false if an error occurs.

+

Each value in the array returned has the format of: [ <full-name> <sp> ] <path> The definition of <path> is defined in rfc 821

Implements rfc 821: EXPN <SP> <string> <CRLF>

SMTP CODE SUCCESS: 250 SMTP CODE FAILURE: 550 SMTP CODE ERROR : 500,501,502,504,421

+
    +
  • return:

    array

  • +
  • access: public
  • +
+ +
+ string + + Expand + + (mixed $name) +
+ + + +
+ +
+ +
+ Hello (line 450) +
+ + +

Sends the HELO command to the smtp server.

+

This makes sure that we and the server are in the same known state.

Implements from rfc 821: HELO <SP> <domain> <CRLF>

SMTP CODE SUCCESS: 250 SMTP CODE ERROR : 500, 501, 504, 421

+
    +
  • access: public
  • +
+ +
+ bool + + Hello + + ([mixed $host = ""]) +
+ + + +
+ +
+ +
+ Help (line 524) +
+ + +

Gets help information on the keyword specified. If the keyword

+

is not specified then returns generic help, ussually contianing A list of keywords that help is available on. This function returns the results back to the user. It is up to the user to handle the returned data. If an error occurs then false is returned with $this->error set appropiately.

Implements rfc 821: HELP [ <SP> <string> ] <CRLF>

SMTP CODE SUCCESS: 211,214 SMTP CODE ERROR : 500,501,502,504,421

+
    +
  • access: public
  • +
+ +
+ string + + Help + + ([mixed $keyword = ""]) +
+ + + +
+ +
+ +
+ Mail (line 576) +
+ + +

Starts a mail transaction from the email address specified in $from. Returns true if successful or false otherwise. If True the mail transaction is started and then one or more Recipient commands may be called followed by a Data command.

+

Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>

SMTP CODE SUCCESS: 250 SMTP CODE SUCCESS: 552,451,452 SMTP CODE SUCCESS: 500,501,421

+
    +
  • access: public
  • +
+ +
+ bool + + Mail + + (mixed $from) +
+ + + +
+ +
+ +
+ Noop (line 618) +
+ + +

Sends the command NOOP to the SMTP server.

+

Implements from rfc 821: NOOP <CRLF>

SMTP CODE SUCCESS: 250 SMTP CODE ERROR : 500, 421

+
    +
  • access: public
  • +
+ +
+ bool + + Noop + + () +
+ + + +
+ +
+ +
+ Quit (line 661) +
+ + +

Sends the quit command to the server and then closes the socket if there is no error or the $close_on_error argument is true.

+

Implements from rfc 821: QUIT <CRLF>

SMTP CODE SUCCESS: 221 SMTP CODE ERROR : 500

+
    +
  • access: public
  • +
+ +
+ bool + + Quit + + ([mixed $close_on_error = true]) +
+ + + +
+ +
+ +
+ Recipient (line 715) +
+ + +

Sends the command RCPT to the SMTP server with the TO: argument of $to.

+

Returns true if the recipient was accepted false if it was rejected.

Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>

SMTP CODE SUCCESS: 250,251 SMTP CODE FAILURE: 550,551,552,553,450,451,452 SMTP CODE ERROR : 500,501,503,421

+
    +
  • access: public
  • +
+ +
+ bool + + Recipient + + (mixed $to) +
+ + + +
+ +
+ +
+ Reset (line 759) +
+ + +

Sends the RSET command to abort and transaction that is currently in progress. Returns true if successful false otherwise.

+

Implements rfc 821: RSET <CRLF>

SMTP CODE SUCCESS: 250 SMTP CODE ERROR : 500,501,504,421

+
    +
  • access: public
  • +
+ +
+ bool + + Reset + + () +
+ + + +
+ +
+ +
+ Send (line 808) +
+ + +

Starts a mail transaction from the email address specified in

+

$from. Returns true if successful or false otherwise. If True the mail transaction is started and then one or more Recipient commands may be called followed by a Data command. This command will send the message to the users terminal if they are logged in.

Implements rfc 821: SEND <SP> FROM:<reverse-path> <CRLF>

SMTP CODE SUCCESS: 250 SMTP CODE SUCCESS: 552,451,452 SMTP CODE SUCCESS: 500,501,502,421

+
    +
  • access: public
  • +
+ +
+ bool + + Send + + (mixed $from) +
+ + + +
+ +
+ +
+ SendAndMail (line 856) +
+ + +

Starts a mail transaction from the email address specified in

+

$from. Returns true if successful or false otherwise. If True the mail transaction is started and then one or more Recipient commands may be called followed by a Data command. This command will send the message to the users terminal if they are logged in and send them an email.

Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>

SMTP CODE SUCCESS: 250 SMTP CODE SUCCESS: 552,451,452 SMTP CODE SUCCESS: 500,501,502,421

+
    +
  • access: public
  • +
+ +
+ bool + + SendAndMail + + (mixed $from) +
+ + + +
+ +
+ +
+ SendOrMail (line 904) +
+ + +

Starts a mail transaction from the email address specified in

+

$from. Returns true if successful or false otherwise. If True the mail transaction is started and then one or more Recipient commands may be called followed by a Data command. This command will send the message to the users terminal if they are logged in or mail it to them if they are not.

Implements rfc 821: SOML <SP> FROM:<reverse-path> <CRLF>

SMTP CODE SUCCESS: 250 SMTP CODE SUCCESS: 552,451,452 SMTP CODE SUCCESS: 500,501,502,421

+
    +
  • access: public
  • +
+ +
+ bool + + SendOrMail + + (mixed $from) +
+ + + +
+ +
+ +
+ Turn (line 949) +
+ + +

This is an optional command for SMTP that this class does not support. This method is here to make the RFC821 Definition complete for this class and __may__ be implimented in the future

+

Implements from rfc 821: TURN <CRLF>

SMTP CODE SUCCESS: 250 SMTP CODE FAILURE: 502 SMTP CODE ERROR : 500, 503

+
    +
  • access: public
  • +
+ +
+ bool + + Turn + + () +
+ + + +
+ +
+ +
+ Verify (line 971) +
+ + +

Verifies that the name is recognized by the server.

+

Returns false if the name could not be verified otherwise the response from the server is returned.

Implements rfc 821: VRFY <SP> <string> <CRLF>

SMTP CODE SUCCESS: 250,251 SMTP CODE FAILURE: 550,551,553 SMTP CODE ERROR : 500,501,502,421

+
    +
  • access: public
  • +
+ +
+ int + + Verify + + (mixed $name) +
+ + + +
+ +
+
+ +

+ Documention generated on Mon, 28 Jul 2003 23:25:50 -0400 by phpDocumentor 1.2.0 +

+
+ \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/PHPMailer/_class_phpmailer_php.html b/includes/phpmailer-1.73/phpdoc/PHPMailer/_class_phpmailer_php.html new file mode 100644 index 000000000..f7bde2c72 --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/PHPMailer/_class_phpmailer_php.html @@ -0,0 +1,60 @@ + + + + + + Docs for page class.phpmailer.php + + + + +
+

Program_Root/class.phpmailer.php

+ + +
+
Description
+ +
+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ PHPMailer + + PHPMailer - PHP email transport class +
+
+
+ + + + + +

+ Documention generated on Mon, 28 Jul 2003 23:25:49 -0400 by phpDocumentor 1.2.0 +

+
+ \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/PHPMailer/_class_smtp_php.html b/includes/phpmailer-1.73/phpdoc/PHPMailer/_class_smtp_php.html new file mode 100644 index 000000000..1b7d1b529 --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/PHPMailer/_class_smtp_php.html @@ -0,0 +1,60 @@ + + + + + + Docs for page class.smtp.php + + + + +
+

Program_Root/class.smtp.php

+ + +
+
Description
+ +
+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ SMTP + + SMTP is rfc 821 compliant and implements all the rfc 821 SMTP commands except TURN which will always return a not implemented error. SMTP also provides some utility methods for sending mail to an SMTP server. +
+
+
+ + + + + +

+ Documention generated on Mon, 28 Jul 2003 23:25:50 -0400 by phpDocumentor 1.2.0 +

+
+ \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/blank.html b/includes/phpmailer-1.73/phpdoc/blank.html new file mode 100644 index 000000000..4382bc95a --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/blank.html @@ -0,0 +1,13 @@ + + + Generated Documentation + + + + +

Generated Documentation

+Welcome to default!
+
+This documentation was generated by phpDocumentor v1.2.0
+ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/classtrees_PHPMailer.html b/includes/phpmailer-1.73/phpdoc/classtrees_PHPMailer.html new file mode 100644 index 000000000..f8a48da65 --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/classtrees_PHPMailer.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + +

+ +

+

Root class PHPMailer

+ + +

Root class SMTP

+ + +

+ Documention generated on Mon, 28 Jul 2003 23:25:49 -0400 by phpDocumentor 1.2.0 +

+ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/elementindex.html b/includes/phpmailer-1.73/phpdoc/elementindex.html new file mode 100644 index 000000000..7f65a7670 --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/elementindex.html @@ -0,0 +1,734 @@ + + + + + + + + + + + +

Full index

+

Package indexes

+ +
+
+ a + b + c + d + e + f + h + i + m + n + p + q + r + s + t + u + v + w +
+ + +
+
a
+ +
+
+
+
+ $AltBody +
+
+
PHPMailer::$AltBody in class.phpmailer.php
+
Sets the text-only body of the message. This automatically sets the email to multipart/alternative. This body can be read by mail clients that do not have HTML email capability such as mutt. Clients that can read HTML will view the normal Body.
+
+
+ AddAddress +
+
+
PHPMailer::AddAddress() in class.phpmailer.php
+
Adds a "To" address.
+
+
+ AddAttachment +
+
+
PHPMailer::AddAttachment() in class.phpmailer.php
+
Adds an attachment from a path on the filesystem.
+
+
+ AddBCC +
+
+
PHPMailer::AddBCC() in class.phpmailer.php
+
Adds a "Bcc" address. Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.
+
+
+ AddCC +
+
+
PHPMailer::AddCC() in class.phpmailer.php
+
Adds a "Cc" address. Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.
+
+
+ AddCustomHeader +
+
+
PHPMailer::AddCustomHeader() in class.phpmailer.php
+
Adds a custom header.
+
+
+ AddEmbeddedImage +
+
+
PHPMailer::AddEmbeddedImage() in class.phpmailer.php
+
Adds an embedded attachment. This can include images, sounds, and just about any other document. Make sure to set the $type to an image type. For JPEG images use "image/jpeg" and for GIF images use "image/gif".
+
+
+ AddReplyTo +
+
+
PHPMailer::AddReplyTo() in class.phpmailer.php
+
Adds a "Reply-to" address.
+
+
+ AddStringAttachment +
+
+
PHPMailer::AddStringAttachment() in class.phpmailer.php
+
Adds a string or binary attachment (non-filesystem) to the list.
+
+
+ Authenticate +
+
+
SMTP::Authenticate() in class.smtp.php
+
Performs SMTP authentication. Must be run after running the Hello() method. Returns true if successfully authenticated.
+
+
+ +
+
b
+ +
+
+
+
+ $Body +
+
+
PHPMailer::$Body in class.phpmailer.php
+
Sets the Body of the message. This can be either an HTML or text body.
+
+
+ +
+
c
+ +
+
+
+
+ $CharSet +
+
+
PHPMailer::$CharSet in class.phpmailer.php
+
Sets the CharSet of the message.
+
+
+ $ConfirmReadingTo +
+
+
PHPMailer::$ConfirmReadingTo in class.phpmailer.php
+
Sets the email address that a reading confirmation will be sent.
+
+
+ $ContentType +
+
+
PHPMailer::$ContentType in class.phpmailer.php
+
Sets the Content-type of the message.
+
+
+ $CRLF +
+
+
SMTP::$CRLF in class.smtp.php
+
SMTP reply line ending
+
+
+ class.phpmailer.php +
+
+
class.phpmailer.php in class.phpmailer.php
+
+
+ class.smtp.php +
+
+
class.smtp.php in class.smtp.php
+
+
+ ClearAddresses +
+
+
PHPMailer::ClearAddresses() in class.phpmailer.php
+
Clears all recipients assigned in the TO array. Returns void.
+
+
+ ClearAllRecipients +
+
+
PHPMailer::ClearAllRecipients() in class.phpmailer.php
+
Clears all recipients assigned in the TO, CC and BCC array. Returns void.
+
+
+ ClearAttachments +
+
+
PHPMailer::ClearAttachments() in class.phpmailer.php
+
Clears all previously set filesystem, string, and binary attachments. Returns void.
+
+
+ ClearBCCs +
+
+
PHPMailer::ClearBCCs() in class.phpmailer.php
+
Clears all recipients assigned in the BCC array. Returns void.
+
+
+ ClearCCs +
+
+
PHPMailer::ClearCCs() in class.phpmailer.php
+
Clears all recipients assigned in the CC array. Returns void.
+
+
+ ClearCustomHeaders +
+
+
PHPMailer::ClearCustomHeaders() in class.phpmailer.php
+
Clears all custom headers. Returns void.
+
+
+ ClearReplyTos +
+
+
PHPMailer::ClearReplyTos() in class.phpmailer.php
+
Clears all recipients assigned in the ReplyTo array. Returns void.
+
+
+ Close +
+
+
SMTP::Close() in class.smtp.php
+
Closes the socket and cleans up the state of the class.
+
+
+ Connect +
+
+
SMTP::Connect() in class.smtp.php
+
Connect to the server specified on the port specified.
+
+
+ +
+
d
+ +
+
+
+
+ $do_debug +
+
+
SMTP::$do_debug in class.smtp.php
+
Sets whether debugging is turned on
+
+
+ Data +
+
+
SMTP::Data() in class.smtp.php
+
Issues a data command and sends the msg_data to the server
+
+
+ +
+
e
+ +
+
+
+
+ $Encoding +
+
+
PHPMailer::$Encoding in class.phpmailer.php
+
Sets the Encoding of the message. Options for this are "8bit", "7bit", "binary", "base64", and "quoted-printable".
+
+
+ $ErrorInfo +
+
+
PHPMailer::$ErrorInfo in class.phpmailer.php
+
Holds the most recent mailer error message.
+
+
+ Expand +
+
+
SMTP::Expand() in class.smtp.php
+
Expand takes the name and asks the server to list all the people who are members of the _list_. Expand will return back and array of the result or false if an error occurs.
+
+
+ +
+
f
+ +
+
+
+
+ $From +
+
+
PHPMailer::$From in class.phpmailer.php
+
Sets the From email address for the message.
+
+
+ $FromName +
+
+
PHPMailer::$FromName in class.phpmailer.php
+
Sets the From name of the message.
+
+
+ +
+
h
+ +
+
+
+
+ $Helo +
+
+
PHPMailer::$Helo in class.phpmailer.php
+
Sets the SMTP HELO of the message (Default is $Hostname).
+
+
+ $Host +
+
+
PHPMailer::$Host in class.phpmailer.php
+
Sets the SMTP hosts. All hosts must be separated by a semicolon. You can also specify a different port for each host by using this format: [hostname:port] (e.g. "smtp1.example.com:25;smtp2.example.com").
+
+
+ $Hostname +
+
+
PHPMailer::$Hostname in class.phpmailer.php
+
Sets the hostname to use in Message-Id and Received headers and as default HELO string. If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'.
+
+
+ Hello +
+
+
SMTP::Hello() in class.smtp.php
+
Sends the HELO command to the smtp server.
+
+
+ Help +
+
+
SMTP::Help() in class.smtp.php
+
Gets help information on the keyword specified. If the keyword
+
+
+ +
+
i
+ +
+
+
+
+ IsError +
+
+
PHPMailer::IsError() in class.phpmailer.php
+
Returns true if an error occurred.
+
+
+ IsHTML +
+
+
PHPMailer::IsHTML() in class.phpmailer.php
+
Sets message type to HTML.
+
+
+ IsMail +
+
+
PHPMailer::IsMail() in class.phpmailer.php
+
Sets Mailer to send message using PHP mail() function.
+
+
+ IsQmail +
+
+
PHPMailer::IsQmail() in class.phpmailer.php
+
Sets Mailer to send message using the qmail MTA.
+
+
+ IsSendmail +
+
+
PHPMailer::IsSendmail() in class.phpmailer.php
+
Sets Mailer to send message using the $Sendmail program.
+
+
+ IsSMTP +
+
+
PHPMailer::IsSMTP() in class.phpmailer.php
+
Sets Mailer to send message using SMTP.
+
+
+ +
+
m
+ +
+
+
+
+ $Mailer +
+
+
PHPMailer::$Mailer in class.phpmailer.php
+
Method to send mail: ("mail", "sendmail", or "smtp").
+
+
+ Mail +
+
+
SMTP::Mail() in class.smtp.php
+
Starts a mail transaction from the email address specified in $from. Returns true if successful or false otherwise. If True the mail transaction is started and then one or more Recipient commands may be called followed by a Data command.
+
+
+ +
+
n
+ +
+
+
+
+ Noop +
+
+
SMTP::Noop() in class.smtp.php
+
Sends the command NOOP to the SMTP server.
+
+
+ +
+
p
+ +
+
+
+
+ $Password +
+
+
PHPMailer::$Password in class.phpmailer.php
+
Sets SMTP password.
+
+
+ $PluginDir +
+
+
PHPMailer::$PluginDir in class.phpmailer.php
+
Path to PHPMailer plugins. This is now only useful if the SMTP class is in a different directory than the PHP include path.
+
+
+ $Port +
+
+
PHPMailer::$Port in class.phpmailer.php
+
Sets the default SMTP server port.
+
+
+ $Priority +
+
+
PHPMailer::$Priority in class.phpmailer.php
+
Email priority (1 = High, 3 = Normal, 5 = low).
+
+
+ PHPMailer +
+
+
PHPMailer in class.phpmailer.php
+
PHPMailer - PHP email transport class
+
+
+ +
+
q
+ +
+
+
+
+ Quit +
+
+
SMTP::Quit() in class.smtp.php
+
Sends the quit command to the server and then closes the socket if there is no error or the $close_on_error argument is true.
+
+
+ +
+
r
+ +
+
+
+
+ Recipient +
+
+
SMTP::Recipient() in class.smtp.php
+
Sends the command RCPT to the SMTP server with the TO: argument of $to.
+
+
+ Reset +
+
+
SMTP::Reset() in class.smtp.php
+
Sends the RSET command to abort and transaction that is currently in progress. Returns true if successful false otherwise.
+
+
+ +
+
s
+ +
+
+
+
+ $Sender +
+
+
PHPMailer::$Sender in class.phpmailer.php
+
Sets the Sender email (Return-Path) of the message. If not empty, will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.
+
+
+ $Sendmail +
+
+
PHPMailer::$Sendmail in class.phpmailer.php
+
Sets the path of the sendmail program.
+
+
+ $SMTPAuth +
+
+
PHPMailer::$SMTPAuth in class.phpmailer.php
+
Sets SMTP authentication. Utilizes the Username and Password variables.
+
+
+ $SMTPDebug +
+
+
PHPMailer::$SMTPDebug in class.phpmailer.php
+
Sets SMTP class debugging on or off.
+
+
+ $SMTPKeepAlive +
+
+
PHPMailer::$SMTPKeepAlive in class.phpmailer.php
+
Prevents the SMTP connection from being closed after each mail sending. If this is set to true then to close the connection requires an explicit call to SmtpClose().
+
+
+ $SMTP_PORT +
+
+
SMTP::$SMTP_PORT in class.smtp.php
+
SMTP server port
+
+
+ $Subject +
+
+
PHPMailer::$Subject in class.phpmailer.php
+
Sets the Subject of the message.
+
+
+ Send +
+
+
SMTP::Send() in class.smtp.php
+
Starts a mail transaction from the email address specified in
+
+
+ Send +
+
+
PHPMailer::Send() in class.phpmailer.php
+
Creates message and assigns Mailer. If the message is not sent successfully then it returns false. Use the ErrorInfo variable to view description of the error.
+
+
+ SendAndMail +
+
+
SMTP::SendAndMail() in class.smtp.php
+
Starts a mail transaction from the email address specified in
+
+
+ SendOrMail +
+
+
SMTP::SendOrMail() in class.smtp.php
+
Starts a mail transaction from the email address specified in
+
+
+ SetLanguage +
+
+
PHPMailer::SetLanguage() in class.phpmailer.php
+
Sets the language for all class error messages. Returns false if it cannot load the language file. The default language type is English.
+
+
+ SMTP +
+
+
SMTP::SMTP() in class.smtp.php
+
Initialize the class so that the data is in a known state.
+
+
+ SMTP +
+
+
SMTP in class.smtp.php
+
SMTP is rfc 821 compliant and implements all the rfc 821 SMTP commands except TURN which will always return a not implemented error. SMTP also provides some utility methods for sending mail to an SMTP server.
+
+
+ SmtpClose +
+
+
PHPMailer::SmtpClose() in class.phpmailer.php
+
Closes the active SMTP session if one exists.
+
+
+ +
+
t
+ +
+
+
+
+ $Timeout +
+
+
PHPMailer::$Timeout in class.phpmailer.php
+
Sets the SMTP server timeout in seconds. This function will not work with the win32 version.
+
+
+ Turn +
+
+
SMTP::Turn() in class.smtp.php
+
This is an optional command for SMTP that this class does not support. This method is here to make the RFC821 Definition complete for this class and __may__ be implimented in the future
+
+
+ +
+
u
+ +
+
+
+
+ $Username +
+
+
PHPMailer::$Username in class.phpmailer.php
+
Sets SMTP username.
+
+
+ +
+
v
+ +
+
+
+
+ $Version +
+
+
PHPMailer::$Version in class.phpmailer.php
+
Holds PHPMailer version.
+
+
+ Verify +
+
+
SMTP::Verify() in class.smtp.php
+
Verifies that the name is recognized by the server.
+
+
+ +
+
w
+ +
+
+
+
+ $WordWrap +
+
+
PHPMailer::$WordWrap in class.phpmailer.php
+
Sets word wrapping on the body of the message to a given number of characters.
+
+
+ +
+ a + b + c + d + e + f + h + i + m + n + p + q + r + s + t + u + v + w +
+ \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/elementindex_PHPMailer.html b/includes/phpmailer-1.73/phpdoc/elementindex_PHPMailer.html new file mode 100644 index 000000000..e62d5ed61 --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/elementindex_PHPMailer.html @@ -0,0 +1,731 @@ + + + + + + + + + + + +

[PHPMailer] element index

+All elements +
+
+ a + b + c + d + e + f + h + i + m + n + p + q + r + s + t + u + v + w +
+ + +
+
a
+ +
+
+
+
+ $AltBody +
+
+
PHPMailer::$AltBody in class.phpmailer.php
+
Sets the text-only body of the message. This automatically sets the email to multipart/alternative. This body can be read by mail clients that do not have HTML email capability such as mutt. Clients that can read HTML will view the normal Body.
+
+
+ AddAddress +
+
+
PHPMailer::AddAddress() in class.phpmailer.php
+
Adds a "To" address.
+
+
+ AddAttachment +
+
+
PHPMailer::AddAttachment() in class.phpmailer.php
+
Adds an attachment from a path on the filesystem.
+
+
+ AddBCC +
+
+
PHPMailer::AddBCC() in class.phpmailer.php
+
Adds a "Bcc" address. Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.
+
+
+ AddCC +
+
+
PHPMailer::AddCC() in class.phpmailer.php
+
Adds a "Cc" address. Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.
+
+
+ AddCustomHeader +
+
+
PHPMailer::AddCustomHeader() in class.phpmailer.php
+
Adds a custom header.
+
+
+ AddEmbeddedImage +
+
+
PHPMailer::AddEmbeddedImage() in class.phpmailer.php
+
Adds an embedded attachment. This can include images, sounds, and just about any other document. Make sure to set the $type to an image type. For JPEG images use "image/jpeg" and for GIF images use "image/gif".
+
+
+ AddReplyTo +
+
+
PHPMailer::AddReplyTo() in class.phpmailer.php
+
Adds a "Reply-to" address.
+
+
+ AddStringAttachment +
+
+
PHPMailer::AddStringAttachment() in class.phpmailer.php
+
Adds a string or binary attachment (non-filesystem) to the list.
+
+
+ Authenticate +
+
+
SMTP::Authenticate() in class.smtp.php
+
Performs SMTP authentication. Must be run after running the Hello() method. Returns true if successfully authenticated.
+
+
+ +
+
b
+ +
+
+
+
+ $Body +
+
+
PHPMailer::$Body in class.phpmailer.php
+
Sets the Body of the message. This can be either an HTML or text body.
+
+
+ +
+
c
+ +
+
+
+
+ $CharSet +
+
+
PHPMailer::$CharSet in class.phpmailer.php
+
Sets the CharSet of the message.
+
+
+ $ConfirmReadingTo +
+
+
PHPMailer::$ConfirmReadingTo in class.phpmailer.php
+
Sets the email address that a reading confirmation will be sent.
+
+
+ $ContentType +
+
+
PHPMailer::$ContentType in class.phpmailer.php
+
Sets the Content-type of the message.
+
+
+ $CRLF +
+
+
SMTP::$CRLF in class.smtp.php
+
SMTP reply line ending
+
+
+ class.phpmailer.php +
+
+
class.phpmailer.php in class.phpmailer.php
+
+
+ class.smtp.php +
+
+
class.smtp.php in class.smtp.php
+
+
+ ClearAddresses +
+
+
PHPMailer::ClearAddresses() in class.phpmailer.php
+
Clears all recipients assigned in the TO array. Returns void.
+
+
+ ClearAllRecipients +
+
+
PHPMailer::ClearAllRecipients() in class.phpmailer.php
+
Clears all recipients assigned in the TO, CC and BCC array. Returns void.
+
+
+ ClearAttachments +
+
+
PHPMailer::ClearAttachments() in class.phpmailer.php
+
Clears all previously set filesystem, string, and binary attachments. Returns void.
+
+
+ ClearBCCs +
+
+
PHPMailer::ClearBCCs() in class.phpmailer.php
+
Clears all recipients assigned in the BCC array. Returns void.
+
+
+ ClearCCs +
+
+
PHPMailer::ClearCCs() in class.phpmailer.php
+
Clears all recipients assigned in the CC array. Returns void.
+
+
+ ClearCustomHeaders +
+
+
PHPMailer::ClearCustomHeaders() in class.phpmailer.php
+
Clears all custom headers. Returns void.
+
+
+ ClearReplyTos +
+
+
PHPMailer::ClearReplyTos() in class.phpmailer.php
+
Clears all recipients assigned in the ReplyTo array. Returns void.
+
+
+ Close +
+
+
SMTP::Close() in class.smtp.php
+
Closes the socket and cleans up the state of the class.
+
+
+ Connect +
+
+
SMTP::Connect() in class.smtp.php
+
Connect to the server specified on the port specified.
+
+
+ +
+
d
+ +
+
+
+
+ $do_debug +
+
+
SMTP::$do_debug in class.smtp.php
+
Sets whether debugging is turned on
+
+
+ Data +
+
+
SMTP::Data() in class.smtp.php
+
Issues a data command and sends the msg_data to the server
+
+
+ +
+
e
+ +
+
+
+
+ $Encoding +
+
+
PHPMailer::$Encoding in class.phpmailer.php
+
Sets the Encoding of the message. Options for this are "8bit", "7bit", "binary", "base64", and "quoted-printable".
+
+
+ $ErrorInfo +
+
+
PHPMailer::$ErrorInfo in class.phpmailer.php
+
Holds the most recent mailer error message.
+
+
+ Expand +
+
+
SMTP::Expand() in class.smtp.php
+
Expand takes the name and asks the server to list all the people who are members of the _list_. Expand will return back and array of the result or false if an error occurs.
+
+
+ +
+
f
+ +
+
+
+
+ $From +
+
+
PHPMailer::$From in class.phpmailer.php
+
Sets the From email address for the message.
+
+
+ $FromName +
+
+
PHPMailer::$FromName in class.phpmailer.php
+
Sets the From name of the message.
+
+
+ +
+
h
+ +
+
+
+
+ $Helo +
+
+
PHPMailer::$Helo in class.phpmailer.php
+
Sets the SMTP HELO of the message (Default is $Hostname).
+
+
+ $Host +
+
+
PHPMailer::$Host in class.phpmailer.php
+
Sets the SMTP hosts. All hosts must be separated by a semicolon. You can also specify a different port for each host by using this format: [hostname:port] (e.g. "smtp1.example.com:25;smtp2.example.com").
+
+
+ $Hostname +
+
+
PHPMailer::$Hostname in class.phpmailer.php
+
Sets the hostname to use in Message-Id and Received headers and as default HELO string. If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'.
+
+
+ Hello +
+
+
SMTP::Hello() in class.smtp.php
+
Sends the HELO command to the smtp server.
+
+
+ Help +
+
+
SMTP::Help() in class.smtp.php
+
Gets help information on the keyword specified. If the keyword
+
+
+ +
+
i
+ +
+
+
+
+ IsError +
+
+
PHPMailer::IsError() in class.phpmailer.php
+
Returns true if an error occurred.
+
+
+ IsHTML +
+
+
PHPMailer::IsHTML() in class.phpmailer.php
+
Sets message type to HTML.
+
+
+ IsMail +
+
+
PHPMailer::IsMail() in class.phpmailer.php
+
Sets Mailer to send message using PHP mail() function.
+
+
+ IsQmail +
+
+
PHPMailer::IsQmail() in class.phpmailer.php
+
Sets Mailer to send message using the qmail MTA.
+
+
+ IsSendmail +
+
+
PHPMailer::IsSendmail() in class.phpmailer.php
+
Sets Mailer to send message using the $Sendmail program.
+
+
+ IsSMTP +
+
+
PHPMailer::IsSMTP() in class.phpmailer.php
+
Sets Mailer to send message using SMTP.
+
+
+ +
+
m
+ +
+
+
+
+ $Mailer +
+
+
PHPMailer::$Mailer in class.phpmailer.php
+
Method to send mail: ("mail", "sendmail", or "smtp").
+
+
+ Mail +
+
+
SMTP::Mail() in class.smtp.php
+
Starts a mail transaction from the email address specified in $from. Returns true if successful or false otherwise. If True the mail transaction is started and then one or more Recipient commands may be called followed by a Data command.
+
+
+ +
+
n
+ +
+
+
+
+ Noop +
+
+
SMTP::Noop() in class.smtp.php
+
Sends the command NOOP to the SMTP server.
+
+
+ +
+
p
+ +
+
+
+
+ $Password +
+
+
PHPMailer::$Password in class.phpmailer.php
+
Sets SMTP password.
+
+
+ $PluginDir +
+
+
PHPMailer::$PluginDir in class.phpmailer.php
+
Path to PHPMailer plugins. This is now only useful if the SMTP class is in a different directory than the PHP include path.
+
+
+ $Port +
+
+
PHPMailer::$Port in class.phpmailer.php
+
Sets the default SMTP server port.
+
+
+ $Priority +
+
+
PHPMailer::$Priority in class.phpmailer.php
+
Email priority (1 = High, 3 = Normal, 5 = low).
+
+
+ PHPMailer +
+
+
PHPMailer in class.phpmailer.php
+
PHPMailer - PHP email transport class
+
+
+ +
+
q
+ +
+
+
+
+ Quit +
+
+
SMTP::Quit() in class.smtp.php
+
Sends the quit command to the server and then closes the socket if there is no error or the $close_on_error argument is true.
+
+
+ +
+
r
+ +
+
+
+
+ Recipient +
+
+
SMTP::Recipient() in class.smtp.php
+
Sends the command RCPT to the SMTP server with the TO: argument of $to.
+
+
+ Reset +
+
+
SMTP::Reset() in class.smtp.php
+
Sends the RSET command to abort and transaction that is currently in progress. Returns true if successful false otherwise.
+
+
+ +
+
s
+ +
+
+
+
+ $Sender +
+
+
PHPMailer::$Sender in class.phpmailer.php
+
Sets the Sender email (Return-Path) of the message. If not empty, will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.
+
+
+ $Sendmail +
+
+
PHPMailer::$Sendmail in class.phpmailer.php
+
Sets the path of the sendmail program.
+
+
+ $SMTPAuth +
+
+
PHPMailer::$SMTPAuth in class.phpmailer.php
+
Sets SMTP authentication. Utilizes the Username and Password variables.
+
+
+ $SMTPDebug +
+
+
PHPMailer::$SMTPDebug in class.phpmailer.php
+
Sets SMTP class debugging on or off.
+
+
+ $SMTPKeepAlive +
+
+
PHPMailer::$SMTPKeepAlive in class.phpmailer.php
+
Prevents the SMTP connection from being closed after each mail sending. If this is set to true then to close the connection requires an explicit call to SmtpClose().
+
+
+ $SMTP_PORT +
+
+
SMTP::$SMTP_PORT in class.smtp.php
+
SMTP server port
+
+
+ $Subject +
+
+
PHPMailer::$Subject in class.phpmailer.php
+
Sets the Subject of the message.
+
+
+ Send +
+
+
SMTP::Send() in class.smtp.php
+
Starts a mail transaction from the email address specified in
+
+
+ Send +
+
+
PHPMailer::Send() in class.phpmailer.php
+
Creates message and assigns Mailer. If the message is not sent successfully then it returns false. Use the ErrorInfo variable to view description of the error.
+
+
+ SendAndMail +
+
+
SMTP::SendAndMail() in class.smtp.php
+
Starts a mail transaction from the email address specified in
+
+
+ SendOrMail +
+
+
SMTP::SendOrMail() in class.smtp.php
+
Starts a mail transaction from the email address specified in
+
+
+ SetLanguage +
+
+
PHPMailer::SetLanguage() in class.phpmailer.php
+
Sets the language for all class error messages. Returns false if it cannot load the language file. The default language type is English.
+
+
+ SMTP +
+
+
SMTP::SMTP() in class.smtp.php
+
Initialize the class so that the data is in a known state.
+
+
+ SMTP +
+
+
SMTP in class.smtp.php
+
SMTP is rfc 821 compliant and implements all the rfc 821 SMTP commands except TURN which will always return a not implemented error. SMTP also provides some utility methods for sending mail to an SMTP server.
+
+
+ SmtpClose +
+
+
PHPMailer::SmtpClose() in class.phpmailer.php
+
Closes the active SMTP session if one exists.
+
+
+ +
+
t
+ +
+
+
+
+ $Timeout +
+
+
PHPMailer::$Timeout in class.phpmailer.php
+
Sets the SMTP server timeout in seconds. This function will not work with the win32 version.
+
+
+ Turn +
+
+
SMTP::Turn() in class.smtp.php
+
This is an optional command for SMTP that this class does not support. This method is here to make the RFC821 Definition complete for this class and __may__ be implimented in the future
+
+
+ +
+
u
+ +
+
+
+
+ $Username +
+
+
PHPMailer::$Username in class.phpmailer.php
+
Sets SMTP username.
+
+
+ +
+
v
+ +
+
+
+
+ $Version +
+
+
PHPMailer::$Version in class.phpmailer.php
+
Holds PHPMailer version.
+
+
+ Verify +
+
+
SMTP::Verify() in class.smtp.php
+
Verifies that the name is recognized by the server.
+
+
+ +
+
w
+ +
+
+
+
+ $WordWrap +
+
+
PHPMailer::$WordWrap in class.phpmailer.php
+
Sets word wrapping on the body of the message to a given number of characters.
+
+
+ +
+ a + b + c + d + e + f + h + i + m + n + p + q + r + s + t + u + v + w +
+ \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/errors.html b/includes/phpmailer-1.73/phpdoc/errors.html new file mode 100644 index 000000000..d5781a06b --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/errors.html @@ -0,0 +1,23 @@ + + + + + + phpDocumentor Parser Errors and Warnings + + + + + Post-parsing
+class.smtp.php
+

class.phpmailer.php

+

Warnings:


+Warning on line 1530 - no @package tag was used in a DocBlock for file C:\dev\phpDocumentor-1.2.0\Classes\class.phpmailer.php
+

class.smtp.php

+

Warnings:


+Warning on line 1039 - no @package tag was used in a DocBlock for file C:\dev\phpDocumentor-1.2.0\Classes\class.smtp.php
+

+ Documention generated on Mon, 28 Jul 2003 23:25:50 -0400 by phpDocumentor 1.2.0 +

+ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/index.html b/includes/phpmailer-1.73/phpdoc/index.html new file mode 100644 index 000000000..f2b2c7aab --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/index.html @@ -0,0 +1,24 @@ + + + + + + Generated Documentation + + + + + + + + + + + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + + + \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/li_PHPMailer.html b/includes/phpmailer-1.73/phpdoc/li_PHPMailer.html new file mode 100644 index 000000000..ec8456a04 --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/li_PHPMailer.html @@ -0,0 +1,36 @@ + + + + + + + + + + +
PHPMailer
+
+ +
+ +
Description
+
+ Class trees
+ Index of elements
+
+ + + +
Classes
+
PHPMailer
+
SMTP
+
Files
+
class.phpmailer.php
+
class.smtp.php
+ + +
+
+

phpDocumentor v 1.2.0

+ + \ No newline at end of file diff --git a/includes/phpmailer-1.73/phpdoc/media/banner.css b/includes/phpmailer-1.73/phpdoc/media/banner.css new file mode 100644 index 000000000..f2149ebb4 --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background-color: #CCCCFF; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #6666AA; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #AAAADD; + border: 1px solid black; + color: yellow; +} diff --git a/includes/phpmailer-1.73/phpdoc/media/stylesheet.css b/includes/phpmailer-1.73/phpdoc/media/stylesheet.css new file mode 100644 index 000000000..7a8113967 --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/media/stylesheet.css @@ -0,0 +1,133 @@ +a { color: #336699; text-decoration: none; } +a:hover { color: #6699CC; text-decoration: underline; } +a:active { color: #6699CC; text-decoration: underline; } + +body, table { font-family: Georgia, Times New Roman, Times, serif; font-size: 10pt } +p, li { line-height: 140% } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #CCCCFF } +.info-box-body { border: 1px solid #999999; padding: .5em; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} +.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree dl { margin: 0px } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 1px solid #999999; background-color: #F8F8F8; } +.nav-button-disabled { color: #999999; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #DDDDDD; outline: 1px solid #999999; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left} +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold; } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { margin-bottom: .3em } +.var-type { font-style: italic; } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #336699; padding: 1em; background-color: #EEEEEE; } + +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; margin: 1em 0em 0em 0em; padding: .25em; border: 2px solid #999999; background-color: #CCCCFF } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/includes/phpmailer-1.73/phpdoc/packages.html b/includes/phpmailer-1.73/phpdoc/packages.html new file mode 100644 index 000000000..fdf40b0b8 --- /dev/null +++ b/includes/phpmailer-1.73/phpdoc/packages.html @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/includes/phpmailer-1.73/test/phpmailer_test.php b/includes/phpmailer-1.73/test/phpmailer_test.php new file mode 100644 index 000000000..22d6f42b8 --- /dev/null +++ b/includes/phpmailer-1.73/test/phpmailer_test.php @@ -0,0 +1,572 @@ +TestCase( $name ); + } + + /** + * Run before each test is started. + */ + function setUp() { + global $global_vars; + global $INCLUDE_DIR; + + $this->Mail = new PHPMailer(); + + $this->Mail->Priority = 3; + $this->Mail->Encoding = "8bit"; + $this->Mail->CharSet = "iso-8859-1"; + $this->Mail->From = "unit_test@phpmailer.sf.net"; + $this->Mail->FromName = "Unit Tester"; + $this->Mail->Sender = ""; + $this->Mail->Subject = "Unit Test"; + $this->Mail->Body = ""; + $this->Mail->AltBody = ""; + $this->Mail->WordWrap = 0; + $this->Mail->Host = $global_vars["mail_host"]; + $this->Mail->Port = 25; + $this->Mail->Helo = "localhost.localdomain"; + $this->Mail->SMTPAuth = false; + $this->Mail->Username = ""; + $this->Mail->Password = ""; + $this->Mail->PluginDir = $INCLUDE_DIR; + $this->Mail->AddReplyTo("no_reply@phpmailer.sf.net", "Reply Guy"); + $this->Mail->Sender = "unit_test@phpmailer.sf.net"; + + if(strlen($this->Mail->Host) > 0) + $this->Mail->Mailer = "smtp"; + else + { + $this->Mail->Mailer = "mail"; + $this->Sender = "unit_test@phpmailer.sf.net"; + } + + global $global_vars; + $this->SetAddress($global_vars["mail_to"], "Test User"); + if(strlen($global_vars["mail_cc"]) > 0) + $this->SetAddress($global_vars["mail_cc"], "Carbon User", "cc"); + } + + /** + * Run after each test is completed. + */ + function tearDown() { + // Clean global variables + $this->Mail = NULL; + $this->ChangeLog = array(); + $this->NoteLog = array(); + } + + + /** + * Build the body of the message in the appropriate format. + * @private + * @returns void + */ + function BuildBody() { + $this->CheckChanges(); + + // Determine line endings for message + if($this->Mail->ContentType == "text/html" || strlen($this->Mail->AltBody) > 0) + { + $eol = "
"; + $bullet = "
  • "; + $bullet_start = "
      "; + $bullet_end = "
    "; + } + else + { + $eol = "\n"; + $bullet = " - "; + $bullet_start = ""; + $bullet_end = ""; + } + + $ReportBody = ""; + + $ReportBody .= "---------------------" . $eol; + $ReportBody .= "Unit Test Information" . $eol; + $ReportBody .= "---------------------" . $eol; + $ReportBody .= "phpmailer version: " . $this->Mail->Version . $eol; + $ReportBody .= "Content Type: " . $this->Mail->ContentType . $eol; + + if(strlen($this->Mail->Host) > 0) + $ReportBody .= "Host: " . $this->Mail->Host . $eol; + + // If attachments then create an attachment list + if(count($this->Mail->attachment) > 0) + { + $ReportBody .= "Attachments:" . $eol; + $ReportBody .= $bullet_start; + for($i = 0; $i < count($this->Mail->attachment); $i++) + { + $ReportBody .= $bullet . "Name: " . $this->Mail->attachment[$i][1] . ", "; + $ReportBody .= "Encoding: " . $this->Mail->attachment[$i][3] . ", "; + $ReportBody .= "Type: " . $this->Mail->attachment[$i][4] . $eol; + } + $ReportBody .= $bullet_end . $eol; + } + + // If there are changes then list them + if(count($this->ChangeLog) > 0) + { + $ReportBody .= "Changes" . $eol; + $ReportBody .= "-------" . $eol; + + $ReportBody .= $bullet_start; + for($i = 0; $i < count($this->ChangeLog); $i++) + { + $ReportBody .= $bullet . $this->ChangeLog[$i][0] . " was changed to [" . + $this->ChangeLog[$i][1] . "]" . $eol; + } + $ReportBody .= $bullet_end . $eol . $eol; + } + + // If there are notes then list them + if(count($this->NoteLog) > 0) + { + $ReportBody .= "Notes" . $eol; + $ReportBody .= "-----" . $eol; + + $ReportBody .= $bullet_start; + for($i = 0; $i < count($this->NoteLog); $i++) + { + $ReportBody .= $bullet . $this->NoteLog[$i] . $eol; + } + $ReportBody .= $bullet_end; + } + + // Re-attach the original body + $this->Mail->Body .= $eol . $eol . $ReportBody; + } + + /** + * Check which default settings have been changed for the report. + * @private + * @returns void + */ + function CheckChanges() { + if($this->Mail->Priority != 3) + $this->AddChange("Priority", $this->Mail->Priority); + if($this->Mail->Encoding != "8bit") + $this->AddChange("Encoding", $this->Mail->Encoding); + if($this->Mail->CharSet != "iso-8859-1") + $this->AddChange("CharSet", $this->Mail->CharSet); + if($this->Mail->Sender != "") + $this->AddChange("Sender", $this->Mail->Sender); + if($this->Mail->WordWrap != 0) + $this->AddChange("WordWrap", $this->Mail->WordWrap); + if($this->Mail->Mailer != "mail") + $this->AddChange("Mailer", $this->Mail->Mailer); + if($this->Mail->Port != 25) + $this->AddChange("Port", $this->Mail->Port); + if($this->Mail->Helo != "localhost.localdomain") + $this->AddChange("Helo", $this->Mail->Helo); + if($this->Mail->SMTPAuth) + $this->AddChange("SMTPAuth", "true"); + } + + /** + * Adds a change entry. + * @private + * @returns void + */ + function AddChange($sName, $sNewValue) { + $cur = count($this->ChangeLog); + $this->ChangeLog[$cur][0] = $sName; + $this->ChangeLog[$cur][1] = $sNewValue; + } + + /** + * Adds a simple note to the message. + * @public + * @returns void + */ + function AddNote($sValue) { + $this->NoteLog[] = $sValue; + } + + /** + * Adds all of the addresses + * @public + * @returns void + */ + function SetAddress($sAddress, $sName = "", $sType = "to") { + switch($sType) + { + case "to": + $this->Mail->AddAddress($sAddress, $sName); + break; + case "cc": + $this->Mail->AddCC($sAddress, $sName); + break; + case "bcc": + $this->Mail->AddBCC($sAddress, $sName); + break; + } + } + + ///////////////////////////////////////////////// + // UNIT TESTS + ///////////////////////////////////////////////// + + /** + * Try a plain message. + */ + function test_WordWrap() { + + $this->Mail->WordWrap = 40; + $my_body = "Here is the main body of this message. It should " . + "be quite a few lines. It should be wrapped at the " . + "40 characters. Make sure that it is."; + $nBodyLen = strlen($my_body); + $my_body .= "\n\nThis is the above body length: " . $nBodyLen; + + $this->Mail->Body = $my_body; + $this->Mail->Subject .= ": Wordwrap"; + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * Try a plain message. + */ + function test_Low_Priority() { + + $this->Mail->Priority = 5; + $this->Mail->Body = "Here is the main body. There should be " . + "a reply to address in this message."; + $this->Mail->Subject .= ": Low Priority"; + $this->Mail->AddReplyTo("nobody@nobody.com", "Nobody (Unit Test)"); + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * Simple plain file attachment test. + */ + function test_Multiple_Plain_FileAttachment() { + + $this->Mail->Body = "Here is the text body"; + $this->Mail->Subject .= ": Plain + Multiple FileAttachments"; + + if(!$this->Mail->AddAttachment("test.png")) + { + $this->assert(false, $this->Mail->ErrorInfo); + return; + } + + if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt")) + { + $this->assert(false, $this->Mail->ErrorInfo); + return; + } + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * Simple plain string attachment test. + */ + function test_Plain_StringAttachment() { + + $this->Mail->Body = "Here is the text body"; + $this->Mail->Subject .= ": Plain + StringAttachment"; + + $sAttachment = "These characters are the content of the " . + "string attachment.\nThis might be taken from a ". + "database or some other such thing. "; + + $this->Mail->AddStringAttachment($sAttachment, "string_attach.txt"); + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * Plain quoted-printable message. + */ + function test_Quoted_Printable() { + + $this->Mail->Body = "Here is the main body"; + $this->Mail->Subject .= ": Plain + Quoted-printable"; + $this->Mail->Encoding = "quoted-printable"; + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * Try a plain message. + */ + function test_Html() { + + $this->Mail->IsHTML(true); + $this->Mail->Subject .= ": HTML only"; + + $this->Mail->Body = "This is a test message written in HTML.
    " . + "Go to " . + "http://phpmailer.sourceforge.net/ for new versions of " . + "phpmailer.

    Thank you!"; + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * Simple HTML and attachment test + */ + function test_HTML_Attachment() { + + $this->Mail->Body = "This is the HTML part of the email."; + $this->Mail->Subject .= ": HTML + Attachment"; + $this->Mail->IsHTML(true); + + if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt")) + { + $this->assert(false, $this->Mail->ErrorInfo); + return; + } + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * An embedded attachment test. + */ + function test_Embedded_Image() { + + $this->Mail->Body = "Embedded Image: \"phpmailer\"" . + "Here is an image!"; + $this->Mail->Subject .= ": Embedded Image"; + $this->Mail->IsHTML(true); + + if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png", + "base64", "image/png")) + { + $this->assert(false, $this->Mail->ErrorInfo); + return; + } + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * An embedded attachment test. + */ + function test_Multi_Embedded_Image() { + + $this->Mail->Body = "Embedded Image: \"phpmailer\"" . + "Here is an image!"; + $this->Mail->Subject .= ": Embedded Image + Attachment"; + $this->Mail->IsHTML(true); + + if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png", + "base64", "image/png")) + { + $this->assert(false, $this->Mail->ErrorInfo); + return; + } + + if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt")) + { + $this->assert(false, $this->Mail->ErrorInfo); + return; + } + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * Simple multipart/alternative test. + */ + function test_AltBody() { + + $this->Mail->Body = "This is the HTML part of the email."; + $this->Mail->AltBody = "Here is the text body of this message. " . + "It should be quite a few lines. It should be wrapped at the " . + "40 characters. Make sure that it is."; + $this->Mail->WordWrap = 40; + $this->AddNote("This is a mulipart alternative email"); + $this->Mail->Subject .= ": AltBody + Word Wrap"; + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + /** + * Simple HTML and attachment test + */ + function test_AltBody_Attachment() { + + $this->Mail->Body = "This is the HTML part of the email."; + $this->Mail->AltBody = "This is the text part of the email."; + $this->Mail->Subject .= ": AltBody + Attachment"; + $this->Mail->IsHTML(true); + + if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt")) + { + $this->assert(false, $this->Mail->ErrorInfo); + return; + } + + $this->BuildBody(); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + + $fp = fopen("message.txt", "w"); + fwrite($fp, $this->Mail->CreateHeader() . $this->Mail->CreateBody()); + fclose($fp); + } + + function test_MultipleSend() { + $this->Mail->Body = "Sending two messages without keepalive"; + $this->BuildBody(); + $subject = $this->Mail->Subject; + + $this->Mail->Subject = $subject . ": SMTP 1"; + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + + $this->Mail->Subject = $subject . ": SMTP 2"; + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + function test_SmtpKeepAlive() { + $this->Mail->Body = "This was done using the SMTP keep-alive."; + $this->BuildBody(); + $subject = $this->Mail->Subject; + + $this->Mail->SMTPKeepAlive = true; + $this->Mail->Subject = $subject . ": SMTP keep-alive 1"; + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + + $this->Mail->Subject = $subject . ": SMTP keep-alive 2"; + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + $this->Mail->SmtpClose(); + } + + /** + * Tests this denial of service attack: + * http://www.cybsec.com/vuln/PHPMailer-DOS.pdf + */ + function test_DenialOfServiceAttack() { + $this->Mail->Body = "This should no longer cause a denial of service."; + $this->BuildBody(); + + $this->Mail->Subject = str_repeat("A", 998); + $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); + } + + function test_Error() { + $this->Mail->Subject .= ": This should be sent"; + $this->BuildBody(); + $this->Mail->ClearAllRecipients(); // no addresses should cause an error + $this->assert($this->Mail->IsError() == false, "Error found"); + $this->assert($this->Mail->Send() == false, "Send succeeded"); + $this->assert($this->Mail->IsError(), "No error found"); + $this->assertEquals('You must provide at least one ' . + 'recipient email address.', $this->Mail->ErrorInfo); + $this->Mail->AddAddress(get("mail_to")); + $this->assert($this->Mail->Send(), "Send failed"); + } +} + +/** + * Create and run test instance. + */ + +if(isset($HTTP_GET_VARS)) + $global_vars = $HTTP_GET_VARS; +else + $global_vars = $_REQUEST; + +if(isset($global_vars["submitted"])) +{ + echo "Test results:
    "; + $suite = new TestSuite( "phpmailerTest" ); + + $testRunner = new TestRunner; + $testRunner->run($suite); + echo "


    "; +} + +function get($sName) { + global $global_vars; + if(isset($global_vars[$sName])) + return $global_vars[$sName]; + else + return ""; +} + +?> + + + +

    phpmailer Unit Test

    +By entering a SMTP hostname it will automatically perform tests with SMTP. + +
    + +To Address: "/> +
    +Cc Address: "/> +
    +SMTP Hostname: "/> +

    + + +

    + + diff --git a/includes/phpmailer-1.73/test/phpunit.php b/includes/phpmailer-1.73/test/phpunit.php new file mode 100644 index 000000000..1d508680c --- /dev/null +++ b/includes/phpmailer-1.73/test/phpunit.php @@ -0,0 +1,376 @@ + +// OntoSys, Inc +// +// $Id: phpunit.php,v 1.1 2002/03/30 19:32:17 bmatzelle Exp $ + +// Copyright (c) 2000 Fred Yankowski + +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, copy, +// modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE | + E_CORE_ERROR | E_CORE_WARNING); + +/* +interface Test { + function run(&$aTestResult); + function countTestCases(); +} +*/ + +function trace($msg) { + return; + print($msg); + flush(); +} + + +class Exception { + /* Emulate a Java exception, sort of... */ + var $message; + function Exception($message) { + $this->message = $message; + } + function getMessage() { + return $this->message; + } +} + +class Assert { + function assert($boolean, $message=0) { + if (! $boolean) + $this->fail($message); + } + + function assertEquals($expected, $actual, $message=0) { + if ($expected != $actual) { + $this->failNotEquals($expected, $actual, "expected", $message); + } + } + + function assertRegexp($regexp, $actual, $message=false) { + if (! preg_match($regexp, $actual)) { + $this->failNotEquals($regexp, $actual, "pattern", $message); + } + } + + function failNotEquals($expected, $actual, $expected_label, $message=0) { + // Private function for reporting failure to match. + $str = $message ? ($message . ' ') : ''; + $str .= "($expected_label/actual)
    "; + $htmlExpected = htmlspecialchars($expected); + $htmlActual = htmlspecialchars($actual); + $str .= sprintf("
    %s\n--------\n%s
    ", + $htmlExpected, $htmlActual); + $this->fail($str); + } +} + +class TestCase extends Assert /* implements Test */ { + /* Defines context for running tests. Specific context -- such as + instance variables, global variables, global state -- is defined + by creating a subclass that specializes the setUp() and + tearDown() methods. A specific test is defined by a subclass + that specializes the runTest() method. */ + var $fName; + var $fResult; + var $fExceptions = array(); + + function TestCase($name) { + $this->fName = $name; + } + + function run($testResult=0) { + /* Run this single test, by calling the run() method of the + TestResult object which will in turn call the runBare() method + of this object. That complication allows the TestResult object + to do various kinds of progress reporting as it invokes each + test. Create/obtain a TestResult object if none was passed in. + Note that if a TestResult object was passed in, it must be by + reference. */ + if (! $testResult) + $testResult = $this->_createResult(); + $this->fResult = $testResult; + $testResult->run(&$this); + $this->fResult = 0; + return $testResult; + } + + function countTestCases() { + return 1; + } + + function runTest() { + $name = $this->name(); + // Since isset($this->$name) is false, no way to run defensive checks + $this->$name(); + } + + function setUp() /* expect override */ { + //print("TestCase::setUp()
    \n"); + } + + function tearDown() /* possible override */ { + //print("TestCase::tearDown()
    \n"); + } + + //////////////////////////////////////////////////////////////// + + + function _createResult() /* protected */ { + /* override this to use specialized subclass of TestResult */ + return new TestResult; + } + + function fail($message=0) { + //printf("TestCase::fail(%s)
    \n", ($message) ? $message : ''); + /* JUnit throws AssertionFailedError here. We just record the + failure and carry on */ + $this->fExceptions[] = new Exception(&$message); + } + + function error($message) { + /* report error that requires correction in the test script + itself, or (heaven forbid) in this testing infrastructure */ + printf('ERROR: ' . $message . '
    '); + $this->fResult->stop(); + } + + function failed() { + return count($this->fExceptions); + } + + function getExceptions() { + return $this->fExceptions; + } + + function name() { + return $this->fName; + } + + function runBare() { + $this->setup(); + $this->runTest(); + $this->tearDown(); + } +} + + +class TestSuite /* implements Test */ { + /* Compose a set of Tests (instances of TestCase or TestSuite), and + run them all. */ + var $fTests = array(); + + function TestSuite($classname=false) { + if ($classname) { + // Find all methods of the given class whose name starts with + // "test" and add them to the test suite. We are just _barely_ + // able to do this with PHP's limited introspection... Note + // that PHP seems to store method names in lower case, and we + // have to avoid the constructor function for the TestCase class + // superclass. This will fail when $classname starts with + // "Test" since that will have a constructor method that will + // get matched below and then treated (incorrectly) as a test + // method. So don't name any TestCase subclasses as "Test..."! + if (floor(phpversion()) >= 4) { + // PHP4 introspection, submitted by Dylan Kuhn + $names = get_class_methods($classname); + while (list($key, $method) = each($names)) { + if (preg_match('/^test/', $method) && $method != "testcase") { + $this->addTest(new $classname($method)); + } + } + } + else { + $dummy = new $classname("dummy"); + $names = (array) $dummy; + while (list($key, $value) = each($names)) { + $type = gettype($value); + if ($type == "user function" && preg_match('/^test/', $key) + && $key != "testcase") { + $this->addTest(new $classname($key)); + } + } + } + } + } + + function addTest($test) { + /* Add TestCase or TestSuite to this TestSuite */ + $this->fTests[] = $test; + } + + function run(&$testResult) { + /* Run all TestCases and TestSuites comprising this TestSuite, + accumulating results in the given TestResult object. */ + reset($this->fTests); + while (list($na, $test) = each($this->fTests)) { + if ($testResult->shouldStop()) + break; + $test->run(&$testResult); + } + } + + function countTestCases() { + /* Number of TestCases comprising this TestSuite (including those + in any constituent TestSuites) */ + $count = 0; + reset($fTests); + while (list($na, $test_case) = each($this->fTests)) { + $count += $test_case->countTestCases(); + } + return $count; + } +} + + +class TestFailure { + /* Record failure of a single TestCase, associating it with the + exception(s) that occurred */ + var $fFailedTestName; + var $fExceptions; + + function TestFailure(&$test, &$exceptions) { + $this->fFailedTestName = $test->name(); + $this->fExceptions = $exceptions; + } + + function getExceptions() { + return $this->fExceptions; + } + function getTestName() { + return $this->fFailedTestName; + } +} + + +class TestResult { + /* Collect the results of running a set of TestCases. */ + var $fFailures = array(); + var $fRunTests = 0; + var $fStop = false; + + function TestResult() { } + + function _endTest($test) /* protected */ { + /* specialize this for end-of-test action, such as progress + reports */ + } + + function getFailures() { + return $this->fFailures; + } + + function run($test) { + /* Run a single TestCase in the context of this TestResult */ + $this->_startTest($test); + $this->fRunTests++; + + $test->runBare(); + + /* this is where JUnit would catch AssertionFailedError */ + $exceptions = $test->getExceptions(); + if ($exceptions) + $this->fFailures[] = new TestFailure(&$test, &$exceptions); + $this->_endTest($test); + } + + function countTests() { + return $this->fRunTests; + } + + function shouldStop() { + return $this->fStop; + } + + function _startTest($test) /* protected */ { + /* specialize this for start-of-test actions */ + } + + function stop() { + /* set indication that the test sequence should halt */ + $fStop = true; + } + + function countFailures() { + return count($this->fFailures); + } +} + + +class TextTestResult extends TestResult { + /* Specialize TestResult to produce text/html report */ + function TextTestResult() { + $this->TestResult(); // call superclass constructor + } + + function report() { + /* report result of test run */ + $nRun = $this->countTests(); + $nFailures = $this->countFailures(); + printf("

    %s test%s run
    ", $nRun, ($nRun == 1) ? '' : 's'); + printf("%s failure%s.
    \n", $nFailures, ($nFailures == 1) ? '' : 's'); + if ($nFailures == 0) + return; + + print("

      \n"); + $failures = $this->getFailures(); + while (list($i, $failure) = each($failures)) { + $failedTestName = $failure->getTestName(); + printf("
    1. %s\n", $failedTestName); + + $exceptions = $failure->getExceptions(); + print("
        "); + while (list($na, $exception) = each($exceptions)) + printf("
      • %s\n", $exception->getMessage()); + print("
      "); + } + print("
    \n"); + } + + function _startTest($test) { + printf("%s ", $test->name()); + flush(); + } + + function _endTest($test) { + $outcome = $test->failed() + ? "FAIL" + : "ok"; + printf("$outcome
    \n"); + flush(); + } +} + + +class TestRunner { + /* Run a suite of tests and report results. */ + function run($suite) { + $result = new TextTestResult; + $suite->run($result); + $result->report(); + } +} + +?> diff --git a/includes/phpmailer-1.73/test/test.png b/includes/phpmailer-1.73/test/test.png new file mode 100644 index 0000000000000000000000000000000000000000..02de5a7aa3507dcec1e4349520ba3e8d8f7da4d6 GIT binary patch literal 1280 zcmeAS@N?(olHy`uVBq!ia0vp^tw5~K!2~4N<;e5_DVB6cUq=Rpjs4tz5?O(Kwj^(N z7lt)J7K6`}lP`c2XMsm#F#`j)5C}6~x?A@LD9B#o>FdgViCLDPN5AUi^*W$IwVp1H zAr*7p&f1@M+e+k^|GQka$^gd77pzXAva3|tw#@qU#D{GY+ZFCDwG1cEE579X#FX@$ z>FgwH&r=2B{84unZkVCiZ2N-g>I8;;hdm>XmCd=c^yvZlCI_MawKnqnCmAdw)?ZJ! z(AIo@e{`ec)BgLq2R?8-ZjY0&|8nTZLh)n#dkyMdw0?Bf?~$)c{BwaDo7B9IhZmN_ zh%E0uYH;3Pyt^=vfg$lt&fag6k0_-)7M*|G)$q*c&0lYID|HLld!D2e%F$=%SRuTY%I{2>Z{`vAZ>PV)}|}nN;w+U!QCIM z%dF3Q&h>n}=zwNb};ib(x>mdBz9tFM3#&2Z?-_RqK4ZYm+e055CrlA)a-UVpFR%v^PFVTssrYu_S`qZP4zZaccRhpt_9sylhjwpf+< z?Unnqytf|Oq_caOTOat-{V}jySM+ZLcry9!jFnfUInkZcQYhKM%L?N z&;!?rRVNa)m=6Fgxg2tDuEA9ET|#r_i?D{h*tzce28%w4!-tRgPZEBrw|%nx;k`%s zmfAYKyY+2b?$bqXn&r8-ISa3Ed-Xbga%WV_rQePT^77kD|K`Wu-}?6KQP#RWxwn}c zwyiVVWYOa4alSPF_O^E6V7L1351I46v}`n=eDeF}VulLinF~}7&9IfYQ}efLn#`@T z=<5}~4|Vgtn(q9aBQi8J`g;4eTzYtu=Z+lD zh7)#nVsqqgZL{jmKBw#CAyMYrd^hQ7_PL8!4qsoNfBW0BM@jw%&i;>o+4}Q$48E+4 clFJ|2pD+7py#+`y85}Sb4q9e08zkVlmGw# literal 0 HcmV?d00001 diff --git a/includes/urlencode.js b/includes/urlencode.js new file mode 100644 index 000000000..b9eda3ed7 --- /dev/null +++ b/includes/urlencode.js @@ -0,0 +1,78 @@ +/** +* +* URL encode / decode +* http://www.webtoolkit.info/ +* +**/ + +var Url = { + + // public method for url encoding + encode : function (string) { + return escape(this._utf8_encode(string)); + }, + + // public method for url decoding + decode : function (string) { + return this._utf8_decode(unescape(string)); + }, + + // private method for UTF-8 encoding + _utf8_encode : function (string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; + }, + + // private method for UTF-8 decoding + _utf8_decode : function (utftext) { + var string = ""; + var i = 0; + var c = c1 = c2 = 0; + + while ( i < utftext.length ) { + + c = utftext.charCodeAt(i); + + if (c < 128) { + string += String.fromCharCode(c); + i++; + } + else if((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i+1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } + else { + c2 = utftext.charCodeAt(i+1); + c3 = utftext.charCodeAt(i+2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + + } + + return string; + } + +} \ No newline at end of file diff --git a/modules/base/classes/abstractJpGraphView.php b/modules/base/classes/abstractJpGraphView.php new file mode 100644 index 000000000..e105c2dc9 --- /dev/null +++ b/modules/base/classes/abstractJpGraphView.php @@ -0,0 +1,106 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_abstractJpGraphView extends owa_base { + + var $data; + + var $graph; + + var $api; + + function owa_abstractJpGraphView($params = array()) { + + $this->owa_base(); + + return; + } + + function construct() { + + return false; + } + + function assembleView($data) { + + $this->data = $data; + + $this->e->debug('Assembling view: '.get_class($this)); + + // creates graph object and assembles caller params. + $this->construct($this->data); + + // creates JP graph objects and sets properties. + $this->graph->construct(); + + // outputs the graph + + $this->graph->graph->Stroke(); + + //debug_print_backtrace(); + + return; + + } + + function makeDateArray($result, $format) { + + $timestamps = array(); + + foreach ($result as $row) { + + $timestamps[]= mktime(0,0,0,$row['month'],$row['day'],$row['year']); + + } + + return $this->makeDates($timestamps, $format); + } + + function makeDates($timestamps, $format) { + + sort($timestamps); + + $new_dates = array(); + + foreach ($timestamps as $timestamp) { + + $new_dates[] = date($format, $timestamp); + + } + + return $new_dates; + + } +} + +?> \ No newline at end of file diff --git a/modules/base/classes/column.php b/modules/base/classes/column.php new file mode 100644 index 000000000..69a194d95 --- /dev/null +++ b/modules/base/classes/column.php @@ -0,0 +1,46 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + + class owa_dbColumn { + + var $value; + + var $foriegn_key; + + var $auto_incement; + + function owa_dbColumn() { + + return; + } + + } + +?> \ No newline at end of file diff --git a/modules/base/classes/column2.php b/modules/base/classes/column2.php new file mode 100644 index 000000000..026a5e8f3 --- /dev/null +++ b/modules/base/classes/column2.php @@ -0,0 +1,19 @@ + + \ No newline at end of file diff --git a/modules/base/classes/event.php b/modules/base/classes/event.php new file mode 100644 index 000000000..f770c778c --- /dev/null +++ b/modules/base/classes/event.php @@ -0,0 +1,373 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_event extends owa_base { + + /** + * Event Properties + * + * @var array + */ + var $properties = array(); + + /** + * Event Queue + * + * @var object + */ + var $eq; + + /** + * State + * + * @var string + */ + var $state; + + /** + * Time since last request. + * + * Used to tell if a new session should be created. + * + * @var integer $time_since_lastreq + */ + var $time_since_lastreq; + + /** + * Event guid + * + * @var string + */ + var $guid; + + /** + * Constructor + * @access public + */ + function owa_event() { + + $this->owa_base(); + + // Load event queue + $this->eq = &eventQueue::get_instance(); + + // Set GUID for event + $this->guid = $this->set_guid(); + $this->properties['guid'] = $this->guid; + + // Assume browser untill told otherwise + $this->properties['is_browser'] = true; + + return; + } + + /** + * Sets time related event properties + * + * @param integer $timestamp + */ + function setTime($timestamp = '') { + + $this->properties['timestamp'] = $this->properties['REQUEST_TIME']; + $this->properties['year'] = date("Y", $this->properties['timestamp']); + $this->properties['month'] = date("n", $this->properties['timestamp']); + $this->properties['day'] = date("d", $this->properties['timestamp']); + $this->properties['dayofweek'] = date("D", $this->properties['timestamp']); + $this->properties['dayofyear'] = date("z", $this->properties['timestamp']); + $this->properties['weekofyear'] = date("W", $this->properties['timestamp']); + $this->properties['hour'] = date("G", $this->properties['timestamp']); + $this->properties['minute'] = date("i", $this->properties['timestamp']); + $this->properties['second'] = date("s", $this->properties['timestamp']); + + //epoc time + list($msec, $sec) = explode(" ", microtime()); + $this->properties['sec'] = $sec; + $this->properties['msec'] = $msec; + + // Calc time sinse the last request + $this->time_since_lastreq = $this->timeSinceLastRequest(); + + } + + function setCookieDomain($domain) { + + $cookie_domain = $domain; + + return $cookie_domain; + + } + + /** + * Determines the time since the last request from this borwser + * + * @access private + * @return integer + */ + function timeSinceLastRequest() { + + return ($this->properties['timestamp'] - $this->properties['last_req']); + + } + + function setBrowser() { + + $this->properties['browser_type'] = $this->properties['browscap_Browser']; + + $this->properties['browser'] = $this->properties['browscap_Browser'] . ' ' . $this->properties['browscap_Version']; + + } + + /** + * Logs event to event queue + * + */ + function log() { + + $this->e->debug('Logging '.$this->state.' to event queue...'); + return $this->eq->log($this->properties, $this->state); + + } + + function logEvent($event_type, $properties) { + + $this->e->debug('Logging '.$event_type.' to event queue...'); + return $this->eq->log($properties, $event_type); + + } + + /** + * Applies calling application specific properties to request + * + * @access private + * @param array $properties + */ + function _setProperties($properties = null) { + + if(!empty($properties)): + + foreach ($properties as $key => $value) { + if (!empty($value)): + $this->properties[$key] = $value; + endif; + + } + + // Map standard params to standard event property names + $this->properties['inbound_visitor_id'] = $properties[$this->config['visitor_param']]; + $this->properties['inbound_session_id'] = $properties[$this->config['session_param']]; + $this->properties['last_req'] = $properties[$this->config['last_request_param']]; + + endif; + + return; + } + + function cleanQueryStrings() { + + $properties = array('page_url', 'page_uri', 'target_url'); + + foreach ($properties as $key) { + + if (!empty($this->properties[$key])): + $this->properties[$key] = $this->stripDocumentUrl($this->properties[$key]); + endif; + + } + + return; + } + + + /** + * Get IP address from request + * + * @return string + * @access private + */ + function setIp() { + + if ($this->properties["HTTP_X_FORWARDED_FOR"]): + if ($this->properties["HTTP_CLIENT_IP"]): + $proxy = $this->properties["HTTP_CLIENT_IP"]; + else: + $proxy = $this->properties["REMOTE_ADDR"]; + endif; + + $this->properties['ip_address'] = $this->properties["HTTP_X_FORWARDED_FOR"]; + else: + if ($this->properties["HTTP_CLIENT_IP"]): + $this->properties['ip_address'] = $this->properties["HTTP_CLIENT_IP"]; + else: + $this->properties['ip_address'] = $this->properties["REMOTE_ADDR"]; + endif; + endif; + + return; + + } + + /** + * Create guid from process id + * + * @return integer + * @access private + */ + function set_guid() { + + return crc32(posix_getpid().$this->properties['sec'].$this->properties['msec'].rand()); + + } + + /** + * Create guid from string + * + * @param string $string + * @return integer + * @access private + */ + function set_string_guid($string) { + + return crc32(strtolower($string)); + + } + + /** + * Resolve hostname from IP address + * + * @access public + */ + function setHost($remote_host) { + + // See if host is already resolved + if (!empty($remote_host)): + // Use pre-resolved host if available + $fullhost = $remote_host; + else: + // Do the host lookup + if ($this->config['resolve_hosts'] = true): + $fullhost = gethostbyaddr($this->properties['ip_address']); + endif; + endif; + + if (!empty($fullhost)): + + // Sometimes gethostbyaddr returns 'unknown' or the IP address if it can't resolve the host + if ($fullhost != $this->properties['ip_address']): + + $host_array = explode('.', $fullhost); + + // resort so top level domain is first in array + $host_array = array_reverse($host_array); + + // array of tlds. this should probably be in the config array not here. + $tlds = array('com', 'net', 'org', 'gov', 'mil'); + + if (in_array($host_array[0], $tlds)): + $host = $host_array[1].".".$host_array[0]; + else: + $host = $host_array[2].".".$host_array[1].".".$host_array[0]; + endif; + + elseif ($fullhost == 'unknown'): + // Show the IP it's better than nothing. Should probably mark a dirty flag in the db + // when this happens so one can go back and try again later. + $host = $this->properties['ip_address']; + $fullhost = $this->properties['ip_address']; + else: + $host = $fullhost; + endif; + + $this->properties['host'] = $host; + $this->properties['full_host'] = $fullhost; + + endif; + + return; + } + + /** + * Strip a URL of certain GET params + * + * @return string + */ + function stripDocumentUrl($url) { + + if (!empty($this->config['query_string_filters'])): + $filters = str_replace(' ', '', $this->config['query_string_filters']); + $filters = explode(',', $filters); + else: + $filters = array(); + endif; + + // OWA specific params to filter + array_push($filters, $this->config['source_param']); + array_push($filters, $this->config['ns'].$this->config['feed_subscription_id']); + + //print_r($filters); + + foreach ($filters as $filter => $value) { + + $url = preg_replace( + '#\?' . + $value . + '=.*$|&' . + $value . + '=.*$|' . + $value . + '=.*&#msiU', + '', + $url + ); + + } + + //print $url; + + return $url; + + } + + /** + * Attempts to make a unique ID out of http request variables. + * This should only be used when storing state in a cookie is impossible. + * + * @return integer + */ + function setEnvGUID() { + + return crc32($this->properties['ua'].$this->properties['ip_address']); + + } +} + +?> \ No newline at end of file diff --git a/modules/base/classes/mailer.php b/modules/base/classes/mailer.php new file mode 100644 index 000000000..7afd7377f --- /dev/null +++ b/modules/base/classes/mailer.php @@ -0,0 +1,105 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_mailer extends PHPMailer { + + /** + * Configuration + * + * @var array + */ + var $config; + + /** + * Error Logger + * + * @var Object + */ + var $e; + + /** + * Constructor + * + * @return owa_mailer + */ + function owa_mailer() { + + $this->config = &owa_settings::get_settings(); + $this->e = &owa_error::get_instance(); + + if (!empty($this->config['mailer-from'])): + $this->From = $this->config['mailer-from']; + endif; + + if (!empty($this->config['mailer-fromName'])): + $this->FromName = $this->config['mailer-fromName']; + endif; + + if (!empty($this->config['mailer-host'])): + $this->Host = $this->config['mailer-host']; + endif; + + if (!empty($this->config['mailer-port'])): + $this->Port = $this->config['mailer-port']; + endif; + + if (!empty($this->config['mailer-smtpAuth'])): + $this->SMTPAuth = $this->config['mailer-smtpAuth']; + endif; + + if (!empty($this->config['mailer-username'])): + $this->Username = $this->config['mailer-username']; + endif; + + if (!empty($this->config['mailer-password'])): + $this->Password = $this->config['mailer-password']; + endif; + + return; + + } + + function sendMail() { + + if(!$this->Send()): + + return $this->e->debug(sprintf("Mailer Failure. Was not able to send to %s with subject of '%s'. Error Msgs: '%s'", $this->to, $this->Subject, $this->ErrorInfo)); + + else: + return $this->e->debug(sprintf("Mail sent to %s with the subject of '%s'.", $this->to, $this->Subject)); + endif; + + + } +} + +?> \ No newline at end of file diff --git a/modules/base/classes/requestEvent.php b/modules/base/classes/requestEvent.php new file mode 100644 index 000000000..c715d834c --- /dev/null +++ b/modules/base/classes/requestEvent.php @@ -0,0 +1,290 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_requestEvent extends owa_event { + + /** + * First hit flag + * + * Used to tell if this request was loaded from the first hit cookie. + * + * @var boolean + */ + var $first_hit = false; + + /** + * Constructor + * + * @return owa_request + * @access public + */ + function owa_requestEvent() { + + //Call to Parent Constructor + $this->owa_event(); + + return; + + } + + /** + * Log page request to event queue + * + */ + function log() { + + if ($this->state == 'page_request'): + if ($this->config['delay_first_hit'] == true): + if ($this->first_hit != true): + // If not, then make sure that there is an inbound visitor_id + if (empty($this->properties['inbound_visitor_id'])): + // Log request properties to a cookie for processing by a second request and return + $this->e->debug('Logging this request to first hit cookie.'); + return $this->log_first_hit(); + endif; + endif; + endif; + endif; + + $this->e->debug('Logging '.'base.'.$this->state.' to event queue...'); + + return $this->eq->log($this->properties, 'base.'.$this->state); + + } + + function setupNewRequest() { + + $this->bcap = new owa_browscap($this->properties['ua']); + + return; + } + + /** + * Load request properties from delayed first hit cookie. + * + * @param array $properties + * @access public + */ + function load_first_hit_properties($properties) { + + $this->properties['inbound_first_hit_properties'] = $properties; + $array = explode(",", $properties); + + foreach ($array as $key => $value): + + list($realkey, $realvalue) = split('=>', $value); + $this->properties[$realkey] = $realvalue; + + endforeach; + + // Mark the request to avoid logging it to the first hit cookie again + $this->first_hit = true; + + // Delete first_hit Cookie + setcookie($this->config['ns'].$this->config['first_hit_param'], '', time()-3600*24*365*30, "/", $this->properties['site']); + + return; + } + + + /** + * Log request properties of the first hit from a new visitor to a special cookie. + * + * This is used to determine if the request is made by an actual browser instead + * of a robot with spoofed or unknown user agent. + * + * @access public + */ + function log_first_hit() { + + $values = owa_lib::implode_assoc('=>', ',', $this->properties); + + setcookie($this->config['ns'].$this->config['first_hit_param'], $values, time()+3600*24*365*30, "/", $this->properties['site']); + + return true; + + } + + /** + * Assigns visitor IDs + * + */ + function assign_visitor() { + + // is this new visitor? + + if (empty($this->properties['inbound_visitor_id'])): + $this->set_new_visitor(); + else: + $this->properties['visitor_id'] = $this->properties['inbound_visitor_id']; + $this->properties['is_repeat_visitor'] = true; + endif; + + return; + } + + /** + * Make Session IDs + * + */ + function sessionize() { + + // check for inbound session id + if (!empty($this->properties['inbound_session_id'])): + + if (!empty($this->properties['last_req'])): + + if ($this->time_since_lastreq < $this->config['session_length']): + $this->properties['session_id'] = $this->properties['inbound_session_id']; + + else: + //prev session expired, because no hits in half hour. + $this->create_new_session($this->properties['visitor_id']); + endif; + else: + //session_id, but no last_req value. whats up with that? who cares. just make new session. + $this->create_new_session($this->properties['visitor_id']); + endif; + else: + //no session yet. make one. + $this->create_new_session($this->properties['visitor_id']); + endif; + + return; + } + + /** + * Creates new session id + * + * @param integer $visitor_id + * @access public + */ + function create_new_session($visitor_id) { + + //generate new session ID + $this->properties['session_id'] = $this->set_guid(); + + //mark entry page flag on current request + $this->properties['is_entry_page'] = true; + + //Set the session cookie + setcookie($this->config['ns'].$this->config['session_param'], $this->properties['session_id'], time()+3600*24*365*30, "/", $this->properties['site']); + + + return; + + } + + /** + * Creates new visitor + * + * @access public + * + */ + function set_new_visitor() { + + // Create guid + $this->properties['visitor_id'] = $this->set_guid(); + + // Set visitor cookie + setcookie($this->config['ns'].$this->config['visitor_param'], $this->properties['visitor_id'] , time()+3600*24*365*30, "/", $this->properties['site']); + + $this->properties['is_new_visitor'] = true; + + return; + + } + + /** + * Determine the operating system of the browser making the request + * + * @param string $user_agent + * @return string + */ + function determine_os($user_agent) { + + $matches = array( + 'Win.*NT 5\.0'=>'Windows 2000', + 'Win.*NT 5.1'=>'Windows XP', + 'Win.*(Vista|XP|2000|ME|NT|9.?)'=>'Windows $1', + 'Windows .*(3\.11|NT)'=>'Windows $1', + 'Win32'=>'Windows [prior to 1995]', + 'Linux 2\.(.?)\.'=>'Linux 2.$1.x', + 'Linux'=>'Linux [unknown version]', + 'FreeBSD .*-CURRENT$'=>'FreeBSD -CURRENT', + 'FreeBSD (.?)\.'=>'FreeBSD $1.x', + 'NetBSD 1\.(.?)\.'=>'NetBSD 1.$1.x', + '(Free|Net|Open)BSD'=>'$1BSD [unknown]', + 'HP-UX B\.(10|11)\.'=>'HP-UX B.$1.x', + 'IRIX(64)? 6\.'=>'IRIX 6.x', + 'SunOS 4\.1'=>'SunOS 4.1.x', + 'SunOS 5\.([4-6])'=>'Solaris 2.$1.x', + 'SunOS 5\.([78])'=>'Solaris $1.x', + 'Mac_PowerPC'=>'Mac OS [PowerPC]', + 'Mac OS X'=>'Mac OS X', + 'X11'=>'UNIX [unknown]', + 'Unix'=>'UNIX [unknown]', + 'BeOS'=>'BeOS [unknown]', + 'QNX'=>'QNX [unknown]', + ); + $uas = array_map(create_function('$a', 'return "#.*$a.*#";'), array_keys($matches)); + + return preg_replace($uas, array_values($matches), $user_agent); + + } + + function determine_os_new($user_agent) { + + $db = new ini_db($this->config['os.ini'], $sections = true); + $string = $db->fetch_replace($user_agent); + + return $string; + } + + function setOs($os) { + + if (!empty($os)): + $this->properties['os'] = $os; + else: + $this->properties['os'] = $this->determine_os($this->properties['ua']); + endif; + } + + + + + +} + +?> diff --git a/modules/base/classes/test.php b/modules/base/classes/test.php new file mode 100644 index 000000000..07713d8a3 --- /dev/null +++ b/modules/base/classes/test.php @@ -0,0 +1,34 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + + + + ?> + \ No newline at end of file diff --git a/modules/base/data/php_browscap.ini b/modules/base/data/php_browscap.ini new file mode 100644 index 000000000..e89c2fd77 --- /dev/null +++ b/modules/base/data/php_browscap.ini @@ -0,0 +1,16927 @@ +;;; Provided courtesy of http://browsers.garykeith.com +;;; Created on November 12, 2006 at 7:46:08 PM GMT +;;; http://forums.garykeith.com/changes +;;; +;;; ATTENTION SOFTWARE DEVELOPERS +;;; There are numerous upcoming changes to browscap.ini in the works. +;;; Please read the Developers forum to see how the changes will impact you! +;;; http://forums.garykeith.com/developers + +[GJK_Browscap_Version] +Version=3850 +Released=Sun, 12 Nov 2006 19:46:08 -0000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties + +[DefaultProperties] +Browser="DefaultProperties" +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=false +IFrames=false +Tables=false +Cookies=false +BackgroundSounds=false +AuthenticodeUpdate= +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +Stripper=false +isBanned=false +WAP=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CSS=0 +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +netCLR=false +ClrVersion=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask + +[Ask] +Parent=DefaultProperties +Browser="Ask" +Frames=true +Tables=true +Crawler=true + +[Mozilla/2.0 (compatible; Ask Jeeves)] +Parent=Ask +Browser="AskJeeves" + +[Mozilla/2.0 (compatible; Ask Jeeves/Teoma*)] +Parent=Ask +Browser="Teoma" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fast/AllTheWeb + +[Fast/AllTheWeb] +Parent=DefaultProperties +Browser="Fast/AllTheWeb" + +[*FAST Enterprise Crawler*] +Parent=Fast/AllTheWeb +Browser="FAST Enterprise Crawler" + +[FAST Data Search Document Retriever/4.0*] +Parent=Fast/AllTheWeb +Browser="FAST Data Search Document Retriever" + +[FAST MetaWeb Crawler (helpdesk at fastsearch dot com)] +Parent=Fast/AllTheWeb +Browser="FAST MetaWeb Crawler" + +[Fast PartnerSite Crawler*] +Parent=Fast/AllTheWeb +Browser="FAST PartnerSite" + +[FAST-WebCrawler/*] +Parent=Fast/AllTheWeb +Browser="FAST-WebCrawler" + +[FAST-WebCrawler/*/FirstPage*] +Parent=Fast/AllTheWeb +Browser="FAST-WebCrawler/FirstPage" + +[FAST-WebCrawler/*/Fresh*] +Parent=Fast/AllTheWeb +Browser="FAST-WebCrawler/Fresh" + +[FAST-WebCrawler/*/PartnerSite*] +Parent=Fast/AllTheWeb +Browser="FAST PartnerSite" + +[FAST-WebCrawler/*?Multimedia*] +Parent=Fast/AllTheWeb +Browser="FAST-WebCrawler/Multimedia" + +[FastSearch Web Crawler for*] +Parent=Fast/AllTheWeb +Browser="FastSearch Web Crawler" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google + +[Google] +Parent=DefaultProperties +Browser="Google" +Frames=true +IFrames=true +Tables=true +JavaScript=true +Crawler=true + +[AdsBot-Google (*http://www.google.com/adsbot.html)] +Parent=Google +Browser="AdsBot-Google" + +[Feedfetcher-Google;*] +Parent=Google +Browser="Feedfetcher-Google" +isSyndicationReader=true + +[Google-Sitemaps/*] +Parent=Google +Browser="Google-Sitemaps" + +[Googlebot-Image/*] +Parent=Google +Browser="Googlebot-Image" +CDF=true + +[googlebot-urlconsole] +Parent=Google +Browser="googlebot-urlconsole" + +[Googlebot/2.1 (*http://www.google.com/bot.html)] +Parent=Google +Browser="Googlebot" + +[Googlebot/2.1 (*http://www.googlebot.com/bot.html)] +Parent=Google +Browser="Googlebot" + +[Googlebot/Test*] +Parent=Google +Browser="Googlebot/Test" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Search Appliance + +[gsa-crawler*] +Parent=Google +Browser="Google Search Appliance" +Stripper=true +isBanned=true + +[Mediapartners-Google/*] +Parent=Google +Browser="Mediapartners-Google" + +[Mozilla/4.0 (compatible; Google Desktop)] +Parent=Google +Browser="Google Desktop" + +[Mozilla/4.0 (compatible; GoogleToolbar*)] +Parent=Google +Browser="Google Toolbar" +Stripper=true +isBanned=true + +[Mozilla/5.0 (compatible; Googlebot/2.1; *http://www.google.com/bot.html)] +Parent=Google +Browser="Googlebot" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Inktomi + +[Inktomi] +Parent=DefaultProperties +Browser="Inktomi" +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0] +Parent=Inktomi +Browser="Mozilla/4.0" + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)] +Parent=Inktomi +Win32=true + +[Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)] +Parent=Inktomi +Browser="Yahoo! RobotStudy" +Stripper=true +isBanned=true + +[Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser="Yahoo! Directory Engine" + +[Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)] +Parent=Inktomi +Browser="Yahoo! Slurp China" + +[Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser="Yahoo! Slurp" + +[Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi +Browser="Slurp/cat" + +[Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi + +[Scooter/*] +Parent=Inktomi +Browser="Scooter" + +[Scooter/3.3Y!CrawlX] +Parent=Inktomi +Browser="Scooter/3.3Y!CrawlX" + +[slurp] +Parent=Inktomi +Browser="slurp" + +[Y!J-BSC/1.0*] +Parent=Inktomi +Browser="Y!J-BSC" +Stripper=true +isBanned=true + +[Y!J-SRD/1.0] +Parent=Inktomi +Browser="Y!J-SRD" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Yahoo Mindset] +Parent=Inktomi +Browser="Yahoo Mindset" + +[Yahoo! Mindset] +Parent=Inktomi +Browser="Yahoo! Mindset" + +[Yahoo-Blogs/*] +Parent=Inktomi +Browser="Yahoo-Blogs" + +[Yahoo-MMAudVid*] +Parent=Inktomi +Browser="Yahoo-MMAudVid" + +[Yahoo-MMCrawler*] +Parent=Inktomi +Browser="Yahoo-MMCrawler" +Stripper=true +isBanned=true + +[YahooFeedSeeker*] +Parent=Inktomi +Browser="YahooFeedSeeker" +isSyndicationReader=true +Crawler=false + +[YahooSeeker/*] +Parent=Inktomi +Browser="YahooSeeker" +WAP=true +isMobileDevice=true + +[YahooSeeker/CafeKelsa (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi +Browser="YahooSeeker/CafeKelsa" + +[YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi + +[YahooVideoSearch*] +Parent=Inktomi +Browser="YahooVideoSearch" + +[YahooYSMcm*] +Parent=Inktomi +Browser="YahooYSMcm" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycos + +[Lycos] +Parent=DefaultProperties +Browser="Lycos" +Frames=true +Tables=true +Crawler=true + +[Lycos*] +Parent=Lycos +Browser="Lycos" + +[Lycos-Proxy] +Parent=Lycos +Browser="Lycos-Proxy" + +[Lycos-Spider_(modspider)] +Parent=Lycos +Browser="Lycos-Spider_(modspider)" + +[Lycos-Spider_(T-Rex)] +Parent=Lycos +Browser="Lycos-Spider_(T-Rex)" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN + +[MSN] +Parent=DefaultProperties +Browser="MSN" +Frames=true +Tables=true +Crawler=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN lanshanbot + +[lanshanbot/1.0*] +Parent=MSN +Browser="lanshanbot" +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Images & Other Media + +[msnbot-media/1.0*] +Parent=MSN +Browser="msnbot-media" +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN News + +[msnbot-news/1.0*] +Parent=MSN +Browser="msnbot-news" +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN News Blog Aggregator + +[msnbot-NewsBlogs/1.0*] +Parent=MSN +Browser="msnbot-NewsBlogs" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Shopping + +[msnbot-Products/1.0*] +Parent=MSN +Browser="msnbot-Products" +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Search + +[msnbot/1.0*] +Parent=MSN +Browser="msnbot" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot/1.0-MM*] +Parent=MSN +Browser="msnbot-MM" +Version=1.00 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yahoo + +[Yahoo] +Parent=DefaultProperties +Browser="Yahoo" +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0 (compatible; Y!J; for robot study*)] +Parent=Yahoo +Browser="Y!J" + +[mp3Spider cn-search-devel at yahoo-inc dot com] +Parent=Yahoo +Browser="Yahoo! Media" +Stripper=true +isBanned=true + +[My Browser] +Parent=Yahoo +Browser="Yahoo! My Browser" + +[Y!OASIS/*] +Parent=Yahoo +Browser="Y!OASIS" +Stripper=true +isBanned=true + +[YahooYSMcm/2.0.0] +Parent=Yahoo +Browser="YahooYSMcm" +Stripper=true +isBanned=true + +[YRL_ODP_CRAWLER] +Parent=Yahoo +Browser="YRL_ODP_CRAWLER" +Stripper=true +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baidu + +[Baidu] +Parent=DefaultProperties +Browser="Baidu" +Frames=true +Tables=true +Crawler=true + +[Baiduspider*] +Parent=Baidu +Browser="BaiDu" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Onet.pl Szukaj + +[Onet.pl Szukaj] +Parent=DefaultProperties +Browser="Onet.pl Szukaj" +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Mozilla/5.0 (compatible; OnetSzukaj/5.0*] +Parent=Onet.pl Szukaj +Browser="OnetSzukaj" + +[Onet.pl SA, http://szukaj.onet.pl] +Parent=Onet.pl Szukaj +Browser="Onet.pl" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yandex + +[Yandex] +Parent=DefaultProperties +Browser="Yandex" +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)] +Parent=Yandex + +[Yandex/*] +Parent=Yandex + +[YandexBlog/*] +Parent=Yandex +Browser="YandexBlog" +isSyndicationReader=true + +[YandexSomething/*] +Parent=Yandex +Browser="YandexSomething" +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Accoona + +[Accoona] +Parent=DefaultProperties +Browser="Accoona" +Frames=true +IFrames=true +Tables=true +Crawler=true + +[accoona*] +Parent=Accoona +Browser="Accoona" + +[Accoona-AI-Agent/* (crawler at accoona dot com)] +Parent=Accoona +Browser="Accoona-AI-Agent" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Become + +[Become] +Parent=DefaultProperties +Browser="Become" +Frames=true +Tables=true +Crawler=true + +[*BecomeBot/*] +Parent=Become +Browser="BecomeBot" + +[*BecomeBot@exava.com*] +Parent=Become +Browser="BecomeBot" + +[*Exabot@exava.com*] +Parent=Become +Browser="Exabot" + +[MonkeyCrawl/*] +Parent=Become +Browser="MonkeyCrawl" + +[Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)] +Parent=Become +Browser="BecomeJPBot" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boitho + +[Boitho] +Parent=DefaultProperties +Browser="Boitho" +Frames=true +Tables=true +Crawler=true + +[boitho.com-dc/*] +Parent=Boitho +Browser="boitho.com-dc" + +[boitho.com-robot/*] +Parent=Boitho +Browser="boitho.com-robot" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Convera + +[Convera] +Parent=DefaultProperties +Browser="Convera" +Frames=true +Tables=true +Crawler=true + +[ConveraCrawler/*] +Parent=Convera +Browser="ConveraCrawler" + +[ConveraMultiMediaCrawler/0.1*] +Parent=Convera +Browser="ConveraMultiMediaCrawler" +Version=0.1 +MajorVer=0 +MinorVer=1 + +[CrawlConvera*] +Parent=Convera +Browser="CrawlConvera" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Envolk + +[Envolk] +Parent=DefaultProperties +Browser="Envolk" +Frames=true +IFrames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[envolk/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +[envolk?ITS?spider/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exalead + +[Exalead] +Parent=DefaultProperties +Browser="Exalead" +Frames=true +Tables=true +Crawler=true + +[Exabot-Images/1.0] +Parent=Exalead +Browser="Exabot-Images" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Exabot/2.0] +Parent=Exalead +Browser="Exabot" + +[Exabot/3.0] +Parent=Exalead +Browser="Exabot" +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Liberate + +[Exalead NG/*] +Parent=Exalead +Browser="Exalead NG" + +[ng/1.*] +Parent=Exalead +Browser="Exalead ng" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ng/2.*] +Parent=Exalead +Browser="Exalead ng" +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Excite + +[Excite] +Parent=DefaultProperties +Browser="Excite" +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0 (compatible; * sureseeker.com*)] +Parent=Excite +Browser="Excite sureseeker.com" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galaxy + +[Galaxy] +Parent=DefaultProperties +Browser="Galaxy" +Frames=true +Tables=true +Crawler=true + +[GalaxyBot/*0 (http://www.galaxy.com/galaxybot.html)] +Parent=Galaxy +Browser="GalaxyBot" + +[Mozilla/* (compatible; MSIE *; www.galaxy.com;*)] +Parent=Galaxy +Browser="GalaxyBot" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ilse + +[Ilse] +Parent=DefaultProperties +Browser="Ilse" +Frames=true +Tables=true +Crawler=true + +[IlseBot/1.0] +Parent=Ilse +Browser="IlseBot" +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Jayde Online + +[Jayde Online] +Parent=DefaultProperties +Browser="Jayde Online" +Frames=true +Tables=true +Crawler=true + +[ExactSeek Crawler/*] +Parent=Jayde Online +Browser="ExactSeek Crawler" + +[exactseek-pagereaper-* (crawler@exactseek.com)] +Parent=Jayde Online +Browser="exactseek-pagereaper" +Stripper=true +isBanned=true + +[exactseek.com] +Parent=Jayde Online +Browser="exactseek.com" + +[Jayde Crawler*] +Parent=Jayde Online +Browser="Jayde Crawler" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Naver + +[Naver] +Parent=DefaultProperties +Browser="Naver" +Frames=true +Tables=true +Crawler=true + +[Cowbot-* (NHN Corp*naver.com)] +Parent=Naver +Browser="Naver Cowbot" + +[Mozilla/4.0 (compatible; NaverBot/*; nhnbot@naver.com)] +Parent=Naver +Browser="Naver NaverBot" + +[NaverBot-* (NHN Corp*naver.com)] +Parent=Naver +Browser="Naver NHN Corp" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openfind + +[Openfind] +Parent=DefaultProperties +Browser="Openfind" +Frames=true +Tables=true +Crawler=true + +[Gaisbot/*] +Parent=Openfind + +[Openbot/*] +Parent=Openfind + +[Openfind data gatherer*] +Parent=Openfind + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Orbiter + +[Orbiter] +Parent=DefaultProperties +Browser="Orbiter" +Frames=true +Tables=true +Crawler=true + +[Orbiter (?http://www.dailyorbit.com/bot.htm)] +Parent=Orbiter + +[Orbiter (?http://www.thatsearchengine.com/bot.htm)] +Parent=Orbiter +Browser="Orbiter" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Relevare + +[Relevare] +Parent=DefaultProperties +Browser="Relevare" +Frames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[bumblebee/*] +Parent=Relevare +Browser="Relevare" + +[Bumblebee@relevare.com] +Parent=Relevare + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sensis + +[Sensis] +Parent=DefaultProperties +Browser="Sensis" +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Sensis Web Crawler (search_comments\at\sensis\dot\com\dot\au)] +Parent=Sensis +Browser="Sensis Web Crawler" + +[Sensis.com.au Web Crawler (search_comments\at\sensis\dot\com\dot\au)] +Parent=Sensis +Browser="Sensis.com.au Web Crawler" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shunix + +[Shunix] +Parent=DefaultProperties +Browser="Shunix" +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Mozilla/5.0 (compatible; ShunixBot/*)] +Parent=Shunix +Browser="ShunixBot" + +[XunBot/*] +Parent=Shunix +Browser="Shunix XunBot" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Singing Fish + +[Singing Fish] +Parent=DefaultProperties +Browser="Singing Fish" +Frames=true +Tables=true +Crawler=true + +[asterias/*] +Parent=Singing Fish + +[Mozilla/* (compatible; *Asterias Crawler v*)*] +Parent=Singing Fish + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Thunderstone + +[Thunderstone] +Parent=DefaultProperties +Browser="Thunderstone" +Frames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[*Webinator*] +Parent=Thunderstone +Browser="Webinator" + +[Mozilla/4.0 (compatible; T-H-U-N-D-E-R-S-T-O-N-E)] +Parent=Thunderstone +Browser="Texis" + +[T-H-U-N-D-E-R-S-T-O-N-E] +Parent=Thunderstone +Browser="Texis" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Vagabondo + +[Vagabondo] +Parent=DefaultProperties +Browser="Vagabondo" +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Mozilla/4.0 (compatible; Vagabondo/*)] +Parent=Vagabondo +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WISEnut + +[WISEnut] +Parent=DefaultProperties +Browser="WISEnut" +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0 compatible ZyBorg/* (wn*.zyborg@looksmart.net; http://www.WISEnutbot.com)] +Parent=WISEnut + +[Mozilla/4.0 compatible ZyBorg/* Dead Link Checker (*@looksmart.net; http://www.WISEnutbot.com)] +Parent=WISEnut +Browser="Dead Link Checker" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yoono + +[Yoono] +Parent=DefaultProperties +Browser="Yoono" +Frames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[Mozilla/5.0 (compatible; Yoono; http://www.yoono.com/)] +Parent=Yoono + +[yoono/* web-crawler/*] +Parent=Yoono + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ZoomInfo + +[ZoomInfo] +Parent=DefaultProperties +Browser="ZoomInfo" +Frames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[NextGenSearchBot 1 (for information visit http://about.zoominfo.com/PublicSite/NextGenSearchBot.asp)] +Parent=ZoomInfo +Browser="ZoomInfo" + +[NextGenSearchBot 1 (for information visit http://www.eliyon.com/NextGenSearchBot)] +Parent=ZoomInfo +Browser="Eliyon" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Directories + +[Directories] +Parent=DefaultProperties +Browser="Directories" +Frames=true +Tables=true +Crawler=true + +[acontbot] +Parent=Directories +Browser="acontbot" + +[aipbot/*] +Parent=Directories +Browser="aipbot" + +[Findexa Crawler (http://www.findexa.no/gulesider/article26548.ece)] +Parent=Directories +Browser="Findexa Crawler" + +[FirstGov.gov Search - POC:firstgov.webmasters@gsa.gov] +Parent=Directories +Browser="FirstGov.gov Search" + +[http://www.istarthere.com (spider@istarthere.com)] +Parent=Directories +Browser="Istartere.com" +Stripper=true +isBanned=true + +[Mackster (*)] +Parent=Directories +Browser="Mackster" + +[Misterbot] +Parent=Directories +Browser="Misterbot" + +[Mozilla/3.0 (INGRID/??? MT*] +Parent=Directories +Browser="Ilse" + +[Mozilla/4.0 (compatible; MSIE 5.0; www.galaxy.com;*)] +Parent=Directories +Browser="Galaxy/LOGIKA Search Engine" + +[Mozilla/5.0 (?http://www.toile.com/) ToileBot/*] +Parent=Directories +Browser="Toile" + +[Mozilla/5.0 (Votay bot/*)] +Parent=Directories +Browser="Votay" +Stripper=true +isBanned=true + +[Mozilla/6.0 (compatible; arameda.com Spider)] +Parent=Directories +Browser="Arameda" + +[NationalDirectory-*Spider/*] +Parent=Directories +Browser="National Directory" +Stripper=true +isBanned=true + +[Octopus/*] +Parent=Directories +Browser="Octopus" + +[OpenIntelligenceData/1.* (?http://www.worldwideweb-x.com/openData.html)] +Parent=Directories +Browser="World Wide Web Directory Project" +Version=1.0 +MajorVer=1 +MinorVer=0 +Stripper=true +isBanned=true + +[Poirot] +Parent=Directories +Browser="Poirot" + +[silk/1.*] +Parent=Directories +Browser="Slider" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebFindBot(http://www.web-find.com)] +Parent=Directories +Browser="WebFindBot" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General Crawlers + +[General Crawlers] +Parent=DefaultProperties +Browser="General Crawlers" +Frames=true +IFrames=true +Tables=true +Crawler=true + +[*heritrix/*] +Parent=General Crawlers +Browser="Wayback Machine" +Stripper=true +isBanned=true + +[*Networking4all*] +Parent=General Crawlers +Browser="Networking4all Bot" + +[Aport] +Parent=General Crawlers +Browser="Aport" + +[ArachnetAgent*] +Parent=General Crawlers + +[Art-Online.com*] +Parent=General Crawlers +Browser="Art-Online.com" + +[BeijingCrawler] +Parent=General Crawlers +Browser="BeijingCrawler" +Stripper=true +isBanned=true + +[Best Whois (http://www.bestwhois.net/)] +Parent=General Crawlers +Browser="Best Whois" + +[botlist] +Parent=General Crawlers +Browser="botlist" +Stripper=true +isBanned=true + +[Botswana*] +Parent=General Crawlers +Browser="Botswana" + +[BravoBrian BStop*] +Parent=General Crawlers +Browser="BravoBrian BStop" + +[BruinBot*] +Parent=General Crawlers +Browser="BruinBot" + +[CacheabilityEngine/*] +Parent=General Crawlers +Browser="CacheabilityEngine" + +[ccubee/*] +Parent=General Crawlers +Browser="ccubee" + +[CFM-SearchBot(http://www.cfm-search.com)] +Parent=General Crawlers +Browser="CFM-SearchBot" + +[CJNetworkQuality; http://www.cj.com/networkquality] +Parent=General Crawlers +Browser="CJNetworkQuality" +Frames=true +Tables=true +Cookies=true + +[Clushbot/*] +Parent=General Crawlers +Browser="Clushbot" +Stripper=true +isBanned=true + +[Comodo HTTP(S) Crawler*] +Parent=General Crawlers +Browser="Comodo HTTP Crawler" + +[Crawler Mozilla/4.0] +Parent=General Crawlers +Stripper=true +isBanned=true + +[CrawlWave/*] +Parent=General Crawlers +Browser="CrawlWave" + +[CSHttpClient/*] +Parent=General Crawlers +Browser="CSHttpClient" + +[CydralSpider/1.9*] +Parent=General Crawlers +Browser="Cydral Web Image Search" +Version=1.9 +MajorVer=1 +MinorVer=9 +Stripper=true +isBanned=true + +[Cynthia 1.0] +Parent=General Crawlers +Browser="Cynthia" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Diff-Engine*] +Parent=General Crawlers + +[DNSGroup/*] +Parent=General Crawlers +Browser="DNS Group Crawler" + +[DomainsDB.net MetaCrawler*] +Parent=General Crawlers +Browser="DomainsDB" + +[Drupal (*)] +Parent=General Crawlers +Browser="Drupal" + +[DTAAgent] +Parent=General Crawlers +Browser="DTAAgent" + +[Dumbot (version *)] +Parent=General Crawlers +Browser="Dumbfind" + +[EARTHCOM.info/*] +Parent=General Crawlers +Browser="EarthCom" + +[EDI/* (Edacious & Intelligent*)] +Parent=General Crawlers +Browser="Edacious & Intelligent Web Crawler" +Stripper=true +isBanned=true + +[EuripBot/*] +Parent=General Crawlers +Browser="Europe Internet Portal" + +[eventax/*] +Parent=General Crawlers +Browser="eventax" + +[FANGCrawl/*] +Parent=General Crawlers +Browser="FANGCrawl" +Stripper=true +isBanned=true + +[FRSEEKBOT] +Parent=General Crawlers +Browser="FRSEEKBOT" + +[Gaisbot*] +Parent=General Crawlers +Browser="Gaisbot" + +[GeoBot/*] +Parent=General Crawlers +Browser="GeoBot" + +[grub crawler] +Parent=General Crawlers +Browser="grub crawler" + +[htdig/*] +Parent=General Crawlers +Browser="ht://Dig" + +[HTTP-Test-Program] +Parent=General Crawlers +Browser="WebBug" +MajorVer=5 + +[HTTP/1.0] +Parent=General Crawlers +Browser="HTTP/1.0" + +[http://www.almaden.ibm.com/cs/crawler*] +Parent=General Crawlers +Browser="IBM's WebFountain" + +[ichiro/*] +Parent=General Crawlers +Browser="ichiro" + +[InnerpriseBot/*] +Parent=General Crawlers +Browser="InnerpriseBot" + +[InternetLinkAgent/*] +Parent=General Crawlers +Browser="InternetLinkAgent" + +[iVia Page Fetcher*] +Parent=General Crawlers +Browser="iVia Software" +Stripper=true +isBanned=true + +[JetBrains*] +Parent=General Crawlers +Browser="Omea Pro" + +[KakleBot - www.kakle.com/0.1] +Parent=General Crawlers +Browser="KakleBot" + +[Keyword Density/*] +Parent=General Crawlers +Browser="Keyword Density" + +[LetsCrawl.com/1.0*] +Parent=General Crawlers +Browser="LetsCrawl.com" +Stripper=true +isBanned=true + +[Lincoln State Web Browser] +Parent=General Crawlers +Browser="Lincoln State Web Browser" +Stripper=true +isBanned=true + +[Links4US-Crawler,*] +Parent=General Crawlers +Browser="Links4US-Crawler" +Stripper=true +isBanned=true + +[MapoftheInternet.com?(?http://MapoftheInternet.com)] +Parent=General Crawlers +Browser="MapoftheInternet" +Stripper=true +isBanned=true + +[Marvin v0.3] +Parent=General Crawlers +Browser="MedHunt" +Version=0.3 +MajorVer=0 +MinorVer=3 + +[Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)] +Parent=General Crawlers +Browser="Metaspinner/0.01" +Version=0.01 +MajorVer=0 +MinorVer=01 + +[Miva (AlgoFeedback@miva.com)] +Parent=General Crawlers +Browser="Miva" +Stripper=true +isBanned=true + +[moget/*] +Parent=General Crawlers +Browser="Goo" + +[Mozdex/0.7.2*] +Parent=General Crawlers +Browser="Mozdex" + +[Mozilla Compatible (MS IE 3.01 WinNT)] +Parent=General Crawlers +Stripper=true +isBanned=true + +[Mozilla/* (compatible; WebCapture*)] +Parent=General Crawlers +Browser="WebCapture" + +[Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)] +Parent=General Crawlers +Browser="Vonna.com" +Stripper=true +isBanned=true + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows95)] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MSIE 4.5; Windows 98; )] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MyFamilyBot/*)] +Parent=General Crawlers +Browser="MyFamilyBot" + +[Mozilla/4.0 (compatible; N-Stealth)] +Parent=General Crawlers +Browser="N-Stealth" + +[Mozilla/4.0 (compatible; Scumbot/*; Linux/*)] +Parent=General Crawlers +Stripper=true +isBanned=true + +[Mozilla/4.1] +Parent=General Crawlers +Stripper=true +isBanned=true + +[Mozilla/4.5] +Parent=General Crawlers +Stripper=true +isBanned=true + +[Mozilla/5.0 (compatible; AboutUsBot/*)] +Parent=General Crawlers +Browser="AboutUsBot" + +[mozilla/5.0 (compatible; genevabot http://www.healthdash.com)] +Parent=General Crawlers +Browser="Healthdash" + +[Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)] +Parent=General Crawlers +Browser="Kyluka" + +[Mozilla/5.0 (compatible; Vermut*)] +Parent=General Crawlers +Browser="Vermut" + +[n4p_bot*] +Parent=General Crawlers +Browser="n4p_bot" + +[nabot*] +Parent=General Crawlers +Browser="Nabot" + +[NetCarta_WebMapper/*] +Parent=General Crawlers +Browser="NetCarta_WebMapper" +Stripper=true +isBanned=true + +[neTVision AG andreas.heidoetting@thomson-webcast.net] +Parent=General Crawlers +Browser="neTVision" + +[NextopiaBOT*] +Parent=General Crawlers +Browser="NextopiaBOT" + +[nicebot] +Parent=General Crawlers +Browser="nicebot" +Stripper=true +isBanned=true + +[Nudelsalat/*] +Parent=General Crawlers +Browser="Nudelsalat" +Stripper=true +isBanned=true + +[Ocelli/*] +Parent=General Crawlers +Browser="Ocelli" + +[OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)] +Parent=General Crawlers +Browser="OpenTaggerBot" + +[Oracle Enterprise Search] +Parent=General Crawlers +Browser="Oracle Enterprise Search" +Stripper=true +isBanned=true + +[Oracle Ultra Search] +Parent=General Crawlers +Browser="Oracle Ultra Search" + +[Pajaczek/*] +Parent=General Crawlers +Browser="Pajaczek" +Stripper=true +isBanned=true + +[Patwebbot (http://www.herz-power.de/technik.html)] +Parent=General Crawlers +Browser="Patwebbot" + +[PhpDig/*] +Parent=General Crawlers +Browser="PhpDig" + +[PMAFind] +Parent=General Crawlers +Browser="PMAFind" +Stripper=true +isBanned=true + +[Poodle_predictor_1.0] +Parent=General Crawlers +Browser="Poodle Predictor" + +[QuickFinder Crawler] +Parent=General Crawlers +Browser="QuickFinder" +Stripper=true +isBanned=true + +[Radiation Retriever*] +Parent=General Crawlers +Browser="Radiation Retriever" +Stripper=true +isBanned=true + +[RedCarpet/*] +Parent=General Crawlers +Browser="RedCarpet" +Stripper=true +isBanned=true + +[Redirect Test/*] +Parent=General Crawlers +Browser="Redirect Test" + +[RixBot (http://babelserver.org/rix)] +Parent=General Crawlers +Browser="RixBot" + +[RufusBot (Rufus Web Miner;*)] +Parent=General Crawlers +Browser="RufusBot" + +[Sam Spade*] +Parent=General Crawlers +Browser="Sam Spade" +Beta=true + +[SBIder/*] +Parent=General Crawlers +Browser="SiteSell" + +[Search Fst] +Parent=General Crawlers +Browser="Search Fst" + +[searchbot admin@google.com] +Parent=General Crawlers +Browser="searchbot" +Stripper=true +isBanned=true + +[Seeker.lookseek.com] +Parent=General Crawlers +Browser="LookSeek" +Stripper=true +isBanned=true + +[semanticdiscovery/*] +Parent=General Crawlers +Browser="Semantic Discovery" + +[SeznamBot/*] +Parent=General Crawlers +Browser="SeznamBot" +Stripper=true +isBanned=true + +[ShopWiki/1.0*] +Parent=General Crawlers +Browser="ShopWiki" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ShowXML/1.0 libwww/5.4.0] +Parent=General Crawlers +Browser="ShowXML" +Stripper=true +isBanned=true + +[sitecheck.internetseer.com*] +Parent=General Crawlers +Browser="Internetseer" + +[sohu*] +Parent=General Crawlers +Browser="sohu-search" +Stripper=true +isBanned=true + +[SpankBot*] +Parent=General Crawlers +Browser="SpankBot" +Stripper=true +isBanned=true + +[SurveyBot/*] +Parent=General Crawlers +Browser="SurveyBot" +Stripper=true +isBanned=true + +[SynapticSearch/AI Crawler 1.?] +Parent=General Crawlers +Browser="SynapticSearch" +Stripper=true +isBanned=true + +[SyncMgr] +Parent=General Crawlers +Browser="SyncMgr" + +[Tagyu Agent/1.0] +Parent=General Crawlers +Browser="Tagyu" + +[Talkro Web-Shot/*] +Parent=General Crawlers +Browser="Talkro Web-Shot" +Stripper=true +isBanned=true + +[Tecomi Bot (http://www.tecomi.com/bot.htm)] +Parent=General Crawlers +Browser="Tecomi" + +[TheInformant*] +Parent=General Crawlers +Browser="TheInformant" +Stripper=true +isBanned=true + +[Tutorial Crawler*] +Parent=General Crawlers +Stripper=true +isBanned=true + +[UbiCrawler/*] +Parent=General Crawlers +Browser="UbiCrawler" + +[UCmore] +Parent=General Crawlers +Browser="UCmore" + +[User-Agent:*] +Parent=General Crawlers +Stripper=true +isBanned=true + +[VengaBot/*] +Parent=General Crawlers +Browser="VengaBot" +Stripper=true +isBanned=true + +[Visicom Toolbar] +Parent=General Crawlers +Browser="Visicom Toolbar" + +[W3C-WebCon/*] +Parent=General Crawlers +Browser="W3C-WebCon" +Stripper=true +isBanned=true + +[Webclipping.com] +Parent=General Crawlers +Browser="Webclipping.com" +Stripper=true +isBanned=true + +[WebFilter Robot*] +Parent=General Crawlers +Browser="WebFilter Robot" + +[WebmasterWorldForumBot*] +Parent=General Crawlers +Browser="WebmasterWorldForumBot" + +[WeBoX/*] +Parent=General Crawlers +Browser="WeBoX" + +[WebTrends/*] +Parent=General Crawlers +Browser="WebTrends" + +[WhizBang] +Parent=General Crawlers +Browser="WhizBang" + +[Willow Internet Crawler by Twotrees V*] +Parent=General Crawlers +Browser="Willow Internet Crawler" + +[XML Sitemaps Generator*] +Parent=General Crawlers +Browser="XML Sitemaps Generator" + +[FOTOCHECKER] +Parent=Image Crawlers +Browser="FOTOCHECKER" +Stripper=true +isBanned=true + +[*Nutch*] +Parent=Nutch +Stripper=true +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search Engines + +[Search Engines] +Parent=DefaultProperties +Browser="Search Engines" +Frames=true +Tables=true +Crawler=true + +[*FDSE robot*] +Parent=Search Engines +Browser="FDSE Robot" + +[*Fluffy the spider*] +Parent=Search Engines +Browser="SearchHippo" + +[Abacho*] +Parent=Search Engines +Browser="Abacho" + +[ah-ha.com crawler (crawler@ah-ha.com)] +Parent=Search Engines +Browser="Ah-Ha" + +[AIBOT/*] +Parent=Search Engines +Browser="21Seek.Com" + +[Amfibibot/*] +Parent=Search Engines +Browser="Amfibi" + +[AnswerBus (http://www.answerbus.com/)] +Parent=Search Engines + +[antibot-V*] +Parent=Search Engines +Browser="antibot" + +[appie*(www.walhello.com)] +Parent=Search Engines +Browser="Walhello" + +[ASPSeek/*] +Parent=Search Engines +Browser="ASPSeek" + +[BigCliqueBOT/*] +Parent=Search Engines +Browser="BigClique.com/BigClic.com" + +[Blaiz-Bee/*] +Parent=Search Engines +Browser="RawGrunt" + +[btbot/*] +Parent=Search Engines +Browser="Bit Torrent Search Engine" + +[CipinetBot (http://www.cipinet.com/bot.html)] +Parent=Search Engines +Browser="CipinetBot" + +[cosmos*] +Parent=Search Engines +Browser="Xyleme" + +[DataFountains/DMOZ Downloader] +Parent=Search Engines +Browser="DataFountains" + +[Deepindex] +Parent=Search Engines +Browser="Deepindex" + +[DiamondBot] +Parent=Search Engines +Browser="DiamondBot" + +[Eule?Robot*] +Parent=Search Engines +Browser="Eule-Robot" + +[Faxobot/*] +Parent=Search Engines +Browser="Faxo" + +[Filangy/*] +Parent=Search Engines +Browser="Filangy" + +[Fooky.com/ScorpionBot/ScoutOut;*] +Parent=Search Engines +Browser="ScorpionBot" +Stripper=true +isBanned=true + +[FyberSpider (?http://www.fybersearch.com/fyberspider.php)] +Parent=Search Engines +Browser="FyberSpider" + +[gazz/*(gazz@nttr.co.jp)] +Parent=Search Engines +Browser="gazz" + +[geniebot*] +Parent=Search Engines +Browser="GenieKnows" + +[GOFORITBOT (?http://www.goforit.com/about/?)] +Parent=Search Engines +Browser="GoForIt" + +[GroschoBot/*] +Parent=Search Engines +Browser="GroschoBot" + +[HenryTheMiragoRobot*] +Parent=Search Engines +Browser="Mirago" + +[Hotzonu/*] +Parent=Search Engines +Browser="Hotzonu" + +[i1searchbot/*] +Parent=Search Engines +Browser="i1searchbot" + +[Iltrovatore-?etaccio/*] +Parent=Search Engines +Browser="Iltrovatore-Setaccio" + +[InfociousBot (?http://corp.infocious.com/tech_crawler.php)] +Parent=Search Engines +Browser="InfociousBot" +Stripper=true +isBanned=true + +[Infoseek SideWinder/*] +Parent=Search Engines +Browser="Infoseek" + +[INGRID/3.0 MT*] +Parent=Search Engines +Browser="Ilse" + +[Kolinka Forum Search (www.kolinka.com)] +Parent=Search Engines +Browser="Kolinka Forum Search" +Stripper=true +isBanned=true + +[KRetrieve/] +Parent=Search Engines +Browser="KRetrieve" +Stripper=true +isBanned=true + +[LapozzBot/*] +Parent=Search Engines +Browser="LapozzBot" + +[Linknzbot*] +Parent=Search Engines +Browser="Linknzbot" + +[LocalcomBot/*] +Parent=Search Engines +Browser="LocalcomBot" + +[MaSagool/*] +Parent=Search Engines +Browser="Sagoo" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[miniRank/*] +Parent=Search Engines +Browser="miniRank" + +[MJ12bot/*] +Parent=Search Engines +Browser="Majestic-12" + +[Mnogosearch*] +Parent=Search Engines +Browser="Mnogosearch" + +[Mozilla/4.0 (compatible; Arachmo)] +Parent=Search Engines +Browser="Arachmo" + +[Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)] +Parent=Search Engines +Browser="Girafabot" +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.00; Windows 98] +Parent=Search Engines +Browser="directNIC" +Win32=true +Stripper=true +isBanned=true + +[Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)] +Parent=Search Engines +Browser="Qihoo" + +[Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)] +Parent=Search Engines +Browser="Inxight Software" + +[Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)] +Parent=Search Engines +Browser="ActiveTouristBot" + +[Mozilla/5.0 (compatible; Charlotte/1.0b; charlotte@betaspider.com)] +Parent=Search Engines +Browser="Charlotte" +Beta=true +Stripper=true +isBanned=true + +[Mozilla/5.0 (compatible; CXL-FatAssANT (El Robeiro); http://www.conexcol.com/FatAssANT/; ANTid:alfa; v. 0.5.1)] +Parent=Search Engines +Browser="Conexcol.com" + +[Mozilla/5.0 (compatible; DNS-Digger/*; http://www.dnsdigger.com)] +Parent=Search Engines +Browser="DNS-Digger" + +[Mozilla/5.0 (compatible; MojeekBot/2.0; http://www.mojeek.com/bot.html)] +Parent=Search Engines +Browser="MojeekBot" +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (compatible; NLCrawler/*] +Parent=Search Engines +Browser="Northern Light Web Search" + +[Mozilla/5.0 (compatible; Scrubby/*; http://www.scrubtheweb.com/abs/meta-check.html)] +Parent=Search Engines +Browser="Scrubby" +Stripper=true +isBanned=true + +[Mozilla/5.0 (compatible; TridentSpider/*)] +Parent=Search Engines +Browser="Noviforum Search" + +[Mozilla/5.0 CostaCider Search*] +Parent=Search Engines +Browser="CostaCider Search" + +[NavissoBot] +Parent=Search Engines +Browser="NavissoBot" + +[NextGenSearchBot 1*] +Parent=Search Engines +Browser="Zoom Info" + +[NG-Search/*] +Parent=Search Engines +Browser="NG-SearchBot" + +[Norbert the Spider(Burf.com)] +Parent=Search Engines +Browser="Norbert the Spider" + +[NuSearch Spider*] +Parent=Search Engines +Browser="nuSearch" + +[ObjectsSearch/*] +Parent=Search Engines +Browser="ObjectsSearch" + +[PEERbot*] +Parent=Search Engines +Browser="PEERbot" + +[PeerFactor*Crawler] +Parent=Search Engines +Browser="PeerFactor" +Stripper=true +isBanned=true + +[Pompos/*] +Parent=Search Engines +Browser="Pompos" + +[Popdexter/*] +Parent=Search Engines +Browser="Popdex" + +[Qweery*] +Parent=Search Engines +Browser="QweeryBot" + +[RedCell/* (*)] +Parent=Search Engines +Browser="RedCell" + +[schibstedsokbot (compatible; Mozilla/5.0; MSIE 5.0; FAST FreshCrawler;*)] +Parent=Search Engines +Browser="schibstedsokbot" + +[Scrubby/*] +Parent=Search Engines +Browser="Scrub The Web" + +[Search-10/*] +Parent=Search Engines +Browser="Search-10" + +[search.ch*] +Parent=Search Engines +Browser="Swiss Search Engine" + +[Searchmee! Spider*] +Parent=Search Engines +Browser="Searchmee!" + +[Seekbot/*] +Parent=Search Engines +Browser="Seekbot" + +[SiteSpider (http://www.SiteSpider.com/)] +Parent=Search Engines +Browser="SiteSpider" + +[snap.com*] +Parent=Search Engines +Browser="Snap" + +[Speedy?Spider*] +Parent=Search Engines +Browser="entireweb.com" + +[Spinne/*] +Parent=Search Engines +Browser="Spinne" + +[sproose/*] +Parent=Search Engines +Browser="Sproose" + +[SquigglebotBot/*] +Parent=Search Engines +Browser="SquigglebotBot" +Stripper=true +isBanned=true + +[StackRambler/*] +Parent=Search Engines +Browser="StackRambler" + +[SygolBot*] +Parent=Search Engines +Browser="SygolBot" + +[SynoBot] +Parent=Search Engines +Browser="SynoBot" + +[Szukacz/*] +Parent=Search Engines +Browser="Szukacz" + +[Tarantula/*] +Parent=Search Engines +Browser="Tarantula" +Stripper=true +isBanned=true + +[TerrawizBot/*] +Parent=Search Engines +Browser="TerrawizBot" +Stripper=true +isBanned=true + +[Tkensaku/*] +Parent=Search Engines +Browser="Tkensaku" + +[TMCrawler] +Parent=Search Engines +Browser="TMCrawler" +Stripper=true +isBanned=true + +[updated/*] +Parent=Search Engines +Browser="Updated!" + +[URL Spider Pro/*] +Parent=Search Engines +Browser="URL Spider Pro" + +[URL Spider SQL*] +Parent=Search Engines +Browser="Innerprise Enterprise Search" + +[WebAlta Crawler/*] +Parent=Search Engines +Browser="WebAlta Crawler" +Stripper=true +isBanned=true + +[webcrawl.net] +Parent=Search Engines +Browser="webcrawl.net" + +[WinkBot/*] +Parent=Search Engines +Browser="WinkBot" +Version=0.06 +MajorVer=0 +MinorVer=06 + +[WISEbot/*] +Parent=Search Engines +Browser="WISEbot" +Stripper=true +isBanned=true + +[Wotbox/*] +Parent=Search Engines +Browser="Wotbox" + +[www.zatka.com] +Parent=Search Engines +Browser="Zatka" + +[WWWeasel Robot v*] +Parent=Search Engines +Browser="World Wide Weasel" + +[YadowsCrawler*] +Parent=Search Engines +Browser="YadowsCrawler" + +[ZeBot_www.ze.bz*] +Parent=Search Engines +Browser="ZE.bz" + +[zibber-v*] +Parent=Search Engines +Browser="Zibb" + +[ZipppBot/*] +Parent=Search Engines +Browser="ZipppBot" + +[ATA-Translation-Service] +Parent=Translators +Browser="ATA-Translation-Service" + +[GJK_Browser_Check] +Parent=Version Checkers +Browser="GJK_Browser_Check" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DYNAMIC + +[DYNAMIC] +Parent=DefaultProperties +Browser="DYNAMIC" +Stripper=true +isBanned=true +Crawler=true + +[DYNAMIC (*; http://www.dynamicplus.it; admin@dynamicplus.it)] +Parent=DYNAMIC +Browser="DYNAMIC+" + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; DYNAMIC*)] +Parent=DYNAMIC +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hatena + +[Hatena] +Parent=DefaultProperties +Browser="Hatena" +Stripper=true +isBanned=true +Crawler=true + +[Feed::Find/0.*] +Parent=Hatena +Browser="Feed::Find" +isSyndicationReader=true + +[Hatena Antenna/*] +Parent=Hatena +Browser="Hatena Antenna" + +[Hatena Bookmark/*] +Parent=Hatena +Browser="Hatena Bookmark" + +[Hatena RSS/*] +Parent=Hatena +Browser="Hatena RSS" +isSyndicationReader=true + +[HatenaScreenshot/* (checker)] +Parent=Hatena +Browser="HatenaScreenshot" + +[URI::Fetch/0.*] +Parent=Hatena +Browser="URI::Fetch" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hurricane Electric + +[Hurricane Electric] +Parent=DefaultProperties +Browser="Hurricane Electric" +Stripper=true +isBanned=true +Crawler=true + +[Gigabot*] +Parent=Hurricane Electric + +[GigabotSiteSearch/*] +Parent=Hurricane Electric +Browser="GigabotSiteSearch" + +[Jetbot/*] +Parent=Hurricane Electric + +[Mozilla/4.04 (compatible; Dulance bot;*)] +Parent=Hurricane Electric +Browser="Dulance" + +[OmniExplorer_Bot/*] +Parent=Hurricane Electric +Browser="OmniExplorer" + +[plinki/0.1*] +Parent=Hurricane Electric +Browser="plinki" + +[Twiceler www.cuill.com/robots.html] +Parent=Hurricane Electric +Browser="Twiceler" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Internet Archive + +[Internet Archive] +Parent=DefaultProperties +Browser="Internet Archive" +Frames=true +IFrames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[ia_archiver*] +Parent=Internet Archive +Browser="Internet Archive" + +[InternetArchive/*] +Parent=Internet Archive +Browser="InternetArchive" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Marty Anstey + +[Marty Anstey] +Parent=DefaultProperties +Browser="Marty Anstey" +Stripper=true +isBanned=true +Crawler=true + +[Helix/1.2 (?http://www.sitesearch.ca/helix/)] +Parent=Marty Anstey + +[Mozilla/2.0 (compatible; DC9FE0029G; FreeBSD 5.4-RELEASE; i386; en_US)] +Parent=Marty Anstey + +[Reaper/* (?http://www.sitesearch.ca/reaper)] +Parent=Marty Anstey +Browser="Reaper" + +[Vortex/2.2*] +Parent=Marty Anstey +Browser="Vortex" +Stripper=true +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft_Internet_Explorer + +[Microsoft_Internet_Explorer] +Parent=DefaultProperties +Browser="Microsoft_Internet_Explorer" +Stripper=true +isBanned=true +Crawler=true + +[Microsoft_Internet_Explorer_5.00.*] +Parent=Microsoft_Internet_Explorer +Stripper=true +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nutch + +[Nutch] +Parent=DefaultProperties +Browser="Nutch" +Stripper=true +isBanned=true +Crawler=true + +[LOOQ/0.1*] +Parent=Nutch +Browser="LOOQ" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Content Filters + +[Content Filters] +Parent=DefaultProperties +Browser="Content Filters" +Frames=true +Tables=true +Cookies=true +Crawler=true + +[CerberianDrtrs/*] +Parent=Content Filters +Browser="Cerberian" + +[Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Content Filters +Browser="Cerberian" + +[Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Content Filters +Browser="Cerberian" + +[Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)] +Parent=Content Filters +Browser="Bluecoat" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright/Plagiarism + +[Copyright/Plagiarism] +Parent=DefaultProperties +Browser="Copyright/Plagiarism" +Stripper=true +isBanned=true +Crawler=true + +[BDFetch] +Parent=Copyright/Plagiarism +Browser="BDFetch" + +[CopyRightCheck*] +Parent=Copyright/Plagiarism +Browser="CopyRightCheck" + +[FairAd Client*] +Parent=Copyright/Plagiarism +Browser="FairAd Client" + +[IPiumBot laurion(dot)com] +Parent=Copyright/Plagiarism +Browser="IPiumBot" + +[oBot] +Parent=Copyright/Plagiarism +Browser="oBot" + +[SlySearch/*] +Parent=Copyright/Plagiarism +Browser="SlySearch" + +[TurnitinBot/*] +Parent=Copyright/Plagiarism +Browser="TurnitinBot" + +[TutorGigBot/*] +Parent=Copyright/Plagiarism +Browser="TutorGig" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Download Managers + +[Download Managers] +Parent=DefaultProperties +Browser="Download Managers" +Frames=true +IFrames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[AutoMate5] +Parent=Download Managers +Browser="AutoMate5" + +[Beamer*] +Parent=Download Managers +Browser="Beamer" + +[BitBeamer/*] +Parent=Download Managers +Browser="BitBeamer" + +[BitTorrent/*] +Parent=Download Managers +Browser="BitTorrent" + +[DA *] +Parent=Download Managers +Browser="Download Accelerator" + +[Download Demon*] +Parent=Download Managers +Browser="Download Demon" + +[Download Express*] +Parent=Download Managers +Browser="Download Express" + +[Download Master*] +Parent=Download Managers +Browser="Download Master" + +[Download Ninja*] +Parent=Download Managers +Browser="Download Ninja" + +[Download Wonder*] +Parent=Download Managers +Browser="Download Wonder" + +[DownloadSession*] +Parent=Download Managers +Browser="DownloadSession" + +[EasyDL/*] +Parent=Download Managers +Browser="EasyDL" + +[FDM 1.x] +Parent=Download Managers +Browser="Free Download Manager" + +[FlashGet] +Parent=Download Managers +Browser="FlashGet" + +[FreshDownload/*] +Parent=Download Managers +Browser="FreshDownload" + +[GetRight/*] +Parent=Download Managers +Browser="GetRight" + +[GetRightPro/*] +Parent=Download Managers +Browser="GetRightPro" + +[GetSmart/*] +Parent=Download Managers +Browser="GetSmart" + +[Go!Zilla*] +Parent=Download Managers +Browser="GoZilla" + +[Gozilla/*] +Parent=Download Managers +Browser="Gozilla" + +[Internet Ninja*] +Parent=Download Managers +Browser="Internet Ninja" + +[Kontiki Client*] +Parent=Download Managers +Browser="Kontiki Client" + +[lftp/3.2.1] +Parent=Download Managers +Browser="lftp" + +[LightningDownload/*] +Parent=Download Managers +Browser="LightningDownload" + +[LMQueueBot/*] +Parent=Download Managers +Browser="LMQueueBot" + +[MetaProducts Download Express/*] +Parent=Download Managers +Browser="Download Express" + +[Mozilla/4.0 (compatible; Getleft*)] +Parent=Download Managers +Browser="Getleft" + +[Myzilla] +Parent=Download Managers +Browser="Myzilla" + +[Net Vampire/*] +Parent=Download Managers +Browser="Net Vampire" + +[Net_Vampire*] +Parent=Download Managers +Browser="Net_Vampire" + +[NetAnts*] +Parent=Download Managers +Browser="NetAnts" + +[NetPumper*] +Parent=Download Managers +Browser="NetPumper" + +[NetSucker*] +Parent=Download Managers +Browser="NetSucker" + +[NetZip Downloader*] +Parent=Download Managers +Browser="NetZip Downloader" + +[NexTools WebAgent*] +Parent=Download Managers +Browser="NexTools WebAgent" + +[Offline Downloader*] +Parent=Download Managers +Browser="Offline Downloader" + +[P3P Client] +Parent=Download Managers +Browser="P3P Client" + +[PageDown*] +Parent=Download Managers +Browser="PageDown" + +[PicaLoader*] +Parent=Download Managers +Browser="PicaLoader" + +[Prozilla*] +Parent=Download Managers +Browser="Prozilla" + +[RealDownload/*] +Parent=Download Managers +Browser="RealDownload" + +[sEasyDL/*] +Parent=Download Managers +Browser="EasyDL" + +[SmartDownload/*] +Parent=Download Managers +Browser="SmartDownload" + +[SpeedDownload/*] +Parent=Download Managers +Browser="Speed Download" + +[Star*Downloader/*] +Parent=Download Managers +Browser="StarDownloader" + +[STEROID Download] +Parent=Download Managers +Browser="STEROID Download" + +[SuperBot/*] +Parent=Download Managers +Browser="SuperBot" + +[Vegas95/*] +Parent=Download Managers +Browser="Vegas95" + +[WebZIP*] +Parent=Download Managers +Browser="WebZIP" + +[Wget*] +Parent=Download Managers +Browser="Wget" + +[WinTools] +Parent=Download Managers +Browser="WinTools" + +[Xaldon WebSpider*] +Parent=Download Managers +Browser="Xaldon WebSpider" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E-Mail Harvesters + +[E-Mail Harvesters] +Parent=DefaultProperties +Browser="E-Mail Harvesters" +Frames=true +IFrames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[*E-Mail Address Extractor*] +Parent=E-Mail Harvesters +Browser="E-Mail Address Extractor" + +[*Larbin*] +Parent=E-Mail Harvesters +Browser="Larbin" + +[*www4mail/*] +Parent=E-Mail Harvesters +Browser="www4mail" + +[CherryPicker*/*] +Parent=E-Mail Harvesters +Browser="CherryPickerElite" + +[Chilkat/*] +Parent=E-Mail Harvesters +Browser="Chilkat" + +[ContactBot/*] +Parent=E-Mail Harvesters +Browser="ContactBot" + +[eCatch*] +Parent=E-Mail Harvesters +Browser="eCatch" + +[EmailCollector*] +Parent=E-Mail Harvesters +Browser="E-Mail Collector" + +[EMAILsearcher] +Parent=E-Mail Harvesters +Browser="EMAILsearcher" + +[EmailSiphon*] +Parent=E-Mail Harvesters +Browser="E-Mail Siphon" + +[EmailWolf*] +Parent=E-Mail Harvesters +Browser="EMailWolf" + +[Epsilon SoftWorks' MailMunky] +Parent=E-Mail Harvesters +Browser="MailMunky" + +[ExtractorPro*] +Parent=E-Mail Harvesters +Browser="ExtractorPro" + +[Franklin Locator*] +Parent=E-Mail Harvesters +Browser="Franklin Locator" + +[Missigua Locator*] +Parent=E-Mail Harvesters +Browser="Missigua Locator" + +[Mozilla/4.0 (compatible; Advanced Email Extractor*)] +Parent=E-Mail Harvesters +Browser="Advanced Email Extractor" + +[Netprospector*] +Parent=E-Mail Harvesters +Browser="Netprospector" + +[ProWebWalker*] +Parent=E-Mail Harvesters +Browser="ProWebWalker" + +[sna-0.0.*] +Parent=E-Mail Harvesters +Browser="Mike Elliott's E-Mail Harvester" + +[WebEnhancer*] +Parent=E-Mail Harvesters +Browser="WebEnhancer" + +[WebMiner*] +Parent=E-Mail Harvesters +Browser="WebMiner" + +[ZIBB Crawler (email address / WWW address)] +Parent=E-Mail Harvesters +Browser="ZIBB Crawler" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Blogs + +[Feeds Blogs] +Parent=DefaultProperties +Browser="Feeds Blogs" +isSyndicationReader=true +Crawler=true + +[Bloglines Title Fetch/*] +Parent=Feeds Blogs +Browser="Bloglines Title Fetch" + +[Bloglines/* (http://www.bloglines.com*)] +Parent=Feeds Blogs +Browser="BlogLines Web" + +[blogsearchbot-pumpkin-2] +Parent=Feeds Blogs +Browser="blogsearchbot-pumpkin" +isSyndicationReader=false + +[Irish Blogs Aggregator/*1.0*] +Parent=Feeds Blogs +Browser="Irish Blogs Aggregator" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[kinjabot (http://www.kinja.com; *)] +Parent=Feeds Blogs +Browser="kinjabot" + +[Net::Trackback/*] +Parent=Feeds Blogs +Browser="Net::Trackback" + +[Reblog*] +Parent=Feeds Blogs +Browser="Reblog" + +[WordPress/*] +Parent=Feeds Blogs +Browser="WordPress" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Syndicators + +[Feeds Syndicators] +Parent=DefaultProperties +Browser="Feeds Syndicators" +isSyndicationReader=true + +[*LinkLint*] +Parent=Feeds Syndicators +Browser="LinkLint" + +[*NetNewsWire/*] +Parent=Feeds Syndicators + +[*NetVisualize*] +Parent=Feeds Syndicators +Browser="NetVisualize" + +[AppleSyndication/*] +Parent=Feeds Syndicators +Browser="Safari RSS" +Platform=MacOSX + +[Cocoal.icio.us/* (*)*] +Parent=Feeds Syndicators +Browser="Cocoal.icio.us" +Stripper=true +isBanned=true + +[Feed43 Proxy/* (*)] +Parent=Feeds Syndicators +Browser="Feed For Free" + +[FeedDemon/* (*)] +Parent=Feeds Syndicators +Browser="FeedDemon" +Platform=Win32 + +[FeedDigest/* (*)] +Parent=Feeds Syndicators +Browser="FeedDigest" + +[Feedreader * (Powered by Newsbrain)] +Parent=Feeds Syndicators +Browser="Newsbrain" + +[Feedshow/* (*)] +Parent=Feeds Syndicators +Browser="Feedshow" + +[GreatNews/1.0] +Parent=Feeds Syndicators +Browser="GreatNews" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[intraVnews/*] +Parent=Feeds Syndicators +Browser="intraVnews" + +[JetBrains Omea Reader*] +Parent=Feeds Syndicators +Browser="Omea Reader" +Stripper=true +isBanned=true + +[MagpieRSS/* (*)] +Parent=Feeds Syndicators +Browser="MagpieRSS" + +[Mozilla/4.0 (compatible; BOTW Feed Grabber; http://botw.org)] +Parent=Feeds Syndicators +Browser="BOTW Feed Grabber" + +[Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*] +Parent=Feeds Syndicators +Browser="Rojo" + +[Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*] +Parent=Feeds Syndicators +Browser="TailRank" + +[Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)] +Parent=Feeds Syndicators +Browser="Newz Crawler" + +[Mozilla/5.0 (RSS Reader Panel)] +Parent=Feeds Syndicators +Browser="RSS Reader Panel" + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*] +Parent=Feeds Syndicators +Browser="FeedParser" + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*] +Parent=Feeds Syndicators +Browser="NewsMonster" + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*] +Parent=Feeds Syndicators +Browser="Rojo" + +[Mozilla/6.0 (MSIE 6.0; *RSSMicro.com RSS/Atom Feed Robot)] +Parent=Feeds Syndicators +Browser="RSS Micro" + +[NetNewsWire*/*] +Parent=Feeds Syndicators +Browser="NetNewsWire" +Platform=MacOSX + +[Netvibes (*)] +Parent=Feeds Syndicators +Browser="Netvibes" + +[NewsAlloy/* (*)] +Parent=Feeds Syndicators +Browser="NewsAlloy" + +[NewsGator FetchLinks extension/*] +Parent=Feeds Syndicators +Browser="NewsGator FetchLinks" + +[NewsGatorOnline/*] +Parent=Feeds Syndicators +Browser="NewsGatorOnline" + +[Omnipelagos*] +Parent=Feeds Syndicators +Browser="Omnipelagos" + +[Protopage/* (*)] +Parent=Feeds Syndicators +Browser="Protopage" + +[PubSub-RSS-Reader/* (*)] +Parent=Feeds Syndicators +Browser="PubSub-RSS-Reader" + +[RssBandit/*] +Parent=Feeds Syndicators +Browser="RssBandit" + +[RssBar/1.2*] +Parent=Feeds Syndicators +Browser="RssBar" +Version=1.2 +MajorVer=1 +MinorVer=2 + +[SharpReader/*] +Parent=Feeds Syndicators +Browser="SharpReader" + +[SimplePie/*] +Parent=Feeds Syndicators +Browser="SimplePie" + +[Strategic Board Bot (?http://www.strategicboard.com)] +Parent=Feeds Syndicators +Browser="Strategic Board Bot" +Stripper=true +isBanned=true + +[TargetYourNews.com bot] +Parent=Feeds Syndicators +Browser="TargetYourNews" + +[Windows-RSS-Platform/1.0*] +Parent=Feeds Syndicators +Browser="Windows-RSS-Platform" +Version=1.0 +MajorVer=1 +MinorVer=0 +Win32=true + +[Wizz RSS News Reader] +Parent=Feeds Syndicators +Browser="Wizz" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Validation Checkers + +[HTML Validators] +Parent=DefaultProperties +Browser="HTML Validators" +Frames=true +IFrames=true +Tables=true +Crawler=true + +[(HTML Validator http://www.searchengineworld.com/validator/)] +Parent=HTML Validators +Browser="Search Engine World HTML Validator" + +[FeedValidator/1.3] +Parent=HTML Validators +Browser="FeedValidator" +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Jigsaw/* W3C_CSS_Validator_JFouffa/*] +Parent=HTML Validators +Browser="Jigsaw CSS Validator" + +[Search Engine World Robots.txt Validator*] +Parent=HTML Validators +Browser="Search Engine World Robots.txt Validator" + +[W3C_Validator/*] +Parent=HTML Validators +Browser="W3C Validator" + +[W3CLineMode/*] +Parent=HTML Validators +Browser="W3C Line Mode" + +[Weblide/2.0 beta8*] +Parent=HTML Validators +Browser="Weblide" +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[WebmasterWorld StickyMail Server Header Checker*] +Parent=HTML Validators +Browser="WebmasterWorld Server Header Checker" + +[WWWC/*] +Parent=HTML Validators + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Image Crawlers + +[Image Crawlers] +Parent=DefaultProperties +Browser="Image Crawlers" +Frames=true +IFrames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[*PhotoStickies/*] +Parent=Image Crawlers +Browser="PhotoStickies" + +[Camcrawler*] +Parent=Image Crawlers +Browser="Camcrawler" + +[Der gro\xdfe BilderSauger*] +Parent=Image Crawlers +Browser="Gallery Grabber" + +[Extreme Picture Finder] +Parent=Image Crawlers +Browser="Extreme Picture Finder" + +[HTML2JPG Blackbox, http://www.html2jpg.com] +Parent=Image Crawlers +Browser="HTML2JPG" + +[IconSurf/2.*] +Parent=Image Crawlers +Browser="IconSurf" + +[Mister PIX*] +Parent=Image Crawlers +Browser="Mister PIX" + +[naoFavicon4IE*] +Parent=Image Crawlers +Browser="naoFavicon4IE" + +[pixfinder/*] +Parent=Image Crawlers +Browser="pixfinder" + +[psbot/*] +Parent=Image Crawlers +Browser="PSBot" + +[rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)] +Parent=Image Crawlers +Browser="rssImagesBot" + +[Web Image Collector*] +Parent=Image Crawlers +Browser="Web Image Collector" + +[webcollage/*] +Parent=Image Crawlers +Browser="WebCollage" + +[WebPix*] +Parent=Image Crawlers +Browser="Custo" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Link Checkers + +[Link Checkers] +Parent=DefaultProperties +Browser="Link Checkers" +Frames=true +IFrames=true +Tables=true +Crawler=true + +[!Susie (http://www.sync2it.com/susie)] +Parent=Link Checkers +Browser="!Susie" + +[*AgentName/*] +Parent=Link Checkers +Browser="AgentName" + +[*Linkman*] +Parent=Link Checkers +Browser="Linkman" + +[*LinksManager.com*] +Parent=Link Checkers +Browser="LinksManager" + +[*Powermarks/*] +Parent=Link Checkers +Browser="Powermarks" + +[*W3C-checklink/*] +Parent=Link Checkers +Browser="W3C Link Checker" + +[*Web Link Validator*] +Parent=Link Checkers +Browser="Web Link Validator" + +[*Zeus*] +Parent=Link Checkers +Browser="Zeus" +Stripper=true +isBanned=true + +[ActiveBookmark *] +Parent=Link Checkers +Browser="ActiveBookmark" + +[Bookmark Buddy*] +Parent=Link Checkers +Browser="Bookmark Buddy" + +[Bookmark Renewal Check Agent*] +Parent=Link Checkers +Browser="Bookmark Renewal Check Agent" + +[Bookmark search tool*] +Parent=Link Checkers +Browser="Bookmark search tool" + +[Bookmark-Manager] +Parent=Link Checkers +Browser="Bookmark-Manager" + +[Checkbot*] +Parent=Link Checkers +Browser="Checkbot" + +[CheckLinks/*] +Parent=Link Checkers +Browser="CheckLinks" + +[CyberSpyder Link Test/*] +Parent=Link Checkers +Browser="CyberSpyder Link Test" + +[DLC/*] +Parent=Link Checkers +Browser="DLC" + +[DocWeb Link Crawler (http://doc.php.net)] +Parent=Link Checkers +Browser="DocWeb Link Crawler" + +[FavOrg] +Parent=Link Checkers +Browser="FavOrg" + +[FindLinks/*] +Parent=Link Checkers +Browser="FindLinks" + +[Funnel Web Profiler*] +Parent=Link Checkers +Browser="Funnel Web Profiler" + +[Html Link Validator (www.lithopssoft.com)] +Parent=Link Checkers +Browser="HTML Link Validator" + +[IECheck] +Parent=Link Checkers +Browser="IECheck" + +[JCheckLinks/*] +Parent=Link Checkers +Browser="JCheckLinks" + +[JRTwine Software Check Favorites Utility] +Parent=Link Checkers +Browser="JRTwine" + +[Link Valet Online*] +Parent=Link Checkers +Browser="Link Valet" +Stripper=true +isBanned=true + +[LinkAlarm/*] +Parent=Link Checkers +Browser="LinkAlarm" + +[Linkbot*] +Parent=Link Checkers +Browser="Linkbot" + +[LinkChecker/*] +Parent=Link Checkers +Browser="LinkChecker" + +[LinkextractorPro*] +Parent=Link Checkers +Browser="LinkextractorPro" +Stripper=true +isBanned=true + +[LinkLint-checkonly/*] +Parent=Link Checkers +Browser="LinkLint" + +[LinkScan/*] +Parent=Link Checkers +Browser="LinkScan" + +[LinkSweeper/*] +Parent=Link Checkers +Browser="LinkSweeper" + +[LinkWalker*] +Parent=Link Checkers +Browser="LinkWalker" + +[MetaGer-LinkChecker] +Parent=Link Checkers +Browser="MetaGer-LinkChecker" + +[Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)] +Parent=Link Checkers +Browser="LinkTiger" +Stripper=true +isBanned=true + +[Mozilla/4.0 (Compatible); URLBase*] +Parent=Link Checkers +Browser="URLBase" + +[Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)] +Parent=Link Checkers +Browser="NetPromoter Link Utility" + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*] +Parent=Link Checkers +Browser="Web Link Validator" +Win32=true + +[Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0] +Parent=Link Checkers +Browser="Link Commander" +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Win32 + +[Mozilla/4.0 (compatible; SuperCleaner*;*)] +Parent=Link Checkers +Browser="SuperCleaner" + +[Mozilla/5.0 gURLChecker/*] +Parent=Link Checkers +Browser="gURLChecker" +Stripper=true +isBanned=true + +[onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de] +Parent=Link Checkers +Browser="onCHECK Linkchecker" + +[online link validator (http://www.dead-links.com/)] +Parent=Link Checkers +Browser="Dead-Links.com" +Stripper=true +isBanned=true + +[REL Link Checker*] +Parent=Link Checkers +Browser="REL Link Checker" + +[RLinkCheker*] +Parent=Link Checkers +Browser="RLinkCheker" + +[Robozilla/*] +Parent=Link Checkers +Browser="Robozilla" + +[RPT-HTTPClient/*] +Parent=Link Checkers +Browser="RPT-HTTPClient" +Stripper=true +isBanned=true + +[SafariBookmarkChecker*(?http://www.coriolis.ch/)] +Parent=Link Checkers +Browser="SafariBookmarkChecker" +Platform=MacOSX +CSS=2 +CssVersion=2 +supportsCSS=true + +[Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)] +Parent=Link Checkers +Browser="Simpy" + +[SiteBar/*] +Parent=Link Checkers +Browser="SiteBar" + +[Susie (http://www.sync2it.com/bms/susie.php] +Parent=Link Checkers +Browser="Susie" + +[VSE/*] +Parent=Link Checkers +Browser="VSE Link Tester" + +[WebTrends Link Analyzer] +Parent=Link Checkers +Browser="WebTrends Link Analyzer" + +[Xenu* Link Sleuth*] +Parent=Link Checkers +Browser="Xenu's Link Sleuth" +Stripper=true +isBanned=true + +[Z-Add Link Checker*] +Parent=Link Checkers +Browser="Z-Add Link Checker" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft + +[Microsoft] +Parent=DefaultProperties +Browser="Microsoft" +Stripper=true +isBanned=true + +[MFC Foundation Class Library*] +Parent=Microsoft +Browser="MFC Foundation Class Library" + +[MFHttpScan] +Parent=Microsoft +Browser="MFHttpScan" + +[Microsoft BITS/*] +Parent=Microsoft +Browser="BITS" + +[Microsoft Data Access Internet Publishing Provider Cache Manager] +Parent=Microsoft +Browser="MS IPP" + +[Microsoft Data Access Internet Publishing Provider DAV*] +Parent=Microsoft +Browser="MS IPP DAV" + +[Microsoft Data Access Internet Publishing Provider Protocol Discovery] +Parent=Microsoft +Browser="MS IPPPD" + +[Microsoft Internet Explorer] +Parent=Microsoft +Browser="Fake IE" + +[Microsoft Office Protocol Discovery] +Parent=Microsoft +Browser="MS OPD" + +[Microsoft URL Control*] +Parent=Microsoft +Browser="Microsoft URL Control" + +[Microsoft Visio MSIE] +Parent=Microsoft +Browser="Microsoft Visio" + +[Microsoft-WebDAV-MiniRedir/*] +Parent=Microsoft +Browser="Microsoft-WebDAV" + +[MSProxy/*] +Parent=Microsoft +Browser="MS Proxy" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Browsers + +[Miscellaneous Browsers] +Parent=DefaultProperties +Browser="Miscellaneous Browsers" +Frames=true +Tables=true +Cookies=true + +[*Amiga*] +Parent=Miscellaneous Browsers +Browser="Amiga" +Platform=Amiga + +[*avantbrowser*] +Parent=Miscellaneous Browsers +Browser="Avant Browser" + +[Ace Explorer] +Parent=Miscellaneous Browsers +Browser="Ace Explorer" + +[Enigma Browser*] +Parent=Miscellaneous Browsers +Browser="Enigma Browser" + +[Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*] +Parent=Miscellaneous Browsers +Browser="Godzilla" + +[GreenBrowser] +Parent=Miscellaneous Browsers +Browser="GreenBrowser" +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/* (Win32;*Escape?*; ?)] +Parent=Miscellaneous Browsers +Browser="Escape" +Platform=Win32 + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*] +Parent=Miscellaneous Browsers +Browser="HistoryHound" + +[NetRecorder*] +Parent=Miscellaneous Browsers +Browser="NetRecorder" + +[NetSurfer*] +Parent=Miscellaneous Browsers +Browser="NetSurfer" + +[ogeb browser , Version 1.1.0] +Parent=Miscellaneous Browsers +Browser="ogeb browser" +Version=1.1 +MajorVer=1 +MinorVer=1 + +[SCEJ PSP BROWSER 0102pspNavigator] +Parent=Miscellaneous Browsers +Browser="Wipeout Pure" + +[Sleipnir*] +Parent=Miscellaneous Browsers +Browser="Sleipnir" + +[SlimBrowser] +Parent=Miscellaneous Browsers +Browser="SlimBrowser" + +[WWW_Browser/*] +Parent=Miscellaneous Browsers +Browser="WWW Browser" +Version=1.69 +MajorVer=1 +MinorVer=69 +Platform=Win16 +CSS=3 +CssVersion=3 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NameProtect + +[NameProtect] +Parent=DefaultProperties +Browser="NameProtect" +Stripper=true +isBanned=true +Crawler=true + +[abot/*] +Parent=NameProtect +Browser="NameProtect" + +[NP/*] +Parent=NameProtect +Browser="NameProtect" + +[NPBot*] +Parent=NameProtect +Browser="NameProtect" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Offline Browsers + +[Offline Browsers] +Parent=DefaultProperties +Browser="Offline Browsers" +Frames=true +Tables=true +Cookies=true +Stripper=true +isBanned=true +Crawler=true + +[*Check&Get*] +Parent=Offline Browsers +Browser="Check&Get" + +[*HTTrack*] +Parent=Offline Browsers +Browser="HTTrack" + +[*MSIECrawler*] +Parent=Offline Browsers +Browser="IE Offline Browser" + +[*TweakMASTER*] +Parent=Offline Browsers +Browser="TweakMASTER" + +[BackStreet Browser *] +Parent=Offline Browsers +Browser="BackStreet Browser" + +[Go-Ahead-Got-It*] +Parent=Offline Browsers +Browser="Go Ahead Got-It" + +[iGetter/*] +Parent=Offline Browsers +Browser="iGetter" + +[Teleport*] +Parent=Offline Browsers +Browser="Teleport" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Online Scanners + +[Online Scanners] +Parent=DefaultProperties +Browser="Online Scanners" +Stripper=true +isBanned=true + +[Mozilla/4.0 (compatible; Trend Micro tmdr 1.*] +Parent=Online Scanners +Browser="Trend Micro" + +[Titanium 2005 (4.02.01)] +Parent=Online Scanners +Browser="Panda Antivirus Titanium" + +[virus_detector*] +Parent=Online Scanners +Browser="Secure Computing Corporation" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Proxy Servers + +[Proxy Servers] +Parent=DefaultProperties +Browser="Proxy Servers" + +[(squid/*STABLE*)] +Parent=Proxy Servers +Browser="Squid" + +[Anonymisiert*] +Parent=Proxy Servers +Browser="Anonymizied" + +[Anonymizer/*] +Parent=Proxy Servers +Browser="Anonymizer" + +[Anonymizied*] +Parent=Proxy Servers +Browser="Anonymizied" + +[Anonymous*] +Parent=Proxy Servers +Browser="Anonymous" + +[Anonymous/*] +Parent=Proxy Servers +Browser="Anonymous" + +[CE-Preload] +Parent=Proxy Servers +Browser="CE-Preload" + +[http://Anonymouse.org/*] +Parent=Proxy Servers +Browser="Anonymouse" + +[IE/6.01 (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser="Squid" + +[Mozilla/* (TuringOS; Turing Machine; 0.0)] +Parent=Proxy Servers +Browser="Anonymizer" + +[Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)] +Parent=Proxy Servers +Browser="SaferSurf" + +[Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)] +Parent=Proxy Servers +Browser="Yahoo!" +Stripper=true +isBanned=true +Crawler=true + +[Nutscrape] +Parent=Proxy Servers +Browser="Squid" + +[Nutscrape/* (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser="Squid" + +[Privoxy/*] +Parent=Proxy Servers +Browser="Privoxy" + +[ProxyTester*] +Parent=Proxy Servers +Browser="ProxyTester" +Stripper=true +isBanned=true +Crawler=true + +[SilentSurf*] +Parent=Proxy Servers +Browser="SilentSurf" + +[Space*Bison/*] +Parent=Proxy Servers +Browser="Proxomitron" + +[Squid-Prefetch] +Parent=Proxy Servers +Browser="Squid-Prefetch" + +[Squid/* (linux; 32-bit)] +Parent=Proxy Servers +Browser="Squid" + +[Sqworm/*] +Parent=Proxy Servers +Browser="Websense" + +[SurfControl] +Parent=Proxy Servers +Browser="SurfControl" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Research Projects + +[Research Projects] +Parent=DefaultProperties +Browser="Research Projects" +Stripper=true +isBanned=true +Crawler=true + +[*research*] +Parent=Research Projects + +[AcadiaUniversityWebCensusClient] +Parent=Research Projects +Browser="AcadiaUniversityWebCensusClient" + +[Amico Alpha * (*) Gecko/* AmicoAlpha/*] +Parent=Research Projects +Browser="Amico Alpha" + +[annotate_google; http://ponderer.org/*] +Parent=Research Projects +Browser="Annotate Google" + +[e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)] +Parent=Research Projects +Browser="e-SocietyRobot" + +[Forschungsportal/*] +Parent=Research Projects +Browser="Forschungsportal" + +[Gulper Web *] +Parent=Research Projects +Browser="Gulper Web Bot" + +[HooWWWer/*] +Parent=Research Projects +Browser="HooWWWer" + +[inetbot/* (?http://www.inetbot.com/bot.html)] +Parent=Research Projects +Browser="inetbot" + +[IRLbot/*] +Parent=Research Projects +Browser="IRLbot" + +[Lachesis] +Parent=Research Projects +Browser="Lachesis" + +[Mozilla/5.0 (compatible; nextthing.org/*)] +Parent=Research Projects +Browser="nextthing.org" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; Theophrastus/*)] +Parent=Research Projects +Browser="Theophrastus" + +[MQbot*] +Parent=Research Projects +Browser="MQbot" + +[OutfoxBot/*] +Parent=Research Projects +Browser="OutfoxBot" + +[polybot?*] +Parent=Research Projects +Browser="Polybot" + +[Shim?Crawler*] +Parent=Research Projects +Browser="Shim Crawler" + +[Steeler/*] +Parent=Research Projects +Browser="Steeler" + +[UofTDB_experiment* (leehyun@cs.toronto.edu)] +Parent=Research Projects +Browser="UofTDB Experiment" + +[USyd-NLP-Spider*] +Parent=Research Projects +Browser="USyd-NLP-Spider" + +[wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)] +Parent=Research Projects +Browser="wwwster" +Beta=true + +[Zao-Crawler] +Parent=Research Projects +Browser="Zao-Crawler" + +[Zao/*] +Parent=Research Projects +Browser="Zao" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rippers + +[Rippers] +Parent=DefaultProperties +Browser="Rippers" +Frames=true +IFrames=true +Tables=true +Stripper=true +isBanned=true +Crawler=true + +[*grub-client*] +Parent=Rippers +Browser="grub-client" + +[*ickHTTP*] +Parent=Rippers +Browser="IP*Works" + +[*java*] +Parent=Rippers + +[*libwww-perl*] +Parent=Rippers +Browser="libwww-perl" + +[*WebGrabber*] +Parent=Rippers + +[*WinHttpRequest*] +Parent=Rippers +Browser="WinHttp" + +[3D-FTP/*] +Parent=Rippers +Browser="3D-FTP" + +[3wGet/*] +Parent=Rippers +Browser="3wGet" + +[ActiveRefresh*] +Parent=Rippers +Browser="ActiveRefresh" + +[Artera (Version *)] +Parent=Rippers +Browser="Artera" + +[b2w/*] +Parent=Rippers +Browser="b2w" + +[BasicHTTP/*] +Parent=Rippers +Browser="BasicHTTP" + +[BlockNote.Net] +Parent=Rippers +Browser="BlockNote.Net" + +[CAST] +Parent=Rippers +Browser="CAST" + +[CFNetwork/*] +Parent=Rippers +Browser="CFNetwork" + +[CFSCHEDULE*] +Parent=Rippers +Browser="ColdFusion Task Scheduler" + +[CobWeb/*] +Parent=Rippers +Browser="CobWeb" + +[ColdFusion*] +Parent=Rippers +Browser="ColdFusion" + +[Crawl_Application] +Parent=Rippers +Browser="Crawl_Application" + +[curl/*] +Parent=Rippers +Browser="cURL" + +[Custo*] +Parent=Rippers +Browser="Custo" + +[DataCha0s/*] +Parent=Rippers +Browser="DataCha0s" + +[DeepIndexer*] +Parent=Rippers +Browser="DeepIndexer" + +[DISCo Pump *] +Parent=Rippers +Browser="DISCo Pump" + +[eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)] +Parent=Rippers +Browser="eStyleSearch" +Win32=true + +[ezic.com http agent *] +Parent=Rippers +Browser="Ezic.com" + +[fetch libfetch/*] +Parent=Rippers + +[Flaming AttackBot*] +Parent=Rippers +Browser="Flaming AttackBot" + +[Foobot*] +Parent=Rippers +Browser="Foobot" + +[gnome-vfs/*] +Parent=Rippers +Browser="gnome-vfs" + +[Harvest/*] +Parent=Rippers +Browser="Harvest" + +[HLoader] +Parent=Rippers +Browser="HLoader" + +[Holmes/*] +Parent=Rippers +Browser="Holmes" + +[HTMLParser/*] +Parent=Rippers +Browser="HTMLParser" + +[http generic] +Parent=Rippers +Browser="http generic" + +[httpclient*] +Parent=Rippers + +[httperf/*] +Parent=Rippers +Browser="httperf" + +[HttpSession] +Parent=Rippers +Browser="HttpSession" + +[httpunit/*] +Parent=Rippers +Browser="HttpUnit" + +[ICE_GetFile] +Parent=Rippers +Browser="ICE_GetFile" + +[iexplore.exe] +Parent=Rippers + +[Inet - Eureka App] +Parent=Rippers +Browser="Inet - Eureka App" + +[INetURL/*] +Parent=Rippers +Browser="INetURL" + +[InetURL:/*] +Parent=Rippers +Browser="InetURL" + +[Internet Exploiter/*] +Parent=Rippers + +[Internet Explore *] +Parent=Rippers +Browser="Fake IE" + +[Internet Explorer *] +Parent=Rippers +Browser="Fake IE" + +[IP*Works!*/*] +Parent=Rippers +Browser="IP*Works!" + +[IrssiUrlLog/*] +Parent=Rippers +Browser="IrssiUrlLog" + +[Jakarta Commons-HttpClient/*] +Parent=Rippers +Browser="Jakarta Commons-HttpClient" + +[JPluck/*] +Parent=Rippers +Browser="JPluck" + +[Kapere (http://www.kapere.com)] +Parent=Rippers +Browser="Kapere" + +[LeechGet*] +Parent=Rippers +Browser="LeechGet" + +[libcurl-agent/*] +Parent=Rippers +Browser="libcurl" + +[libWeb/clsHTTP*] +Parent=Rippers +Browser="libWeb/clsHTTP" + +[lwp*] +Parent=Rippers + +[MFC_Tear_Sample] +Parent=Rippers +Browser="MFC_Tear_Sample" + +[Moozilla] +Parent=Rippers +Browser="Moozilla" + +[MovableType/*] +Parent=Rippers +Browser="MovableType Web Log" + +[Mozilla/2.0 (compatible; NEWT ActiveX; Win32)] +Parent=Rippers +Browser="NEWT ActiveX" +Platform=Win32 + +[Mozilla/3.0 (compatible)] +Parent=Rippers + +[Mozilla/3.0 (compatible; Indy Library)] +Parent=Rippers +Cookies=true + +[Mozilla/3.01 (compatible;)] +Parent=Rippers + +[Mozilla/4.0 (compatible; BorderManager*)] +Parent=Rippers +Browser="Novell BorderManager" + +[Mozilla/4.0 (compatible;)] +Parent=Rippers + +[mywebcollage/*] +Parent=Rippers +Browser="mywebcollage" + +[OCN-SOC/*] +Parent=Rippers +Browser="OCN-SOC" + +[Offline Explorer*] +Parent=Rippers +Browser="Offline Explorer" + +[OSSProxy*] +Parent=Rippers +Browser="OSSProxy" + +[Pageload*] +Parent=Rippers +Browser="PageLoad" + +[pavuk/*] +Parent=Rippers +Browser="Pavuk" + +[PEAR HTTP_Request*] +Parent=Rippers +Browser="PEAR-PHP" + +[PHP*] +Parent=Rippers +Browser="PHP" + +[PigBlock (Windows NT 5.1; U)*] +Parent=Rippers +Browser="PigBlock" +Win32=true + +[Pockey*] +Parent=Rippers +Browser="Pockey-GetHTML" + +[POE-Component-Client-HTTP/*] +Parent=Rippers +Browser="POE-Component-Client-HTTP" + +[Python*] +Parent=Rippers +Browser="Python" + +[RepoMonkey*] +Parent=Rippers +Browser="RepoMonkey" + +[SBL-BOT*] +Parent=Rippers +Browser="BlackWidow" + +[ScoutAbout*] +Parent=Rippers +Browser="ScoutAbout" + +[sherlock/*] +Parent=Rippers +Browser="Sherlock" + +[SiteParser/*] +Parent=Rippers +Browser="SiteParser" + +[SiteSnagger*] +Parent=Rippers +Browser="SiteSnagger" + +[SiteSucker/*] +Parent=Rippers +Browser="SiteSucker" + +[SiteWinder*] +Parent=Rippers +Browser="SiteWinder" + +[SOFTWING_TEAR_AGENT*] +Parent=Rippers +Browser="AspTear" + +[SuperHTTP/*] +Parent=Rippers +Browser="SuperHTTP" + +[Tcl http client package*] +Parent=Rippers +Browser="Tcl http client package" + +[Twisted PageGetter] +Parent=Rippers +Browser="Twisted PageGetter" + +[URL2File/*] +Parent=Rippers +Browser="URL2File" + +[UtilMind HTTPGet] +Parent=Rippers +Browser="UtilMind HTTPGet" + +[VCI WebViewer*] +Parent=Rippers +Browser="VCI WebViewer" + +[W3CRobot/*] +Parent=Rippers +Browser="W3CRobot" + +[Web Downloader*] +Parent=Rippers +Browser="Web Downloader" + +[Web Downloader/*] +Parent=Rippers +Browser="Web Downloader" + +[Web Magnet*] +Parent=Rippers +Browser="Web Magnet" + +[webbandit/*] +Parent=Rippers +Browser="webbandit" + +[WebCopier*] +Parent=Rippers +Browser="WebCopier" + +[WebDownloader*] +Parent=Rippers +Browser="WebDownloader" + +[WebFetch] +Parent=Rippers +Browser="WebFetch" + +[webfetch/*] +Parent=Rippers +Browser="WebFetch" + +[WebGatherer*] +Parent=Rippers +Browser="WebGatherer" + +[WebGet] +Parent=Rippers +Browser="WebGet" + +[WebReaper*] +Parent=Rippers +Browser="WebReaper" + +[WebSauger*] +Parent=Rippers +Browser="WebSauger" + +[Website Downloader*] +Parent=Rippers +Browser="Website Downloader" + +[Website eXtractor*] +Parent=Rippers +Browser="Website eXtractor" + +[Website Quester] +Parent=Rippers +Browser="Website Quester" + +[WebsiteExtractor*] +Parent=Rippers +Browser="Website eXtractor" + +[WebSnatcher*] +Parent=Rippers +Browser="WebSnatcher" + +[Webster Pro*] +Parent=Rippers +Browser="Webster Pro" + +[WebStripper*] +Parent=Rippers +Browser="WebStripper" + +[WebWhacker*] +Parent=Rippers +Browser="WebWhacker" + +[WinScripter iNet Tools] +Parent=Rippers +Browser="WinScripter iNet Tools" + +[WWW-Mechanize/*] +Parent=Rippers +Browser="WWW-Mechanize" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Site Monitors + +[Site Monitors] +Parent=DefaultProperties +Browser="Site Monitors" +Cookies=true +Stripper=true +isBanned=true +Crawler=true + +[*EasyRider*] +Parent=Site Monitors +Browser="EasyRider" + +[*maxamine.com--robot*] +Parent=Site Monitors +Browser="maxamine.com--robot" +Stripper=true +isBanned=true + +[*Netcraft Web Server Survey*] +Parent=Site Monitors +Browser="Netcraft" +Stripper=true +isBanned=true + +[*Netcraft Webserver Survey*] +Parent=Site Monitors +Browser="Netcraft Webserver Survey" +Stripper=true +isBanned=true + +[*WebMon ?.*] +Parent=Site Monitors +Browser="WebMon" + +[Kenjin Spider*] +Parent=Site Monitors +Browser="Kenjin Spider" + +[Kevin http://*] +Parent=Site Monitors +Browser="Kevin" +Stripper=true +isBanned=true + +[Mozilla/4.0 (compatible; ChangeDetection/*] +Parent=Site Monitors +Browser="ChangeDetection" + +[Myst Monitor Service v*] +Parent=Site Monitors +Browser="Myst Monitor Service" + +[Net Probe] +Parent=Site Monitors +Browser="Net Probe" + +[NetMechanic*] +Parent=Site Monitors +Browser="NetMechanic" + +[NetReality*] +Parent=Site Monitors +Browser="NetReality" + +[Site Valet Online*] +Parent=Site Monitors +Browser="Site Valet" +Stripper=true +isBanned=true + +[SITECHECKER] +Parent=Site Monitors +Browser="SITECHECKER" + +[sitemonitor@dnsvr.com/*] +Parent=Site Monitors +Browser="ZoneEdit Failover Monitor" +Stripper=false +isBanned=false + +[UpTime Checker*] +Parent=Site Monitors +Browser="UpTime Checker" + +[URL Control*] +Parent=Site Monitors +Browser="URL Control" + +[URL_Access/*] +Parent=Site Monitors + +[URLCHECK] +Parent=Site Monitors +Browser="URLCHECK" + +[URLy Warning*] +Parent=Site Monitors +Browser="URLy Warning" + +[Webcheck *] +Parent=Site Monitors +Browser="Webcheck" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebPatrol/*] +Parent=Site Monitors +Browser="WebPatrol" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Social Bookmarkers + +[Social Bookmarkers] +Parent=DefaultProperties +Browser="Social Bookmarkers" +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)] +Parent=Social Bookmarkers +Browser="Cocoalicious" +Platform=PowerTV + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Translators + +[Translators] +Parent=DefaultProperties +Browser="Translators" +Frames=true +Tables=true +Cookies=true + +[Seram Server] +Parent=Translators +Browser="Seram Server" + +[TeragramWebcrawler/*] +Parent=Translators +Browser="TeragramWebcrawler" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebIndexer/* (Web Indexer; *)] +Parent=Translators +Browser="WorldLingo" + +[WebTrans] +Parent=Translators +Browser="WebTrans" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Version Checkers + +[Version Checkers] +Parent=DefaultProperties +Browser="Version Checkers" +Crawler=true + +[Automated Browscap.ini Updater. To report issues contact us at http://www.skycomp.ca] +Parent=Version Checkers +Browser="Automated Browscap.ini Updater" + +[BMC Link Validator (http://www.briansmodelcars.com/links/)] +Parent=Version Checkers +Browser="BMC Link Validator" +MajorVer=1 +MinorVer=0 +Platform=Win2000 + +[BrowscapUpdater1.0] +Parent=Version Checkers + +[Browser Capabilities Project (http://browsers.garykeith.com; http://browsers.garykeith.com/sitemail/contact-me.asp)] +Parent=Version Checkers +Browser="Gary Keith's Version Checker" + +[Browser Capabilities Project AutoDownloader; created by Tom Kelleher Consulting, Inc. (tkelleher.com); used with special permission from Gary Joel Keith; uses Microsoft's WinHTTP component] +Parent=Version Checkers +Browser="TKC AutoDownloader" + +[browsers.garykeith.com browscap.ini bot BETA] +Parent=Version Checkers + +[Mono Browser Capabilities Updater*] +Parent=Version Checkers +Browser="Mono Browser Capabilities Updater" +Stripper=true +isBanned=true + +[UpdateBrowscap*] +Parent=Version Checkers +Browser="UpdateBrowscap" + +[www.garykeith.com browscap.ini bot*] +Parent=Version Checkers +Browser="clarkson.edu " + +[www.substancia.com AutoHTTPAgent (ver *)] +Parent=Version Checkers +Browser="Substância" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Players + +[Media Players] +Parent=DefaultProperties +Browser="Media Players" +Cookies=true + +[iTunes/* (Windows; ?)] +Parent=Media Players +Browser="iTunes" +Platform=Win32 +Win32=true + +[Microsoft NetShow(TM) Player with RealVideo(R)] +Parent=Media Players +Browser="Microsoft NetShow" + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer] +Parent=Media Players +Browser="RealPlayer" +Platform=MacOSX + +[MPlayer 0.9*] +Parent=Media Players +Browser="MPlayer" +Version=0.9 +MajorVer=0 +MinorVer=9 + +[MPlayer 1.*] +Parent=Media Players +Browser="MPlayer" +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MPlayer HEAD CVS] +Parent=Media Players +Browser="MPlayer" + +[RealPlayer*] +Parent=Media Players +Browser="RealPlayer" + +[RMA/*] +Parent=Media Players +Browser="RMA" + +[vobsub] +Parent=Media Players +Browser="vobsub" +Stripper=true +isBanned=true + +[WinampMPEG/*] +Parent=Media Players +Browser="WinAmp" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime + +[QuickTime] +Parent=DefaultProperties +Browser="QuickTime" +Cookies=true + +[QuickTime (qtver=6.0*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacOSX + +[QuickTime (qtver=6.0*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacPPC + +[QuickTime (qtver=6.0*;os=Windows 95*)] +Parent=QuickTime +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.0*;os=Windows 98*)] +Parent=QuickTime +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.0*;os=Windows Me*)] +Parent=QuickTime +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.0*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.0*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.0*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.0*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=6.1*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.1 +MajorVer=6 +MinorVer=1 +Platform=MacOSX + +[QuickTime (qtver=6.1*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.1 +MajorVer=6 +MinorVer=1 +Platform=MacPPC + +[QuickTime (qtver=6.1*;os=Windows 95*)] +Parent=QuickTime +Version=6.1 +MajorVer=6 +MinorVer=1 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.1*;os=Windows 98*)] +Parent=QuickTime +Version=6.1 +MajorVer=6 +MinorVer=1 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.1*;os=Windows Me*)] +Parent=QuickTime +Version=6.1 +MajorVer=6 +MinorVer=1 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.1*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.1 +MajorVer=6 +MinorVer=1 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.1*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.1 +MajorVer=6 +MinorVer=1 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.1*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.1 +MajorVer=6 +MinorVer=1 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.1*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.1 +MajorVer=6 +MinorVer=1 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=6.2*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.2 +MajorVer=6 +MinorVer=2 +Platform=MacOSX + +[QuickTime (qtver=6.2*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.2 +MajorVer=6 +MinorVer=2 +Platform=MacPPC + +[QuickTime (qtver=6.2*;os=Windows 95*)] +Parent=QuickTime +Version=6.2 +MajorVer=6 +MinorVer=2 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.2*;os=Windows 98*)] +Parent=QuickTime +Version=6.2 +MajorVer=6 +MinorVer=2 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.2*;os=Windows Me*)] +Parent=QuickTime +Version=6.2 +MajorVer=6 +MinorVer=2 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.2*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.2 +MajorVer=6 +MinorVer=2 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.2*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.2 +MajorVer=6 +MinorVer=2 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.2*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.2 +MajorVer=6 +MinorVer=2 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.2*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.2 +MajorVer=6 +MinorVer=2 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=6.3*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.3 +MajorVer=6 +MinorVer=3 +Platform=MacOSX + +[QuickTime (qtver=6.3*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.3 +MajorVer=6 +MinorVer=3 +Platform=MacPPC + +[QuickTime (qtver=6.3*;os=Windows 95*)] +Parent=QuickTime +Version=6.3 +MajorVer=6 +MinorVer=3 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.3*;os=Windows 98*)] +Parent=QuickTime +Version=6.3 +MajorVer=6 +MinorVer=3 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.3*;os=Windows Me*)] +Parent=QuickTime +Version=6.3 +MajorVer=6 +MinorVer=3 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.3*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.3 +MajorVer=6 +MinorVer=3 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.3*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.3 +MajorVer=6 +MinorVer=3 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.3*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.3 +MajorVer=6 +MinorVer=3 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.3*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.3 +MajorVer=6 +MinorVer=3 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=6.4*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.4 +MajorVer=6 +MinorVer=4 +Platform=MacOSX + +[QuickTime (qtver=6.4*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.4 +MajorVer=6 +MinorVer=4 +Platform=MacPPC + +[QuickTime (qtver=6.4*;os=Windows 95*)] +Parent=QuickTime +Version=6.4 +MajorVer=6 +MinorVer=4 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.4*;os=Windows 98*)] +Parent=QuickTime +Version=6.4 +MajorVer=6 +MinorVer=4 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.4*;os=Windows Me*)] +Parent=QuickTime +Version=6.4 +MajorVer=6 +MinorVer=4 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.4*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.4 +MajorVer=6 +MinorVer=4 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.4*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.4 +MajorVer=6 +MinorVer=4 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.4*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.4 +MajorVer=6 +MinorVer=4 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.4*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.4 +MajorVer=6 +MinorVer=4 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=6.5*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.5 +MajorVer=6 +MinorVer=5 +Platform=MacOSX + +[QuickTime (qtver=6.5*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.5 +MajorVer=6 +MinorVer=5 +Platform=MacPPC + +[QuickTime (qtver=6.5*;os=Windows 95*)] +Parent=QuickTime +Version=6.5 +MajorVer=6 +MinorVer=5 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.5*;os=Windows 98*)] +Parent=QuickTime +Version=6.5 +MajorVer=6 +MinorVer=5 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.5*;os=Windows Me*)] +Parent=QuickTime +Version=6.5 +MajorVer=6 +MinorVer=5 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.5*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.5 +MajorVer=6 +MinorVer=5 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.5*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.5 +MajorVer=6 +MinorVer=5 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.5*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.5 +MajorVer=6 +MinorVer=5 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.5*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.5 +MajorVer=6 +MinorVer=5 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=6.6*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.6 +MajorVer=6 +MinorVer=6 +Platform=MacOSX + +[QuickTime (qtver=6.6*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.6 +MajorVer=6 +MinorVer=6 +Platform=MacPPC + +[QuickTime (qtver=6.6*;os=Windows 95*)] +Parent=QuickTime +Version=6.6 +MajorVer=6 +MinorVer=6 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.6*;os=Windows 98*)] +Parent=QuickTime +Version=6.6 +MajorVer=6 +MinorVer=6 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.6*;os=Windows Me*)] +Parent=QuickTime +Version=6.6 +MajorVer=6 +MinorVer=6 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.6*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.6 +MajorVer=6 +MinorVer=6 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.6*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.6 +MajorVer=6 +MinorVer=6 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.6*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.6 +MajorVer=6 +MinorVer=6 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.6*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.6 +MajorVer=6 +MinorVer=6 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=6.7*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.7 +MajorVer=6 +MinorVer=7 +Platform=MacOSX + +[QuickTime (qtver=6.7*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.7 +MajorVer=6 +MinorVer=7 +Platform=MacPPC + +[QuickTime (qtver=6.7*;os=Windows 95*)] +Parent=QuickTime +Version=6.7 +MajorVer=6 +MinorVer=7 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.7*;os=Windows 98*)] +Parent=QuickTime +Version=6.7 +MajorVer=6 +MinorVer=7 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.7*;os=Windows Me*)] +Parent=QuickTime +Version=6.7 +MajorVer=6 +MinorVer=7 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.7*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.7 +MajorVer=6 +MinorVer=7 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.7*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.7 +MajorVer=6 +MinorVer=7 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.7*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.7 +MajorVer=6 +MinorVer=7 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.7*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.7 +MajorVer=6 +MinorVer=7 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=6.8*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.8 +MajorVer=6 +MinorVer=8 +Platform=MacOSX + +[QuickTime (qtver=6.8*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.8 +MajorVer=6 +MinorVer=8 +Platform=MacPPC + +[QuickTime (qtver=6.8*;os=Windows 95*)] +Parent=QuickTime +Version=6.8 +MajorVer=6 +MinorVer=8 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.8*;os=Windows 98*)] +Parent=QuickTime +Version=6.8 +MajorVer=6 +MinorVer=8 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.8*;os=Windows Me*)] +Parent=QuickTime +Version=6.8 +MajorVer=6 +MinorVer=8 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.8*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.8 +MajorVer=6 +MinorVer=8 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.8*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.8 +MajorVer=6 +MinorVer=8 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.8*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.8 +MajorVer=6 +MinorVer=8 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.8*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.8 +MajorVer=6 +MinorVer=8 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=6.9*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=6.9 +MajorVer=6 +MinorVer=9 +Platform=MacOSX + +[QuickTime (qtver=6.9*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=6.9 +MajorVer=6 +MinorVer=9 +Platform=MacPPC + +[QuickTime (qtver=6.9*;os=Windows 95*)] +Parent=QuickTime +Version=6.9 +MajorVer=6 +MinorVer=9 +Platform=Win95 +Win32=true + +[QuickTime (qtver=6.9*;os=Windows 98*)] +Parent=QuickTime +Version=6.9 +MajorVer=6 +MinorVer=9 +Platform=Win98 +Win32=true + +[QuickTime (qtver=6.9*;os=Windows Me*)] +Parent=QuickTime +Version=6.9 +MajorVer=6 +MinorVer=9 +Platform=WinME +Win32=true + +[QuickTime (qtver=6.9*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=6.9 +MajorVer=6 +MinorVer=9 +Platform=WinNT +Win32=true + +[QuickTime (qtver=6.9*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=6.9 +MajorVer=6 +MinorVer=9 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=6.9*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=6.9 +MajorVer=6 +MinorVer=9 +Platform=WinXP +Win32=true + +[QuickTime (qtver=6.9*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=6.9 +MajorVer=6 +MinorVer=9 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=MacOSX + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=MacPPC + +[QuickTime (qtver=7.0*;os=Windows 95*)] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=Win95 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows 98*)] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows Me*)] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=WinME +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.1*)] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=Win2003 +Win32=true + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Platform=MacOSX + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Platform=MacPPC + +[QuickTime (qtver=7.1*;os=Windows 98*)] +Parent=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 4.0*)] +Parent=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.0*)] +Parent=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.1*)] +Parent=QuickTime +MajorVer=7.1 +MinorVer=7 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.2*)] +Parent=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Platform=Win2003 +Win32=true + +[QuickTime/7.0.* (qtver=7.0.*;*;os=Mac 10.*)*] +Parent=QuickTime +Version=7.0 +MajorVer=7 +MinorVer=0 +Platform=MacOSX + +[QuickTime/7.1.* (qtver=7.1.*;*;os=Mac 10.*)*] +Parent=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows Media Player + +[Windows Media Player] +Parent=DefaultProperties +Browser="Windows Media Player" +Cookies=true + +[NSPlayer/10.*] +Parent=Windows Media Player +Version=10.0 +MajorVer=10 +MinorVer=0 + +[NSPlayer/11.* WMFSDK/11.*] +Parent=Windows Media Player +Browser="Windows Media Player" +Version=11.0 +MajorVer=11 +MinorVer=0 + +[NSPlayer/4.*] +Parent=Windows Media Player +Browser="Windows Media Player" +Version=4.0 +MajorVer=4 +MinorVer=0 + +[NSPlayer/7.*] +Parent=Windows Media Player +Browser="Windows Media Player" +Version=7.0 +MajorVer=7 +MinorVer=0 + +[NSPlayer/8.*] +Parent=Windows Media Player +Browser="Windows Media Player" +Version=8.0 +MajorVer=8 +MinorVer=0 + +[NSPlayer/9.*] +Parent=Windows Media Player +Browser="Windows Media Player" +Version=9.0 +MajorVer=9 +MinorVer=0 + +[Windows-Media-Player/10.*] +Parent=Windows Media Player +Browser="Windows-Media-Player" +Version=10.0 +MajorVer=10 +MinorVer=0 +Win32=true + +[Windows-Media-Player/11.*] +Parent=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 +Win32=true + +[Windows-Media-Player/7.*] +Parent=Windows Media Player +Browser="Windows Media Player" +Version=7.0 +MajorVer=7 +MinorVer=0 +Win32=true + +[Windows-Media-Player/8.*] +Parent=Windows Media Player +Browser="Windows Media Player" +Version=8.0 +MajorVer=8 +MinorVer=0 +Win32=true + +[Windows-Media-Player/9.*] +Parent=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AvantGo + +[AvantGo] +Parent=DefaultProperties +Browser="AvantGo" +Frames=true +Tables=true +Cookies=true +JavaScript=true +WAP=true +isMobileDevice=true + +[AvantGo*] +Parent=AvantGo + +[Mozilla/?.0 (*; U; AvantGo 3.?)] +Parent=AvantGo +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/?.0 (*; U; AvantGo 4.?)] +Parent=AvantGo +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.0 (*; U; AvantGo 5.?)] +Parent=AvantGo +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.0 (*; U; AvantGo 6.?)] +Parent=AvantGo +Version=6.0 +MajorVer=6 +MinorVer=0 + +[Mozilla/?.0 (compatible; AvantGo 3.?)] +Parent=AvantGo +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/?.0 (compatible; AvantGo 3.?; *)] +Parent=AvantGo +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/?.0 (compatible; AvantGo 3.?; FreeBSD)] +Parent=AvantGo +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=FreeBSD + +[Mozilla/?.0 (compatible; AvantGo 4.?)] +Parent=AvantGo +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.0 (compatible; AvantGo 4.?; *)] +Parent=AvantGo +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.0 (compatible; AvantGo 4.?; FreeBSD)] +Parent=AvantGo +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=FreeBSD + +[Mozilla/?.0 (compatible; AvantGo 5.?)] +Parent=AvantGo +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.0 (compatible; AvantGo 5.?; *)] +Parent=AvantGo +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.0 (compatible; AvantGo 5.?; FreeBSD)] +Parent=AvantGo +Version=5.0 +MajorVer=5 +MinorVer=0 +Platform=FreeBSD + +[Mozilla/?.0 (compatible; AvantGo 6.?)] +Parent=AvantGo +Version=6.0 +MajorVer=6 +MinorVer=0 + +[Mozilla/?.0 (compatible; AvantGo 6.?; *)] +Parent=AvantGo +Version=6.0 +MajorVer=6 +MinorVer=0 + +[Mozilla/?.0 (compatible; AvantGo 6.?; FreeBSD)] +Parent=AvantGo +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=FreeBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BlackBerry + +[BlackBerry] +Parent=DefaultProperties +Browser="BlackBerry" +Frames=true +Tables=true +Cookies=true +JavaScript=true +WAP=true +isMobileDevice=true + +[BlackBerry7*/3.5.*] +Parent=BlackBerry +Version=3.5 +MajorVer=3 +MinorVer=5 + +[BlackBerry7*/3.6.*] +Parent=BlackBerry +Version=3.6 +MajorVer=3 +MinorVer=6 + +[BlackBerry7*/3.7.*] +Parent=BlackBerry +Version=3.7 +MajorVer=3 +MinorVer=7 + +[BlackBerry7*/3.8.*] +Parent=BlackBerry +Version=3.8 +MajorVer=3 +MinorVer=8 + +[BlackBerry7*/3.9.*] +Parent=BlackBerry +Version=3.9 +MajorVer=3 +MinorVer=9 + +[BlackBerry7*/4.0.*] +Parent=BlackBerry +Version=4.0 +MajorVer=4 +MinorVer=0 + +[BlackBerry7*/4.1.*] +Parent=BlackBerry +Version=4.1 +MajorVer=4 +MinorVer=1 + +[BlackBerry8*/3.5.*] +Parent=BlackBerry +Version=3.5 +MajorVer=3 +MinorVer=5 + +[BlackBerry8*/3.6.*] +Parent=BlackBerry +Version=3.6 +MajorVer=3 +MinorVer=6 + +[BlackBerry8*/3.7.*] +Parent=BlackBerry +Version=3.7 +MajorVer=3 +MinorVer=7 + +[BlackBerry8*/3.8.*] +Parent=BlackBerry +Version=3.8 +MajorVer=3 +MinorVer=8 + +[BlackBerry8*/3.9.*] +Parent=BlackBerry +Version=3.9 +MajorVer=3 +MinorVer=9 + +[BlackBerry8*/4.0.*] +Parent=BlackBerry +Version=4.0 +MajorVer=4 +MinorVer=0 + +[BlackBerry8*/4.1.*] +Parent=BlackBerry +Version=4.1 +MajorVer=4 +MinorVer=1 + +[BlackBerrySimulator/3.5.*] +Parent=BlackBerry +Version=3.5 +MajorVer=3 +MinorVer=5 + +[BlackBerrySimulator/3.6.*] +Parent=BlackBerry +Version=3.6 +MajorVer=3 +MinorVer=6 + +[BlackBerrySimulator/3.7.*] +Parent=BlackBerry +Version=3.7 +MajorVer=3 +MinorVer=7 + +[BlackBerrySimulator/3.8.*] +Parent=BlackBerry +Version=3.8 +MajorVer=3 +MinorVer=8 + +[BlackBerrySimulator/3.9.*] +Parent=BlackBerry +Version=3.9 +MajorVer=3 +MinorVer=9 + +[BlackBerrySimulator/4.0.*] +Parent=BlackBerry +Version=4.0 +MajorVer=4 +MinorVer=0 + +[BlackBerrySimulator/4.1.*] +Parent=BlackBerry +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Mozilla/?.0 (compatible; MSIE ?.*; Windows*) BlackBerry7*/3.5.*] +Parent=BlackBerry +Version=3.5 +MajorVer=3 +MinorVer=5 +Win32=true + +[Mozilla/?.0 (compatible; MSIE ?.*; Windows*) BlackBerry7*/3.6.*] +Parent=BlackBerry +Version=3.6 +MajorVer=3 +MinorVer=6 +Win32=true + +[Mozilla/?.0 (compatible; MSIE ?.*; Windows*) BlackBerry7*/3.7.*] +Parent=BlackBerry +Version=3.7 +MajorVer=3 +MinorVer=7 +Win32=true + +[Mozilla/?.0 (compatible; MSIE ?.*; Windows*) BlackBerry7*/3.8.*] +Parent=BlackBerry +Version=3.8 +MajorVer=3 +MinorVer=8 +Win32=true + +[Mozilla/?.0 (compatible; MSIE ?.*; Windows*) BlackBerry7*/3.9.*] +Parent=BlackBerry +Version=3.9 +MajorVer=3 +MinorVer=9 +Win32=true + +[Mozilla/?.0 (compatible; MSIE ?.*; Windows*) BlackBerry7*/4.0.*] +Parent=BlackBerry +Version=4.0 +MajorVer=4 +MinorVer=0 +Win32=true + +[Mozilla/?.0 (compatible; MSIE ?.*; Windows*) BlackBerry7*/4.1.*] +Parent=BlackBerry +Version=4.1 +MajorVer=4 +MinorVer=1 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Handspring Blazer + +[Blazer] +Parent=DefaultProperties +Browser="Handspring Blazer" +Platform=unknownPalm +Frames=true +Tables=true +Cookies=true +WAP=true +isMobileDevice=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 9?; PalmSource/*; Blazer/3.*) ??;???x???] +Parent=Blazer +Version=3.0 +MajorVer=3 +MinorVer=0 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 9?; PalmSource/*; Blazer/4.*) ??;???x???] +Parent=Blazer +Version=4.0 +MajorVer=4 +MinorVer=0 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 9?; PalmSource/*; Blazer/5.*) ??;???x???] +Parent=Blazer +Version=5.0 +MajorVer=5 +MinorVer=0 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 9?; PalmSource; Blazer 3.*) ??;???x???] +Parent=Blazer +Version=3.0 +MajorVer=3 +MinorVer=0 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 9?; PalmSource; Blazer 4.*) ??;???x???] +Parent=Blazer +Version=4.0 +MajorVer=4 +MinorVer=0 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 9?; PalmSource; Blazer 5.*) ??;???x???] +Parent=Blazer +Version=5.0 +MajorVer=5 +MinorVer=0 +Win32=true + +[UPG1 UP/?.0 (*compatible; Blazer 3.*)] +Parent=Blazer +Version=3.0 +MajorVer=3 +MinorVer=0 + +[UPG1 UP/?.0 (*compatible; Blazer 4.*)] +Parent=Blazer +Version=4.0 +MajorVer=4 +MinorVer=0 + +[UPG1 UP/?.0 (*compatible; Blazer 5.*)] +Parent=Blazer +Version=5.0 +MajorVer=5 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DoCoMo + +[DoCoMo] +Parent=DefaultProperties +Browser="DoCoMo" +Frames=true +Tables=true +Cookies=true +JavaScript=true +WAP=true +isMobileDevice=true + +[DoCoMo/1.0*] +Parent=DoCoMo +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WAP +CSS=1 +CssVersion=1 +supportsCSS=true + +[DoCoMo/2.0*] +Parent=DoCoMo +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=WAP +CSS=1 +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Doris + +[Doris] +Parent=DefaultProperties +Browser="Doris" +Platform=unknownSymbianOS +Frames=true +Tables=true +Cookies=true +WAP=true +isMobileDevice=true + +[Doris/*] +Parent=Doris + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KDDI + +[KDDI] +Parent=DefaultProperties +Browser="KDDI" +Frames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaScript=true +ActiveXControls=true +WAP=true +isMobileDevice=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[KDDI-CA?? UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +[KDDI-Googlebot-Mobile] +Parent=KDDI + +[KDDI-HI?? UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +[KDDI-KC?? UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +[KDDI-PT?? UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +[KDDI-SA?? UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +[KDDI-SN?? UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser + +[Motorola Web Browser] +Parent=DefaultProperties +Browser="Motorola Internet Browser" +Frames=true +Tables=true +Cookies=true +WAP=true +isMobileDevice=true + +[MOT-1*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-8700_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-0A/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-2B/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-88/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-C???/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-GATW_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-L6/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-L7/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-M*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-SAP4_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-T7*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-T721*] +Parent=Motorola Internet Browser + +[MOT-TA02/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-V3/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V4*/* MIB/*] +Parent=Motorola Internet Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser + +[Motorola Web Browser] +Parent=DefaultProperties +Browser="Motorola Internet Browser" +Frames=true +Tables=true +Cookies=true +WAP=true +isMobileDevice=true + +[MOT-1*/* UP.Browser/*] +Parent=Motorola Web Browser + +[MOT-8700_/* UP.Browser/*] +Parent=Motorola Web Browser + +[MOT-A-0A/* UP.Browser/*] +Parent=Motorola Web Browser + +[MOT-A-2B/* UP.Browser/*] +Parent=Motorola Web Browser + +[MOT-A-88/* UP.Browser/*] +Parent=Motorola Web Browser + +[MOT-C???/* MIB/*] +Parent=Motorola Web Browser + +[MOT-GATW_/* UP.Browser/*] +Parent=Motorola Web Browser + +[MOT-L6/* MIB/*] +Parent=Motorola Web Browser + +[MOT-L7/* MIB/*] +Parent=Motorola Web Browser + +[MOT-M*/* UP.Browser/*] +Parent=Motorola Web Browser + +[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Web Browser +Win32=true + +[MOT-SAP4_/* UP.Browser/*] +Parent=Motorola Web Browser + +[MOT-T7*/* MIB/*] +Parent=Motorola Web Browser + +[MOT-T721*] +Parent=Motorola Web Browser + +[MOT-TA02/* MIB/*] +Parent=Motorola Web Browser + +[MOT-V*/* MIB/*] +Parent=Motorola Web Browser + +[MOT-V*/* UP.Browser/*] +Parent=Motorola Web Browser + +[MOT-V3/* MIB/*] +Parent=Motorola Web Browser + +[MOT-V4*/* MIB/*] +Parent=Motorola Web Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetFront + +[NetFront] +Parent=DefaultProperties +Browser="NetFront" +Frames=true +Tables=true +Cookies=true +JavaScript=true +WAP=true +isMobileDevice=true + +[Mozilla/* (*)*NetFront/3.0*] +Parent=NetFront +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/* (*)*NetFront/3.1*] +Parent=NetFront +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/* (*)*NetFront/3.2*] +Parent=NetFront +Version=3.2 +MajorVer=3 +MinorVer=2 + +[Mozilla/* (*)*NetFront/3.3*] +Parent=NetFront +Version=3.3 +MajorVer=3 +MinorVer=3 + +[Mozilla/* (compatible; MSIE *; Windows *) NetFront/3.0*] +Parent=NetFront +Version=3.0 +MajorVer=3 +MinorVer=0 +Win32=true + +[Mozilla/* (compatible; MSIE *; Windows *) NetFront/3.1*] +Parent=NetFront +Version=3.1 +MajorVer=3 +MinorVer=1 +Win32=true + +[Mozilla/* (compatible; MSIE *; Windows *) NetFront/3.2*] +Parent=NetFront +Version=3.2 +MajorVer=3 +MinorVer=2 +Win32=true + +[Mozilla/* (compatible; MSIE *; Windows *) NetFront/3.3*] +Parent=NetFront +Version=3.3 +MajorVer=3 +MinorVer=3 +Win32=true + +[Mozilla/* (MobilePhone*) NetFront/3.0*] +Parent=NetFront +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/* (MobilePhone*) NetFront/3.1*] +Parent=NetFront +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/* (MobilePhone*) NetFront/3.2*] +Parent=NetFront +Version=3.2 +MajorVer=3 +MinorVer=2 + +[Mozilla/* (MobilePhone*) NetFront/3.3*] +Parent=NetFront +Version=3.3 +MajorVer=3 +MinorVer=3 + +[Mozilla/* (SmartPhone*) NetFront/3.0*] +Parent=NetFront +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/* (SmartPhone*) NetFront/3.1*] +Parent=NetFront +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/* (SmartPhone*) NetFront/3.2*] +Parent=NetFront +Version=3.2 +MajorVer=3 +MinorVer=2 + +[Mozilla/* (SmartPhone*) NetFront/3.3*] +Parent=NetFront +Version=3.3 +MajorVer=3 +MinorVer=3 + +[Mozilla/* (Windows; U; NT4.0; *) NetFront/3.0*] +Parent=NetFront +Version=3.0 +MajorVer=3 +MinorVer=0 +Win32=true + +[Mozilla/* (Windows; U; NT4.0; *) NetFront/3.1*] +Parent=NetFront +Version=3.1 +MajorVer=3 +MinorVer=1 +Win32=true + +[Mozilla/* (Windows; U; NT4.0; *) NetFront/3.2*] +Parent=NetFront +Version=3.2 +MajorVer=3 +MinorVer=2 +Win32=true + +[Mozilla/* (Windows; U; NT4.0; *) NetFront/3.3*] +Parent=NetFront +Version=3.3 +MajorVer=3 +MinorVer=3 +Win32=true + +[SAMSUNG-SGH-* Configuration/CLDC-?.? NetFront/3.2] +Parent=NetFront +Version=3.2 +MajorVer=3 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nokia + +[Nokia] +Parent=DefaultProperties +Browser="Nokia" +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +WAP=true +isMobileDevice=true + +[Mozilla/5.0 (SymbianOS/*; U; *) AppleWebKit/413 (KHTML, like Gecko) Safari/413] +Parent=Nokia + +[Nokia????/* SymbianOS/* Series60/*] +Parent=Nokia +Platform=SymbianOS + +[Nokia????/1.0 (*) Profile/MIDP-?.? Configuration/CLDC-?.?*] +Parent=Nokia + +[Nokia????/1.0 (*)*] +Parent=Nokia + +[Nokia????/2.0 (*) Profile/MIDP-?.? Configuration/CLDC-?.?*] +Parent=Nokia + +[Nokia????/2.0 (*) SymbianOS/* Series60/* Profile/MIDP-?.? Configuration/CLDC-?.?*] +Parent=Nokia + +[Nokia????/4.* Series60/* Profile/MIDP-?.? Configuration/CLDC-?.?*] +Parent=Nokia + +[Nokia?????/* (*) Profile/MIDP-?.? Configuration/CLDC-?.?*] +Parent=Nokia + +[Nokia7650/* SymbianOS/* Series60/*] +Parent=Nokia +Platform=SymbianOS + +[NokiaN70-1/*/SN* Series60/* Profile/MIDP-?.? Configuration/CLDC-?.?*] +Parent=Nokia + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Obigo + +[Obigo] +Parent=DefaultProperties +Browser="Obigo" +Frames=true +Tables=true +Cookies=true +JavaScript=true +WAP=true +isMobileDevice=true + +[AU-MIC/* MMP/*] +Parent=Obigo + +[LG-LX??? AU-MIC-LX??0/* MMP/*] +Parent=Obigo + +[Samsung-SPHA* AU-MIC/* MMP/*] +Parent=Obigo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openwave Mobile Browser + +[Openwave Mobile Browser] +Parent=DefaultProperties +Browser="Openwave Mobile Browser" +Alpha=true +Win32=true +Win64=true +Frames=true +Tables=true +Cookies=true +WAP=true +isMobileDevice=true +isSyndicationReader=true + +[*UP.Browser/*] +Parent=Openwave Mobile Browser + +[*UP.Link/*] +Parent=Openwave Mobile Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera + +[Opera] +Parent=DefaultProperties +Browser="Opera" +Platform=unknownSymbianOS +Frames=true +Tables=true +Cookies=true +JavaScript=true +WAP=true +isMobileDevice=true + +[Mozilla/4.* (compatible; MSIE 6.0; Symbian OS; *Opera*] +Parent=Opera +Platform=SymbianOS + +[Mozilla/4.* (compatible; MSIE 6.0; SymbianOS; *Opera*] +Parent=Opera + +[Opera/* (*Opera Mini/1.0*)*] +Parent=Opera +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Opera/* (*Opera Mini/1.2*)*] +Parent=Opera +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Opera/* (*Opera Mini/2.0*)*] +Parent=Opera +Version=2.0 +MajorVer=2 +MinorVer=0 +CSS=1 +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Playstation + +[Playstation] +Parent=DefaultProperties +Browser="Playstation" +Platform=unknownWAP +Frames=true +Tables=true +Cookies=true +WAP=true +isMobileDevice=true + +[Mozilla/4.0 (PSP (PlayStation Portable); 2.00)] +Parent=Playstation +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Sony PS2 (Linux)] +Parent=Playstation +Browser="Sony PS2" +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pocket PC + +[Pocket PC] +Parent=DefaultProperties +Browser="Pocket PC" +Platform=unknownWinCE +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +WAP=true +isMobileDevice=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[HTC-*/* Mozilla/4.0 (compatible; MSIE 5.5; Windows CE*)*] +Parent=Pocket PC +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true + +[HTC-*/* Mozilla/4.0 (compatible; MSIE 6.0; Windows CE*)*] +Parent=Pocket PC +Version=6.0 +MajorVer=6 +MinorVer=0 +Win32=true + +[Mozilla/1.1 (compatible; MSPIE 2.0; *Windows CE*)*] +Parent=Pocket PC +Version=2.0 +MajorVer=2 +MinorVer=0 +Win32=true + +[Mozilla/2.0 (compatible; MSIE 3.0*; *Windows CE*)*] +Parent=Pocket PC +Version=3.0 +MajorVer=3 +MinorVer=0 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 4.0*; *Windows CE*)*] +Parent=Pocket PC +Version=4.01 +MajorVer=4 +MinorVer=01 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.5*; Windows CE*)*] +Parent=Pocket PC +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0*; Windows CE*)*] +Parent=Pocket PC +Version=6.0 +MajorVer=6 +MinorVer=0 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows CE*)*] +Parent=Pocket PC +Version=7.0 +MajorVer=7 +MinorVer=0 +Beta=true +Win32=true + +[Windows CE (Pocket PC) - Version 4.2*] +Parent=Pocket PC +Version=4.01 +MajorVer=4 +MinorVer=01 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEMC Browser + +[SEMC Browser] +Parent=DefaultProperties +Browser="SEMC Browser" +Platform=unknownJAVA +Tables=true +WAP=true +isMobileDevice=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[*SEMC-Browser/*] +Parent=SEMC Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netbox + +[Netbox] +Parent=DefaultProperties +Browser="Netbox" +Frames=true +Tables=true +Cookies=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/3.01 (compatible; Netbox/*; Linux*)] +Parent=Netbox +Browser="Netbox" +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PowerTV + +[PowerTV] +Parent=DefaultProperties +Browser="PowerTV" +Platform=unknownPowerTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)] +Parent=PowerTV +Version=1.5 +MajorVer=1 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WebTV/MSNTV + +[WebTV] +Parent=DefaultProperties +Browser="WebTV/MSNTV" +Platform=unknownWebTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)] +Parent=WebTV +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.5 +MajorVer=2 +MinorVer=5 +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.6 +MajorVer=2 +MinorVer=6 +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.7 +MajorVer=2 +MinorVer=7 +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.8 +MajorVer=2 +MinorVer=8 +JavaApplets=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.9 +MajorVer=2 +MinorVer=9 +JavaApplets=true +CSS=1 +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Amaya + +[Amaya] +Parent=DefaultProperties +Browser="Amaya" +Tables=true +Cookies=true + +[amaya/7.*] +Parent=Amaya +Version=7.0 +MajorVer=7 +MinorVer=0 + +[amaya/8.0*] +Parent=Amaya +Version=8.0 +MajorVer=8 +MinorVer=0 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.1*] +Parent=Amaya +Version=8.1 +MajorVer=8 +MinorVer=1 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.2*] +Parent=Amaya +Version=8.2 +MajorVer=8 +MinorVer=2 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.3*] +Parent=Amaya +Version=8.3 +MajorVer=8 +MinorVer=3 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.4*] +Parent=Amaya +Version=8.4 +MajorVer=8 +MinorVer=4 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.5*] +Parent=Amaya +Version=8.5 +MajorVer=8 +MinorVer=5 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.6*] +Parent=Amaya +Version=8.6 +MajorVer=8 +MinorVer=6 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.7*] +Parent=Amaya +Version=8.7 +MajorVer=8 +MinorVer=7 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.8*] +Parent=Amaya +Version=8.8 +MajorVer=8 +MinorVer=8 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.9*] +Parent=Amaya +Version=8.9 +MajorVer=8 +MinorVer=9 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.0*] +Parent=Amaya +Version=9.0 +MajorVer=8 +MinorVer=0 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.1*] +Parent=Amaya +Version=9.1 +MajorVer=9 +MinorVer=1 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.2*] +Parent=Amaya +Version=9.2 +MajorVer=9 +MinorVer=2 +CSS=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.3*] +Parent=Amaya +Version=9.3 +MajorVer=9 +MinorVer=3 + +[amaya/9.4*] +Parent=Amaya +Version=9.4 +MajorVer=9 +MinorVer=4 + +[amaya/9.5*] +Parent=Amaya +Version=9.5 +MajorVer=9 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Elinks + +[Elinks] +Parent=DefaultProperties +Browser="Elinks" +Frames=true +Tables=true + +[ELinks (0.10*; *FreeBSD*)] +Parent=Elinks +Version=0.10 +MajorVer=0 +MinorVer=10 +Platform=FreeBSD + +[ELinks (0.10*; *Linux*)] +Parent=Elinks +Version=0.10 +MajorVer=0 +MinorVer=10 +Platform=Linux + +[ELinks (0.10*; *Unix*)] +Parent=Elinks +Version=0.10 +MajorVer=0 +MinorVer=10 +Platform=Unix + +[ELinks (0.11*; *FreeBSD*)] +Parent=Elinks +Version=0.11 +MajorVer=0 +MinorVer=11 +Platform=FreeBSD + +[ELinks (0.11*; *Linux*)] +Parent=Elinks +Version=0.11 +MajorVer=0 +MinorVer=11 +Platform=Linux + +[ELinks (0.11*; *Unix*)] +Parent=Elinks +Version=0.11 +MajorVer=0 +MinorVer=11 +Platform=Unix + +[ELinks (0.4*; *FreeBSD*)] +Parent=Elinks +Browser="ELinks" +Version=0.4 +MajorVer=0 +MinorVer=4 +Platform=FreeBSD + +[ELinks (0.4*; *Linux*)] +Parent=Elinks +Browser="ELinks" +Version=0.4 +MajorVer=0 +MinorVer=4 +Platform=Linux + +[ELinks (0.4*; *Unix*)] +Parent=Elinks +Browser="ELinks" +Version=0.4 +MajorVer=0 +MinorVer=4 +Platform=Unix + +[ELinks (0.5*; *FreeBSD*)] +Parent=Elinks +Version=0.5 +MajorVer=0 +MinorVer=5 +Platform=FreeBSD + +[ELinks (0.5*; *Linux*)] +Parent=Elinks +Version=0.5 +MajorVer=0 +MinorVer=5 +Platform=Linux + +[ELinks (0.5*; *Unix*)] +Parent=Elinks +Version=0.5 +MajorVer=0 +MinorVer=5 +Platform=Unix + +[ELinks (0.9*; *Linux*)] +Parent=Elinks +Browser="ELinks" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux + +[ELinks (0.9*; FreeBSD*)] +Parent=Elinks +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=FreeBSD + +[ELinks/0.10* (*)] +Parent=Elinks +Version=0.10 +MajorVer=0 +MinorVer=10 + +[ELinks/0.10* (*FreeBSD*)] +Parent=Elinks +Browser="ELinks" +Version=0.10 +MajorVer=0 +MinorVer=10 +Platform=FreeBSD + +[ELinks/0.10* (*Linux*)] +Parent=Elinks +Browser="ELinks" +Version=0.10 +MajorVer=0 +MinorVer=10 +Platform=Linux + +[ELinks/0.10* (*Unix*)] +Parent=Elinks +Browser="ELinks" +Version=0.10 +MajorVer=0 +MinorVer=10 +Platform=Unix + +[ELinks/0.11* (*Darwin*)] +Parent=Elinks +Platform=Darwin + +[ELinks/0.11* (*FreeBSD*)] +Parent=Elinks +Version=0.11 +MajorVer=0 +MinorVer=11 +Platform=FreeBSD + +[ELinks/0.11* (*Linux*)] +Parent=Elinks +Version=0.11 +MajorVer=0 +MinorVer=11 +Platform=Linux + +[ELinks/0.11* (*Unix*)] +Parent=Elinks +Version=0.11 +MajorVer=0 +MinorVer=11 +Platform=Unix + +[ELinks/0.9* (*FreeBSD*)] +Parent=Elinks +Browser="ELinks" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=FreeBSD + +[ELinks/0.9* (*Linux*)] +Parent=Elinks +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux + +[ELinks/0.9* (*SunOS*)] +Parent=Elinks +Browser="ELinks" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=SunOS + +[ELinks/0.9* (*Unix*)] +Parent=Elinks +Browser="ELinks" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Unix + +[Emacs-w3m/*] +Parent=Emacs/W3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Links + +[Links] +Parent=DefaultProperties +Browser="Links" +Frames=true +Tables=true + +[Links (0.9*; CYGWIN_NT-5.1*)] +Parent=Links +Browser="Links" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=WinXP + +[Links (0.9*; Darwin*)] +Parent=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=MacPPC + +[Links (0.9*; FreeBSD*)] +Parent=Links +Browser="Links" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=FreeBSD + +[Links (0.9*; Linux*)] +Parent=Links +Browser="Links" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux + +[Links (0.9*; OS/2*)] +Parent=Links +Browser="Links" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=OS/2 + +[Links (0.9*; Unix*)] +Parent=Links +Browser="Links" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Unix + +[Links (0.9*; Win32*)] +Parent=Links +Browser="Links" +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win32 +Win32=true + +[Links (1.0*; CYGWIN_NT-5.1*)] +Parent=Links +Browser="Links" +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP + +[Links (1.0*; FreeBSD*)] +Parent=Links +Browser="Links" +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=FreeBSD + +[Links (1.0*; Linux*)] +Parent=Links +Browser="Links" +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +[Links (1.0*; OS/2*)] +Parent=Links +Browser="Links" +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=OS/2 + +[Links (1.0*; Unix*)] +Parent=Links +Browser="Links" +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Unix + +[Links (1.0*; Win32*)] +Parent=Links +Browser="Links" +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win32 +Win32=true + +[Links (2.0*; Linux*)] +Parent=Links +Browser="Links" +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Links (2.1*; FreeBSD*)] +Parent=Links +Browser="Links" +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=FreeBSD + +[Links (2.1*; Linux *)] +Parent=Links +Browser="Links" +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=Linux + +[Links (2.1*; OpenBSD*)] +Parent=Links +Browser="Links" +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lynx + +[Lynx] +Parent=DefaultProperties +Browser="Lynx" +Frames=true +Tables=true + +[Lynx *] +Parent=Lynx +Browser="Lynx" + +[Lynx/2.3*] +Parent=Lynx +Browser="Lynx" +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Lynx/2.4*] +Parent=Lynx +Browser="Lynx" +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Lynx/2.5*] +Parent=Lynx +Browser="Lynx" +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Lynx/2.6*] +Parent=Lynx +Browser="Lynx" +Version=2.6 +MajorVer=2 +MinorVer=6 + +[Lynx/2.7*] +Parent=Lynx +Browser="Lynx" +Version=2.7 +MajorVer=2 +MinorVer=7 + +[Lynx/2.8*] +Parent=Lynx +Browser="Lynx" +Version=2.8 +MajorVer=2 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m + +[w3m] +Parent=DefaultProperties +Browser="w3m" +Frames=true +Tables=true + +[w3m/0.1*] +Parent=w3m +Browser="w3m" +Version=0.1 +MajorVer=0 +MinorVer=1 + +[w3m/0.2*] +Parent=w3m +Browser="w3m" +Version=0.2 +MajorVer=0 +MinorVer=2 + +[w3m/0.3*] +Parent=w3m +Browser="w3m" +Version=0.3 +MajorVer=0 +MinorVer=3 + +[w3m/0.4*] +Parent=w3m +Browser="w3m" +Version=0.4 +MajorVer=0 +MinorVer=4 +Cookies=true + +[w3m/0.5*] +Parent=w3m +Browser="w3m" +Version=0.5 +MajorVer=0 +MinorVer=5 +Cookies=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Camino + +[Camino] +Parent=DefaultProperties +Browser="Camino" +Platform=unknownMacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*] +Parent=Camino +Version=0.7 +MajorVer=0 +MinorVer=7 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*] +Parent=Camino +Version=0.8 +MajorVer=0 +MinorVer=8 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*] +Parent=Camino +Version=0.9 +MajorVer=0 +MinorVer=9 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*] +Parent=Camino +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*] +Parent=Camino +Version=1.2 +MajorVer=1 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chimera + +[Chimera] +Parent=DefaultProperties +Browser="Chimera" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*] +Parent=Chimera +Platform=MacOSX + +[Mozilla/5.0 Gecko/* Chimera/*] +Parent=Chimera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dillo + +[Dillo] +Parent=DefaultProperties +Browser="Dillo" +Platform=unknownLinux +Frames=true +IFrames=true +Tables=true +Cookies=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Dillo/0.6*] +Parent=Dillo +Version=0.6 +MajorVer=0 +MinorVer=6 + +[Dillo/0.7*] +Parent=Dillo +Version=0.7 +MajorVer=0 +MinorVer=7 + +[Dillo/0.8*] +Parent=Dillo +Version=0.8 +MajorVer=0 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Emacs/W3 + +[Emacs/W3] +Parent=DefaultProperties +Browser="Emacs/W3" +Frames=true +Tables=true +Cookies=true + +[Emacs/W3/2.* (Unix*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Unix + +[Emacs/W3/2.* (X11*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Emacs/W3/3.* (Unix*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Unix + +[Emacs/W3/3.* (X11*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux + +[Emacs/W3/4.* (Unix*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Unix + +[Emacs/W3/4.* (X11*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fantomas + +[fantomas] +Parent=DefaultProperties +Browser="fantomas" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 (cloakBrowser)] +Parent=fantomas +Browser="fantomas cloakBrowser" + +[Mozilla/4.0 (fantomas shadowMaker Browser)] +Parent=fantomas +Browser="fantomas shadowMaker Browser" + +[Mozilla/4.0 (fantomBrowser)] +Parent=fantomas +Browser="fantomas fantomBrowser" + +[Mozilla/4.0 (fantomCrew Browser)] +Parent=fantomas +Browser="fantomas fantomCrew Browser" + +[Mozilla/4.0 (stealthBrowser)] +Parent=fantomas +Browser="fantomas stealthBrowser" + +[multiBlocker browser*] +Parent=fantomas +Browser="fantomas multiBlocker browser" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FrontPage + +[FrontPage] +Parent=DefaultProperties +Browser="FrontPage" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/?* (compatible; MS FrontPage*)] +Parent=FrontPage + +[MSFrontPage/*] +Parent=FrontPage + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galeon + +[Galeon] +Parent=DefaultProperties +Browser="Galeon" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.0*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.1*] +Parent=Galeon +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.2*] +Parent=Galeon +Version=1.2 +MajorVer=1 +MinorVer=2 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.3*] +Parent=Galeon +Version=1.3 +MajorVer=1 +MinorVer=3 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux*; Debian/*) Gecko/* Galeon/1.0*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Debian + +[Mozilla/5.0 (X11; U; Linux*; Debian/*) Gecko/* Galeon/1.1*] +Parent=Galeon +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Debian + +[Mozilla/5.0 (X11; U; Linux*; Debian/*) Gecko/* Galeon/1.2*] +Parent=Galeon +Version=1.2 +MajorVer=1 +MinorVer=2 +Platform=Debian + +[Mozilla/5.0 (X11; U; Linux*; Debian/*) Gecko/* Galeon/1.3*] +Parent=Galeon +Version=1.3 +MajorVer=1 +MinorVer=3 +Platform=Debian + +[Mozilla/5.0 Galeon/1.0* (X11; Linux*)*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +[Mozilla/5.0 Galeon/1.1* (X11; Linux*)*] +Parent=Galeon +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Linux + +[Mozilla/5.0 Galeon/1.2* (X11; Linux*)*] +Parent=Galeon +Version=1.2 +MajorVer=1 +MinorVer=2 +Platform=Linux + +[Mozilla/5.0 Galeon/1.3* (X11; Linux*)*] +Parent=Galeon +Version=1.3 +MajorVer=1 +MinorVer=3 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HP Secure Web Browser + +[HP Secure Web Browser] +Parent=DefaultProperties +Browser="HP Secure Web Browser" +Platform=unknownOpenVMS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.4 +MajorVer=1 +MinorVer=4 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.5 +MajorVer=1 +MinorVer=5 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.6 +MajorVer=1 +MinorVer=6 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.7 +MajorVer=1 +MinorVer=7 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.8 +MajorVer=1 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IBrowse + +[IBrowse] +Parent=DefaultProperties +Browser="IBrowse" +Platform=unknownAmiga +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0] +Parent=IBrowse +Version=4.0 +MajorVer=4 +MinorVer=0 + +[IBrowse/1.22 (AmigaOS *)] +Parent=IBrowse +Version=1.22 +MajorVer=1 +MinorVer=22 + +[IBrowse/2.1 (AmigaOS *)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[IBrowse/2.2 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[IBrowse/2.3 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=3 + +[Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.3 +MajorVer=2 +MinorVer=3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iCab + +[iCab] +Parent=DefaultProperties +Browser="iCab" +Frames=true +Tables=true +Cookies=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[iCab/2.7* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[iCab/2.7* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[iCab/2.8* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[iCab/2.8* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=Mac68K + +[iCab/2.8* (Macintosh; ?; PPC)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[iCab/2.9* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[iCab/2.9* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=Mac68K + +[iCab/2.9* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[iCab/3.0* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CSS=2 +CssVersion=2 +supportsCSS=true + +[iCab/3.0* (Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iSiloX + +[iSiloX] +Parent=DefaultProperties +Browser="iSiloX" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +Crawler=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[iSiloX/4.0* MacOS] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[iSiloX/4.0* Windows/32] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Win32 +Win32=true + +[iSiloX/4.1* MacOS] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[iSiloX/4.1* Windows/32] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=Win32 +Win32=true + +[iSiloX/4.2* MacOS] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[iSiloX/4.2* Windows/32] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=Win32 +Win32=true + +[iSiloX/4.3* MacOS] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=4 +Platform=MacOSX + +[iSiloX/4.3* Windows/32] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=Win32 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon + +[K-Meleon] +Parent=DefaultProperties +Browser="K-Meleon" +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/0.7*] +Parent=K-Meleon +Version=0.7 +MajorVer=0 +MinorVer=7 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/0.8*] +Parent=K-Meleon +Version=0.8 +MajorVer=0 +MinorVer=8 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/0.9*] +Parent=K-Meleon +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon 0.7*] +Parent=K-Meleon +Version=0.7 +MajorVer=0 +MinorVer=7 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/0.8*] +Parent=K-Meleon +Version=0.8 +MajorVer=0 +MinorVer=8 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/0.9*] +Parent=K-Meleon +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?0.7*] +Parent=K-Meleon +Version=0.7 +MajorVer=0 +MinorVer=7 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?0.8*] +Parent=K-Meleon +Version=0.8 +MajorVer=0 +MinorVer=8 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?0.9*] +Parent=K-Meleon +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*] +Parent=K-Meleon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/0.7*] +Parent=K-Meleon +Version=0.7 +MajorVer=0 +MinorVer=7 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/0.8*] +Parent=K-Meleon +Version=0.8 +MajorVer=0 +MinorVer=8 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/0.9*] +Parent=K-Meleon +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/0.7*] +Parent=K-Meleon +Version=0.7 +MajorVer=0 +MinorVer=7 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/0.8*] +Parent=K-Meleon +Version=0.8 +MajorVer=0 +MinorVer=8 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/0.9*] +Parent=K-Meleon +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/0.7*] +Parent=K-Meleon +Version=0.7 +MajorVer=0 +MinorVer=7 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/0.8*] +Parent=K-Meleon +Version=0.8 +MajorVer=0 +MinorVer=8 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/0.9*] +Parent=K-Meleon +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* K-Meleon?0.7*] +Parent=K-Meleon +Version=0.7 +MajorVer=0 +MinorVer=7 +Platform=Linux +Win32=false + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* K-Meleon?0.8*] +Parent=K-Meleon +Version=0.8 +MajorVer=0 +MinorVer=8 +Platform=Linux +Win32=false + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* K-Meleon?0.9*] +Parent=K-Meleon +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux +Win32=false + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* K-Meleon?1.0*] +Parent=K-Meleon +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux +Win32=false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror + +[Konqueror] +Parent=DefaultProperties +Browser="Konqueror" +Platform=unknownLinux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[*Konqueror/2.*] +Parent=Konqueror +IFrames=false + +[*Konqueror/3.0*] +Parent=Konqueror +Version=3.0 +MajorVer=3 +MinorVer=0 +IFrames=false + +[*Konqueror/3.0*FreeBSD*] +Parent=Konqueror +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=FreeBSD +IFrames=false + +[*Konqueror/3.0*Linux*] +Parent=Konqueror +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux +IFrames=false + +[*Konqueror/3.1*] +Parent=Konqueror +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.1*FreeBSD*] +Parent=Konqueror +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=FreeBSD + +[*Konqueror/3.1*Linux*] +Parent=Konqueror +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.2*] +Parent=Konqueror +Version=3.2 +MajorVer=3 +MinorVer=2 + +[*Konqueror/3.2*FreeBSD*] +Parent=Konqueror +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=FreeBSD + +[*Konqueror/3.2*Linux*] +Parent=Konqueror +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=Linux + +[*Konqueror/3.3*] +Parent=Konqueror +Version=3.3 +MajorVer=3 +MinorVer=3 + +[*Konqueror/3.3*FreeBSD*] +Parent=Konqueror +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=FreeBSD + +[*Konqueror/3.3*Linux*] +Parent=Konqueror +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=Linux + +[*Konqueror/3.3*OpenBSD*] +Parent=Konqueror +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=OpenBSD + +[*Konqueror/3.4*] +Parent=Konqueror +Version=3.4 +MajorVer=3 +MinorVer=4 + +[*Konqueror/3.4*FreeBSD*] +Parent=Konqueror +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=FreeBSD + +[*Konqueror/3.4*Linux*] +Parent=Konqueror +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=Linux + +[*Konqueror/3.4*OpenBSD*] +Parent=Konqueror +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=OpenBSD + +[*Konqueror/3.5*] +Parent=Konqueror +Version=3.5 +MajorVer=3 +MinorVer=5 + +[*Konqueror/3.5*FreeBSD*] +Parent=Konqueror +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=FreeBSD + +[*Konqueror/3.5*Linux*] +Parent=Konqueror +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=Linux + +[*Konqueror/3.5*OpenBSD*] +Parent=Konqueror +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=OpenBSD + +[Konqueror*] +Parent=Konqueror +IFrames=false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycoris Desktop/LX + +[Lycoris Desktop/LX] +Parent=DefaultProperties +Browser="Lycoris Desktop/LX" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +Crawler=true + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*: Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*; Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser="Mosaic" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/4.0 (VMS_Mosaic)] +Parent=Mosaic +Platform=OpenVMS + +[VMS_Mosaic/3.7*] +Parent=Mosaic +Version=3.7 +MajorVer=3 +MinorVer=7 +Platform=OpenVMS + +[VMS_Mosaic/3.8*] +Parent=Mosaic +Version=3.8 +MajorVer=3 +MinorVer=8 +Platform=OpenVMS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetPositive + +[NetPositive] +Parent=DefaultProperties +Browser="NetPositive" +Platform=unknownBeOS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[*NetPositive/2.2*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +[*NetPositive/2.2*BeOS*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OmniWeb + +[OmniWeb] +Parent=DefaultProperties +Browser="OmniWeb" +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +WAP=true +isMobileDevice=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE *; Mac_PowerPC) OmniWeb/4.0*] +Parent=OmniWeb +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE *; Mac_PowerPC) OmniWeb/4.1*] +Parent=OmniWeb +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE *; Mac_PowerPC) OmniWeb/4.2*] +Parent=OmniWeb +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE *; Mac_PowerPC) OmniWeb/4.3*] +Parent=OmniWeb +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE *; Mac_PowerPC) OmniWeb/4.4*] +Parent=OmniWeb +Version=4.4 +MajorVer=4 +MinorVer=4 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE *; Windows *) OmniWeb/4.0*] +Parent=OmniWeb +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Win32 +Win32=true + +[Mozilla/* (compatible; MSIE *; Windows *) OmniWeb/4.1*] +Parent=OmniWeb +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=Win32 +Win32=true + +[Mozilla/* (compatible; MSIE *; Windows *) OmniWeb/4.2*] +Parent=OmniWeb +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=Win32 +Win32=true + +[Mozilla/* (compatible; MSIE *; Windows *) OmniWeb/4.3*] +Parent=OmniWeb +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=Win32 +Win32=true + +[Mozilla/* (compatible; MSIE *; Windows *) OmniWeb/4.4*] +Parent=OmniWeb +Version=4.4 +MajorVer=4 +MinorVer=4 +Platform=Win32 +Win32=true + +[Mozilla/* (compatible; OmniWeb/4.0*; Mac_PowerPC)] +Parent=OmniWeb +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[Mozilla/* (compatible; OmniWeb/4.1*; Mac_PowerPC)] +Parent=OmniWeb +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[Mozilla/* (compatible; OmniWeb/4.2*; Mac_PowerPC)] +Parent=OmniWeb +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[Mozilla/* (compatible; OmniWeb/4.3*; Mac_PowerPC)] +Parent=OmniWeb +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=MacPPC + +[Mozilla/* (compatible; OmniWeb/4.4*; Mac_PowerPC)] +Parent=OmniWeb +Version=4.4 +MajorVer=4 +MinorVer=4 +Platform=MacPPC + +[Mozilla/* (Macintosh; I; PPC) OmniWeb/4.0*] +Parent=OmniWeb +Version=4.0 +Platform=MacPPC + +[Mozilla/* (Macintosh; I; PPC) OmniWeb/4.1*] +Parent=OmniWeb +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[Mozilla/* (Macintosh; I; PPC) OmniWeb/4.2*] +Parent=OmniWeb +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[Mozilla/* (Macintosh; I; PPC) OmniWeb/4.3*] +Parent=OmniWeb +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=MacPPC + +[Mozilla/* (Macintosh; I; PPC) OmniWeb/4.4*] +Parent=OmniWeb +Version=4.4 +MajorVer=4 +MinorVer=4 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.*] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/420* (KHTML, like Gecko, Safari*) OmniWeb/v5*] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/420* (KHTML, like Gecko, Safari/420) OmniWeb/v6*] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496*] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.*] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari + +[Safari] +Parent=DefaultProperties +Browser="Safari" +Platform=unknownMacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/100*] +Parent=Safari +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/125*] +Parent=Safari +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/312*] +Parent=Safari +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/412*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/416*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/417*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/419*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/52*] +Parent=Safari +Platform=MacOSX +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/85*] +Parent=Safari +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey + +[SeaMonkey] +Parent=DefaultProperties +Browser="SeaMonkey" +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Win98; *) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.0; *) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; U; FreeBSD*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shiira + +[Shiira] +Parent=DefaultProperties +Browser="Shiira" +Platform=unknownMacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/0.9*] +Parent=Shiira +Version=0.9 +MajorVer=0 +MinorVer=9 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.0*] +Parent=Shiira +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.1*] +Parent=Shiira +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.2*] +Parent=Shiira +Version=1.2 +MajorVer=1 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 4.0 + +[Opera 4.0] +Parent=DefaultProperties +Browser="Opera" +Version=4 +MajorVer=4 +Frames=true +Tables=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/3.0 (Linux*; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Linux + +[Mozilla/3.0 (Mac_PowerPC; U) Opera 4.*] +Parent=Opera 4.0 +Platform=MacPPC + +[Mozilla/3.0 (Windows 2000; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; U) Opera 4.*] +Parent=Opera 4.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; U) Opera 4.*] +Parent=Opera 4.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; U) Opera 4.*] +Parent=Opera 4.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Linux*) Opera 4.*] +Parent=Opera 4.0 +Platform=Linux + +[Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) Opera 4.*] +Parent=Opera 4.0 +Platform=MacPPC + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 4.*] +Parent=Opera 4.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 95) Opera 4.*] +Parent=Opera 4.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 4.*] +Parent=Opera 4.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 4.*] +Parent=Opera 4.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 4.0) Opera 4.*] +Parent=Opera 4.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 4.*] +Parent=Opera 4.0 +Platform=WinXP +Win32=true + +[Mozilla/4.73 (Windows 98; U) Opera 4.*] +Parent=Opera 4.0 +MinorVer=02 +Win32=true + +[Mozilla/4.76 (Macintosh;US;PPC) Opera 4.*] +Parent=Opera 4.0 +Platform=MacPPC + +[Mozilla/4.78 (Linux*; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Linux + +[Mozilla/4.78 (Mac_PowerPC; U) Opera 4.*] +Parent=Opera 4.0 +Platform=MacPPC + +[Mozilla/4.78 (Windows 2000; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; U) Opera 4.*] +Parent=Opera 4.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; U) Opera 4.*] +Parent=Opera 4.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows XP; U) Opera 4.*] +Parent=Opera 4.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Linux*; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Linux + +[Mozilla/5.0 (Mac_PowerPC; U) Opera 4.*] +Parent=Opera 4.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows 2000; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; U) Opera 4.*] +Parent=Opera 4.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; U) Opera 4.*] +Parent=Opera 4.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; U) Opera 4.*] +Parent=Opera 4.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows XP; U) Opera 4.*] +Parent=Opera 4.0 +Platform=WinXP +Win32=true + +[Opera/4.* (Linux*; U)*] +Parent=Opera 4.0 +Platform=Linux + +[Opera/4.* (Mac_PowerPC; U)*] +Parent=Opera 4.0 +Platform=MacPPC + +[Opera/4.* (Windows 2000; U)*] +Parent=Opera 4.0 +Platform=Win2000 +Win32=true + +[Opera/4.* (Windows 95; U)*] +Parent=Opera 4.0 +Platform=Win95 +Win32=true + +[Opera/4.* (Windows 98; U)*] +Parent=Opera 4.0 +Platform=Win98 +Win32=true + +[Opera/4.* (Windows ME; U)*] +Parent=Opera 4.0 +Platform=WinME +Win32=true + +[Opera/4.* (Windows NT 4.0; U)*] +Parent=Opera 4.0 +Platform=WinNT +Win32=true + +[Opera/4.* (Windows XP; U)*] +Parent=Opera 4.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 5.0 + +[Opera 5.0] +Parent=DefaultProperties +Browser="Opera" +Version=5.0 +MajorVer=5 +Frames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/3.0 (Linux*; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Linux + +[Mozilla/3.0 (Mac_PowerPC; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=MacPPC + +[Mozilla/3.0 (Windows 2000; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Linux*) Opera 5.0*] +Parent=Opera 5.0 +Platform=Linux + +[Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) Opera 5.0*] +Parent=Opera 5.0 +Platform=MacPPC + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 95) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 4.0) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinXP +Win32=true + +[Mozilla/4.76 (Macintosh;US;PPC) Opera 5.0*] +Parent=Opera 5.0 +Platform=MacPPC + +[Mozilla/4.78 (Linux*; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Linux + +[Mozilla/4.78 (Mac_PowerPC; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=MacPPC + +[Mozilla/4.78 (Windows 2000; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Linux*; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Linux + +[Mozilla/5.0 (Mac_PowerPC; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=MacPPC + +[Mozilla/5.0 (SunOS*; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=SunOS + +[Mozilla/5.0 (Windows 2000; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 5.0*] +Parent=Opera 5.0 +Platform=WinXP +Win32=true + +[Opera/5.0*(Linux*; ?)*] +Parent=Opera 5.0 +Platform=Linux + +[Opera/5.0*(Mac_PowerPC; ?)*] +Parent=Opera 5.0 +Platform=MacPPC + +[Opera/5.0*(Windows 2000; ?)*] +Parent=Opera 5.0 +Platform=Win2000 +Win32=true + +[Opera/5.0*(Windows 95; ?)*] +Parent=Opera 5.0 +Platform=Win95 +Win32=true + +[Opera/5.0*(Windows 98; ?)*] +Parent=Opera 5.0 +Platform=Win98 +Win32=true + +[Opera/5.0*(Windows ME; ?)*] +Parent=Opera 5.0 +Platform=WinME +Win32=true + +[Opera/5.0*(Windows NT 4.0; ?)*] +Parent=Opera 5.0 +Platform=WinNT +Win32=true + +[Opera/5.0*(Windows XP; ?)*] +Parent=Opera 5.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 5.12 + +[Opera 5.12] +Parent=DefaultProperties +Browser="Opera" +Version=5.12 +MajorVer=5 +MinorVer=12 +Frames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/3.0 (Linux*; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Linux + +[Mozilla/3.0 (OS/2*; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=OS/2 + +[Mozilla/3.0 (Windows 2000; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Linux*) Opera 5.12*] +Parent=Opera 5.12 +Platform=Linux + +[Mozilla/4.0 (compatible; MSIE 5.0; OS/2*) Opera 5.12*] +Parent=Opera 5.12 +Platform=OS/2 + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 95) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 4.0) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinXP +Win32=true + +[Mozilla/4.76 (Macintosh;US;PPC) Opera 5.12*] +Parent=Opera 5.12 +Platform=MacPPC + +[Mozilla/4.76 (Windows ME; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Linux*; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Linux + +[Mozilla/4.78 (OS/2*; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=OS/2 + +[Mozilla/4.78 (Windows 2000; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Linux*; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Linux + +[Mozilla/5.0 (OS/2*; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=OS/2 + +[Mozilla/5.0 (Windows 2000; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 5.12*] +Parent=Opera 5.12 +Platform=WinXP +Win32=true + +[Opera/5.12 (Linux*; ?)*] +Parent=Opera 5.12 +Platform=Linux + +[Opera/5.12 (OS/2*; ?)*] +Parent=Opera 5.12 +Platform=OS/2 + +[Opera/5.12 (Windows 2000; ?)*] +Parent=Opera 5.12 +Platform=Win2000 +Win32=true + +[Opera/5.12 (Windows 95; ?)*] +Parent=Opera 5.12 +Platform=Win95 +Win32=true + +[Opera/5.12 (Windows 98; ?)*] +Parent=Opera 5.12 +Platform=Win98 +Win32=true + +[Opera/5.12 (Windows ME; ?)*] +Parent=Opera 5.12 +Platform=WinME +Win32=true + +[Opera/5.12 (Windows NT 4.0; ?)*] +Parent=Opera 5.12 +Platform=WinNT +Win32=true + +[Opera/5.12 (Windows XP; ?)*] +Parent=Opera 5.12 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 6.0 + +[Opera 6.0] +Parent=DefaultProperties +Browser="Opera" +Version=6.0 +MajorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/3.0 (Linux*; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Linux + +[Mozilla/3.0 (Mac_PowerPC; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=MacPPC + +[Mozilla/3.0 (Windows 2000; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Linux*) Opera 6.0*] +Parent=Opera 6.0 +Platform=Linux + +[Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) Opera 6.0*] +Parent=Opera 6.0 +Platform=MacPPC + +[Mozilla/4.0 (compatible; MSIE 5.0; Macintosh; PPC) Opera 6.0*] +Parent=Opera 6.0 +Platform=MacPPC + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 95) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 4.0) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinXP +Win32=true + +[Mozilla/4.76 (Macintosh;US;PPC) Opera 6.0*] +Parent=Opera 6.0 +Platform=MacPPC + +[Mozilla/4.78 (Linux*; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Linux + +[Mozilla/4.78 (Mac_PowerPC; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=MacPPC + +[Mozilla/4.78 (Windows 2000; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Linux*; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Linux + +[Mozilla/5.0 (Mac_PowerPC; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows 2000; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 6.0*] +Parent=Opera 6.0 +Platform=WinXP +Win32=true + +[Opera/6.0* (Linux*; ?)*] +Parent=Opera 6.0 +Platform=Linux + +[Opera/6.0* (Mac_PowerPC; ?)*] +Parent=Opera 6.0 +Platform=MacPPC + +[Opera/6.0* (Windows 2000; ?)*] +Parent=Opera 6.0 +Platform=Win2000 +Win32=true + +[Opera/6.0* (Windows 95; ?)*] +Parent=Opera 6.0 +Platform=Win95 +Win32=true + +[Opera/6.0* (Windows 98; ?)*] +Parent=Opera 6.0 +Platform=Win98 +Win32=true + +[Opera/6.0* (Windows ME; ?)*] +Parent=Opera 6.0 +Platform=WinME +Win32=true + +[Opera/6.0* (Windows NT 4.0; ?)*] +Parent=Opera 6.0 +Platform=WinNT +Win32=true + +[Opera/6.0* (Windows NT 5.0; ?)*] +Parent=Opera 6.0 +Platform=Win2000 +Win32=true + +[Opera/6.0* (Windows NT 5.1; ?)*] +Parent=Opera 6.0 +Platform=WinXP +Win32=true + +[Opera/6.0* (Windows NT 5.2; ?)*] +Parent=Opera 6.0 +Platform=Win2003 +Win32=true + +[Opera/6.0* (Windows XP; ?)*] +Parent=Opera 6.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 6.1 + +[Opera 6.1] +Parent=DefaultProperties +Browser="Opera" +Version=6.1 +MajorVer=6 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/3.0 (FreeBSD*; ?) Opera 6.1 *] +Parent=Opera 6.1 +Platform=FreeBSD + +[Mozilla/3.0 (Linux*; ?) Opera 6.1 *] +Parent=Opera 6.1 +Platform=Linux + +[Mozilla/3.0 (Linux*; ?) Opera 6.11 *] +Parent=Opera 6.1 +Version=6.11 +MinorVer=11 +Platform=Linux + +[Mozilla/4.0 (compatible; MSIE 5.0; FreeBSD*) Opera 6.1 *] +Parent=Opera 6.1 +Platform=FreeBSD + +[Mozilla/4.0 (compatible; MSIE 5.0; Linux*) Opera 6.1 *] +Parent=Opera 6.1 +Platform=Linux + +[Mozilla/4.0 (compatible; MSIE 5.0; Linux*) Opera 6.11 *] +Parent=Opera 6.1 +MinorVer=11 +Platform=Linux +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 5.0; Linux*) Opera 6.12 *] +Parent=Opera 6.1 +Version=6.12 +MinorVer=12 +Platform=Linux + +[Mozilla/4.0 (compatible; MSIE 5.0; UNIX) Opera 6.1 *] +Parent=Opera 6.1 +Platform=Unix + +[Mozilla/4.0 (compatible; MSIE 5.0; UNIX) Opera 6.11 *] +Parent=Opera 6.1 +MinorVer=11 + +[Mozilla/4.0 (compatible; MSIE 5.0; UNIX) Opera 6.12 *] +Parent=Opera 6.1 +Version=6.12 +MinorVer=12 +Platform=Unix + +[Mozilla/4.78 (FreeBSD*; ?) Opera 6.1 *] +Parent=Opera 6.1 +Platform=FreeBSD + +[Mozilla/4.78 (Linux*; ?) Opera 6.1 *] +Parent=Opera 6.1 +Platform=Linux + +[Mozilla/4.78 (Linux*; ?) Opera 6.11 *] +Parent=Opera 6.1 +Version=6.11 +MinorVer=11 +Platform=Linux + +[Mozilla/4.78 (Linux*; ?) Opera 6.12 *] +Parent=Opera 6.1 +Version=6.12 +MinorVer=12 +Platform=Linux + +[Mozilla/4.78 (UNIX; ?) Opera 6.1 *] +Parent=Opera 6.1 +Platform=Unix + +[Mozilla/5.0 (FreeBSD*; ?) Opera 6.1 *] +Parent=Opera 6.1 +Platform=FreeBSD + +[Mozilla/5.0 (Linux*; ?) Opera 6.1 *] +Parent=Opera 6.1 +Platform=Linux + +[Mozilla/5.0 (Linux*; ?) Opera 6.11 *] +Parent=Opera 6.1 +MinorVer=11 + +[Mozilla/5.0 (UNIX; ?) Opera 6.11 *] +Parent=Opera 6.1 +Version=6.11 +MajorVer=6 +MinorVer=11 +Platform=Unix + +[Opera/6.1 (FreeBSD*; ?)*] +Parent=Opera 6.1 +Platform=FreeBSD + +[Opera/6.1 (Linux*; ?)*] +Parent=Opera 6.1 +Platform=Linux + +[Opera/6.1 (UNIX*; ?)*] +Parent=Opera 6.1 +Platform=Unix + +[Opera/6.11 (FreeBSD*; ?)*] +Parent=Opera 6.1 +Version=6.11 +MinorVer=11 +Platform=FreeBSD + +[Opera/6.11 (Linux*; ?)*] +Parent=Opera 6.1 +Version=6.11 +MinorVer=11 +Platform=Linux +CSS=1 +CssVersion=1 +supportsCSS=true + +[Opera/6.11 (UNIX*; ?)*] +Parent=Opera 6.1 +Platform=Unix + +[Opera/6.12 (FreeBSD*; ?)*] +Parent=Opera 6.1 +Version=6.12 +MinorVer=12 +Platform=FreeBSD + +[Opera/6.12 (Linux*; ?)*] +Parent=Opera 6.1 +Version=6.12 +MinorVer=12 +Platform=Linux + +[Opera/6.12 (OpenBSD*; ?) *] +Parent=Opera 6.1 +Version=6.12 +MinorVer=12 +Platform=OpenBSD + +[Opera/6.12 (SunOS*; ?)*] +Parent=Opera 6.1 +Version=6.12 +MajorVer=6 +MinorVer=12 +Platform=SunOS +IFrames=false + +[Opera/6.12 (UNIX*; ?)*] +Parent=Opera 6.1 +Version=6.12 +MinorVer=12 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.0 + +[Opera 7.0] +Parent=DefaultProperties +Browser="Opera" +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/3.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 95) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows Windows NT 5.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows 2000; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows 95; ?)*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Opera/7.0* (Windows 98; ?)*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Opera/7.0* (Windows ME; ?)*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Opera/7.0* (Windows NT 4.0; ?)*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Opera/7.0* (Windows NT 5.0; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows NT 5.1; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows XP; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.1 + +[Opera 7.1] +Parent=DefaultProperties +Browser="Opera" +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Linux*; ?)*] +Parent=Opera 7.1 +Platform=Linux + +[Opera/7.1* (Windows 95; ?)*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Opera/7.1* (Windows 98; ?)*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Opera/7.1* (Windows ME; ?)*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Opera/7.1* (Windows NT 4.0; ?)*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Opera/7.1* (Windows NT 5.0; ?)*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Opera/7.1* (Windows NT 5.1; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Windows XP; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.2 + +[Opera 7.2] +Parent=DefaultProperties +Browser="Opera" +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.2*] +Parent=Opera 7.2 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (Windows 95; ?)*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Opera/7.2* (Windows 98; ?)*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Opera/7.2* (Windows ME; ?)*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Opera/7.2* (Windows NT 4.0; ?)*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Opera/7.2* (Windows NT 5.0; ?)*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Opera/7.2* (Windows NT 5.1; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (Windows NT 5.2; ?)*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Windows XP; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (X11; FreeBSD*; ?)*] +Parent=Opera 7.2 +Platform=FreeBSD + +[Opera/7.2* (X11; Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (X11; SunOS*)*] +Parent=Opera 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.5 + +[Opera 7.5] +Parent=DefaultProperties +Browser="Opera" +Version=7.5 +MajorVer=7 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (Windows 2000; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Macintosh; PPC Mac OS X; ?)*] +Parent=Opera 7.5 +Platform=MacOSX + +[Opera/7.5* (Windows 95; ?)*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Opera/7.5* (Windows 98; ?)*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Opera/7.5* (Windows ME; ?)*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Opera/7.5* (Windows NT 4.0; ?)*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Opera/7.5* (Windows NT 5.0; ?)*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Opera/7.5* (Windows NT 5.1; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (Windows NT 5.2; ?)*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Opera/7.5* (Windows XP; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (X11; FreeBSD*; ?)*] +Parent=Opera 7.5 +Platform=FreeBSD + +[Opera/7.5* (X11; Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.6 + +[Opera 7.6] +Parent=DefaultProperties +Browser="Opera" +Version=7.6 +MajorVer=7 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (Windows 2000; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Macintosh; PPC Mac OS X; ?)*] +Parent=Opera 7.6 +Platform=MacOSX + +[Opera/7.6* (Windows 95*)*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Opera/7.6* (Windows 98*)*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Opera/7.6* (Windows ME*)*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Opera/7.6* (Windows NT 4.0*)*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Opera/7.6* (Windows NT 5.0*)*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Opera/7.6* (Windows NT 5.1*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (Windows NT 5.2*)*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Opera/7.6* (Windows XP*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (X11; FreeBSD*)*] +Parent=Opera 7.6 +Platform=FreeBSD + +[Opera/7.6* (X11; Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.0 + +[Opera 8.0] +Parent=DefaultProperties +Browser="Opera" +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.0*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (Windows 2000; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Macintosh; PPC Mac OS X; *)*] +Parent=Opera 8.0 +Platform=MacOSX + +[Opera/8.0* (Windows 95*)*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Opera/8.0* (Windows 98*)*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Opera/8.0* (Windows CE*)*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Opera/8.0* (Windows ME*)*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Opera/8.0* (Windows NT 4.0*)*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Opera/8.0* (Windows NT 5.0*)*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Opera/8.0* (Windows NT 5.1*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (Windows NT 5.2*)*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Opera/8.0* (Windows XP*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (X11; FreeBSD*)*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Opera/8.0* (X11; Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.1 + +[Opera 8.1] +Parent=DefaultProperties +Browser="Opera" +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.1*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (Windows 2000; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Macintosh; PPC Mac OS X; *)*] +Parent=Opera 8.1 +Platform=MacOSX + +[Opera/8.1* (Windows 95*)*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Opera/8.1* (Windows 98*)*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Opera/8.1* (Windows CE*)*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Opera/8.1* (Windows ME*)*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Opera/8.1* (Windows NT 4.0*)*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Opera/8.1* (Windows NT 5.0*)*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Opera/8.1* (Windows NT 5.1*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (Windows NT 5.2*)*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Opera/8.1* (Windows XP*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (X11; FreeBSD*)*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Opera/8.1* (X11; Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.5 + +[Opera 8.5] +Parent=DefaultProperties +Browser="Opera" +Version=8.5 +MajorVer=8 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.5*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; PPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Version=8.5 +MajorVer=8 +MinorVer=5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Macintosh; PPC Mac OS X; *)*] +Parent=Opera 8.5 +Platform=MacOSX + +[Opera/8.5* (Windows 95*)*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Opera/8.5* (Windows 98*)*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Opera/8.5* (Windows CE*)*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Opera/8.5* (Windows ME*)*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Opera/8.5* (Windows NT 4.0*)*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Opera/8.5* (Windows NT 5.0*)*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Opera/8.5* (Windows NT 5.1*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (Windows NT 5.2*)*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Opera/8.5* (Windows XP*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (X11; FreeBSD*)*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Opera/8.5* (X11; Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.0 + +[Opera 9.0] +Parent=DefaultProperties +Browser="Opera" +Version=9.0 +MajorVer=9 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.0*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.0*] +Parent=Opera 9.0 +Platform=SunOS + +[Mozilla/* (Windows 2000;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.0 +Platform=MacOSX + +[Opera/9.0* (Windows 95*)*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Opera/9.0* (Windows 98*)*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Opera/9.0* (Windows CE*)*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Opera/9.0* (Windows ME*)*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Opera/9.0* (Windows NT 4.0*)*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Opera/9.0* (Windows NT 5.0*)*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Opera/9.0* (Windows NT 5.1*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (Windows NT 5.2*)*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Opera/9.0* (Windows NT 6.0*)*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Opera/9.0* (Windows XP*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (X11; FreeBSD*)*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Opera/9.0* (X11; Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.1 + +[Opera 9.1] +Parent=DefaultProperties +Browser="Opera" +Version=9.1 +MajorVer=9 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.1*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.1*] +Parent=Opera 9.1 +Platform=SunOS + +[Mozilla/* (Windows 2000;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.1 +Platform=MacOSX + +[Opera/9.1* (Windows 95*)*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Opera/9.1* (Windows 98*)*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Opera/9.1* (Windows CE*)*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Opera/9.1* (Windows ME*)*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Opera/9.1* (Windows NT 4.0*)*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Opera/9.1* (Windows NT 5.0*)*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Opera/9.1* (Windows NT 5.1*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (Windows NT 5.2*)*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Opera/9.1* (Windows NT 6.0*)*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Opera/9.1* (Windows XP*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (X11; FreeBSD*)*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Opera/9.1* (X11; Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.0 + +[Netscape 4.0] +Parent=DefaultProperties +Browser="Netscape" +Version=4.0 +MajorVer=4 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0*(Macintosh*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=MacPPC + +[Mozilla/4.0*(Win95;*] +Parent=Netscape 4.0 +Platform=Win95 + +[Mozilla/4.0*(Win98;*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=Win98 + +[Mozilla/4.0*(WinNT*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=WinNT + +[Mozilla/4.0*(X11;*)] +Parent=Netscape 4.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.5 + +[Netscape 4.5] +Parent=DefaultProperties +Browser="Netscape" +Version=4.5 +MajorVer=4 +MinorVer=5 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.5*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Platform=MacPPC + +[Mozilla/4.5*(Win2000; ?)] +Parent=Netscape 4.5 +Platform=Win2000 + +[Mozilla/4.5*(Win95; ?)] +Parent=Netscape 4.5 +Platform=Win95 + +[Mozilla/4.5*(Win98; ?)] +Parent=Netscape 4.5 +Platform=Win98 + +[Mozilla/4.5*(WinME; ?)] +Parent=Netscape 4.5 +Platform=WinME + +[Mozilla/4.5*(WinNT; ?)] +Parent=Netscape 4.5 +Platform=WinNT + +[Mozilla/4.5*(WinXP; ?)] +Parent=Netscape 4.5 +Platform=WinXP + +[Mozilla/4.5*(X11*)] +Parent=Netscape 4.5 +Platform=Linux + +[Mozilla/4.51*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 + +[Mozilla/4.51*(Win2000; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win2000 + +[Mozilla/4.51*(Win95; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win95 + +[Mozilla/4.51*(Win98; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win98 + +[Mozilla/4.51*(WinME; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinME + +[Mozilla/4.51*(WinNT; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinNT + +[Mozilla/4.51*(WinXP; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinXP + +[Mozilla/4.51*(X11*)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.6 + +[Netscape 4.6] +Parent=DefaultProperties +Browser="Netscape" +Version=4.6 +MajorVer=4 +MinorVer=6 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.6 * (OS/2; ?)] +Parent=Netscape 4.6 +Platform=OS/2 + +[Mozilla/4.6*(CJPENNYCATE 3.2.11££tst 101000562$$)] +Parent=Netscape 4.6 + +[Mozilla/4.6*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Platform=MacPPC + +[Mozilla/4.6*(Win95; ?)] +Parent=Netscape 4.6 +Platform=Win95 + +[Mozilla/4.6*(Win98; ?)] +Parent=Netscape 4.6 +Platform=Win98 + +[Mozilla/4.6*(WinNT; ?)] +Parent=Netscape 4.6 +Platform=WinNT + +[Mozilla/4.61*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=MacPPC + +[Mozilla/4.61*(OS/2; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=OS/2 + +[Mozilla/4.61*(Win95; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=Win95 + +[Mozilla/4.61*(Win98; ?)] +Parent=Netscape 4.6 +Version=4.61 +Platform=Win98 + +[Mozilla/4.61*(WinNT; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.7 + +[Netscape 4.7] +Parent=DefaultProperties +Browser="Netscape" +Version=4.7 +MajorVer=4 +MinorVer=7 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.7 * (Win2000; ?)] +Parent=Netscape 4.7 +Platform=Win2000 + +[Mozilla/4.7*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.7*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win95 + +[Mozilla/4.7*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win98 + +[Mozilla/4.7*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinNT +Win32=true + +[Mozilla/4.7*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win2000 +Win32=true + +[Mozilla/4.7*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinXP +Win32=true + +[Mozilla/4.7*(WinNT; ?)*] +Parent=Netscape 4.7 +Platform=WinNT + +[Mozilla/4.7*(X11*)*] +Parent=Netscape 4.7 +Platform=Linux + +[Mozilla/4.7*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Platform=SunOS + +[Mozilla/4.71*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=MacPPC + +[Mozilla/4.71*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win95 + +[Mozilla/4.71*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win98 + +[Mozilla/4.71*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT +Win32=true + +[Mozilla/4.71*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win2000 +Win32=true + +[Mozilla/4.71*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinXP +Win32=true + +[Mozilla/4.71*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT + +[Mozilla/4.71*(X11*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Linux + +[Mozilla/4.71*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=SunOS + +[Mozilla/4.72*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=MacPPC + +[Mozilla/4.72*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win95 + +[Mozilla/4.72*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win98 + +[Mozilla/4.72*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT +Win32=true + +[Mozilla/4.72*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win2000 +Win32=true + +[Mozilla/4.72*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinXP +Win32=true + +[Mozilla/4.72*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT + +[Mozilla/4.72*(X11*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Linux + +[Mozilla/4.72*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=SunOS + +[Mozilla/4.73*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=MacPPC + +[Mozilla/4.73*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win95 + +[Mozilla/4.73*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win98 + +[Mozilla/4.73*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT +Win32=true + +[Mozilla/4.73*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win2000 +Win32=true + +[Mozilla/4.73*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinXP +Win32=true + +[Mozilla/4.73*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT + +[Mozilla/4.73*(X11*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Linux + +[Mozilla/4.73*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=SunOS + +[Mozilla/4.74*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=MacPPC + +[Mozilla/4.74*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win95 + +[Mozilla/4.74*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win98 + +[Mozilla/4.74*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT +Win32=true + +[Mozilla/4.74*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win2000 +Win32=true + +[Mozilla/4.74*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinXP +Win32=true + +[Mozilla/4.74*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT + +[Mozilla/4.74*(X11*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Linux + +[Mozilla/4.74*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=SunOS + +[Mozilla/4.75*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=MacPPC + +[Mozilla/4.75*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win95 + +[Mozilla/4.75*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win98 + +[Mozilla/4.75*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT +Win32=true + +[Mozilla/4.75*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win2000 +Win32=true + +[Mozilla/4.75*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinXP +Win32=true + +[Mozilla/4.75*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT + +[Mozilla/4.75*(X11*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Linux + +[Mozilla/4.75*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=SunOS + +[Mozilla/4.76*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=MacPPC + +[Mozilla/4.76*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win95 + +[Mozilla/4.76*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win98 + +[Mozilla/4.76*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT +Win32=true + +[Mozilla/4.76*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win2000 +Win32=true + +[Mozilla/4.76*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinXP +Win32=true + +[Mozilla/4.76*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT + +[Mozilla/4.76*(X11*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Linux + +[Mozilla/4.76*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=SunOS + +[Mozilla/4.77*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=MacPPC + +[Mozilla/4.77*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win95 + +[Mozilla/4.77*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win98 + +[Mozilla/4.77*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT +Win32=true + +[Mozilla/4.77*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win2000 +Win32=true + +[Mozilla/4.77*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinXP +Win32=true + +[Mozilla/4.77*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT + +[Mozilla/4.77*(X11*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Linux + +[Mozilla/4.77*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=SunOS + +[Mozilla/4.78*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=MacPPC + +[Mozilla/4.78*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win95 + +[Mozilla/4.78*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win98 + +[Mozilla/4.78*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT +Win32=true + +[Mozilla/4.78*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win2000 +Win32=true + +[Mozilla/4.78*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinXP +Win32=true + +[Mozilla/4.78*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT + +[Mozilla/4.78*(X11*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Linux + +[Mozilla/4.78*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=SunOS + +[Mozilla/4.79*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=MacPPC + +[Mozilla/4.79*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win95 + +[Mozilla/4.79*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win98 + +[Mozilla/4.79*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT +Win32=true + +[Mozilla/4.79*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win2000 +Win32=true + +[Mozilla/4.79*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinXP +Win32=true + +[Mozilla/4.79*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT + +[Mozilla/4.79*(X11*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Linux + +[Mozilla/4.79*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.8 + +[Netscape 4.8] +Parent=DefaultProperties +Browser="Netscape" +Version=4.8 +MajorVer=4 +MinorVer=8 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.8*(Macintosh; ?; MacPPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Macintosh; ?; PPC Mac OS X*] +Parent=Netscape 4.8 +Platform=MacOSX + +[Mozilla/4.8*(Macintosh; ?; PPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Win95; *)*] +Parent=Netscape 4.8 + +[Mozilla/4.8*(Win98; *)*] +Parent=Netscape 4.8 +Platform=Win98 + +[Mozilla/4.8*(Windows NT 4.0; *)*] +Parent=Netscape 4.8 +Platform=WinNT +Win32=true + +[Mozilla/4.8*(Windows NT 5.0; *)*] +Parent=Netscape 4.8 +Platform=Win2000 +Win32=true + +[Mozilla/4.8*(Windows NT 5.1; *)*] +Parent=Netscape 4.8 +Platform=WinXP +Win32=true + +[Mozilla/4.8*(WinNT; *)*] +Parent=Netscape 4.8 +Platform=WinNT + +[Mozilla/4.8*(X11; *)*] +Parent=Netscape 4.8 +Platform=Linux + +[Mozilla/4.8*(X11; *SunOS*)*] +Parent=Netscape 4.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.0 + +[Netscape 6.0] +Parent=DefaultProperties +Browser="Netscape" +Version=6.0 +MajorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.1 + +[Netscape 6.1] +Parent=DefaultProperties +Browser="Netscape" +Version=6.1 +MajorVer=6 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.2 + +[Netscape 6.2] +Parent=DefaultProperties +Browser="Netscape" +Version=6.2 +MajorVer=6 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.0 + +[Netscape 7.0] +Parent=DefaultProperties +Browser="Netscape" +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.1 + +[Netscape 7.1] +Parent=DefaultProperties +Browser="Netscape" +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.1] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.2 + +[Netscape 7.2] +Parent=DefaultProperties +Browser="Netscape" +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.0 + +[Netscape 8.0] +Parent=DefaultProperties +Browser="Netscape" +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.1 + +[Netscape 8.1] +Parent=DefaultProperties +Browser="Netscape" +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firebird + +[Firebird] +Parent=DefaultProperties +Browser="Firebird" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird Browser/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; IRIX*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox + +[Firefox] +Parent=DefaultProperties +Browser="Firefox" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (OS/2; *; Warp*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (Windows NT 5.?; ?; rv:1.*) Gecko/* Firefox] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.*; *; rv:1.*) Gecko/* Deer Park/Alpha*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firefox/10.5] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; FreeBSD*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; HP-UX*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; Linux*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.0 + +[Firefox 1.0] +Parent=DefaultProperties +Browser="Firefox" +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.4 + +[Firefox 1.4] +Parent=DefaultProperties +Browser="Firefox" +Version=1.4 +MajorVer=1 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.5 + +[Firefox 1.5] +Parent=DefaultProperties +Browser="Firefox" +Version=1.5 +MajorVer=1 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OS/2 + +[Mozilla/5.0 (rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2 x64; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 2.0 + +[Firefox 2.0] +Parent=DefaultProperties +Browser="Firefox" +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* BonEcho/2.0*] +Parent=Firefox 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.8*) Gecko/* BonEcho/2.0*] +Parent=Firefox 2.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* BonEcho/2.0*] +Parent=Firefox 2.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* BonEcho/2.0*] +Parent=Firefox 2.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.8*) Gecko/* BonEcho/2.0*] +Parent=Firefox 2.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.8*) Gecko/* BonEcho/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.0 + +[Firefox 3.0] +Parent=DefaultProperties +Browser="Firefox" +Version=3.0 +MajorVer=3 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Minefield/3.0*] +Parent=Firefox 3.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Minefield/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Minefield/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Minefield/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Minefield/3.0*] +Parent=Firefox 3.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Phoenix + +[Phoenix] +Parent=DefaultProperties +Browser="Phoenix" +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Version=0.5 +MajorVer=0 +MinorVer=5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Version=0.5 +MajorVer=0 +MinorVer=5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Version=0.5 +MajorVer=0 +MinorVer=5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Version=0.5 +MajorVer=0 +MinorVer=5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Version=0.5 +MajorVer=0 +MinorVer=5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Version=0.5 +MajorVer=0 +MinorVer=5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.0 + +[Mozilla 1.0] +Parent=DefaultProperties +Browser="Mozilla" +Version=1.0 +MajorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.0.*) Gecko/*] +Parent=Mozilla 1.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.1 + +[Mozilla 1.1] +Parent=DefaultProperties +Browser="Mozilla" +Version=1.1 +MajorVer=1 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.1.*) Gecko/*] +Parent=Mozilla 1.1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.2 + +[Mozilla 1.2] +Parent=DefaultProperties +Browser="Mozilla" +Version=1.2 +MajorVer=1 +MinorVer=2 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.2.*) Gecko/*] +Parent=Mozilla 1.2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.3 + +[Mozilla 1.3] +Parent=DefaultProperties +Browser="Mozilla" +Version=1.3 +MajorVer=1 +MinorVer=3 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.3.*) Gecko/*] +Parent=Mozilla 1.3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.4 + +[Mozilla 1.4] +Parent=DefaultProperties +Browser="Mozilla" +Version=1.4 +MajorVer=1 +MinorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.5 + +[Mozilla 1.5] +Parent=DefaultProperties +Browser="Mozilla" +Version=1.5 +MajorVer=1 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.6 + +[Mozilla 1.6] +Parent=DefaultProperties +Browser="Mozilla" +Version=1.6 +MajorVer=1 +MinorVer=6 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.7 + +[Mozilla 1.7] +Parent=DefaultProperties +Browser="Mozilla" +Version=1.7 +MajorVer=1 +MinorVer=7 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.8 + +[Mozilla 1.8] +Parent=DefaultProperties +Browser="Mozilla" +Version=1.8 +MajorVer=1 +MinorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE Mac + +[IE Mac] +Parent=DefaultProperties +Browser="IE" +Platform=unknownMacPPC +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +JavaApplets=true +JavaScript=true +CSS=1 +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 5.5 + +[AOL 9.0/IE 5.5] +Parent=DefaultProperties +Browser="AOL" +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5; *AOL 9.0*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista +netCLR=true +ClrVersion=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 6.0 + +[AOL 9.0/IE 6.0] +Parent=DefaultProperties +Browser="AOL" +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 7.0 + +[AOL 9.0/IE 7.0] +Parent=DefaultProperties +Browser="AOL" +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 4.01 + +[IE 4.01] +Parent=DefaultProperties +Browser="IE" +Version=4.01 +MajorVer=4 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 4.01*)*] +Parent=IE 4.01 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*] +Parent=IE 4.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*] +Parent=IE 4.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*] +Parent=IE 4.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 4.01 +Platform=WinME + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0 + +[IE 5.0] +Parent=DefaultProperties +Browser="IE" +Version=5.0 +MajorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.0*)*] +Parent=IE 5.0 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*] +Parent=IE 5.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*] +Parent=IE 5.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*.NET CLR 1*)*] +Parent=IE 5.0 +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98;*.NET CLR 1*)*] +Parent=IE 5.0 +Platform=Win98 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*] +Parent=IE 5.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0;*.NET CLR 1*)*] +Parent=IE 5.0 +Platform=WinNT +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*] +Parent=IE 5.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0;*.NET CLR 1*)*] +Parent=IE 5.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*] +Parent=IE 5.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01;*.NET CLR 1*)*] +Parent=IE 5.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.01 + +[IE 5.01] +Parent=DefaultProperties +Browser="IE" +Version=5.01 +MajorVer=5 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.01*)*] +Parent=IE 5.01 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*] +Parent=IE 5.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*] +Parent=IE 5.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*.NET CLR 1*)*] +Parent=IE 5.01 +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98;*.NET CLR 1*)*] +Parent=IE 5.01 +Platform=Win98 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*] +Parent=IE 5.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0;*.NET CLR 1*)*] +Parent=IE 5.01 +Platform=WinNT +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*] +Parent=IE 5.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0;*.NET CLR 1*)*] +Parent=IE 5.01 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*] +Parent=IE 5.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01;*.NET CLR 1*)*] +Parent=IE 5.01 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0b1 + +[IE 5.0b1] +Parent=DefaultProperties +Browser="IE" +Version=5.0 +MajorVer=5 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.0b1*)*] +Parent=IE 5.0b1 + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows 95*)*] +Parent=IE 5.0b1 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows 98*)*] +Parent=IE 5.0b1 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.0b1 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows 98; Win 9x 4.90;*.NET CLR 1*)*] +Parent=IE 5.0b1 +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows 98;*.NET CLR 1*)*] +Parent=IE 5.0b1 +Platform=Win98 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows NT 4.0*)*] +Parent=IE 5.0b1 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows NT 4.0;*.NET CLR 1*)*] +Parent=IE 5.0b1 +Platform=WinNT +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows NT 5.0*)*] +Parent=IE 5.0b1 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows NT 5.0;*.NET CLR 1*)*] +Parent=IE 5.0b1 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows NT 5.01*)*] +Parent=IE 5.0b1 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0b1; *Windows NT 5.01;*.NET CLR 1*)*] +Parent=IE 5.0b1 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.5 + +[IE 5.5] +Parent=DefaultProperties +Browser="IE" +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.5*)*] +Parent=IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*] +Parent=IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*] +Parent=IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*] +Parent=IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90;*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90;*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98;*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=Win98 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98;*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*] +Parent=IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0;*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=WinNT +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0;*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0;*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0;*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01;*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01;*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*] +Parent=IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1;*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1;*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*] +Parent=IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2;*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=Win2003 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2;*.NET CLR 2*)*] +Parent=IE 5.5 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 5.5 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0 + +[IE 6.0] +Parent=DefaultProperties +Browser="IE" +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 6.0*)*] +Parent=IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*] +Parent=IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*] +Parent=IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*] +Parent=IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=Win98 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*] +Parent=IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinNT +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*] +Parent=IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=Win2003 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*] +Parent=IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0;*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinVista +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0;*.NET CLR 2*)*] +Parent=IE 6.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0b + +[IE 6.0b] +Parent=DefaultProperties +Browser="IE" +Version=6.0b +MajorVer=6 +MinorVer=0b +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 6.0b*)*] +Parent=IE 6.0b + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 95*)*] +Parent=IE 6.0b +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98*)*] +Parent=IE 6.0b +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98; Win 9x 4.90*)*] +Parent=IE 6.0b +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98; Win 9x 4.90;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98; Win 9x 4.90;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98; Win 9x 4.90;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98; Win 9x 4.90;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=Win98 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows 98;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 4.0*)*] +Parent=IE 6.0b +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 4.0;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinNT +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 4.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 4.0;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 4.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.0*)*] +Parent=IE 6.0b +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.0;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.0;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.01*)*] +Parent=IE 6.0b +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.01;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.01;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.01;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.01;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.1*)*] +Parent=IE 6.0b +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.1;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.1;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.1;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.1;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2*)*] +Parent=IE 6.0b +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=Win2003 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*Win64;*)*] +Parent=IE 6.0b +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*Win64;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*Win64;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*Win64;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*Win64;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 6.0b +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*WOW64;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*WOW64;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*WOW64;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 5.2;*WOW64;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 6.0*)*] +Parent=IE 6.0b +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 6.0;*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinVista +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 6.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 6.0;*.NET CLR 2*)*] +Parent=IE 6.0b +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 6.0b; *Windows NT 6.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 6.0b +Platform=WinVista +netCLR=true +ClrVersion=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0 + +[IE 7.0] +Parent=DefaultProperties +Browser="IE" +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 7.0*)*] +Parent=IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98*)*] +Parent=IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=Win98 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0*)*] +Parent=IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinNT +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2*)*] +Parent=IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=Win2003 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0*)*] +Parent=IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0;*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinVista +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0;*.NET CLR 2*)*] +Parent=IE 7.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0 +Platform=WinVista +netCLR=true +ClrVersion=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0b + +[IE 7.0b] +Parent=DefaultProperties +Browser="IE" +Version=7.0b +MajorVer=7 +MinorVer=0b +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CSS=2 +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 7.0b*)*] +Parent=IE 7.0b + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98*)*] +Parent=IE 7.0b +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 7.0b +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98; Win 9x 4.90;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinME +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98; Win 9x 4.90;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98; Win 9x 4.90;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98; Win 9x 4.90;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinME +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=Win98 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows 98;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=Win98 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 4.0*)*] +Parent=IE 7.0b +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 4.0;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinNT +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 4.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 4.0;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 4.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinNT +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.0*)*] +Parent=IE 7.0b +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.0;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.0;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.01*)*] +Parent=IE 7.0b +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.01;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=Win2000 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.01;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.01;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.01;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=Win2000 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.1*)*] +Parent=IE 7.0b +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.1;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.1;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.1;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.1;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2*)*] +Parent=IE 7.0b +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=Win2003 +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=Win2003 +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*Win64;*)*] +Parent=IE 7.0b +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*Win64;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*Win64;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*Win64;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*Win64;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinXP +Win32=false +Win64=true +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 7.0b +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*WOW64;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinXP +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*WOW64;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*WOW64;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 5.2;*WOW64;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinXP +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 6.0*)*] +Parent=IE 7.0b +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 6.0;*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinVista +netCLR=true +ClrVersion=1 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 6.0;*.NET CLR 1*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 6.0;*.NET CLR 2*)*] +Parent=IE 7.0b +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/4.0 (compatible; MSIE 7.0b; *Windows NT 6.0;*.NET CLR 2*.NET CLR 1*)*] +Parent=IE 7.0b +Platform=WinVista +netCLR=true +ClrVersion=2 + +[Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.2 +MajorVer=5 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Browser + +[*] +Browser="Default Browser" +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=true +IFrames=false +Tables=true +Cookies=false +BackgroundSounds=false +AuthenticodeUpdate=0 +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +Stripper=false +isBanned=false +WAP=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CSS=0 +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +netCLR=false +ClrVersion=0 diff --git a/modules/base/entities/click.php b/modules/base/entities/click.php new file mode 100644 index 000000000..bc2175b67 --- /dev/null +++ b/modules/base/entities/click.php @@ -0,0 +1,88 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_click extends owa_entity { + + var $id; // BIGINT, + var $last_impression_id; //BIGINT, + var $visitor_id; // BIGINT, + var $session_id; // BIGINT, + var $document_id; // BIGINT, + var $target_id; // BIGINT, + var $target_url; // VARCHAR(255), + var $timestamp; // BIGINT, + var $year; // INT, + var $month; // INT, + var $day; // INT, + var $dayofyear; // INT, + var $weekofyear; // INT, + var $hour; // TINYINT(2), + var $minute; // TINYINT(2), + var $second; // INT, + var $msec; // VARCHAR(255), + var $click_x; // INT, + var $click_y; // INT, + var $page_width; // INT, + var $page_height; // INT, + var $position; // BIGINT, + var $approx_position; // BIGINT, + var $dom_element_x; // INT, + var $dom_element_y; // INT, + var $dom_element_name; // VARCHAR(255), + var $dom_element_id; // VARCHAR(255), + var $dom_element_value; // VARCHAR(255), + var $dom_element_tag; // VARCHAR(255), + var $dom_element_text; // VARCHAR(255), + var $tag_id; // BIGINT, + var $placement_id; // BIGINT, + var $campaign_id; // BIGINT, + var $ad_group_id; // BIGINT, + var $ad_id; // BIGINT, + var $site_id; // VARCHAR(255), + var $ua_id; // BIGINT, + var $ip_address; // VARCHAR(255), + var $host; // VARCHAR(255), + var $host_id; // VARCHAR(255), + + function owa_click() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/document.php b/modules/base/entities/document.php new file mode 100644 index 000000000..5acdb44da --- /dev/null +++ b/modules/base/entities/document.php @@ -0,0 +1,52 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_document extends owa_entity { + + var $id; + var $url; // varchar(255), + var $page_title; // varchar(255), + var $page_type; // varchar(255), + + function owa_document() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/feed_request.php b/modules/base/entities/feed_request.php new file mode 100644 index 000000000..c68c7d09f --- /dev/null +++ b/modules/base/entities/feed_request.php @@ -0,0 +1,71 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_feed_request extends owa_entity { + + var $id; // BIGINT, + var $visitor_id; // BIGINT, + var $session_id; // BIGINT, + var $document_id; // BIGINT, + var $ua_id; // VARCHAR(255), + var $site_id; // VARCHAR(255), + var $host_id; // BIGINT, + var $os_id; // VARCHAR(255), + var $feed_reader_guid; // VARCHAR(255), + var $subscription_id; // BIGINT, + var $timestamp; // bigint, + var $month; // INT, + var $day; // tinyint(2), + var $dayofweek; // varchar(10), + var $dayofyear; // INT, + var $weekofyear; // INT, + var $year; // INT, + var $hour; // tinyint(2), + var $minute; // tinyint(2), + var $second; // tinyint(2), + var $msec; // int, + var $last_req; // bigint, + var $feed_format; // VARCHAR(255), + + function owa_feed_request() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/host.php b/modules/base/entities/host.php new file mode 100644 index 000000000..b2410e3c4 --- /dev/null +++ b/modules/base/entities/host.php @@ -0,0 +1,56 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_host extends owa_entity { + + var $id; // BIGINT, + var $ip_address; // VARCHAR(255), + var $host; // VARCHAR(255), + var $full_host; // VARCHAR(255), + var $city; // varchar(255), + var $country; // varchar(255), + var $latitude; // varchar(255), + var $longitude; // varchar(255), + + function owa_host() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/referer.php b/modules/base/entities/referer.php new file mode 100644 index 000000000..8eef5bee2 --- /dev/null +++ b/modules/base/entities/referer.php @@ -0,0 +1,57 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_referer extends owa_entity { + + var $id; // BIGINT, + var $url; // varchar(255), + var $site_name; // varchar(255), + var $site; // VARCHAR(255), + var $query_terms; // varchar(255), + var $refering_anchortext; // varchar(255), + var $page_title; // varchar(255), + var $snippet; // TEXT, + var $is_searchengine; // tinyint(1), + + function owa_referer() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/request.php b/modules/base/entities/request.php new file mode 100644 index 000000000..3581d93ca --- /dev/null +++ b/modules/base/entities/request.php @@ -0,0 +1,84 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_request extends owa_entity { + + var $id; + var $visitor_id; + var $session_id; + var $inbound_visitor_id; + var $inbound_session_id; + var $feed_subscription_id; + var $user_name; + var $user_email; + var $timestamp; + var $last_req; + var $year; + var $month; + var $day; + var $dayofweek; + var $dayofyear; + var $weekofyear; + var $hour; + var $minute; + var $second; + var $msec; + var $referer_id; + var $document_id; + var $site; + var $site_id; + var $ip_address; + var $host_id; + var $os; + var $os_id; + var $ua_id; + var $is_new_visitor; + var $is_repeat_visitor; + var $is_comment; + var $is_entry_page; + var $is_browser; + var $is_robot; + var $is_feedreader; + + function owa_request() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/session.php b/modules/base/entities/session.php new file mode 100644 index 000000000..8b77b2399 --- /dev/null +++ b/modules/base/entities/session.php @@ -0,0 +1,83 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_session extends owa_entity { + + var $id; // BIGINT, + var $visitor_id; // BIGINT, + var $timestamp; // bigint, + var $year; // INT, + var $month; // INT, + var $day; // TINYINT(2), + var $dayofweek; // varchar(10), + var $dayofyear; // INT, + var $weekofyear; // INT, + var $hour; // TINYINT(2), + var $minute; // TINYINT(2), + var $last_req; // BIGINT, + var $num_pageviews; // INT, + var $num_comments; // INT, + var $is_repeat_visitor; // TINYINT(1), + var $is_new_visitor; // TINYINT(1), + var $prior_session_lastreq; // BIGINT, + var $prior_session_id; // BIGINT, + var $time_sinse_priorsession; // INT, + var $prior_session_year; // INT(4), + var $prior_session_month; // varchar(255), + var $prior_session_day; // TINYINT(2), + var $prior_session_dayofweek; // int, + var $prior_session_hour; // TINYINT(2), + var $prior_session_minute; // TINYINT(2), + var $os_id; // varchar(255), + var $ua_id; // varchar(255), + var $first_page_id; // BIGINT, + var $last_page_id; // BIGINT, + var $referer_id; // BIGINT, + var $host_id; // varchar(255), + var $site_id; // varchar(255), + var $is_robot; // tinyint(1), + var $is_browser; // tinyint(1), + var $is_feedreader; // tinyint(1), + + function owa_session() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/site.php b/modules/base/entities/site.php new file mode 100644 index 000000000..7cf358136 --- /dev/null +++ b/modules/base/entities/site.php @@ -0,0 +1,56 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_site extends owa_entity { + + var $id; + var $site_id; // VARCHAR(255), + var $domain; // VARCHAR(255), + var $name; // VARCHAR(255), + var $description; // TEXT, + var $site_family; // VARCHAR(255) + + function owa_site() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/ua.php b/modules/base/entities/ua.php new file mode 100644 index 000000000..b904c402e --- /dev/null +++ b/modules/base/entities/ua.php @@ -0,0 +1,52 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_ua extends owa_entity { + + var $id; // BIGINT, + var $ua; // varchar(255), + var $browser_type;// varchar(255), + var $browser; // VARCHAR(255), + + function owa_ua() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/user.php b/modules/base/entities/user.php new file mode 100644 index 000000000..db205ca2b --- /dev/null +++ b/modules/base/entities/user.php @@ -0,0 +1,60 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_user extends owa_entity { + + var $id; // SERIAL, + var $user_id; // varchar(255), + var $password; // VARCHAR(255), + var $role; // VARCHAR(255), + var $real_name; // VARCHAR(255), + var $email_address; // VARCHAR(255), + var $temp_passkey; // VARCHAR(255), + var $creation_date; // BIGINT, + var $last_update_date; // BIGINT, + + + function owa_user() { + + $this->owa_entity(); + + $this->id->auto_incement = true; + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/entities/visitor.php b/modules/base/entities/visitor.php new file mode 100644 index 000000000..f7d302c7a --- /dev/null +++ b/modules/base/entities/visitor.php @@ -0,0 +1,62 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitor extends owa_entity { + + var $id; // BIGINT, + var $user_name; // VARCHAR(255), + var $user_email; // varchar(255), + var $first_session_id; // BIGINT, + var $first_session_year; // INT, + var $first_session_month; // varchar(255), + var $first_session_day; // INT, + var $first_session_dayofyear; // INT, + var $first_session_timestamp; // BIGINT, + var $last_session_id; // BIGINT, + var $last_session_year; // INT, + var $last_session_month; // varchar(255), + var $last_session_day; // INT, + var $last_session_dayofyear; // INT, + + function owa_session() { + + $this->owa_entity(); + + return; + + } + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/error.php b/modules/base/error.php new file mode 100644 index 000000000..a80698a6c --- /dev/null +++ b/modules/base/error.php @@ -0,0 +1,73 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_errorView extends owa_view { + + function owa_errorView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Set Page title + $this->t->set('page_title', 'Error'); + + // Set Page headline + $this->body->set('error_msg', $data['error_msg']); + + if($this->is_subview == true): + + $this->t->set_template('wrapper_blank.tpl'); + endif; + + + // load body template + $this->body->set_template('generic_error.tpl'); + + + + return; + } + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/graphDashboardTrend.php b/modules/base/graphDashboardTrend.php new file mode 100644 index 000000000..26c451e34 --- /dev/null +++ b/modules/base/graphDashboardTrend.php @@ -0,0 +1,99 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_graphDashboardTrendView extends owa_abstractJpGraphView { + + function owa_graphDashboardTrendView() { + + $this->owa_abstractJpGraphView(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + $api = &owa_coreAPI::singleton($data); + + $result = $api->getMetric('base.dashCoreByDay', array( + + 'request_params' => $data, + 'period' => $data['period'], + 'constraints' => array( + 'site_id' => $data['site_id'], + 'is_browser' => 1, + 'is_robot' => 0), + 'groupby' => array('day'), + 'order' => 'ASC' + )); + + //Graph params + + $new_result = owa_lib::deconstruct_assoc($result); + //$new_result = ''; + if(empty($new_result['page_views']) && empty($new_result['sessions'])): + + $this->graph = owa_coreAPI::graphFactory('base.jpErrorGraph'); + $this->graph->params['width'] = 275; + $this->graph->params['height'] = 100; + $this->graph->params['error_msg'] = $this->getMsg(3500); + + else: + + $this->graph = owa_coreAPI::graphFactory('base.jpBarAreaGraph'); + + $this->graph->params['width'] = 700; + $this->graph->params['height'] = 240; + $this->graph->params['y2_title'] = "PageViews"; + $this->graph->params['y1_title'] = "Visits"; + $this->graph->params['data']['y2'] = $new_result['page_views']; + $this->graph->params['data']['y1'] = $new_result['sessions']; + $this->graph->params['data']['x'] = $this->makeDateArray($result, "n/j"); + + $this->graph->params['graph_title'] = "Page Views & Visits for " . $this->graph->get_period_label($data['period']); + + endif; + + return; + } + + + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/graphFeedFormats.php b/modules/base/graphFeedFormats.php new file mode 100644 index 000000000..a894147b0 --- /dev/null +++ b/modules/base/graphFeedFormats.php @@ -0,0 +1,89 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_graphFeedFormatsView extends owa_abstractJpGraphView { + + function owa_graphFeedFormatsView() { + + $this->owa_abstractJpGraphView(); + $this->priviledge_level = 'viewer'; + + return; + } + + function construct($data) { + + // Fetch Data + + $api = &owa_coreAPI::singleton($data); + + $result = $api->getMetric('base.feedFormatsCount', array( + + 'result_format' => 'inverted_array', + 'constraints' => array('site_id' => $this->params['site_id']) + + )); + + //Graph params + + if (empty($result)): + + $this->graph = owa_coreAPI::graphFactory('base.jpErrorGraph'); + $this->graph->params['width'] = 275; + $this->graph->params['height'] = 100; + $this->graph->params['error_msg'] = $this->getMsg(3500); + + else: + + $this->graph = owa_coreAPI::graphFactory('base.jpPieGraph'); + + // Graph params + $this->graph->params['height'] = 220; + $this->graph->params['width'] = 350; + $this->graph->params['data']['data_pie'] = $result['count']; + $this->graph->params['legends'] = $result['feed_format'];; + $this->graph->params['graph_title'] = "Feed Formats for " . $this->graph->get_period_label($data['period']); + + endif; + + return; + } + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/graphFeedReaderTypes.php b/modules/base/graphFeedReaderTypes.php new file mode 100644 index 000000000..ef4a320c2 --- /dev/null +++ b/modules/base/graphFeedReaderTypes.php @@ -0,0 +1,89 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_graphFeedReaderTypesView extends owa_abstractJpGraphView { + + function owa_graphFeedReaderTypesView() { + + $this->owa_abstractJpGraphView(); + $this->priviledge_level = 'viewer'; + + return; + } + + function construct($data) { + + // Fetch Data + + $api = &owa_coreAPI::singleton($data); + + $result = $api->getMetric('base.feedReaderTypesCount', array( + + 'result_format' => 'inverted_array', + 'constraints' => array('site_id' => $this->params['site_id']) + + )); + + //Graph params + + if (empty($result)): + + $this->graph = owa_coreAPI::graphFactory('base.jpErrorGraph'); + $this->graph->params['width'] = 275; + $this->graph->params['height'] = 100; + $this->graph->params['error_msg'] = $this->getMsg(3500); + + else: + + $this->graph = owa_coreAPI::graphFactory('base.jpPieGraph'); + + // Graph params + $this->graph->params['height'] = 220; + $this->graph->params['width'] = 350; + $this->graph->params['data']['data_pie'] = $result['count']; + $this->graph->params['legends'] = $result['browser_type'];; + $this->graph->params['graph_title'] = "Feed Reader Types for " . $this->graph->get_period_label($data['period']); + + endif; + + return; + } + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/graphFeedRequests.php b/modules/base/graphFeedRequests.php new file mode 100644 index 000000000..51ff1c914 --- /dev/null +++ b/modules/base/graphFeedRequests.php @@ -0,0 +1,113 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_graphFeedRequestsView extends owa_abstractJpGraphView { + + function owa_graphFeedRequestsView() { + + $this->owa_abstractJpGraphView(); + $this->priviledge_level = 'viewer'; + + return; + } + + function construct($data) { + + // Fetch Data + + $api = &owa_coreAPI::singleton($data); + + switch ($data['period']) { + + case "this_year": + + $result = $api->getMetric('base.feedViewsTrend', array( + + 'result_format' => '', + 'groupby' => array('year', 'month'), + 'constraints' => array('site_id' => $this->params['site_id']) + )); + + break; + + default: + + $result = $api->getMetric('base.feedViewsTrend', array( + + 'result_format' => '', + 'groupby' => array('year', 'month', 'day'), + 'constraints' => array('site_id' => $this->params['site_id']) + )); + + break; + } + //print_r($result); + + //Graph params + + if (empty($result)): + + $this->graph = owa_coreAPI::graphFactory('base.jpErrorGraph'); + $this->graph->params['width'] = 275; + $this->graph->params['height'] = 100; + $this->graph->params['error_msg'] = $this->getMsg(3500); + + else: + + $graph_arrays = owa_lib::deconstruct_assoc($result); + $this->graph = owa_coreAPI::graphFactory('base.jpBarAreaGraph'); + + // Graph params + $this->graph->params['height'] = 240; + $this->graph->params['width'] = 700; + $this->graph->params['y2_title'] = "Feed Requests"; + $this->graph->params['y1_title'] = "Unique Feed Readers"; + $this->graph->params['data']['y2'] = $graph_arrays['fetch_count']; + $this->graph->params['data']['y1'] = $graph_arrays['reader_count']; + $this->graph->params['data']['x'] = $this->makeDateArray($result, "n/j"); + + $this->graph->params['graph_title'] = "Feed Fetches & Unique Feed Readers for " . $this->graph->get_period_label($data['period']); + + endif; + + return; + } + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/graphPageTypes.php b/modules/base/graphPageTypes.php new file mode 100644 index 000000000..f81da5914 --- /dev/null +++ b/modules/base/graphPageTypes.php @@ -0,0 +1,92 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_graphPageTypesView extends owa_abstractJpGraphView { + + function owa_graphPageTypesView() { + + $this->owa_abstractJpGraphView(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Fetch Data + + $api = &owa_coreAPI::singleton($data); + + $result = $api->getMetric('base.pageTypesCount',array( + + 'result_format' => 'inverted_array', + 'constraints' => array('site_id' => $data['site_id']) + + )); + + //$result = owa_lib::deconstruct_assoc($results); + + //Graph params + + if (empty($result)): + + $this->graph = owa_coreAPI::graphFactory('base.jpErrorGraph'); + $this->graph->params['width'] = 275; + $this->graph->params['height'] = 100; + $this->graph->params['error_msg'] = $this->getMsg(3500); + + else: + + $this->graph = owa_coreAPI::graphFactory('base.jpPieGraph'); + + // Graph params + $this->graph->params['graph_title'] = "Page Types for " . $this->graph->get_period_label($data['period']); + $this->graph->params['height'] = 220; + $this->graph->params['width'] = 350; + $this->graph->params['data']['data_pie'] = $result['count']; + $this->graph->params['legends'] = $result['page_type']; + + + endif; + + return; + } + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/graphVisitorSources.php b/modules/base/graphVisitorSources.php new file mode 100644 index 000000000..7f8ff7dbb --- /dev/null +++ b/modules/base/graphVisitorSources.php @@ -0,0 +1,130 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_graphVisitorSourcesView extends owa_abstractJpGraphView { + + function owa_graphVisitorSourcesView() { + + $this->owa_abstractJpGraphView(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + $api = &owa_coreAPI::singleton($data); + + $from_feeds = $api->getMetric('base.visitsFromFeedsCount',array( + + 'request_params' => $data, + 'period' => $data['period'], + 'result_format' => 'single_array', + 'constraints' => array( + 'site_id' => $data['site_id'] + + ) + + )); + + $from_se = $api->getMetric('base.visitsFromSearchEnginesCount',array( + + 'request_params' => $data, + 'period' => $data['period'], + 'result_format' => 'single_array', + 'constraints' => array( + 'site_id' => $data['site_id'] + + ) + + )); + + $from_sites = $api->getMetric('base.visitsFromSitesCount', array( + + 'request_params' => $data, + 'period' => $data['period'], + 'result_format' => 'single_array', + 'constraints' => array( + 'site_id' => $data['site_id'] + + ) + + )); + + $from_direct = $api->getMetric('base.visitsFromDirectNavCount', array( + + 'request_params' => $data, + 'period' => $data['period'], + 'result_format' => 'single_array', + 'constraints' => array( + 'site_id' => $data['site_id'] + + ) + + )); + + $data_pie = array($from_feeds['source_count'], $from_se['se_count'], $from_sites['site_count'], $from_direct['count']); + + if(array_sum($data_pie) == 0): + + $this->graph = owa_coreAPI::graphFactory('base.jpErrorGraph'); + $this->graph->params['width'] = 275; + $this->graph->params['height'] = 100; + $this->graph->params['error_msg'] = $this->getMsg(3500); + + else: + + // Graph Params + $this->graph = owa_coreAPI::graphFactory('base.jpPieGraph'); + $this->graph->params['graph_title'] = "Visit Sources for " . $this->graph->get_period_label($data['period']); + $this->graph->params['legends'] = array('Feeds', 'Search Engines', 'Web Sites', 'Direct'); + $this->graph->params['height'] = 220; + $this->graph->params['width'] = 350; + $this->graph->params['data']['data_pie'] = $data_pie; + $this->graph->params['legends_cols'] = 4; + + //print_r($data_pie); + + endif; + + return; + } + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/graphVisitorTypes.php b/modules/base/graphVisitorTypes.php new file mode 100644 index 000000000..2e847aa22 --- /dev/null +++ b/modules/base/graphVisitorTypes.php @@ -0,0 +1,96 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_graphVisitorTypesView extends owa_abstractJpGraphView { + + function owa_graphVisitorTypesView() { + + $this->owa_abstractJpGraphView(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Fetch Data + + $api = &owa_coreAPI::singleton($data); + + $result = $api->getMetric('base.visitorTypesCount', array( + 'request_params' => $data, + 'period' => $data['period'], + 'result_format' => 'single_array', + 'constraints' => array( + 'site_id' => $data['site_id'], + 'is_browser' => 1, + 'is_robot' => 0 + + ) + + )); + + //Graph params + + if (empty($result['new_visitor']) && empty($result['repeat_visitor'])): + + $this->graph = owa_coreAPI::graphFactory('base.jpErrorGraph'); + $this->graph->params['width'] = 275; + $this->graph->params['height'] = 100; + $this->graph->params['error_msg'] = $this->getMsg(3500); + + else: + + $this->graph = owa_coreAPI::graphFactory('base.jpPieGraph'); + + // Graph params + $this->graph->params['graph_title'] = "New Vs. Repeat Visitors for \n" . $this->graph->get_period_label($this->params['period']); + $this->graph->params['height'] = 220; + $this->graph->params['width'] = 350; + $this->graph->params['data']['data_pie'] = array($result['new_visitor'], $result['repeat_visitor']); + $this->graph->params['legends'] = array('New Visitors', 'Repeat Visitors'); + $this->graph->params['graph_title'] = "Visitor Types for " . $this->graph->get_period_label($data['period']); + + endif; + + return; + } + + +} + + + +?> \ No newline at end of file diff --git a/modules/base/graphs/jpBarAreaGraph.php b/modules/base/graphs/jpBarAreaGraph.php new file mode 100644 index 000000000..4a7b6170b --- /dev/null +++ b/modules/base/graphs/jpBarAreaGraph.php @@ -0,0 +1,114 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_jpBarAreaGraph extends owa_graph { + + var $graph; + var $linePlot; + var $barPlot; + + function owa_jpBarAreaGraph($params) { + + $this->owa_graph(); + $this->params = $params; + + return; + } + + function construct() { + + $data_y1 = $this->params['data']['y1']; + + $data_y2 = $this->params['data']['y2']; + + $datax = $this->params['data']['x']; + + // Create the graph. + $this->graph = new Graph($this->params['width'],$this->params['height']); + //$this->graph->img->SetAntiAliasing(); + $this->graph->SetColor('white'); + $this->graph->SetMarginColor('white'); + $this->graph->SetFrame(true,'silver',1); + $this->graph->SetScale("textlin"); + //$this->graph->SetScale( 'datlin'); + $this->graph->img->SetMargin(40,40,35,60); + + // Legend + $this->graph->legend->Pos(0.01, 0.98, 'left', 'bottom'); + $this->graph->legend->SetLayout(LEGEND_HOR); + $this->graph->legend->SetShadow(false); + $this->graph->legend->SetFillColor('white'); + $this->graph->legend->SetFrameWeight(0); + $this->graph->legend-> SetFont( FF_FONT1, '',12); + + + $this->graph->xaxis->SetTickLabels($datax); + $this->graph->xaxis->SetLabelAngle(90); + + // Create the linear line plot + $l1plot = new LinePlot($data_y1); + $l1plot->SetColor("lightblue"); + $l1plot->SetWeight(1); + $l1plot->SetFillColor("lightblue@0.2"); + $l1plot->SetLegend($this->params['y1_title']); + + //Center the line plot in the center of the bars + $l1plot->SetBarCenter(); + + // Create the bar plot + $bplot = new BarPlot($data_y2); + $bplot->SetFillColor("orange"); + $bplot->SetWidth(1.0); + $bplot->SetLegend($this->params['y2_title']); + + // Add the plots to the graph + $this->graph->Add($bplot); + $this->graph->Add($l1plot); + + // Decorate Graph + $this->graph->title->Set($this->params['graph_title']); + $this->graph->xaxis->title->Set($this->params['xaxis_title']); + $this->graph->yaxis->title->Set($this->params['yaxis_title']); + + $this->graph->title->SetFont(FF_FONT1,FS_BOLD); + $this->graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); + $this->graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + + return; + } + +} + +?> \ No newline at end of file diff --git a/modules/base/graphs/jpErrorGraph.php b/modules/base/graphs/jpErrorGraph.php new file mode 100644 index 000000000..e8f848bb2 --- /dev/null +++ b/modules/base/graphs/jpErrorGraph.php @@ -0,0 +1,65 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_jpErrorGraph extends owa_graph { + + function owa_jpErrorGraph($params) { + + $this->owa_graph(); + $this->params = $params; + + return; + } + + function construct() { + + $this->graph = new CanvasGraph($this->params['width'], $this->params['height']); + + $t1 = new Text($this->params['error_msg']); + //$t1->Pos(0.05, 0.1); + $t1->Pos(0.5,0.5,'center','center'); + $t1->ParagraphAlign('center'); + $t1->SetOrientation('h'); + $t1->SetFont(FF_FONT1, FS_BOLD); + $t1->SetColor('gray5'); + $this->graph->AddText($t1); + + return; + + } + +} + +?> \ No newline at end of file diff --git a/modules/base/graphs/jpPieGraph.php b/modules/base/graphs/jpPieGraph.php new file mode 100644 index 000000000..e386250a6 --- /dev/null +++ b/modules/base/graphs/jpPieGraph.php @@ -0,0 +1,108 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_jpPieGraph extends owa_graph { + + /** + * Constructor + * + * @var array caller params + */ + function owa_jpPieGraph($params) { + + $this->owa_graph(); + $this->params = $params; + + return; + } + + function construct() { + + $data = array_reverse($this->params['data']['data_pie']); + + // Create the Pie Graph. + $this->graph = new PieGraph($this->params['width'],$this->params['height']); + $this->graph->SetAntiAliasing(); + + // Set A title for the plot + $this->graph->title->Set($this->params['graph_title']); + $this->graph->title->SetFont(FF_FONT1,FS_BOLD, 12); + $this->graph->title->SetColor("black"); + $this->graph->img->SetMargin(40,40,20,70); + + // Legend + $this->graph->legend->Pos(0.01, 0.98, 'left', 'bottom'); + $this->graph->legend->SetLayout(LEGEND_HOR); + $this->graph->legend->SetShadow(false); + $this->graph->legend->SetFillColor('white'); + $this->graph->legend->SetFrameWeight(0); + $this->graph->legend-> SetFont( FF_FONT1, '',12); + $this->graph->SetFrame(true,'silver',1); + + if($this->params['legends_cols']): + $this->graph->legend->SetColumns($this->params['legends_cols']); + endif; + + // Create pie plot + $p1 = new PiePlot3D($data); + $p1->SetSize(0.4); + $p1->SetCenter(0.5,0.4); + $p1->SetLegends($this->params['legends']); + $p1->SetHeight(18); + $p1->SetSliceColors(array('orange','lightblue','green','red','navy')); + //$p1->SetSliceColors(array_reverse(array('orange','lightblue','green','red','navy'))); + $p1->value->HideZero(); + + //Enable and set policy for guide-lines + //$p1->SetGuideLines(true, false); + //$p1->SetGuideLinesAdjust(1.4); + + // Setup the labels + //$p1->SetLabelType(PIE_VALUE_ABS); + //$p1->value->Show(); + $p1->value->SetFont(FF_FONT1,FS_BOLD, 12); + $p1->value->SetColor('gray5'); + //$p1->value->SetFormat('%d '.$this->params['slice_label']); + //$p1->SetLabels($this->params['labels'], 1.1); + + // Add plot + $this->graph->Add($p1); + + return; + } + +} + +?> \ No newline at end of file diff --git a/modules/base/handlers/clickHandlers.php b/modules/base/handlers/clickHandlers.php new file mode 100644 index 000000000..42b31b1f7 --- /dev/null +++ b/modules/base/handlers/clickHandlers.php @@ -0,0 +1,71 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_clickHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * @access public + * @return Log_observer_request_logger + */ + function owa_clickHandlers() { + + // Call the base class constructor. + + $this->owa_observer(); + + return; + } + + /** + * Notify Handler + * + * @access public + * @param object $event + */ + function notify($event) { + + $this->m = $event['message']; + + switch ($event['event_type']) { + case "base.click": + $this->handleEvent('base.logClick'); + break; + + } + + return; + } + +} + +?> diff --git a/modules/base/handlers/commentHandlers.php b/modules/base/handlers/commentHandlers.php new file mode 100644 index 000000000..bab529067 --- /dev/null +++ b/modules/base/handlers/commentHandlers.php @@ -0,0 +1,63 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_commentHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * + */ + function owa_commentHandlers() { + + // Call the base class constructor. + $this->owa_observer(); + return; + } + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + $this->m = $event['message']; + + return $this->handleEvent('base.logComment'); + + } + +} + +?> diff --git a/modules/base/handlers/documentHandlers.php b/modules/base/handlers/documentHandlers.php new file mode 100644 index 000000000..e9613f4cf --- /dev/null +++ b/modules/base/handlers/documentHandlers.php @@ -0,0 +1,63 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_documentHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * + */ + function owa_documentHandlers() { + + // Call the base class constructor. + $this->owa_observer(); + return; + } + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + $this->m = $event['message']; + + return $this->handleEvent('base.logDocument'); + + } + +} + +?> diff --git a/modules/base/handlers/feedRequestHandlers.php b/modules/base/handlers/feedRequestHandlers.php new file mode 100644 index 000000000..eee673176 --- /dev/null +++ b/modules/base/handlers/feedRequestHandlers.php @@ -0,0 +1,63 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_feedRequestHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * + */ + function owa_feedRequestHandlers() { + + // Call the base class constructor. + $this->owa_observer(); + return; + } + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + $this->m = $event['message']; + + return $this->handleEvent('base.logFeedRequest'); + + } + +} + +?> diff --git a/modules/base/handlers/hostHandlers.php b/modules/base/handlers/hostHandlers.php new file mode 100644 index 000000000..989f876c3 --- /dev/null +++ b/modules/base/handlers/hostHandlers.php @@ -0,0 +1,63 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_hostHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * + */ + function owa_hostHandlers() { + + // Call the base class constructor. + $this->owa_observer(); + return; + } + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + $this->m = $event['message']['request']; + + return $this->handleEvent('base.logHost'); + + } + +} + +?> diff --git a/modules/base/handlers/notifyHandlers.php b/modules/base/handlers/notifyHandlers.php new file mode 100644 index 000000000..c50a04a10 --- /dev/null +++ b/modules/base/handlers/notifyHandlers.php @@ -0,0 +1,75 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_notifyHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * @access public + * @return Log_observer_request_logger + */ + function owa_notifyHandlers() { + + // Call the base class constructor. + + $this->owa_observer(); + + return; + } + + /** + * Notify Handler + * + * @access public + * @param object $event + */ + function notify($event) { + + $this->m = $event['message']; + + switch ($event['event_type']) { + + case "base.new_session": + if ($this->config['announce_visitors'] == true): + $this->handleEvent('base.notifyNewSession'); + endif; + break; + + + } + + return; + } + +} + +?> diff --git a/modules/base/handlers/refererHandlers.php b/modules/base/handlers/refererHandlers.php new file mode 100644 index 000000000..c08ae743d --- /dev/null +++ b/modules/base/handlers/refererHandlers.php @@ -0,0 +1,66 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_refererHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * + */ + function owa_refererHandlers() { + + // Call the base class constructor. + $this->owa_observer(); + return; + } + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + $this->m = $event['message']; + + if (!empty($event['message']['request']['HTTP_REFERER'])): + return $this->handleEvent('base.logReferer'); + else: + return false; + endif; + } + +} + +?> diff --git a/modules/base/handlers/requestHandlers.php b/modules/base/handlers/requestHandlers.php new file mode 100644 index 000000000..881cf444d --- /dev/null +++ b/modules/base/handlers/requestHandlers.php @@ -0,0 +1,71 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_requestHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * @access public + * @return Log_observer_request_logger + */ + function owa_requestHandlers() { + + // Call the base class constructor. + + $this->owa_observer(); + + return; + } + + /** + * Notify Handler + * + * @access public + * @param object $event + */ + function notify($event) { + + $this->m = $event['message']; + + switch ($event['event_type']) { + case "base.page_request": + $this->handleEvent('base.logPageRequest'); + break; + + } + + return; + } + +} + +?> diff --git a/modules/base/handlers/sessionHandlers.php b/modules/base/handlers/sessionHandlers.php new file mode 100644 index 000000000..e904e8fd9 --- /dev/null +++ b/modules/base/handlers/sessionHandlers.php @@ -0,0 +1,72 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_sessionHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * + */ + function owa_sessionHandlers() { + + // Call the base class constructor. + $this->owa_observer(); + return; + } + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + $this->m = $event['message']; + + switch ($event['message']['is_entry_page']) { + case true: + $this->handleEvent('base.logSession'); + break; + case false: + $this->handleEvent('base.logSessionUpdate'); + break; + + } + + return; + } + +} + +?> diff --git a/modules/base/handlers/userAgentHandlers.php b/modules/base/handlers/userAgentHandlers.php new file mode 100644 index 000000000..f76828221 --- /dev/null +++ b/modules/base/handlers/userAgentHandlers.php @@ -0,0 +1,63 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_userAgentHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * + */ + function owa_userAgentHandlers() { + + // Call the base class constructor. + $this->owa_observer(); + return; + } + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + $this->m = $event['message']['request']; + + return $this->handleEvent('base.logUserAgent'); + + } + +} + +?> diff --git a/modules/base/handlers/userHandlers.php b/modules/base/handlers/userHandlers.php new file mode 100644 index 000000000..3215b83e0 --- /dev/null +++ b/modules/base/handlers/userHandlers.php @@ -0,0 +1,74 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_userHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * + */ + function owa_userHandlers() { + + // Call the base class constructor. + $this->owa_observer(); + return; + } + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + $this->m = $event['message']; + + switch ($event['event_type']) { + case "base.reset_password": + $this->handleEvent('base.usersResetPassword'); + break; + case "base.set_password": + $this->handleEvent('base.usersSetPassword'); + break; + case "base.new_user_account": + $this->handleEvent('base.usersNewAccount'); + break; + } + + return; + } + +} + +?> diff --git a/modules/base/handlers/visitorHandlers.php b/modules/base/handlers/visitorHandlers.php new file mode 100644 index 000000000..61b055678 --- /dev/null +++ b/modules/base/handlers/visitorHandlers.php @@ -0,0 +1,73 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitorHandlers extends owa_observer { + + /** + * Constructor + * + * @param string $priority + * @param array $conf + * + */ + function owa_visitorHandlers() { + + // Call the base class constructor. + $this->owa_observer(); + return; + } + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + $this->m = $event['message']['request']; + + switch ($event['message']['session']['is_new_visitor']) { + + case true: + $this->handleEvent('base.logVisitor'); + break; + case false: + $this->handleEvent('base.logVisitorUpdate'); + break; + + } + + return; + } + +} + +?> diff --git a/modules/base/helperPageTags.php b/modules/base/helperPageTags.php new file mode 100644 index 000000000..60d14bdc5 --- /dev/null +++ b/modules/base/helperPageTags.php @@ -0,0 +1,118 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_helperPageTagsView extends owa_view { + + function owa_helperPageTagsView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + $this->body->set('site_id', $this->config['site_id']); + + + if (empty($data[$this->config['first_hit_param']]) && + empty($data[$this->config['visitor_param']])): + + if ($this->config['delay_first_hit'] == true): + $this->body->set('first_hit_tag', true); + endif; + endif; + + if ($this->config['log_dom_clicks'] == true): + $this->body->set('click_tag', true); + endif; + + // load body template + $this->t->set_template('wrapper_blank.tpl'); + + // load body template + $this->body->set_template('js_helper_tags.tpl'); + + return; + } + + +} + +/** + * Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_helperPageTagsController extends owa_controller { + + function owa_helperPageTagsController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + if (empty($this->params[$this->config['first_hit_param']]) && + empty($this->params[$this->config['visitor_param']])): + + $data['view_method'] = 'delegate'; // Delegate, redirect + $data['view'] = 'base.helperPageTags'; + endif; + + + // Setup the data array that will be returned to the view. + + return $data; + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/install.php b/modules/base/install.php new file mode 100644 index 000000000..270166618 --- /dev/null +++ b/modules/base/install.php @@ -0,0 +1,73 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installView extends owa_view { + + function owa_installView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + $this->config['main_url'] = $this->config['public_url']."/install.php"; + $this->default_subview = 'base.installStart'; + + return; + } + + function construct($data) { + + //page title + $this->t->set('page_title', 'Installation'); + + // load wrapper template + $this->t->set_template('wrapper_public.tpl'); + // load body template + $this->body->set_template('install.tpl'); + + // fetch admin links from all modules + // + + $this->body->set('headline', 'Welcome to the Open Web Analytics Installation Wizard'); + $this->body->set('step', $data['subview']); + + + + //$this->body->set('', ''); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/install/install_base_mysql.php b/modules/base/install/install_base_mysql.php new file mode 100644 index 000000000..ab47eed5f --- /dev/null +++ b/modules/base/install/install_base_mysql.php @@ -0,0 +1,702 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_install_base_mysql extends owa_install { + + /** + * Version of the schema + * + * @var string + */ + var $version = '1.0'; + + /** + * Array of tables that will be installed + * + * @var unknown_type + */ + var $tables; + + /** + * Package Name + * + * @var string + */ + var $package = 'base_schema'; + + /** + * Package Display Name + * + * @var string + */ + var $package_display_name = 'OWA Base Schema for MySQL'; + + /** + * Description of what is being installed + * + * @var string + */ + var $description = 'This is the base OWA schema for MySQL 4 or greater.'; + + /** + * Constructor + * + * @return owa_installBase_mysql + */ + function owa_install_base_mysql($params = null) { + $this->params = $params; + $this->owa_install(); + $this->tables = array($this->config['requests_table'], + $this->config['sessions_table'], + $this->config['referers_table'], + $this->config['documents_table'], + $this->config['ua_table'], + $this->config['hosts_table'], + $this->config['os_table'], + $this->config['sites_table'], + $this->config['config_table'], + $this->config['version_table'], + $this->config['feed_requests_table'], + $this->config['visitors_table'], + $this->config['impressions_table'], + $this->config['clicks_table'], + $this->config['exits_table'], + $this->config['users_table'] + ); + return; + } + + /** + * Check to see if schema is installed + * + * @return boolean + */ + function checkForSchema() { + + $check = $this->db->get_row(sprintf("show tables like '%s'", + $this->config['ns'].$this->config['version_table'])); + + if (!empty($check)): + $this->e->notice("Installation aborted. Schema already exists."); + return true; + else: + return false; + endif; + } + + /** + * Interface to creation methods + * + * @param unknown_type $table + */ + function create($table) { + + switch ($table) { + + case $this->config['requests_table']: + return $this->create_requests_table(); + break; + case $this->config['sessions_table']: + return $this->create_sessions_table(); + break; + case $this->config['documents_table']: + return $this->create_documents_table(); + break; + case $this->config['referers_table']: + return $this->create_referers_table(); + break; + case $this->config['hosts_table']: + return $this->create_hosts_table(); + break; + case $this->config['ua_table']: + return $this->create_ua_table(); + break; + case $this->config['os_table']: + return $this->create_os_table(); + break; + case $this->config['config_table']: + return $this->create_config_table(); + break; + case $this->config['sites_table']: + return $this->create_sites_table(); + break; + case $this->config['version_table']: + return $this->create_version_table(); + break; + case $this->config['feed_requests_table']: + return $this->create_feed_requests_table(); + break; + case $this->config['visitors_table']: + return $this->create_visitors_table(); + break; + case $this->config['impressions_table']: + return $this->create_impressions_table(); + break; + case $this->config['clicks_table']: + return $this->create_clicks_table(); + break; + case $this->config['exits_table']: + return $this->create_exits_table(); + break; + case $this->config['users_table']: + return $this->create_users_table(); + break; + + } + + return; + } + + /** + * Create requests table + * + * @access private + * + */ + function create_requests_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id bigint, + inbound_visitor_id bigint, + inbound_session_id bigint, + visitor_id bigint, + session_id bigint, + user_name varchar(255), + user_email varchar(255), + timestamp bigint, + month INT, + day tinyint(2), + dayofweek varchar(10), + dayofyear INT, + weekofyear INT, + year INT, + hour tinyint(2), + minute tinyint(2), + second tinyint(2), + msec int, + last_req bigint, + feed_subscription_id bigint, + referer_id varchar(255), + document_id varchar(255), + site varchar(255), + site_id varchar(255), + ip_address varchar(255), + host varchar(255), + host_id varchar(255), + os varchar(255), + os_id varchar(255), + ua_id varchar(255), + is_new_visitor TINYINT(1), + is_repeat_visitor TINYINT(1), + is_comment TINYINT(1), + is_entry_page tinyint(1), + is_robot tinyint(1), + is_browser tinyint(1), + is_feedreader tinyint(1), + + PRIMARY KEY (id), + KEY timestamp (timestamp))", + $this->config['ns'].$this->config['requests_table']) + ); + + + } + + function create_feed_requests_table() { + + //$this->config['error_handler'] = 'development'; + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + visitor_id BIGINT, + session_id BIGINT, + document_id BIGINT, + ua_id VARCHAR(255), + site_id VARCHAR(255), + site VARCHAR(255), + timestamp bigint, + month INT, + day tinyint(2), + dayofweek varchar(10), + dayofyear INT, + weekofyear INT, + year INT, + hour tinyint(2), + minute tinyint(2), + second tinyint(2), + msec int, + last_req bigint, + feed_reader_guid VARCHAR(255), + subscription_id BIGINT, + feed_format VARCHAR(255), + ip_address VARCHAR(255), + host VARCHAR(255), + host_id BIGINT, + os VARCHAR(255), + os_id VARCHAR(255), + PRIMARY KEY (id)) + ", + $this->config['ns'].$this->config['feed_requests_table'] + + )); + + } + + function create_visitors_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + user_name VARCHAR(255), + user_email varchar(255), + first_session_id BIGINT, + first_session_year INT, + first_session_month varchar(255), + first_session_day INT, + first_session_dayofyear INT, + first_session_timestamp BIGINT, + last_session_id BIGINT, + last_session_year INT, + last_session_month varchar(255), + last_session_day INT, + last_session_dayofyear INT, + PRIMARY KEY (id)) + ", + $this->config['ns'].$this->config['visitors_table'] + + )); + } + + function create_impressions_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + visitor_id BIGINT, + session_id BIGINT, + tag_id BIGINT, + placement_id BIGINT, + campaign_id BIGINT, + ad_group_id BIGINT, + ad_id BIGINT, + site_id VARCHAR(255), + last_impression_id BIGINT, + last_impression_timestamp BIGINT, + timestamp BIGINT, + year INT, + month INT, + day INT, + dayofyear INT, + weekofyear INT, + hour TINYINT(2), + minute TINYINT(2), + msec BIGINT, + url VARCHAR(255), + ua_id BIGINT, + ip_address VARCHAR(255), + host VARCHAR(255), + host_id VARCHAR(255), + PRIMARY KEY (id)) + ", + $this->config['ns'].$this->config['impressions_table'] + + )); + } + + function create_clicks_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + last_impression_id BIGINT, + visitor_id BIGINT, + session_id BIGINT, + document_id BIGINT, + target_id BIGINT, + target_url VARCHAR(255), + timestamp BIGINT, + year INT, + month INT, + day INT, + dayofyear INT, + weekofyear INT, + hour TINYINT(2), + minute TINYINT(2), + second INT, + msec VARCHAR(255), + click_x INT, + click_y INT, + page_width INT, + page_height INT, + position BIGINT, + approx_position BIGINT, + dom_element_x INT, + dom_element_y INT, + dom_element_name VARCHAR(255), + dom_element_id VARCHAR(255), + dom_element_value VARCHAR(255), + dom_element_tag VARCHAR(255), + dom_element_text VARCHAR(255), + tag_id BIGINT, + placement_id BIGINT, + campaign_id BIGINT, + ad_group_id BIGINT, + ad_id BIGINT, + site_id VARCHAR(255), + ua_id BIGINT, + ip_address VARCHAR(255), + host VARCHAR(255), + host_id VARCHAR(255), + PRIMARY KEY (id)) + ", + $this->config['ns'].$this->config['clicks_table'] + + )); + + } + + function create_sessions_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + visitor_id BIGINT, + user_name VARCHAR(255), + user_email varchar(255), + timestamp bigint, + year INT, + month INT, + day TINYINT(2), + dayofweek varchar(10), + dayofyear INT, + weekofyear INT, + hour TINYINT(2), + minute TINYINT(2), + last_req BIGINT, + num_pageviews INT, + num_comments INT, + is_repeat_visitor TINYINT(1), + is_new_visitor TINYINT(1), + prior_session_lastreq BIGINT, + prior_session_id BIGINT, + time_sinse_priorsession INT, + prior_session_year INT(4), + prior_session_month varchar(255), + prior_session_day TINYINT(2), + prior_session_dayofweek int, + prior_session_hour TINYINT(2), + prior_session_minute TINYINT(2), + os VARCHAR(255), + os_id varchar(255), + ua_id varchar(255), + first_page_id BIGINT, + last_page_id BIGINT, + referer_id BIGINT, + ip_address varchar(255), + host varchar(255), + host_id varchar(255), + source varchar(255), + city varchar(255), + country varchar(255), + site varchar(255), + site_id varchar(255), + is_robot tinyint(1), + is_browser tinyint(1), + is_feedreader tinyint(1), + PRIMARY KEY (id), + KEY timestamp (timestamp) + )", + $this->config['ns'].$this->config['sessions_table']) + ); + + } + + function create_referers_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + url varchar(255), + site_name varchar(255), + site VARCHAR(255), + query_terms varchar(255), + refering_anchortext varchar(255), + page_title varchar(255), + snippet TEXT, + is_searchengine tinyint(1), + PRIMARY KEY (id) + )", + $this->config['ns'].$this->config['referers_table']) + ); + + } + + function create_exits_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + url varchar(255), + site_name varchar(255), + site VARCHAR(255), + exit_anchortext varchar(255), + page_title varchar(255), + PRIMARY KEY (id) + )", + $this->config['ns'].$this->config['exits_table']) + ); + + } + + + function create_documents_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + url varchar(255), + page_title varchar(255), + page_type varchar(255), + PRIMARY KEY (id) + )", + $this->config['ns'].$this->config['documents_table']) + ); + + } + + function create_users_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id SERIAL, + user_id varchar(255), + password VARCHAR(255), + role VARCHAR(255), + real_name VARCHAR(255), + email_address VARCHAR(255), + temp_passkey VARCHAR(255), + creation_date BIGINT, + last_update_date BIGINT, + PRIMARY KEY (user_id) + )", + $this->config['ns'].$this->config['users_table']) + ); + + } + + function create_hosts_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + ip_address VARCHAR(255), + host VARCHAR(255), + full_host VARCHAR(255), + city VARCHAR(255), + country VARCHAR(255), + latitude VARCHAR(255), + longitude VARCHAR(255), + PRIMARY KEY (id) + )", + $this->config['ns'].$this->config['hosts_table']) + ); + } + + function create_os_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + name varchar(255), + PRIMARY KEY (id) + )", + $this->config['ns'].$this->config['os_table']) + ); + + } + + function create_ua_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + ua varchar(255), + browser_type varchar(255), + browser VARCHAR(255), + PRIMARY KEY (id) + )", + $this->config['ns'].$this->config['ua_table']) + ); + + } + + function create_optinfo_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + request_id BIGINT, + data_field VARCHAR(255), + data_value VARCHAR(255), + KEY (request_id) + )", + $this->config['ns'].$this->config['optinfo_table']) + ); + + } + + function create_config_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id BIGINT, + settings TEXT, + PRIMARY KEY (id) + )", + $this->config['ns'].$this->config['config_table']) + ); + + } + + function create_sites_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id SERIAL, + site_id VARCHAR(255), + domain VARCHAR(255) NOT NULL, + name VARCHAR(255), + description TEXT, + site_family VARCHAR(255) + + )", + $this->config['ns'].$this->config['sites_table']) + ); + + } + + function create_version_table() { + + return $this->db->query( + sprintf(" + CREATE TABLE %1\$s ( + id VARCHAR(255), + value VARCHAR(255), + PRIMARY KEY (id) + )", + $this->config['ns'].$this->config['version_table']) + ); + + } + + function update_schema_version() { + + $check = $this->db->get_row(sprintf("SELECT value from %s where id = 'packages'", + $this->config['ns'].$this->config['version_table'], + $this->config['site_id'] + )); + + $packages = array(); + + if (empty($check)): + + $packages[$this->package] = $this->version; + $this->db->query(sprintf("INSERT into %s (id, value) VALUES ('packages', '%s')", + $this->config['ns'].$this->config['version_table'], + serialize($packages) + )); + else: + $packages = unserialize($check); + $packages[$this->package] = $this->version; + $this->db->query(sprintf("UPDATE %s SET value = '%s' where id = 'packages'", + $this->config['ns'].$this->config['version_table'], + serialize($packages))); + + endif; + + return; + } + + /** + * Creates all tables in base schema + * + */ + function install() { + + foreach ($this->tables as $table) { + + $status = $this->create($table); + + if ($status == true): + $this->e->notice(sprintf("Created %s table.", $table)); + else: + $this->e->err(sprintf("Creation of %s table failed. Aborting Installation...", $table)); + return $status; + endif; + } + + // Update schema version + $this->update_schema_version(); + + // Add default site into sites table + //$this->addDefaultSite(); + + $this->e->notice(sprintf("Schema version %s installation complete.", + $this->version)); + + return true; + + } + + + +} + +?> \ No newline at end of file diff --git a/modules/base/installAdminUser.php b/modules/base/installAdminUser.php new file mode 100644 index 000000000..6e40310b7 --- /dev/null +++ b/modules/base/installAdminUser.php @@ -0,0 +1,135 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installAdminUserView extends owa_view { + + function owa_installAdminUserView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Set Page title + $this->t->set('page_title', 'Setup Default Admin User'); + + // Set Page headline + $this->body->set('headline', 'Setup Default Admin user'); + + $this->body->set('action', 'base.installAdminUser'); + + // load body template + $this->body->set_template('install_default_user.tpl'); + + return; + } + + +} + +/** + * Install Default Admin User Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installAdminUserController extends owa_controller { + + function owa_installAdminUserController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + + return; + } + + function action() { + + // Control logic + + $u = owa_coreAPI::entityFactory('base.user'); + $auth = &owa_auth::get_instance(); + + //Check to see if user name already exists + $u->getByColumn('user_id', $this->params['user_id']); + + // data + $data = array(); + + $id = $u->get('id'); + + // Set user object Params + if (empty($id)): + + //Generate Initial Passkey and new account email + $auth->setInitialPasskey($this->params['user_id']); + + // log account creation event to event queue + $eq = &eventQueue::get_instance(); + $eq->log(array( 'user_id' => $this->params['user_id'], + 'real_name' => $this->params['real_name'], + 'role' => $this->params['role'], + 'email_address' => $this->params['email_address']), + 'base.new_user_account'); + + // return view + $data['view_method'] = 'redirect'; + $data['view'] = 'base.install'; + $data['subview'] = 'base.installFinish'; + $data['status_code'] = 3304; + + else: + $data = $this->params; + $data['view_method'] = 'delegate'; + $data['view'] = 'base.install'; + $data['subview'] = 'base.installAdminUser'; + $data['status_msg'] = $this->getMsg(3306); + endif; + + return $data; + } + +} + + +?> diff --git a/modules/base/installBase.php b/modules/base/installBase.php new file mode 100644 index 000000000..6a6e683ac --- /dev/null +++ b/modules/base/installBase.php @@ -0,0 +1,68 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installBaseController extends owa_controller { + + function owa_installBaseController($params) { + + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + + return; + } + + function action() { + + $api = &owa_coreAPI::singleton(); + + $status = $api->modules['base']->install(); + + if ($status == true): + $data['view_method'] = 'redirect'; + $data['view'] = 'base.install'; + $data['subview'] = 'base.installDefaultSiteProfile'; + $data['status_code'] = 3305; + else: + $data['view_method'] = 'redirect'; + $data['view'] = 'base.install'; + $data['subview'] = 'base.installCheckEnv'; + $data['error_code'] = 3302; + endif; + + return $data; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/installCheckEnv.php b/modules/base/installCheckEnv.php new file mode 100644 index 000000000..0b612fc66 --- /dev/null +++ b/modules/base/installCheckEnv.php @@ -0,0 +1,124 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installCheckEnvView extends owa_view { + + function owa_installCheckEnvView($params) { + + $this->owa_view($params); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + //page title + $this->t->set('page_title', 'Installer Server Environment Check'); + $this->body->set('headline', 'Server Environment Check'); + $this->body->set('errors', $data['errors']); + $this->body->set('env', $data['env']); + // load body template + $this->body->set_template('install_check_env.tpl'); + + + + return; + } + + +} + +/** + * Server Environment Check Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installCheckEnvController extends owa_controller { + + function owa_installCheckEnvController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + $errors = array(); + $warnings = array(); + $env = array(); + + // check PHP version + $env['php_version'] = phpversion(); + $version = split('\.',$env['php_version']); + + if ($version[0] < 4): + $errors['php_version'] = $this->getMsg(3301); + $errors['count'] = $errors['count']++; + endif; + + // Check DB connection status + $db = &owa_db::get_instance(); + if ($db->connection_status != true): + $errors['count'] = $errors['count']++; + $errors['db_status'] = $this->getMsg(3300); + $env['db_status'] = 'Failed'; + else: + $env['db_status'] = 'Success'; + endif; + + // Check socket connection + + // Check permissions on log directory + + $data['errors'] = $errors; + $data['env'] = $env; + $data['view_method'] = 'delegate'; + $data['view'] = 'base.install'; + $data['subview'] = 'base.installCheckEnv'; + + return $data; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/installDefaultSiteProfile.php b/modules/base/installDefaultSiteProfile.php new file mode 100644 index 000000000..ab8ca61b2 --- /dev/null +++ b/modules/base/installDefaultSiteProfile.php @@ -0,0 +1,138 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installDefaultSiteProfileView extends owa_view { + + function owa_installDefaultSiteProfileView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Set Page title + $this->t->set('page_title', 'Default Site Profile'); + + // Set Page headline + $this->body->set('headline', 'Default Site Profile'); + + $this->body->set('action', 'base.installDefaultSiteProfile'); + + // load body template + $this->body->set_template('sites_addoredit.tpl'); + + + + return; + } + + +} + +/** + * Installer Default Site Profile Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installDefaultSiteProfileController extends owa_controller { + + function owa_installDefaultSiteProfileController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + // validations + + if (empty($this->params['domain'])): + $data['view_method'] = 'delegate'; // Delegate, redirect + $data['view'] = 'base.install'; + $data['subview'] = 'base.installDefaultSiteProfile'; + $data['error_msg'] = $this->getMsg(3207); + $data['site'] = $this->params; + + return $data; + + endif; + + $site = owa_coreAPI::entityFactory('base.site'); + + $site->set('site_id', owa_lib::setStringGuid($this->params['domain'])); + $site->set('name', $this->params['name']); + $site->set('description', $this->params['description']); + $site->set('domain', $this->params['domain']); + $site->set('site_family', $this->params['site_family']); + + $site->create(); + + if (!empty($site_id)): + // Setup the data array that will be returned to the view. + + $data['view_method'] = 'redirect'; // Delegate, redirect + $data['view'] = 'base.install'; + $data['subview'] = 'base.installAdminUser'; + $data['status_code'] = 3303; + + else: + + $data['view_method'] = 'delegate'; // Delegate, redirect + $data['view'] = 'base.install'; + $data['subview'] = 'base.installDefaultSiteProfile'; + $data['error_msg'] = $this->getMsg(3206); + $data['site'] = $this->params; + + endif; + + return $data; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/installEmbedded.php b/modules/base/installEmbedded.php new file mode 100644 index 000000000..df6aa4b7d --- /dev/null +++ b/modules/base/installEmbedded.php @@ -0,0 +1,82 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installEmbeddedController extends owa_controller { + + function owa_installEmbeddedController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + $api = &owa_coreAPI::singleton(); + $installer = $api->modules['base']->installerFactory(); + + $check = $installer->checkForSchema(); + + if ($check != true): + + // install schema + $status = $installer->install(); + + // insert default site + if ($status == true): + + $site = owa_coreAPI::entityFactory('base.site'); + $site->set('site_id', $this->params['site_id']); + $site->set('name', $this->params['name']); + $site->set('description', $this->params['description']); + $site->set('domain', $this->params['domain']); + $site->set('site_family', $this->params['site_family']); + + $site->create(); + + endif; + + return true; + else: + // owa already installed + return false; + endif; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/installFinish.php b/modules/base/installFinish.php new file mode 100644 index 000000000..bbc74a07a --- /dev/null +++ b/modules/base/installFinish.php @@ -0,0 +1,79 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installFinishView extends owa_view { + + function owa_installFinishView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Set Page title + $this->t->set('page_title', 'Installation Complete'); + + // Set Page headline + $this->body->set('headline', 'Installation is Complete'); + + + $site = new owa_site; + $site->getSiteById(1); + $this->body->set('site_id', $site->site_id); + + $api = &owa_coreAPI::singleton(); + $tag = $api->requestTag($site->site_id); + $this->body->set('tag', $tag); + + // load body template + $this->body->set_template('install_finish.tpl'); + + + + return; + } + + +} + + + + +?> \ No newline at end of file diff --git a/modules/base/installStart.php b/modules/base/installStart.php new file mode 100644 index 000000000..d5e5fc233 --- /dev/null +++ b/modules/base/installStart.php @@ -0,0 +1,80 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_installStartView extends owa_view { + + function owa_installStartView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct() { + + + // check for schema + $api = &owa_coreAPI::singleton(); + $installer = $api->modules['base']->installerFactory(); + + if ($installer->checkForSchema() == true): + // load body template + $this->body->set_template('install_schema_detected.tpl'); + else: + // load body template + $this->body->set_template('install_start.tpl'); + endif; + + //page title + $this->t->set('page_title', 'Installation'); + + // load wrapper template + + + + // fetch admin links from all modules + // + + $this->body->set('headline', 'Get Started...'); + + //$this->body->set('', ''); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/jsDomClickLib.php b/modules/base/jsDomClickLib.php new file mode 100644 index 000000000..84a3a0b91 --- /dev/null +++ b/modules/base/jsDomClickLib.php @@ -0,0 +1,108 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_jsDomClickLibView extends owa_view { + + function owa_jsDomClickLibView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // load body template + $this->t->set_template('wrapper_blank.tpl'); + + $this->body->set('log_clicks', true); + + $this->body->set('is_embedded', true); + + if (empty($data['site_id'])): + $data['site_id'] = $this->config['site_id']; + endif; + + $this->body->set('site_id', $data['site_id']); + + // load body template + $this->body->set_template('js_logger.tpl'); + + return; + } + + +} + +/** + * Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_jsDomClickLibController extends owa_controller { + + function owa_jsDomClickLibController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + // Setup the data array that will be returned to the view. + + $data['view_method'] = ''; // Delegate, redirect + $data['view'] = ''; + $data['subview'] = ''; + $data['error_msg'] = ''; + + + return $data; + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/jsLogLib.php b/modules/base/jsLogLib.php new file mode 100644 index 000000000..6fe001592 --- /dev/null +++ b/modules/base/jsLogLib.php @@ -0,0 +1,72 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_jsLogLibView extends owa_view { + + function owa_jsLogLibView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + + // load body template + $this->t->set_template('wrapper_blank.tpl'); + + + $this->body->set('log_pageview', true); + + if ($this->config['log_dom_clicks'] == true): + $this->body->set('log_clicks', true); + endif; + + // load body template + $this->body->set_template('js_logger.tpl'); + + + return; + } + + +} + + + + +?> \ No newline at end of file diff --git a/modules/base/logClick.php b/modules/base/logClick.php new file mode 100644 index 000000000..f37babffa --- /dev/null +++ b/modules/base/logClick.php @@ -0,0 +1,77 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logClickController extends owa_controller { + + function owa_logClickController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + //$this->e->debug("click controller params: ".print_r($this->params, true)); + + $c = owa_coreAPI::entityFactory('base.click'); + + $c->setProperties($this->params); + + // Set Click Id + $c->set('id', $this->params['guid']); + + $c->set('ua_id', owa_lib::setStringGuid($this->params['HTTP_USER_AGENT'])); + + // Make document id + $c->set('document_id', owa_lib::setStringGuid($this->params['page_url'])); + + // Make Target page id + $c->set('target_id', owa_lib::setStringGuid($c->get(target_url))); + + // Make position id used for group bys + $c->set('position', $c->get('click_x').$c->get('click_y')); + + $c->create(); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logComment.php b/modules/base/logComment.php new file mode 100644 index 000000000..db416ae87 --- /dev/null +++ b/modules/base/logComment.php @@ -0,0 +1,66 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logCommentController extends owa_controller { + + function owa_logCommentController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + + // Make entity + $s = owa_coreAPI::entityFactory('base.session'); + + // Fetch from session from database + $s->getByPk('id', $this->params['inbound_session_id']); + + // increment number of page views + $s->num_comments = $s->num_comments + 1; + + // Persist to database + $s->update('id'); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logDocument.php b/modules/base/logDocument.php new file mode 100644 index 000000000..0e65e4802 --- /dev/null +++ b/modules/base/logDocument.php @@ -0,0 +1,63 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logDocumentController extends owa_controller { + + function owa_logDocumentController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + $d = owa_coreAPI::entityFactory('base.document'); + + $d->setProperties($this->params); + + $d->set('url', $this->params['page_url']); + + $d->set('id', owa_lib::setStringGuid($this->params['page_url'])); + + $d->create(); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logFeedRequest.php b/modules/base/logFeedRequest.php new file mode 100644 index 000000000..3889f72e0 --- /dev/null +++ b/modules/base/logFeedRequest.php @@ -0,0 +1,77 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logFeedRequestController extends owa_controller { + + function owa_logFeedRequestController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + + // Make entity + $f = owa_coreAPI::entityFactory('base.feed_request'); + + $f->setProperties($this->params); + + // Set Primary Key + $f->set('id', $this->params['guid']); + + // Make ua id + $f->set('ua_id', owa_lib::setStringGuid($this->params['HTTP_USER_AGENT'])); + + // Make OS id + $f->set('os_id', owa_lib::setStringGuid($this->params['os'])); + + // Make document id + $f->set('document_id', owa_lib::setStringGuid($this->params['page_url'])); + + // Generate Host id + $f->set('host_id', owa_lib::setStringGuid($this->params['host'])); + + // Persist to database + $f->create(); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logHost.php b/modules/base/logHost.php new file mode 100644 index 000000000..f169598f9 --- /dev/null +++ b/modules/base/logHost.php @@ -0,0 +1,74 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logHostController extends owa_controller { + + function owa_logHostController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + $h = owa_coreAPI::entityFactory('base.host'); + + $h->setProperties($this->params); + + $h->set('id', owa_lib::setStringGuid($this->params['host'])); + + // makes the geo-location object from the service specified in the config + $location = owa_location::factory($this->config['plugin_dir']."location".DIRECTORY_SEPARATOR, $this->config['geolocation_service']); + + // lookup + $location->get_location($this->properties['ip_address']); + + //set properties of the session + $h->set('country', $location->country); + $h->set('city', $location->city); + $h->set('latitude', $location->latitude); + $h->set('longitude', $location->longitude); + + $h->create(); + + return; + + } + + + +} + +?> \ No newline at end of file diff --git a/modules/base/logPageRequest.php b/modules/base/logPageRequest.php new file mode 100644 index 000000000..f228aa73c --- /dev/null +++ b/modules/base/logPageRequest.php @@ -0,0 +1,81 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logPageRequestController extends owa_controller { + + function owa_logPageRequestController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + $r = owa_coreAPI::entityFactory('base.request'); + + //print_r($r); + + $r->setProperties($this->params); + + // Set Primary Key + $r->set('id', $this->params['guid']); + + // Make ua id + $r->set('ua_id', owa_lib::setStringGuid($this->params['HTTP_USER_AGENT'])); + + // Make OS id + $r->set('os_id', owa_lib::setStringGuid($this->params['os'])); + + // Make document id + $r->set('document_id', owa_lib::setStringGuid($this->params['page_url'])); + + // Generate Referer id + $r->set('referer_id', owa_lib::setStringGuid($this->params['HTTP_REFERER'])); + + // Generate Host id + $r->set('host_id', owa_lib::setStringGuid($this->params['host'])); + + $r->create(); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logReferer.php b/modules/base/logReferer.php new file mode 100644 index 000000000..43f7efcd3 --- /dev/null +++ b/modules/base/logReferer.php @@ -0,0 +1,155 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logRefererController extends owa_controller { + + function owa_logRefererController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + + // Make entity + $r = owa_coreAPI::entityFactory('base.referer'); + + // set referer url + $r->set('url', $this->params['request']['HTTP_REFERER']); + + // check for search engine + if ($this->lookupsearchEngine($this->params['request']['HTTP_REFERER']) == true): + $r->set('is_searchengine', true); + endif; + + // Set site + $url = parse_url($this->params['request']['HTTP_REFERER']); + $r->set('site', $url['host']); + + // Look for query_terms + if (strstr($this->params['request']['HTTP_REFERER'], $this->params['request']['HTTP_HOST']) == false): + $r->set('query_terms', strtolower($this->extractSearchTerms($this->params['request']['HTTP_REFERER']))); + + if (!empty($r->query_terms->value)): + $r->set('is_searchengine', true); + endif; + endif; + + // Set id + $r->set('id', owa_lib::setStringGuid($this->params['request']['HTTP_REFERER'])); + + // Persist to database + $r->create(); + + // Crawl and analyze refering page + if ($this->config['fetch_refering_page_info'] == true): + + $crawler = new owa_http; + $crawler->fetch($this->params['request']['HTTP_REFERER']); + + //Extract anchortext and page snippet but not if it's a search engine... + if ($r->is_searchengine->value == false): + $r->set('snippet', $crawler->extract_anchor_snippet($this->params['request']['inbound_page_url'])); + //$this->e->debug('Referering Snippet is: '. $this->snippet); + $r->set('refering_anchortext', $crawler->anchor_info['anchor_text']); + //$this->e->debug('Anchor text is: '. $this->anchor_text); + endif; + + //Extract Title + $r->set('page_title', $crawler->extract_title()); + + //write to DB + $r->update(); + + endif; + + + return; + + } + + /** + * Lookup info about referring domain + * + * @param string $referer + * @return object + * @access private + */ + function lookupSearchEngine($referer) { + + /* Look for match against Search engine groups */ + $db = new ini_db($this->config['search_engines.ini'], $sections = true); + + $se_info = $db->fetch($referer); + + if (!empty($se_info->name)): + return true; + else: + return false; + endif; + + } + + + /** + * Parses query terms from referer + * + * @param string $referer + * @return string + * @access private + */ + function extractSearchTerms($referer) { + + /* Look for query_terms */ + $db = new ini_db($this->config['query_strings.ini']); + + $match = $db->match($referer); + + if (!empty($match[1])): + + return urldecode($match[1]); + + endif; + + return; + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logSession.php b/modules/base/logSession.php new file mode 100644 index 000000000..785a8cbc4 --- /dev/null +++ b/modules/base/logSession.php @@ -0,0 +1,105 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logSessionController extends owa_controller { + + function owa_logSessionController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + $s = owa_coreAPI::entityFactory('base.session'); + + //print_r($r); + + $s->setProperties($this->params); + + // Set Primary Key + $s->set('id', $this->params['session_id']); + + // set initial number of page views + $s->set('num_pageviews', 1); + + // set prior session time properties + $s->set('prior_session_lastreq', $this->params['last_req']); + $s->set('prior_session_id', $this->params['inbound_session_id']); + + if ($s->get('prior_session_lastreq') > 0): + $s->set('time_sinse_priorsession', $s->get('timestamp') - $this->params['last_req']); + $s->set('prior_session_year', date("Y", $this->params['last_req'])); + $s->set('prior_session_month', date("M", $this->params['last_req'])); + $s->set('prior_session_day', date("d", $this->params['last_req'])); + $s->set('prior_session_hour', date("G", $this->params['last_req'])); + $s->set('prior_session_minute', date("i", $this->params['last_req'])); + $s->set('prior_session_dayofweek', date("w", $this->params['last_req'])); + endif; + + // set source + $s->set('source', $this->params[$this->config['source_param']]); + + // Make ua id + $s->set('ua_id', owa_lib::setStringGuid($this->params['HTTP_USER_AGENT'])); + + // Make OS id + $s->set('os_id', owa_lib::setStringGuid($this->params['os'])); + + // Make document ids + $s->set('first_page_id', owa_lib::setStringGuid($this->params['page_url'])); + $s->set('last_page_id', $s->get('first_page_id')); + + // Generate Referer id + $s->set('referer_id', owa_lib::setStringGuid($this->params['HTTP_REFERER'])); + + // Generate Host id + $s->set('host_id', owa_lib::setStringGuid($this->params['host'])); + + $s->create(); + + // log the new session event to the event queue + $this->logEvent('base.new_session', array('request' => $this->params, 'session' => $s->_getProperties())); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logSessionUpdate.php b/modules/base/logSessionUpdate.php new file mode 100644 index 000000000..61bfd88a2 --- /dev/null +++ b/modules/base/logSessionUpdate.php @@ -0,0 +1,75 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logSessionUpdateController extends owa_controller { + + function owa_logSessionUpdateController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + + // Make entity + $s = owa_coreAPI::entityFactory('base.session'); + + // Fetch from session from database + $s->getByPk('id', $this->params['session_id']); + + // increment number of page views + $s->set('num_pageviews', $s->get('num_pageviews') + 1); + + // update timestamp + $s->set('last_req', $this->params['last_req']); + + // update last page id + $s->set('last_page_id', owa_lib::setStringGuid($this->params['page_url'])); + + // Persist to database + $s->update(); + + // Log session update event to event queue + $this->logEvent('base.session_update', array('request' => $this->params, 'session' => $s->_getProperties())); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logUserAgent.php b/modules/base/logUserAgent.php new file mode 100644 index 000000000..dcbf9cf7c --- /dev/null +++ b/modules/base/logUserAgent.php @@ -0,0 +1,63 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logUserAgentController extends owa_controller { + + function owa_logUserAgentController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + $ua = owa_coreAPI::entityFactory('base.ua'); + + $ua->setProperties($this->params); + + $ua->set('ua', $this->params['HTTP_USER_AGENT']); + + $ua->set('id', owa_lib::setStringGuid($this->params['HTTP_USER_AGENT'])); + + $ua->create(); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logVisitor.php b/modules/base/logVisitor.php new file mode 100644 index 000000000..502abb3b6 --- /dev/null +++ b/modules/base/logVisitor.php @@ -0,0 +1,73 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logVisitorController extends owa_controller { + + function owa_logVisitorController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + $v = owa_coreAPI::entityFactory('base.visitor'); + + $v->setProperties($this->params); + + // Set Primary Key + $v->set('id', $this->params['visitor_id']); + + $v->set('user_name', $this->params['user_name']); + $v->set('user_email', $this->params['user_email']); + $v->set('first_session_id', $this->params['session_id']); + $v->set('first_session_year', $this->params['year']); + $v->set('first_session_month', $this->params['month']); + $v->set('first_session_day', $this->params['day']); + $v->set('first_session_dayofyear', $this->params['dayofyear']); + $v->set('first_session_timestamp', $this->params['timestamp']); + + $v->create(); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logVisitorUpdate.php b/modules/base/logVisitorUpdate.php new file mode 100644 index 000000000..f9e73d77f --- /dev/null +++ b/modules/base/logVisitorUpdate.php @@ -0,0 +1,69 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logVisitorUpdateController extends owa_controller { + + function owa_logVisitorUpdateController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + $v = owa_coreAPI::entityFactory('base.visitor'); + + $v->getByPk('id', $this->params['visitor_id']); + + $v->set('user_name', $this->params['user_name']); + $v->set('user_email', $this->params['user_email']); + $v->set('last_session_id', $this->params['session_id']); + $v->set('last_session_year', $this->params['year']); + $v->set('last_session_month', $this->params['month']); + $v->set('last_session_day', $this->params['day']); + $v->set('last_session_dayofyear', $this->params['dayofyear']); + + $v->update(); + + return; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/login.php b/modules/base/login.php new file mode 100644 index 000000000..d3ea112d7 --- /dev/null +++ b/modules/base/login.php @@ -0,0 +1,102 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_loginView extends owa_view { + + function owa_loginView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + $this->body->set_template('login_form.tpl');// This is the inner template + $this->body->set('headline', 'Please login using the from below'); + $this->body->set('user_id', $data['user_id']); + $this->body->set('go', $data['go']); + + } +} + +class owa_loginController extends owa_controller { + + function owa_loginController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + + return; + } + + function action() { + + $auth = &owa_auth::get_instance(); + $status = $auth->authenticateNewBrowser($this->params['user_id'], $this->params['password']); + $data = array(); + + // if authentication is successfull + if ($status['auth_status'] == true): + + // redirect to url if present + if (!empty($this->params['go'])): + $url = urldecode($this->params['go']); + + $this->e->debug("redirecting browser to...:". $url); + owa_lib::redirectBrowser($url); + //else redirect to home page + else: + $data['view_method'] = 'redirect'; + $data['view'] = 'base.options'; + endif; + // return error view + else: + + $data['view_method'] = 'delegate'; + $data['view'] = 'base.login'; + $data['go'] = urldecode($this->params['go']); + $data['go'] = urlencode($this->params['go']); + $data['error_msg'] = $this->getMsg(2002); + $data['user_id'] = $this->params['user_id']; + + endif; + + return $data; + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/logout.php b/modules/base/logout.php new file mode 100644 index 000000000..e5f4afef8 --- /dev/null +++ b/modules/base/logout.php @@ -0,0 +1,60 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_logoutController extends owa_controller { + + function owa_loginController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + + return; + } + + function action() { + + $auth = &owa_auth::get_instance(); + $auth->deleteCredentials(); + + $data = array(); + $data['view_method'] = 'redirect'; + $data['view'] = 'base.login'; + $data['status_code'] = $this->getMsg(2010); + + return $data; + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/metrics/clickstream.php b/modules/base/metrics/clickstream.php new file mode 100644 index 000000000..09e4ae4fd --- /dev/null +++ b/modules/base/metrics/clickstream.php @@ -0,0 +1,62 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_clickstream extends owa_metric { + + function owa_clickstream($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $r = owa_coreAPI::entityFactory('base.request'); + $d = owa_coreAPI::entityFactory('base.document'); + + $this->params['related_objs'] = array('document_id' => $d); + + $this->setTimePeriod($this->params['period']); + + return $r->find($this->params); + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/dashCoreByDay.php b/modules/base/metrics/dashCoreByDay.php new file mode 100644 index 000000000..a7e1e433b --- /dev/null +++ b/modules/base/metrics/dashCoreByDay.php @@ -0,0 +1,74 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_dashCoreByDay extends owa_metric { + + function owa_dashCoreByDay($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "session.month, + session.day, + session.year, + count(distinct session.visitor_id) as unique_visitors, + count(session.id) as sessions, + sum(session.num_pageviews) as page_views "; + + $this->params['use_summary'] = true; + + $this->params['orderby'] = array('year', 'month', 'day'); + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + + return $s->query($this->params); + + + + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/dashCounts.php b/modules/base/metrics/dashCounts.php new file mode 100644 index 000000000..17f88d6c2 --- /dev/null +++ b/modules/base/metrics/dashCounts.php @@ -0,0 +1,66 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_dashCounts extends owa_metric { + + function owa_dashCounts($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(distinct session.visitor_id) as unique_visitors, + sum(session.is_new_visitor) as new_visitor, sum(session.is_repeat_visitor) as repeat_visitor, + count(session.id) as sessions, + sum(session.num_pageviews) as page_views "; + + $this->params['use_summary'] = true; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + + return $s->query($this->params); + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/feedFormatsCount.php b/modules/base/metrics/feedFormatsCount.php new file mode 100644 index 000000000..bf53b8ce4 --- /dev/null +++ b/modules/base/metrics/feedFormatsCount.php @@ -0,0 +1,89 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_feedFormatsCount extends owa_metric { + + function owa_feedFormatsCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(id) as count, + feed_format"; + + + //$this->params['orderby'] = array('year', 'month', 'day'); + + $this->setTimePeriod($this->params['period']); + + $f = owa_coreAPI::entityFactory('base.feed_request'); + + + $this->params['groupby'] = array('feed_format'); + + return $f->query($this->params); + + /* + + SELECT + count(request_id) as count, + feed_format + FROM + %s as feed_requests + WHERE + true + %s + %s + GROUP BY + feed_format + ", + $this->setTable($this->config['feed_requests_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + ); + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/feedReaderTypesCount.php b/modules/base/metrics/feedReaderTypesCount.php new file mode 100644 index 000000000..ea21017cc --- /dev/null +++ b/modules/base/metrics/feedReaderTypesCount.php @@ -0,0 +1,96 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_feedReaderTypesCount extends owa_metric { + + function owa_feedReaderTypesCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(distinct feed_request.feed_reader_guid) as count, + ua.ua as ua, + ua.browser_type"; + + + //$this->params['orderby'] = array('year', 'month', 'day'); + + $this->setTimePeriod($this->params['period']); + + $f = owa_coreAPI::entityFactory('base.feed_request'); + + $u = owa_coreAPI::entityFactory('base.ua'); + + $this->params['related_objs'] = array('ua_id' => $u); + + $this->params['groupby'] = array('ua.browser_type'); + + return $f->query($this->params); + + /* + + SELECT + count(distinct feed_requests.feed_reader_guid) as count, + ua.ua as ua, + ua.browser_type + FROM + %s as feed_requests, + %s as ua + WHERE + ua.id = ua_id + %s + %s + GROUP BY + ua.browser_type + ", + $this->setTable($this->config['feed_requests_table']), + $this->setTable($this->config['ua_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + ); + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/feedViewsTrend.php b/modules/base/metrics/feedViewsTrend.php new file mode 100644 index 000000000..0c9259833 --- /dev/null +++ b/modules/base/metrics/feedViewsTrend.php @@ -0,0 +1,98 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_feedViewsTrend extends owa_metric { + + function owa_feedViewsTrend($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(id) as fetch_count, + count(distinct feed_reader_guid) as reader_count, + year, + month, + day"; + + + //$this->params['orderby'] = array('year', 'month', 'day'); + + $this->setTimePeriod($this->params['period']); + + $f = owa_coreAPI::entityFactory('base.feed_request'); + + return $f->query($this->params); + + /* + + SELECT + count(request_id) as fetch_count, + count(distinct feed_reader_guid) as reader_count, + year, + month, + day + FROM + %s as feed_requests + WHERE + true + %s + %s + GROUP BY + feed_requests.%s + ORDER BY + year, + month, + day %s + ", + $this->setTable($this->config['feed_requests_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['group_by'], + $this->params['order'] + ); + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/latestVisits.php b/modules/base/metrics/latestVisits.php new file mode 100644 index 000000000..72c876990 --- /dev/null +++ b/modules/base/metrics/latestVisits.php @@ -0,0 +1,66 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_latestVisits extends owa_metric { + + function owa_latestVisits($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $s = owa_coreAPI::entityFactory('base.session'); + + $h = owa_coreAPI::entityFactory('base.host'); + $ua = owa_coreAPI::entityFactory('base.ua'); + $d = owa_coreAPI::entityFactory('base.document'); + $v = owa_coreAPI::entityFactory('base.visitor'); + $r = owa_coreAPI::entityFactory('base.referer'); + $this->params['related_objs'] = array('host_id' => $h, 'ua_id' => $ua, 'first_page_id' => $d, 'visitor_id' => $v, 'referer_id' => $r); + //$related_objs = array('ua_id' => $ua); + $this->setTimePeriod($this->params['period']); + + return $s->find($this->params); + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/pageTypesCount.php b/modules/base/metrics/pageTypesCount.php new file mode 100644 index 000000000..e910f2a4a --- /dev/null +++ b/modules/base/metrics/pageTypesCount.php @@ -0,0 +1,99 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_pageTypesCount extends owa_metric { + + function owa_pageTypesCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $r = owa_coreAPI::entityFactory('base.request'); + + $d = owa_coreAPI::entityFactory('base.document'); + + $this->params['related_objs'] = array('document_id' => $d); + + $this->setTimePeriod($this->params['period']); + + $this->params['select'] = "count(request.id) as count, + document.page_title, + document.page_type, + document.url, + document.id"; + + $this->params['groupby'] = array('document.page_type'); + + $this->params['orderby'] = array('count'); + + return $r->query($this->params); + + /* + SELECT + count(requests.request_id) as count, + documents.page_title, + documents.page_type, + documents.url, + documents.id + FROM + %s as requests, %s as documents + WHERE + requests.document_id = documents.id + %s + %s + GROUP BY + page_type + ORDER BY + count DESC + ", + $this->setTable($this->config['requests_table']), + $this->setTable($this->config['documents_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['limit'] + ); + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/pageViewsByDay.php b/modules/base/metrics/pageViewsByDay.php new file mode 100644 index 000000000..c4d5bae7e --- /dev/null +++ b/modules/base/metrics/pageViewsByDay.php @@ -0,0 +1,96 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_pageViewsByDay extends owa_metric { + + function owa_pageViewsByDay($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $s = owa_coreAPI::entityFactory('base.session'); + + $this->setTimePeriod($this->params['period']); + + $this->params['select'] = "sum(session.num_pageviews) as page_views, + session.month, + session.day, + session.year"; + + + $this->params['orderby'] = array('session.year', 'session.month', 'session.day'); + + return $s->query($this->params); + + /* + + $sql = sprintf("select + sum(sessions.num_pageviews) as page_views, + sessions.month, + sessions.day, + sessions.year + from + %s as sessions + where + %s + %s + group by + sessions.%s + ORDER BY + sessions.year %6\$s, + sessions.month %6\$s, + sessions.day %6\$s", + + $this->setTable($this->config['sessions_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['group_by'], + $this->params['order'] + ); + + + + return $this->db->get_results($sql); + + */ + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/pageViewsCount.php b/modules/base/metrics/pageViewsCount.php new file mode 100644 index 000000000..df817dc3c --- /dev/null +++ b/modules/base/metrics/pageViewsCount.php @@ -0,0 +1,68 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_pageViewsCount extends owa_metric { + + function owa_pageViewsCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $sql = sprintf("select + sum(sessions.num_pageviews) as page_views + from + %s as sessions + where + true + %s + %s + ", + $this->setTable($this->config['sessions_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + ); + + return $this->db->get_row($sql); + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/requestCounts.php b/modules/base/metrics/requestCounts.php new file mode 100644 index 000000000..5bfa4ce6b --- /dev/null +++ b/modules/base/metrics/requestCounts.php @@ -0,0 +1,93 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_requestCounts extends owa_metric { + + function owa_requestCounts($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(distinct request.visitor_id) as unique_visitors, + count(request.session_id) as sessions, + count(request.id) as page_views"; + + // $this->params['use_summary'] = true; + + $this->params['result_format'] = 'single_array'; + + $this->setTimePeriod($this->params['period']); + + $r = owa_coreAPI::entityFactory('base.request'); + + return $r->query($this->params); + + /* + + $sql = sprintf(" + SELECT + count(distinct requests.visitor_id) as unique_visitors, + count(requests.session_id) as sessions, + count(requests.request_id) as page_views + FROM + %s as requests + + WHERE + true + %s + %s + ", + $this->setTable($this->config['requests_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + ); + + return $this->db->get_row($sql); + + + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/requestCountsByDay.php b/modules/base/metrics/requestCountsByDay.php new file mode 100644 index 000000000..3cc423f31 --- /dev/null +++ b/modules/base/metrics/requestCountsByDay.php @@ -0,0 +1,100 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_requestCountsByDay extends owa_metric { + + function owa_requestCountsByDay($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "request.month, request.day, request.year, + count(distinct request.visitor_id) as unique_visitors, + count(distinct request.session_id) as sessions, + count(request.id) as page_views "; + + // $this->params['use_summary'] = true; + + $this->params['orderby'] = array('year', 'month', 'day'); + + $this->setTimePeriod($this->params['period']); + + $r = owa_coreAPI::entityFactory('base.request'); + + return $r->query($this->params); + + /* + + $sql = sprintf("select + requests.month, + requests.day, + requests.year, + count(distinct requests.visitor_id) as unique_visitors, + count(distinct requests.session_id) as sessions, + count(requests.request_id) as page_views + from + %s as requests + where + true + %s + %s + group by + requests.%s + ORDER BY + requests.year, + requests.month, + requests.day %s", + $this->setTable($this->config['requests_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['group_by'], + $this->params['order'] + ); + + + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/sessionBrowserTypes.php b/modules/base/metrics/sessionBrowserTypes.php new file mode 100644 index 000000000..8b53b0edf --- /dev/null +++ b/modules/base/metrics/sessionBrowserTypes.php @@ -0,0 +1,100 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_sessionBrowserTypes extends owa_metric { + + function owa_sessionBrowserTypes($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $s = owa_coreAPI::entityFactory('base.session'); + + $ua = owa_coreAPI::entityFactory('base.ua'); + + $this->params['related_objs'] = array('ua_id' => $ua); + + $this->setTimePeriod($this->params['period']); + + $this->params['select'] = "count(distinct session.id) as count, + ua.ua as ua, + ua.browser_type"; + + $this->params['groupby'] = array('ua.browser_type'); + + $this->params['orderby'] = array('count'); + + return $s->query($this->params); + + /* + $sql = sprintf(" + SELECT + count(distinct sessions.session_id) as count, + ua.ua as ua, + ua.browser_type + FROM + %s as sessions, + %s as ua + WHERE + ua.id = sessions.ua_id + %s + %s + GROUP BY + ua.browser_type + ORDER BY + count DESC + ", + $this->setTable($this->config['sessions_table']), + $this->setTable($this->config['ua_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + ); + + return $this->db->get_results($sql); + + */ + + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/sessionsCount.php b/modules/base/metrics/sessionsCount.php new file mode 100644 index 000000000..2675f0f35 --- /dev/null +++ b/modules/base/metrics/sessionsCount.php @@ -0,0 +1,61 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_sessionsCount extends owa_metric { + + function owa_sessionsCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(session.id) as count"; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + + return $s->query($this->params); + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topClicks.php b/modules/base/metrics/topClicks.php new file mode 100644 index 000000000..e121a99ef --- /dev/null +++ b/modules/base/metrics/topClicks.php @@ -0,0 +1,103 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_topClicks extends owa_metric { + + function owa_topClicks($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(id) as count, + click_x, + click_y, + page_width, + page_height, + dom_element_x, + dom_element_y, + position"; + + + $this->params['orderby'] = array('year', 'month', 'day'); + $this->setTimePeriod($this->params['period']); + $this->params['groupby'] = array('position'); + $this->params['orderby'] = array('count'); + $this->params['order'] = 'DESC'; + + $c = owa_coreAPI::entityFactory('base.click'); + + return $c->query($this->params); + + + /* + SELECT + count(click_id) as count, + click_x, + click_y, + page_width, + page_height, + dom_element_x, + dom_element_y, + position + FROM + %s + WHERE + true + %s + %s + GROUP BY + position + ORDER BY + count DESC + LIMIT + %s", + $this->setTable($this->config['clicks_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['limit'] + ); + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topEntryPages.php b/modules/base/metrics/topEntryPages.php new file mode 100644 index 000000000..7af81e481 --- /dev/null +++ b/modules/base/metrics/topEntryPages.php @@ -0,0 +1,73 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_topEntryPages extends owa_metric { + + function owa_topEntryPages($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $s = owa_coreAPI::entityFactory('base.session'); + + $d = owa_coreAPI::entityFactory('base.document'); + + $this->params['related_objs'] = array('first_page_id' => $d); + + $this->setTimePeriod($this->params['period']); + + $this->params['select'] = "count(session.id) as count, + document.page_title, + document.page_type, + document.url, + document.id"; + + $this->params['groupby'] = array('session.first_page_id'); + + $this->params['orderby'] = array('count'); + + return $s->query($this->params); + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topExitPages.php b/modules/base/metrics/topExitPages.php new file mode 100644 index 000000000..a87cec320 --- /dev/null +++ b/modules/base/metrics/topExitPages.php @@ -0,0 +1,73 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_topExitPages extends owa_metric { + + function owa_topExitPages($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $s = owa_coreAPI::entityFactory('base.session'); + + $d = owa_coreAPI::entityFactory('base.document'); + + $this->params['related_objs'] = array('last_page_id' => $d); + + $this->setTimePeriod($this->params['period']); + + $this->params['select'] = "count(session.id) as count, + document.page_title, + document.page_type, + document.url, + document.id"; + + $this->params['groupby'] = array('session.last_page_id'); + + $this->params['orderby'] = array('count'); + + return $s->query($this->params); + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topHosts.php b/modules/base/metrics/topHosts.php new file mode 100644 index 000000000..fe13329f1 --- /dev/null +++ b/modules/base/metrics/topHosts.php @@ -0,0 +1,101 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_topHosts extends owa_metric { + + function owa_topHosts($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(session.host_id) as count, " . + " host.id, + host.host, + host.full_host, + host.ip_address"; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + $h = owa_coreAPI::entityFactory('base.host'); + + $this->params['related_objs'] = array('host_id' => $h); + $this->params['groupby'] = array('host.id'); + $this->params['orderby'] = array('count'); + $this->params['order'] = 'DESC'; + + return $s->query($this->params); + + /* + + SELECT + count(sessions.host_id) as count, + hosts.id, + hosts.host, + hosts.full_host, + hosts.ip_address + + FROM + %s as sessions, %s as hosts + WHERE + sessions.host_id = hosts.id + %s + %s + GROUP BY + hosts.id + ORDER BY + count DESC + LIMIT + %s", + $this->setTable($this->config['sessions_table']), + $this->setTable($this->config['hosts_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['limit'] + ); + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topPages.php b/modules/base/metrics/topPages.php new file mode 100644 index 000000000..7475fe2ce --- /dev/null +++ b/modules/base/metrics/topPages.php @@ -0,0 +1,77 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_toppages extends owa_metric { + + function owa_topPages($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(request.document_id) as count, + document.page_title, + document.page_type, + document.url, + document.id as document_id"; + + $this->params['use_summary'] = true; + + $this->params['orderby'] = array('year', 'month', 'day'); + + $this->setTimePeriod($this->params['period']); + + $r = owa_coreAPI::entityFactory('base.request'); + $d = owa_coreAPI::entityFactory('base.document'); + + $this->params['related_objs'] = array('document_id' => $d); + $this->params['groupby'] = array('document.id'); + $this->params['orderby'] = array('count'); + $this->params['order'] = 'DESC'; + + $this->params['constraints']['document.page_type'] = array('operator' => '!=', 'value' => 'feed'); + + return $r->query($this->params); + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topReferers.php b/modules/base/metrics/topReferers.php new file mode 100644 index 000000000..35e1e4e25 --- /dev/null +++ b/modules/base/metrics/topReferers.php @@ -0,0 +1,78 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_topReferers extends owa_metric { + + function owa_topReferers($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $s = owa_coreAPI::entityFactory('base.session'); + + $r = owa_coreAPI::entityFactory('base.referer'); + + $this->params['related_objs'] = array('referer_id' => $r); + + $this->setTimePeriod($this->params['period']); + + $this->params['select'] = "count(referer.id) as count, + sum(session.num_pageviews) as page_views, + url, + page_title, + site_name, + query_terms, + snippet, + refering_anchortext, + is_searchengine"; + + $this->params['groupby'] = array('referer.url'); + + $this->params['orderby'] = array('count'); + + return $s->query($this->params); + + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topReferingAnchors.php b/modules/base/metrics/topReferingAnchors.php new file mode 100644 index 000000000..c1ec62d85 --- /dev/null +++ b/modules/base/metrics/topReferingAnchors.php @@ -0,0 +1,100 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_topReferingAnchors extends owa_metric { + + function owa_topReferingAnchors($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(session.id) as count, referer.refering_anchortext"; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + $r = owa_coreAPI::entityFactory('base.referer'); + + $this->params['related_objs'] = array('referer_id' => $r); + $this->params['groupby'] = array('referer.refering_anchortext'); + $this->params['orderby'] = array('count'); + $this->params['order'] = 'DESC'; + + $this->params['constraints']['referer.id'] = array('operator' => '!=', 'value' => 0); + $this->params['constraints']['referer.refering_anchortext'] = array('operator' => '!=', 'value' => ''); + $this->params['constraints']['referer.is_searchengine'] = array('operator' => '=', 'value' => 0); + + return $s->query($this->params); + + /* + + SELECT + count(sessions.session_id) as count, + referers.refering_anchortext + FROM + %s as referers, + %s as sessions + WHERE + referers.id != 0 + AND refering_anchortext != '' + AND referers.is_searchengine = '0' + AND referers.id = sessions.referer_id + %s + %s + GROUP BY + referers.refering_anchortext + ORDER BY + count DESC + LIMIT + %s", + $this->setTable($this->config['referers_table']), + $this->setTable($this->config['sessions_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['limit'] + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topReferingHosts.php b/modules/base/metrics/topReferingHosts.php new file mode 100644 index 000000000..9e9eb56a8 --- /dev/null +++ b/modules/base/metrics/topReferingHosts.php @@ -0,0 +1,97 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_topReferingHosts extends owa_metric { + + function owa_topReferingHosts($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(session.id) as count, referer.site"; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + $r = owa_coreAPI::entityFactory('base.referer'); + + $this->params['related_objs'] = array('referer_id' => $r); + $this->params['groupby'] = array('referer.site'); + $this->params['orderby'] = array('count'); + $this->params['order'] = 'DESC'; + + $this->params['constraints']['referer.id'] = array('operator' => '!=', 'value' => 0); + + return $s->query($this->params); + + /* + + SELECT + count(sessions.session_id) as count, + referers.site + FROM + %s as referers, + %s as sessions + WHERE + referers.id != 0 + AND referers.id = sessions.referer_id + %s + %s + GROUP BY + referers.site + ORDER BY + count DESC + LIMIT + %s", + $this->setTable($this->config['referers_table']), + $this->setTable($this->config['sessions_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['limit'] + ); + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topReferingKeywords.php b/modules/base/metrics/topReferingKeywords.php new file mode 100644 index 000000000..34ceb31f3 --- /dev/null +++ b/modules/base/metrics/topReferingKeywords.php @@ -0,0 +1,99 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_topReferingKeywords extends owa_metric { + + function owa_topReferingKeywords($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(session.id) as count, referer.query_terms"; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + $r = owa_coreAPI::entityFactory('base.referer'); + + $this->params['related_objs'] = array('referer_id' => $r); + $this->params['groupby'] = array('referer.query_terms'); + $this->params['orderby'] = array('count'); + $this->params['order'] = 'DESC'; + + $this->params['constraints']['referer.id'] = array('operator' => '!=', 'value' => 0); + $this->params['constraints']['referer.query_terms'] = array('operator' => '!=', 'value' => ''); + + return $s->query($this->params); + + /* + + SELECT + count(sessions.session_id) as count, + referers.query_terms + FROM + %s as referers, + %s as sessions + WHERE + referers.id != 0 + and query_terms != '' + AND referers.id = sessions.referer_id + %s + %s + GROUP BY + referers.query_terms + ORDER BY + count DESC + LIMIT + %s", + $this->setTable($this->config['referers_table']), + $this->setTable($this->config['sessions_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['limit'] + ); + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/topVisitors.php b/modules/base/metrics/topVisitors.php new file mode 100644 index 000000000..561eec859 --- /dev/null +++ b/modules/base/metrics/topVisitors.php @@ -0,0 +1,97 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_topVisitors extends owa_metric { + + function owa_topVisitors($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $s = owa_coreAPI::entityFactory('base.session'); + + $this->setTimePeriod($this->params['period']); + + $this->params['select'] = "count(visitor_id) as count, + visitor_id as vis_id, + user_name, + user_email"; + + $this->params['groupby'] = array('vis_id'); + + $this->params['orderby'] = array('count'); + + return $s->query($this->params); + + /* + + $sql = sprintf(" + SELECT + count(visitor_id) as count, + visitor_id as vis_id, + user_name, + user_email + FROM + %s + WHERE + true + %s + %s + GROUP BY + vis_id + ORDER BY + count DESC + LIMIT + %s", + $this->setTable($this->config['sessions_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['limit'] + ); + + return $this->db->get_results($sql); + + */ + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/visitorTypesCount.php b/modules/base/metrics/visitorTypesCount.php new file mode 100644 index 000000000..3a31a4765 --- /dev/null +++ b/modules/base/metrics/visitorTypesCount.php @@ -0,0 +1,64 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitorTypesCount extends owa_metric { + + function owa_visitorTypesCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "sum(is_new_visitor) as new_visitor, + sum(is_repeat_visitor) as repeat_visitor "; + + $this->params['use_summary'] = true; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + + return $s->query($this->params); + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/visitorsAge.php b/modules/base/metrics/visitorsAge.php new file mode 100644 index 000000000..bd7bba43e --- /dev/null +++ b/modules/base/metrics/visitorsAge.php @@ -0,0 +1,104 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitorsAge extends owa_metric { + + function owa_visitorsAge($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $s = owa_coreAPI::entityFactory('base.session'); + + $v = owa_coreAPI::entityFactory('base.visitor'); + + $this->params['related_objs'] = array('visitor_id' => $v); + + $this->setTimePeriod($this->params['period']); + + $this->params['select'] = "count(distinct session.visitor_id) as count, + visitor.first_session_year, + visitor.first_session_month, + visitor.first_session_day, + visitor.first_session_timestamp as timestamp"; + + $this->params['groupby'] = array('visitor.first_session_year', 'visitor.first_session_month', 'visitor.first_session_day'); + + $this->params['orderby'] = array('visitor.first_session_year', 'visitor.first_session_month', 'visitor.first_session_day'); + + return $s->query($this->params); + + /* + $sql = sprintf(" + SELECT + count(distinct sessions.visitor_id) as count, + visitors.first_session_year, + visitors.first_session_month, + visitors.first_session_day, + visitors.first_session_timestamp as timestamp + FROM + %s as sessions, %s as visitors + WHERE + sessions.visitor_id = visitors.visitor_id + %s + %s + GROUP BY + visitors.first_session_year, + visitors.first_session_month, + visitors.first_session_day + ORDER BY + visitors.first_session_year DESC, + visitors.first_session_month DESC, + visitors.first_session_day DESC", + + $this->setTable($this->config['sessions_table']), + $this->setTable($this->config['visitors_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + ); + + return $this->db->get_results($sql); + */ + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/visitorsList.php b/modules/base/metrics/visitorsList.php new file mode 100644 index 000000000..0a28394c7 --- /dev/null +++ b/modules/base/metrics/visitorsList.php @@ -0,0 +1,75 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitorsList extends owa_metric { + + function owa_visitorsList($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $sql = sprintf(" + SELECT + distinct sessions.visitor_id as visitor_id, + visitors.user_name, + visitors.user_email + FROM + %s as sessions, + %s as visitors + WHERE + sessions.visitor_id = visitors.visitor_id + %s + %s + LIMIT + %s", + $this->setTable($this->config['sessions_table']), + $this->setTable($this->config['visitors_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']), + $this->params['limit'] + ); + + return $this->db->get_results($sql); + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/visitorsUserAgentCount.php b/modules/base/metrics/visitorsUserAgentCount.php new file mode 100644 index 000000000..c3da75d18 --- /dev/null +++ b/modules/base/metrics/visitorsUserAgentCount.php @@ -0,0 +1,77 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitorsUserAgentCount extends owa_metric { + + function owa_visitorsUserAgentCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $sql = sprintf(" + SELECT + count(distinct sessions.session_id) as count, + ua.ua as ua, + ua.browser_type + FROM + %s as sessions, + %s as ua + WHERE + ua.id = sessions.ua_id + %s + %s + GROUP BY + ua.browser_type + ORDER BY + count DESC + ", + $this->setTable($this->config['sessions_table']), + $this->setTable($this->config['ua_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + ); + + return $this->db->get_results($sql); + } + + +} + + +?> diff --git a/modules/base/metrics/visitsFromDirectNavCount.php b/modules/base/metrics/visitsFromDirectNavCount.php new file mode 100644 index 000000000..aa783db7f --- /dev/null +++ b/modules/base/metrics/visitsFromDirectNavCount.php @@ -0,0 +1,84 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitsFromDirectNavCount extends owa_metric { + + function owa_visitsFromDirectNavCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(session.id) as count"; + + $this->params['use_summary'] = true; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + $ref = owa_coreAPI::entityFactory('base.referer'); + + $this->params['related_objs'] = array('referer_id' => $ref); + $this->params['constraints']['referer_id'] = array('operator' => '=', 'value' => '0'); + $this->params['constraints']['source'] = array('operator' => '=', 'value' => ''); + + return $s->query($this->params); + /* + + SELECT + count(sessions.session_id) as count + FROM + %s as sessions + WHERE + sessions.referer_id = '0' + AND sessions.source = '' + %s + %s", + $this->setTable($this->config['sessions_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/visitsFromFeedsCount.php b/modules/base/metrics/visitsFromFeedsCount.php new file mode 100644 index 000000000..f887c3a1b --- /dev/null +++ b/modules/base/metrics/visitsFromFeedsCount.php @@ -0,0 +1,88 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitsFromFeedsCount extends owa_metric { + + function owa_visitsFromFeedsCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(session.id) as source_count"; + + $this->params['use_summary'] = true; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + $ref = owa_coreAPI::entityFactory('base.referer'); + + $this->params['related_objs'] = array('referer_id' => $ref); + $this->params['constraints']['session.source'] = 'feed'; + $this->params['constraints']['referer.is_searchengine'] = array('operator' => '!=', 'value' => 1); + + return $s->query($this->params); + /* + + $sql = sprintf("select + count(sessions.session_id) as source_count + FROM + %s as sessions, + %s as referers + WHERE + sessions.referer_id = referers.id + AND sessions.source = 'feed' + AND referers.is_searchengine = 0 + %s + %s + ", + $this->setTable($this->config['sessions_table']), + $this->setTable($this->config['referers_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/visitsFromSearchEnginesCount.php b/modules/base/metrics/visitsFromSearchEnginesCount.php new file mode 100644 index 000000000..687d48f6a --- /dev/null +++ b/modules/base/metrics/visitsFromSearchEnginesCount.php @@ -0,0 +1,86 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitsFromSearchEnginesCount extends owa_metric { + + function owa_visitsFromSearchEnginesCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(session.id) as se_count"; + + $this->params['use_summary'] = true; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + $ref = owa_coreAPI::entityFactory('base.referer'); + + $this->params['related_objs'] = array('referer_id' => $ref); + $this->params['constraints']['referer.is_searchengine'] = 1; + + return $s->query($this->params); + /* + + $sql = sprintf("select + count(sessions.session_id) as se_count + FROM + %s as sessions, + %s as referers + WHERE + sessions.referer_id = referers.id + AND referers.is_searchengine = 1 + AND referers.id != 0 + %s + %s", + $this->setTable($this->config['sessions_table']), + $this->setTable($this->config['referers_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/metrics/visitsFromSitesCount.php b/modules/base/metrics/visitsFromSitesCount.php new file mode 100644 index 000000000..d0d0eea18 --- /dev/null +++ b/modules/base/metrics/visitsFromSitesCount.php @@ -0,0 +1,89 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_visitsFromSitesCount extends owa_metric { + + function owa_visitsFromSitesCount($params = null) { + + $this->params = $params; + + $this->owa_metric(); + + return; + + } + + function generate() { + + $this->params['select'] = "count(session.id) as site_count"; + + $this->params['use_summary'] = true; + + $this->setTimePeriod($this->params['period']); + + $s = owa_coreAPI::entityFactory('base.session'); + $ref = owa_coreAPI::entityFactory('base.referer'); + + $this->params['related_objs'] = array('referer_id' => $ref); + $this->params['constraints']['referer_id'] = array('operator' => '!=', 'value' => '0'); + $this->params['constraints']['referer.is_searchengine'] = array('operator' => '!=', 'value' => 1); + $this->params['constraints']['source'] = array('operator' => '=', 'value' => ''); + + return $s->query($this->params); + /* + + $sql = sprintf("select + count(sessions.session_id) as site_count + FROM + %s as sessions, + %s as referers + WHERE + sessions.referer_id = referers.id + AND referers.is_searchengine = 0 + AND sessions.source = '' + AND referers.id != 0 + %s + %s", + $this->setTable($this->config['sessions_table']), + $this->setTable($this->config['referers_table']), + $this->time_period($this->params['period']), + $this->add_constraints($this->params['constraints']) + + */ + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/module.php b/modules/base/module.php new file mode 100644 index 000000000..42415586d --- /dev/null +++ b/modules/base/module.php @@ -0,0 +1,151 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_baseModule extends owa_module { + + + function owa_baseModule() { + + $this->name = 'base'; + $this->display_name = 'Open Web Analytics'; + $this->group = 'Base'; + $this->author = 'Peter Adams'; + $this->version = '1.0'; + $this->description = 'Base functionality for OWA.'; + + $this->owa_module(); + + return; + } + + /** + * Registers Admin panels with the core API + * + */ + function registerAdminPanels() { + + $this->addAdminPanel(array('view' => 'base.optionsGeneral', + 'priviledge' => 'admin', + 'anchortext' => 'Main Configuration', + 'group' => 'General', + 'order' => 1)); + + $this->addAdminPanel(array('view' => 'base.users', + 'priviledge' => 'admin', + 'anchortext' => 'User Management', + 'group' => 'General', + 'order' => 2)); + + $this->addAdminPanel(array('view' => 'base.sites', + 'priviledge' => 'admin', + 'anchortext' => 'Site Roster', + 'group' => 'General', + 'order' => 3)); + + return; + + } + + function registerNavigation() { + + $this->addNavigationLink(array('view' => 'base.reportDocument', + 'ref' => 'base.reportClicks', + 'priviledge' => 'viewer', + 'anchortext' => 'Click Map Report', + 'order' => 1)); + + + + return; + + } + + /** + * Registers Event Handlers with queue queue + * + */ + function _registerEventHandlers() { + + // User management + $this->_addHandler(array('base.set_password', + 'base.reset_password', + 'base.new_user_account'), + 'userHandlers'); + + // Page Requests + $this->_addHandler(array('base.page_request'), 'requestHandlers'); + + // Sessions + $this->_addHandler('base.page_request', 'sessionHandlers'); + + // Clicks + $this->_addHandler('base.click', 'clickHandlers'); + + // Documents + $this->_addHandler(array('base.page_request', 'base.feed_request'), 'documentHandlers'); + + // Referers + $this->_addHandler('base.new_session', 'refererHandlers'); + + // User Agents + $this->_addHandler('base.new_session', 'userAgentHandlers'); + + // Hosts + $this->_addHandler('base.new_session', 'hostHandlers'); + + // Hosts + $this->_addHandler('base.new_comment', 'commentHandlers'); + + // Hosts + $this->_addHandler('base.feed_request', 'feedRequestHandlers'); + + // User management + $this->_addHandler('base.new_session', 'visitorHandlers'); + + // Nofofcation handlers + $this->_addHandler('base.new_session', 'notifyHandlers'); + + + return; + + } + + function _registerEntities() { + + $this->entities[] = 'request'; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/notifyNewSession.php b/modules/base/notifyNewSession.php new file mode 100644 index 000000000..87f3c46a7 --- /dev/null +++ b/modules/base/notifyNewSession.php @@ -0,0 +1,106 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_notifyNewSessionController extends owa_controller { + + function owa_notifyNewSesionController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + $s = owa_coreAPI::entityFactory('base.site'); + + $s->getByPk('site_id', $this->params['request']['site_id']); + + $data['site'] = $s->_getProperties(); + + $data['email_address']= $this->config['notice_email']; + $data['request'] = $this->params['request']; + $data['session'] = $this->params['session']; + $data['subject'] = sprintf('OWA: New Visit to %s', $s->get('domain')); + $data['view'] = 'base.notifyNewSession'; + $data['plainTextView'] = 'base.notifyNewSessionPlainText'; + $data['view_method'] = 'email-html'; + + return $data; + + } + + +} + + +/** + * New Session Notification View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_notifyNewSessionView extends owa_view { + + function owa_notifyNewSessionView() { + + $this->owa_view(); + return; + } + + function construct($data) { + + $this->t->set_template('wrapper_email.tpl'); + $this->body->set_template('new_session_email.tpl'); + $this->body->set('site', $data['site']); + $this->body->set('request', $data['request']); + + return; + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/notifyNewSessionPlainText.php b/modules/base/notifyNewSessionPlainText.php new file mode 100644 index 000000000..9b256bb48 --- /dev/null +++ b/modules/base/notifyNewSessionPlainText.php @@ -0,0 +1,57 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_notifyNewSessionPlainTextView extends owa_view { + + function owa_notifyNewSessionPlainTextView() { + + $this->owa_view(); + return; + } + + function construct($data) { + + $this->t->set_template('wrapper_blank.tpl'); + $this->body->set_template('new_session_email_plain_text.tpl'); + $this->body->set('site', $data['site']); + $this->body->set('request', $data['request']); + + return; + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/options.php b/modules/base/options.php new file mode 100644 index 000000000..b4ee01969 --- /dev/null +++ b/modules/base/options.php @@ -0,0 +1,80 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_optionsView extends owa_view { + + function owa_OptionsView() { + + $this->owa_view(); + $this->priviledge_level = 'admin'; + $this->default_subview = 'base.optionsGeneral'; + + return; + } + + function construct($data) { + + //page title + $this->t->set('page_title', 'OWA Options'); + + // load body template + $this->body->set_template('options.tpl'); + + // fetch admin links from all modules + // need api call here. + $this->body->set('headline', 'OWA Configuration Options'); + + //Fetch latest OWA news + $rss = new owa_news; + $news = $rss->Get($this->config['owa_rss_url']); + $this->body->set('news', $news); + + // get admin panels + $api = &owa_coreAPI::singleton(); + $panels = $api->getAdminPanels(); + //print_r($panels); + $this->body->set('panels', $panels); + + // Assign config data + $this->body->set('config', $this->config); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/optionsGeneral.php b/modules/base/optionsGeneral.php new file mode 100644 index 000000000..60a6f2c41 --- /dev/null +++ b/modules/base/optionsGeneral.php @@ -0,0 +1,64 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_optionsGeneralView extends owa_view { + + function owa_optionsGeneralView($params) { + + $this->owa_view($params); + //set priviledge level + $this->_setPriviledgeLevel('admin'); + //set page type + $this->_setPageType('Administration Page'); + + return; + } + + function construct() { + + // load template + $this->body->set_template('options_general.tpl'); + // fetch admin links from all modules + $this->body->set('headline', 'General Configuration Options'); + + // assign config data + $this->body->set('config', $this->config); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/optionsUpdate.php b/modules/base/optionsUpdate.php new file mode 100644 index 000000000..85489acc0 --- /dev/null +++ b/modules/base/optionsUpdate.php @@ -0,0 +1,78 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_optionsUpdateController extends owa_controller { + + function owa_optionsUpdateController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'admin'; + + return; + } + + function action() { + + //create the new config array + $new_config = array(); + + // needed for following DB queries just in case the various + // implementations of the GUI does not allow you to set this. + $new_config['configuration_id'] = $this->config['configuration_id']; + + foreach ($this->params['config'] as $key => $value) { + + // update exising config, needed? + $this->config[$key] = $value; + //add to config going to the db + $new_config[$key] = $value; + + } + + owa_settings::save($new_config); + + $this->e->notice("Configuration changes saved to database."); + + $data = array(); + $data['view'] = 'base.options'; + $data['subview'] = 'base.optionsGeneral'; + $data['view_method'] = 'delegate'; + $data['status_msg'] = $this->getMsg(2500); + + return $data; + + } + +} + + +?> \ No newline at end of file diff --git a/modules/base/passwordResetRequest.php b/modules/base/passwordResetRequest.php new file mode 100644 index 000000000..f6aedc450 --- /dev/null +++ b/modules/base/passwordResetRequest.php @@ -0,0 +1,109 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_passwordResetRequestView extends owa_view { + + function owa_passwordResetRequest($params) { + + $this->owa_view($params); + + return; + } + + function construct($data) { + + $this->body->set_template('users_password_reset_request.tpl');// This is the inner template + $this->body->set('headline', 'Type in the email address that is associated with your user account.'); + $this->body->set('u', $this->params['u']); + + return; + } + +} + + +/** + * Password Reset Request Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_passwordResetRequestController extends owa_controller { + + function owa_passwordResetRequestController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + + return; + } + + function doAction() { + + // Check to see if this email exists in the db + $u = new owa_user; + $u->getUserByEmail($this->params['email_address']); + + $data = array(); + + // If user exists then fire event and return view + if (!empty($u->user_id)): + + // Log password reset request to event queue + $eq = &eventQueue::get_instance(); + $eq->log(array('user_id' => $u->user_id), 'base.reset_password'); + + // return view + $data['view'] = 'base.passwordResetRequest'; + $data['view_method'] = 'delegate'; + $data['status_msg'] = $this->getMsg(2000, $this->params['email_address']); + + // if user does not exists just return view with error + else: + $data['view'] = 'base.passwordResetRequest'; + $data['view_method'] = 'delegate'; + $data['error_msg'] = $this->getMsg(2001, $this->params['email_address']); + endif; + + return $data; + } +} + + + +?> \ No newline at end of file diff --git a/modules/base/pixel.php b/modules/base/pixel.php new file mode 100644 index 000000000..049658638 --- /dev/null +++ b/modules/base/pixel.php @@ -0,0 +1,68 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_pixelView extends owa_view { + + function owa_pixelView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Set Page title + $this->t->set_template('blank.tpl'); + + // load body template + $this->body->set_template('pixel.tpl'); + + $this->body->set('img', sprintf( + '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%', + 71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59 + )); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/processEvent.php b/modules/base/processEvent.php new file mode 100644 index 000000000..2a11f45ed --- /dev/null +++ b/modules/base/processEvent.php @@ -0,0 +1,83 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_processEventController extends owa_controller { + + function owa_processEventController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + + return; + } + + /** + * Main Constrol Logic + * + * @return unknown + */ + function action() { + + // Setup generic event model + $event = owa_coreAPI::supportClassFactory('base', 'event'); + + $event->state = $this->params['event']; + + $event->_setProperties($this->params); + + $event->setTime(); + + $event->setIp(); + + // Resolve host name + if ($this->config['resolve_hosts'] = true): + $event->setHost($this->params['REMOTE_HOST']); + endif; + + // sets browser related properties + $event->setBrowser(); + + //Clean Query Strings + if ($this->config['clean_query_strings'] == true): + $event->cleanQueryStrings(); + endif; + + return $event->log(); + + } + +} + + +?> \ No newline at end of file diff --git a/modules/base/processFirstRequest.php b/modules/base/processFirstRequest.php new file mode 100644 index 000000000..391adabc7 --- /dev/null +++ b/modules/base/processFirstRequest.php @@ -0,0 +1,76 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_processFirstRequestController extends owa_controller { + + function owa_processFirstRequestController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + if (!empty($this->params[$this->config['first_hit_param']])): + + // Create a new request object + $r = owa_coreAPI::supportClassFactory('base', 'requestEvent'); + + $r->state = 'page_request'; + + //Load request properties from first_hit cookie if it exists + if (!empty($this->params[$this->config['first_hit_param']])): + $r->load_first_hit_properties($this->params[$this->config['first_hit_param']]); + endif; + + $this->e->debug(sprintf('First hit Request %d logged to event queue', + $r->properties['request_id'])); + + // Log the request + $r->log(); + + endif; + + $data = array(); + + $data['view'] = 'base.pixel'; + $data['view_method'] = 'image'; + + return $data; + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/processRequest.php b/modules/base/processRequest.php new file mode 100644 index 000000000..00fb3d053 --- /dev/null +++ b/modules/base/processRequest.php @@ -0,0 +1,132 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_processRequestController extends owa_controller { + + + var $bcap; // browscap + + function owa_processRequestController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'guest'; + } + + function action() { + + // Control logic + + // Do not log if the first_hit cookie is still present. + if (!empty($this->params[$this->config['first_hit_param']])): + return; + endif; + + // Setup request event + $r = owa_coreAPI::supportClassFactory('base', 'requestEvent'); + + // Set event properties + $r->_setProperties($this->params); + + // set site id if not already set + if (empty($this->params['site_id'])): + $r->properties['site_id'] = $this->config['site_id']; + endif; + + // Set Ip Address + $r->setIp(); + + // Set all time related properties + $r->setTime(); + + // Set Operating System + $r->setOs($this->params['browscap_Platform']); + + // Set host related properties + if ($this->config['resolve_hosts'] = true): + $r->setHost($this->params['REMOTE_HOST']); + endif; + + // sets browser related properties NEEDED? + $r->setBrowser(); + + // Set the uri or else construct it from environmental vars + if (empty($this->params['page_url'])): + $r->properties['page_url'] = owa_lib::get_current_url(); + endif; + + $r->properties['inbound_page_url'] = $r->properties['page_url']; + + // Strip session based URL params + $r->properties['page_url'] = $r->stripDocumentUrl($r->properties['page_url']); + + // Feed subscription tracking code + $r->properties['feed_subscription_id'] = $this->params[$this->config['feed_subscription_param']]; + + // Traffic Source code + $r->properties['source'] = $this->params[$this->config['source_param']]; + + //Check for what kind of page request this is + if ($this->params['browscap_Crawler'] == true): + $r->is_robot = true; + $r->properties['is_robot'] = true; + $r->properties['is_browser'] = false; + $r->state = 'robot_request'; + elseif ($r->properties['is_feedreader'] == true || $this->params['browscap_isSyndicationReader'] == true): $r->properties['is_feedreader'] == true; + $r->properties['is_browser'] = false; + $r->properties['feed_reader_guid'] = $r->setEnvGUID(); + $r->state = 'feed_request'; + else: + $r->state = 'page_request'; + $r->properties['is_browser'] = true; + $r->assign_visitor(); + $r->sessionize(); + endif; + + //update last-request time cookie + setcookie($this->config['ns'].$this->config['last_request_param'], + $r->properties['sec'], + time()+3600*24*365*30, + "/", + $r->setCookieDomain($this->params['HTTP_HOST'])); + + return $r->log(); + + } + + + +} + + +?> \ No newline at end of file diff --git a/modules/base/report.php b/modules/base/report.php new file mode 100644 index 000000000..ee1d8ad95 --- /dev/null +++ b/modules/base/report.php @@ -0,0 +1,193 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportView extends owa_view { + + function owa_reportView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + + return; + } + + function construct($data) { + + if (empty($data['params']['site_id'])): + $this->data['params']['site_id'] = $this->config['site_id']; + endif; + + // Set Page title + $this->t->set('page_title', 'Report'); + + // Set Page headline + $this->body->set('headline', ''); + + // Report Period Filters + $this->body->set('reporting_periods', owa_lib::reporting_periods()); + $this->body->set('date_reporting_periods', owa_lib::date_reporting_periods()); + $this->body->set('months', owa_lib::months()); + $this->body->set('days', owa_lib::days()); + $this->body->set('years', owa_lib::years()); + + // Set reporting period + $this->setPeriod($data['params']['period']); + + // Set date labels + $date_label = $this->setDateLabel($data['params']); + $this->body->set('date_label', $date_label); + $this->subview->body->set('date_label', $date_label); + + //create the report control params array + $this->report_params = $this->data['params']; + unset($this->report_params['p']); + unset($this->report_params['u']); + unset($this->report_params['v']); + unset($this->report_params['s']); + unset($this->report_params['last_req']); + unset($this->report_params['guid']); + unset($this->report_params['caller']); + + $this->body->set('params', $this->report_params); + + // create state params for all links + $link_params = array( + 'period' => $this->data['params']['period'], // could be set by setPeriod + 'day' => $data['params']['day'], + 'month' => $data['params']['month'], + 'year' => $data['params']['year'], + 'day2' => $data['params']['day2'], + 'month2' => $data['params']['month2'], + 'year2' => $data['params']['year2'], + 'site_id' => $this->data['params']['site_id'] + ); + + $this->body->caller_params['link_state'] = $link_params; + $this->subview->body->caller_params['link_state'] = $link_params; + + $this->body->set('sites', $this->getSitesList()); + + + //Fetch latest OWA news + if ($this->config['fetch_owa_news'] == true): + $rss = new owa_news; + $news = $rss->Get($rss->config['owa_rss_url']); + endif; + + $this->body->set('news', $news); + + // load body template + $this->body->set_template('report.tpl'); + + return; + } + + /** + * Set report period + * + * @access public + * @param string $period + */ + function setPeriod($period) { + + // set default period if necessary + if (empty($period)): + $period = 'today'; + endif; + + // set in various templates and is url params + $this->data['params']['period'] = $period; + $this->body->set('period', $period); + $this->subview->body->set('period', $period); + + // set period label + $period_label = $this->get_period_label($period); + $this->body->set('period_label', $period_label); + $this->subview->body->set('period_label', $period_label); + return; + } + + /** + * Lookup report period label + * + * @param string $period + * @access private + * @return string $label + */ + function get_period_label($period) { + + return owa_lib::get_period_label($period); + } + + + + function setDateLabel($params) { + + return owa_lib::getDateLabel($params); + + } + + /** + * Applies calling params + * + * @access private + * @param array $properties + */ + function _setParams($params = null) { + + if(!empty($params)): + foreach ($params as $key => $value) { + if(!empty($value)): + $this->params[$key] = $value; + endif; + } + endif; + + return; + } + + function getSitesList() { + + $sites = new owa_site; + return $sites->getAllSites(); + + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/reportClicks.php b/modules/base/reportClicks.php new file mode 100644 index 000000000..af5d1fa5e --- /dev/null +++ b/modules/base/reportClicks.php @@ -0,0 +1,111 @@ +owa_controller($params); + $this->priviledge_level = 'admin'; + + } + + function action() { + + $data = array(); + $data['params'] = $this->params; + + // Load the core API + $api = &owa_coreAPI::singleton($this->params); + + // Fetch document object + $d = owa_coreAPI::entityFactory('base.document'); + $d->getByPk('id', $this->params['document_id']); + $data['document_details'] = $d->_getProperties(); + + // Get clicks + $data['clicks'] = $api->getMetric('base.topClicks', array( + + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'document_id' => $this->params['document_id'], + 'ua_id' => $this->params['ua_id'] + ), + 'limit' => 500 + )); + + $u = owa_coreAPI::entityFactory('base.ua'); + + $data['view'] = 'base.report'; + $data['subview'] = 'base.reportClicks'; + $data['view_method'] = 'delegate'; + + return $data; + } +} + + + + +/** + * Click Report View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportClicksView extends owa_view { + + function owa_reportClicksView() { + + $this->owa_view(); + $this->priviledge_level = 'viewer'; + + return; + } + + function construct($data) { + + // Assign data to templates + + $this->body->set_template('report_clicks.tpl'); + + $this->body->set('headline', 'Click Map Report'); + + $this->body->set('clicks', $data['clicks']); + $this->body->set('detail', $data['document_details']); + + $this->body->set('document_id', $data['document_id']); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/reportContent.php b/modules/base/reportContent.php new file mode 100644 index 000000000..93ec4281d --- /dev/null +++ b/modules/base/reportContent.php @@ -0,0 +1,123 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportContentController extends owa_controller { + + function owa_reportContentController($params) { + + $this->owa_controller($params); + $this->priviledge_level = 'admin'; + + } + + function action() { + + // Load the core API + $api = &owa_coreAPI::singleton($this->params); + + $data = array(); + $data['params'] = $this->params; + + // Fetch Metrics + + $data['entry_documents'] = $api->getMetric('base.topEntryPages', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'order' => 'DESC', + 'limit' => 20 + )); + + $data['exit_documents'] = $api->getMetric('base.topExitPages', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'order' => 'DESC', + 'limit' => 20 + )); + + $data['top_pages_data'] = $api->getMetric('base.topPages', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'limit' => 30 + )); + + $data['view'] = 'base.report'; + $data['subview'] = 'base.reportContent'; + $data['view_method'] = 'delegate'; + + return $data; + + + } + +} + +/** + * Content Report View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportContentView extends owa_view { + + function owa_reportContentView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Assign Data to templates + + $this->body->set('headline', 'Content Report'); + $this->body->set('top_pages', $data['top_pages_data']); + $this->body->set('top_entry_pages', $data['entry_documents']); + $this->body->set('top_exit_pages', $data['exit_documents']); + + $this->body->set_template('report_content.tpl'); + + return; + } + +} + +?> diff --git a/modules/base/reportDashboard.php b/modules/base/reportDashboard.php new file mode 100644 index 000000000..0e4fea70f --- /dev/null +++ b/modules/base/reportDashboard.php @@ -0,0 +1,194 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportDashboardController extends owa_controller { + + function owa_reportDashboardController($params) { + + $this->owa_controller($params); + $this->priviledge_level = 'admin'; + + } + + function action() { + + // Load the core API + $api = &owa_coreAPI::singleton($this->params); + + $data = array(); + $data['params'] = $this->params; + + switch ($this->params['period']) { + + case "this_year": + $data['core_metrics_data'] = $api->getMetric('base.dashCoreByDay', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'groupby' => array('month') + + )); + + break; + + default: + $data['core_metrics_data'] = $api->getMetric('base.dashCoreByDay', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'groupby' => array('day') + + )); + break; + } + + $data['summary_stats_data'] = $api->getMetric('base.dashCounts', array( + + 'result_format' => 'single_row', + 'constraints' => array('site_id' => $this->params['site_id']) + + )); + + //print_r($data['summary_stats_data'] ); + + $data['latest_visits'] = $api->getMetric('base.latestVisits', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'limit' => 15, + 'orderby' => array('session.timestamp'), + 'order' => 'DESC' + + )); + + $data['top_pages_data'] = $api->getMetric('base.topPages', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'limit' => '10' + )); + + $data['top_referers_data'] = $api->getMetric('base.topReferers', array( + + 'limit' => '10', + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'referers.is_searchengine' => '0'), + 'order' => 'DESC' + )); + + $data['top_visitors_data'] = $api->getMetric('base.topVisitors', array( + + 'limit' => '10', + 'constraints' => array( + 'site_id' => $this->params['site_id']) + )); + + $data['browser_types'] = $api->getMetric('base.sessionBrowserTypes', array( + + 'constraints' => array('site_id' => $this->params['site_id']) + + )); + + $data['view'] = 'base.report'; + $data['subview'] = 'base.reportDashboard'; + + return $data; + + } + +} + + + +/** + * View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportDashboardView extends owa_view { + + function owa_reportDashboardView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Set Page title + $this->t->set('page_title', ''); + + // Set Page headline + $this->body->set('headline', 'Dashboard'); + + // load body template + $this->body->set_template('report_dashboard.tpl'); + + $this->body->set('headline', 'Analytics Dashboard'); + + $this->body->set('top_visitors', $data['top_visitors_data']); + + $this->body->set('config', $this->config); + + $this->body->set('params', $data); + + $this->body->set('core_metrics', $data['core_metrics_data']); + + $this->body->set('browser_types', $data['browser_types']); + + $this->body->set('summary_stats', $data['summary_stats_data']); + + $this->body->set('visits', $data['latest_visits']); + + $this->body->set('top_pages', $data['top_pages_data']); + + $this->body->set('top_referers', $data['top_referers_data']); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/reportDocument.php b/modules/base/reportDocument.php new file mode 100644 index 000000000..5d8d7a5f8 --- /dev/null +++ b/modules/base/reportDocument.php @@ -0,0 +1,163 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportDocumentController extends owa_controller { + + function owa_reportDocumentController($params) { + + $this->owa_controller($params); + $this->priviledge_level = 'viewer'; + + return; + } + + function action() { + + // Load the core API + $api = &owa_coreAPI::singleton($this->params); + + $data = array(); + $data['params'] = $this->params; + + switch ($this->params['period']) { + + case "this_year": + $data['core_metrics_data'] = $api->getMetric('base.requestCountsByDay', array( + + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'document_id' => $this->params['document_id'] + ), + 'groupby' => 'month' + + )); + + break; + + default: + $data['core_metrics_data'] = $api->getMetric('base.requestCountsByDay', array( + + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'document_id' => $this->params['document_id'] + ), + 'groupby' => 'day' + + )); + + break; + } + + $data['summary_stats_data'] = $api->getMetric('base.requestCounts', array( + + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'document_id' => $this->params['document_id'] + ) + + )); + + $d = owa_coreAPI::entityFactory('base.document'); + $d->getByPk('id', $this->params['document_id']); + $data['document_details'] = $d->_getProperties(); + + $data['top_referers'] = $api->getMetric('base.topReferers', array( + + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'session.first_page_id' => $this->params['document_id'] + ), + 'limit' => 30 + )); + + // get navigation + $data['nav'] = $api->getNavigation('base.reportDocument'); + + $data['view'] = 'base.report'; + $data['subview'] = 'base.reportDocument'; + + return $data; + + + } + +} + + +/** + * Visit Report View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportDocumentView extends owa_view { + + function owa_reportDocumentView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + + $this->body->caller_params['link_state']['document_id'] = $data['params']['document_id']; + + // Assign data to templates + + $this->body->set_template('report_document.tpl'); + $this->body->set('headline', 'Document Report'); + $this->body->set('core_metrics', $data['core_metrics_data']); + $this->body->set('summary_stats', $data['summary_stats_data']); + $this->body->set('detail', $data['document_details']); + $this->body->set('top_referers', $data['top_referers']); + $this->body->set('document_id', $data['params']['document_id']); + $this->body->set('nav', $data['nav']); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/reportFeeds.php b/modules/base/reportFeeds.php new file mode 100644 index 000000000..f0212f78a --- /dev/null +++ b/modules/base/reportFeeds.php @@ -0,0 +1,127 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportFeedsController extends owa_controller { + + function owa_reportFeedsController($params) { + + $this->owa_controller($params); + $this->priviledge_level = 'viewer'; + + return; + } + + function action() { + + $data = array(); + + $data['params'] = $this->params; + + // Load the core API + $api = &owa_coreAPI::singleton($this->params); + + switch ($this->params['period']) { + + case "this_year": + $data['trend'] = $api->getMetric('base.feedViewsTrend', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'groupby' => array('year', 'month'), + 'order' => 'DESC ' + )); + + break; + + default: + $data['trend'] = $api->getMetric('base.feedViewsTrend', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'groupby' => array('year', 'month', 'day'), + 'order' => 'DESC ' + )); + + } + + $data['view'] = 'base.report'; + $data['subview'] = 'base.reportFeeds'; + $data['view_method'] = 'delegate'; + + return $data; + + } + +} + +/** + * Feeds Report View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportFeedsView extends owa_view { + + function owa_reportFeedsView() { + + $this->owa_view(); + $this->priviledge_level = 'viewer'; + + return; + } + + function construct($data) { + + // Assign Data to templates + + $this->body->set('headline', 'Feeds'); + + $this->body->set('feed_trend', $data['trend']); + + $this->body->set_template('report_feeds.tpl'); + + $this->body->set('headline', 'Feeds Report'); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/reportTraffic.php b/modules/base/reportTraffic.php new file mode 100644 index 000000000..b8eee1cc1 --- /dev/null +++ b/modules/base/reportTraffic.php @@ -0,0 +1,189 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportTrafficController extends owa_controller { + + function owa_reportTrafficController($params) { + + $this->owa_controller($params); + $this->priviledge_level = 'viewer'; + + return; + } + + function action() { + + $data = array(); + + $data['params'] = $this->params; + + // Load the core API + $api = &owa_coreAPI::singleton($this->params); + + $data['top_keywords'] = $api->getMetric('base.topReferingKeywords', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'limit' => 30 + + )); + + $data['top_anchors'] = $api->getMetric('base.topReferingAnchors', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'limit' => 30 + + )); + + $data['top_hosts'] = $api->getMetric('base.topHosts', array( + + 'constraints' => array('site_id' => $this->params['site_id']), + 'limit' => 30 + + )); + + $data['top_referers'] = $api->getMetric('base.topReferers', array( + + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'is_searchengine' => 0 + ), + 'limit' => 30 + + )); + + $data['top_search_engines'] = $api->getMetric('base.topReferingHosts', array( + + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'is_searchengine' => 1 + ), + 'limit' => 30 + + )); + + $data['session_count'] = $api->getMetric('base.sessionsCount', array( + + 'result_format' => 'single_row', + 'constraints' => array('site_id' => $this->params['site_id']) + + )); + + $data['from_se'] = $api->getMetric('base.visitsFromSearchEnginesCount', array( + + 'result_format' => 'single_row', + 'constraints' => array('site_id' => $this->params['site_id']) + + )); + + $data['from_sites'] = $api->getMetric('base.visitsFromSitesCount', array( + + 'result_format' => 'single_row', + 'constraints' => array('site_id' => $this->params['site_id']) + + )); + + $data['from_direct'] = $api->getMetric('base.visitsFromDirectNavCount', array( + + 'result_format' => 'single_row', + 'constraints' => array('site_id' => $this->params['site_id']) + + )); + + $data['from_feeds'] = $api->getMetric('base.visitsFromFeedsCount', array( + + 'result_format' => 'single_row', + 'constraints' => array('site_id' => $this->params['site_id']) + + )); + + $data['view'] = 'base.report'; + $data['subview'] = 'base.reportTraffic'; + $data['view_method'] = 'delegate'; + + return $data; + + } +} + + +/** + * Traffic Report View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportTrafficView extends owa_view { + + function owa_reportTrafficView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Assign Data to templates + + $this->body->set('headline', 'Traffic Sources'); + $this->body->set('keywords', $data['top_keywords']); + $this->body->set('anchors', $data['top_anchors']); + $this->body->set('domains', $data['top_hosts']); + $this->body->set('referers', $data['top_referers']); + $this->body->set('se_hosts', $data['top_search_engines']); + $this->body->set('sessions', $data['session_count']); + $this->body->set('from_feeds', $data['from_feeds']); + $this->body->set('from_sites', $data['from_sites']); + $this->body->set('from_direct', $data['from_direct']); + $this->body->set('from_se', $data['from_se']); + + $this->body->set_template('report_traffic.tpl'); + + $this->body->set('headline', 'Traffic Sources Report'); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/reportVisit.php b/modules/base/reportVisit.php new file mode 100644 index 000000000..56edd7914 --- /dev/null +++ b/modules/base/reportVisit.php @@ -0,0 +1,133 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportVisitController extends owa_controller { + + function owa_reportVisitController($params) { + + $this->owa_controller($params); + $this->priviledge_level = 'viewer'; + + return; + } + + function action() { + + // Load the core API + $api = &owa_coreAPI::singleton($this->params); + + $data = array(); + + $data['params'] = $this->params; + + $data['clickstream'] = $api->getMetric('base.clickstream', array( + + 'limit' => '50', + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'session_id' => $this->params['session_id'] + ) + )); + + $data['latest_visits'] = $api->getMetric('base.latestVisits', array( + + 'period' => 'all_time', + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'session.id' => $this->params['session_id'] + ), + + 'limit' => 1 + )); + + $data['view'] = 'base.report'; + $data['subview'] = 'base.reportVisit'; + + return $data; + + } + +} + +/** + * Visit Report View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportVisitView extends owa_view { + + function owa_reportVisitView() { + + $this->owa_view(); + $this->priviledge_level = 'viewer'; + + return; + } + + function construct($data) { + + // Assign data to templates + + $this->body->set_template('report_visit.tpl'); + + $this->body->set('headline', 'Visit Report'); + + //$this->body->set('config', $this->config); + + //$this->body->set('params', $data); + + $this->body->set('session_id', $data['params']['session_id']); + + $this->body->set('visits', $data['latest_visits']); + + $this->body->set('clickstream', $data['clickstream']); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/reportVisitor.php b/modules/base/reportVisitor.php new file mode 100644 index 000000000..91c6db644 --- /dev/null +++ b/modules/base/reportVisitor.php @@ -0,0 +1,116 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportVisitorController extends owa_controller { + + function owa_reportVisitorController($params) { + + $this->owa_controller($params); + $this->priviledge_level = 'viewer'; + + return; + } + + function action() { + + $data = array(); + $data['params'] = $this->params; + + // Load the core API + $api = &owa_coreAPI::singleton($this->params); + + $data['latest_visits'] = $api->getMetric('base.latestVisits', array( + + 'constraints' => array( + 'site_id' => $this->params['site_id'], + 'session.visitor_id' => $this->params['visitor_id']), + 'limit' => 10 + + )); + + $data['view'] = 'base.report'; + $data['subview'] = 'base.reportVisitor'; + + return $data; + + } + +} + +/** + * Visit Report View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportVisitorView extends owa_view { + + function owa_reportVisitorView() { + + $this->owa_view(); + $this->priviledge_level = 'guest'; + + return; + } + + function construct($data) { + + // Assign data to templates + + $this->body->set_template('report_visitor.tpl'); + + $this->body->set('headline', 'Visitor Report'); + + //$this->body->set('config', $this->config); + + //$this->body->set('params', $data); + + $this->body->set('visitor_id', $data['params']['visitor_id']); + + $this->body->set('visits', $data['latest_visits']); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/reportVisitors.php b/modules/base/reportVisitors.php new file mode 100644 index 000000000..1209d41bb --- /dev/null +++ b/modules/base/reportVisitors.php @@ -0,0 +1,110 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportVisitorsController extends owa_controller { + + function owa_reportVisitorsController($params) { + + $this->owa_controller($params); + $this->priviledge_level = 'viewer'; + + return; + } + + function action() { + + $data = array(); + $data['params'] = $this->params; + + // Load the core API + $api = &owa_coreAPI::singleton($this->params); + + $data['visitors_age'] = $api->getMetric('base.visitorsAge',array( + + 'period' => $this->params['period'], + 'constraints' => array('site_id' => $this->params['site_id']), + 'limit' => $this->params['limit'] + )); + + //print_r($data['visitors_age']); + + $data['view'] = 'base.report'; + $data['subview'] = 'base.reportVisitors'; + + return $data; + + } + +} + +/** + * Visitors Report View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_reportVisitorsView extends owa_view { + + function owa_reportVisitorsView() { + + $this->owa_view(); + $this->priviledge_level = 'viewer'; + + return; + } + + function construct($data) { + + // Assign data to templates + + $this->body->set_template('report_visitors.tpl'); + + $this->body->set('headline', 'Visitors Report'); + + $this->body->set('visitors_age', $data['visitors_age']); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/sites.php b/modules/base/sites.php new file mode 100644 index 000000000..4095a2880 --- /dev/null +++ b/modules/base/sites.php @@ -0,0 +1,66 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_sitesView extends owa_view { + + function owa_sitesView() { + + $this->owa_view(); + $this->priviledge_level = 'admin'; + + return; + } + + function construct() { + + //page title + $this->t->set('page_title', 'Sites Roster'); + + // load body template + $this->body->set_template('sites.tpl'); + + $this->body->set('headline', 'Web Sites Roster'); + + $site = new owa_site; + $sites = $site->getAllSites(); + $this->body->set('sites', $sites); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/sitesAdd.php b/modules/base/sitesAdd.php new file mode 100644 index 000000000..75dcb1bb0 --- /dev/null +++ b/modules/base/sitesAdd.php @@ -0,0 +1,134 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_sitesAddView extends owa_view { + + function owa_sitesAddView() { + + $this->owa_view(); + $this->priviledge_level = 'admin'; + + return; + } + + function construct($data) { + + //page title + $this->t->set('page_title', 'Add Web Site'); + $this->body->set('headline', 'Add Web Site Profile'); + // load body template + $this->body->set_template('sites_addoredit.tpl'); + + $this->body->set('action', 'base.sitesAdd'); + + //Check to see if user is passed by constructor or else fetch the object. + if ($data['site']): + $this->body->set('site', $data['site']); + endif; + + return; + } + + +} + +/** + * Add Site Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_sitesAddController extends owa_controller { + + function owa_sitesAddController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'admin'; + } + + function action() { + + if (empty($this->params['domain'])): + $data['view_method'] = 'delegate'; // Delegate, redirect + $data['view'] = 'base.install'; + $data['subview'] = 'base.installDefaultSiteProfile'; + $data['error_msg'] = $this->getMsg(3307); + $data['site'] = $this->params; + + return $data; + + endif; + + $s = owa_coreAPI::entityFactory('base.site'); + $s->getByColumn('domain', $this->params['domain']); + $id = $s->get('id'); + + if(empty($id)): + + $site = owa_coreAPI::entityFactory('base.site'); + $site->set('site_id', owa_lib::setStringGuid($this->params['domain'])); + $site->set('name', $this->params['name']); + $site->set('domain', $this->params['domain']); + $site->set('description', $this->params['description']); + $site->set('site_family', $this->params['site_family']); + $site->create(); + + $data['view_method'] = 'redirect'; + $data['view'] = 'base.options'; + $data['subview'] = 'base.sites'; + $data['status_code'] = 3202; + + else: + + $data['view_method'] = 'delegate'; + $data['view'] = 'base.options'; + $data['subview'] = 'base.sitesAdd'; + $data['error_msg'] = $this->getMsg(3206); + $data['site'] = $this->params; + + endif; + + return $data; + } + +} + + +?> \ No newline at end of file diff --git a/modules/base/sitesDelete.php b/modules/base/sitesDelete.php new file mode 100644 index 000000000..5f51e30cd --- /dev/null +++ b/modules/base/sitesDelete.php @@ -0,0 +1,57 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_sitesDeleteController extends owa_controller { + + function owa_siteDeleteController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'admin'; + } + + function action() { + + $site = owa_coreAPI::entityFactory('base.site'); + $site->delete($this->params['site_id'], 'site_id'); + + $data['view_method'] = 'redirect'; + $data['view'] = 'base.options'; + $data['subview'] = 'base.sites'; + $data['status_code'] = 3204; + + return $data; + } + +} + + +?> \ No newline at end of file diff --git a/modules/base/sitesEdit.php b/modules/base/sitesEdit.php new file mode 100644 index 000000000..a405fc05a --- /dev/null +++ b/modules/base/sitesEdit.php @@ -0,0 +1,118 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_sitesEditView extends owa_view { + + function owa_sitesEditView($params) { + + $this->owa_view($params); + $this->priviledge_level = 'admin'; + + return; + } + + function construct($data) { + + //page title + $this->t->set('page_title', 'Edit Web Site'); + $this->body->set('headline', 'Edit Web Site Profile'); + // load body template + $this->body->set_template('sites_addoredit.tpl'); + + $this->body->set('action', 'base.sitesEdit'); + + //Check to see if user is passed by constructor or else fetch the object. + if ($data['sites']): + $this->body->set('site', $data['site']); + else: + $site = new owa_site; + $site->getSiteByPK($data['site_id']); + $this->body->set('site', get_object_vars($site)); + + endif; + + return; + } + + +} + +/** + * Edit User Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_sitesEditController extends owa_controller { + + function owa_sitesEditController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'admin'; + } + + function action() { + + // This needs form validation in a bad way. + + $site = owa_coreAPI::entityFactory('base.site'); + $site->set('id', $this->params['site_id']); + $site->set('name', $this->params['name']); + $site->set('domain', $this->params['domain']); + $site->set('description', $this->params['description']); + $site->update(); + + $data['view_method'] = 'redirect'; + $data['view'] = 'base.options'; + $data['subview'] = 'base.sites'; + $data['status_code'] = 3201; + //assign original form data so the user does not have to re-enter the data + + + //$data['site'] = $this->params; + + + return $data; + } + +} + + +?> \ No newline at end of file diff --git a/modules/base/sitesInvocation.php b/modules/base/sitesInvocation.php new file mode 100644 index 000000000..5f63c1bfa --- /dev/null +++ b/modules/base/sitesInvocation.php @@ -0,0 +1,58 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + + +class owa_sitesInvocationView extends owa_view { + + function owa_sitesInvocationView() { + + $this->owa_view(); + $this->priviledge_level = 'admin'; + + return; + } + + function construct($data) { + + //page title + $this->t->set('page_title', 'Web Site Tracking Instructions'); + $this->body->set('headline', 'How to Start Tracking This Web Site'); + // load body template + $this->body->set_template('sites_invocation.tpl'); + + $this->body->set('site_id', $data['site_id']); + + return; + } + + +} + +?> \ No newline at end of file diff --git a/modules/base/templates/css.tpl b/modules/base/templates/css.tpl new file mode 100644 index 000000000..5ad038558 --- /dev/null +++ b/modules/base/templates/css.tpl @@ -0,0 +1,93 @@ + \ No newline at end of file diff --git a/modules/base/templates/generic_error.tpl b/modules/base/templates/generic_error.tpl new file mode 100644 index 000000000..9aa0d5c5a --- /dev/null +++ b/modules/base/templates/generic_error.tpl @@ -0,0 +1 @@ +
    diff --git a/modules/base/templates/header.tpl b/modules/base/templates/header.tpl new file mode 100644 index 000000000..ebe12f02b --- /dev/null +++ b/modules/base/templates/header.tpl @@ -0,0 +1,26 @@ + + + + + +

    Open Web Analytics

    +
    + + + + + + + + + + +
    Admin Options|Help|Bug Report| + + Logout + + Login + +
    +
    +
    \ No newline at end of file diff --git a/modules/base/templates/install.tpl b/modules/base/templates/install.tpl new file mode 100644 index 000000000..ea64066f9 --- /dev/null +++ b/modules/base/templates/install.tpl @@ -0,0 +1,32 @@ + + + + + + + + + + + + + +
    + +
    +

    The OWA installation wizard will guide you through the processing of settig up OWA on your server. You will need to have access to your email to complete the installation.

    +
    diff --git a/modules/base/templates/install_check_env.tpl b/modules/base/templates/install_check_env.tpl new file mode 100644 index 000000000..7cdca9ab7 --- /dev/null +++ b/modules/base/templates/install_check_env.tpl @@ -0,0 +1,53 @@ +
    + +
    + + Server Environment + + + + + + + + + + + + + + + + + + + + + +
    PHP Version +
    Database Connection + +
    Socket Connections + +
    Log Directory Permissions +
    + +

    + + + + + + Please resolve these environment issues and then try this installation again. + + + +
    \ No newline at end of file diff --git a/modules/base/templates/install_default_user.tpl b/modules/base/templates/install_default_user.tpl new file mode 100644 index 000000000..25b125f91 --- /dev/null +++ b/modules/base/templates/install_default_user.tpl @@ -0,0 +1,45 @@ +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    User Namedisabled size="30" name="getNs();?>user_id" value="">
    Real Name
    E-mail Address
    OptionsDelete User
    + + + +
    + +
    diff --git a/modules/base/templates/install_finish.tpl b/modules/base/templates/install_finish.tpl new file mode 100644 index 000000000..c9b6a0ea4 --- /dev/null +++ b/modules/base/templates/install_finish.tpl @@ -0,0 +1,19 @@ +
    + +
    + +

    Installation Complete (you made it).

    + +

    But...

    + +

    Before you can start tracking anything you must...

    + +

    1. Set Your Admin User Password

    + + An e-mail containing instructions on how to do this has been sent to the address that you registered with. + +

    2. Place Javascript Tracking Tags or Use the PHP API

    + + + +
    \ No newline at end of file diff --git a/modules/base/templates/install_schema_detected.tpl b/modules/base/templates/install_schema_detected.tpl new file mode 100644 index 000000000..1df113c87 --- /dev/null +++ b/modules/base/templates/install_schema_detected.tpl @@ -0,0 +1,9 @@ +
    + +
    + +

    OWA is already installed...

    + + To re-install OWA, drop all owa_ tables and visit this page again. + +
    \ No newline at end of file diff --git a/modules/base/templates/install_start.tpl b/modules/base/templates/install_start.tpl new file mode 100644 index 000000000..d1fd319fd --- /dev/null +++ b/modules/base/templates/install_start.tpl @@ -0,0 +1,14 @@ +
    + +

    + + The next few screens will guide you through installing and configuraing the Open Web Analytics framework. If at any time you + need help, please consult the config['wiki_url'];?>>OWA Wiki. +

    + + + +
    + \ No newline at end of file diff --git a/modules/base/templates/invocation.tpl b/modules/base/templates/invocation.tpl new file mode 100644 index 000000000..f36ff754e --- /dev/null +++ b/modules/base/templates/invocation.tpl @@ -0,0 +1,28 @@ +
    + Javascript + +

    Cut and paste this tracking tag into the HTML of your web pages. For more information on to invoke OWA from within your PHP script, visit the this page on the OWA Wiki.

    + + + +
    + +
    + PHP +

    Invoke OWA from within your PHP script, add the following code to your script/application. For more information on to invoke OWA from within your PHP, visit the this page on the OWA Wiki.

    + +
    +
    
    +		require_once('/PATH/TO/OWA/FOLDER/owa_php.php');
    +		
    +		$config['site_id'] = '';
    +		$owa = new owa_php($config);
    +		$owa->log();
    +		
    +
    +
    + diff --git a/modules/base/templates/js_helper_tags.tpl b/modules/base/templates/js_helper_tags.tpl new file mode 100644 index 000000000..d9b376770 --- /dev/null +++ b/modules/base/templates/js_helper_tags.tpl @@ -0,0 +1,14 @@ + + + + + + + + + +
    + + \ No newline at end of file diff --git a/modules/base/templates/js_log_lib.tpl b/modules/base/templates/js_log_lib.tpl new file mode 100644 index 000000000..e5d331dfe --- /dev/null +++ b/modules/base/templates/js_log_lib.tpl @@ -0,0 +1,419 @@ +// +// Open Web Analytics - An Open Source Web Analytics Framework +// +// Copyright 2006 Peter Adams. All rights reserved. +// +// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// $Id$ +// + +/** + * Javascript Tracking Library + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +var OWA = {} + +OWA.log = function() { + + this.id = ''; +} + +OWA.log.prototype = { + + // private method for issuing logging request + _makeAjaxRequest : function (properties) { + + var bug + var get + var init + + url = this._assembleRequestUrl(properties); + + if (window.XMLHttpRequest){ + + // If IE7, Mozilla, Safari, etc: Use native object + var ajax = new XMLHttpRequest() + + } + + else { + + if (window.ActiveXObject){ + + // ...otherwise, use the ActiveX control for IE5.x and IE6 + var ajax = new ActiveXObject("Microsoft.XMLHTTP"); + } + + } + + + ajax.open("GET", url, false); + ajax.send(null); + + // Uninitialize variable. + init = null; + + return; + }, + + // private method for issuing logging request + _makeRequest : function (properties) { + + var bug + var url + + url = this._assembleRequestUrl(properties); + + bug = ""; + + document.write(bug); + + return; + }, + + _assembleRequestUrl : function(properties) { + + var get + var log_url + + get = ''; + + log_url = 'makeAbsoluteLink('', $this->config['log_url']);?>'; + + //assemble query string + for(param in properties) { // print out the params + + + value = ''; + + if (typeof properties[param] != 'undefined') { + + value = Url.encode(this._base64_encode(properties[param]+'')); + + }else { + + value = ''; + + } + + get = get + "owa_" + param + "=" + value + "&"; + } + + // add some radomness for cache busting + return log_url + get + Math.round(100*Math.random()); + + }, + + _base64_encode : function(decStr) { + + var base64s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var bits; + var dual; + var i = 0; + var encOut = ''; + + while(decStr.length >= i + 3) { + bits = (decStr.charCodeAt(i++) & 0xff) <<16 | + (decStr.charCodeAt(i++) & 0xff) <<8 | + decStr.charCodeAt(i++) & 0xff; + + encOut += base64s.charAt((bits & 0x00fc0000) >>18) + + base64s.charAt((bits & 0x0003f000) >>12) + + base64s.charAt((bits & 0x00000fc0) >> 6) + + base64s.charAt((bits & 0x0000003f)); + } + + if(decStr.length -i > 0 && decStr.length -i < 3) { + dual = Boolean(decStr.length -i -1); + + bits = ((decStr.charCodeAt(i++) & 0xff) <<16) | + (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0); + + encOut += base64s.charAt((bits & 0x00fc0000) >>18) + + base64s.charAt((bits & 0x0003f000) >>12) + + (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') + + '='; + } + + return(encOut); + } + +} + +// OWA Page View object ///////////////////////////////////// + +OWA.pageView = function(caller_params) { + + this.properties = new Object(); + + for(param in caller_params) { // print out the params + + this.properties[param] = caller_params[param]; + + } + + this._setProperties(); + + return; +}; + +OWA.pageView.prototype = { + + // public method for setting logging request properties + _setProperties : function () { + + this.properties["event"] = "base.page_request"; + this.properties["action"] = "base.processRequest"; + + if (typeof this.properties["page_uri"] == 'undefined') { + this.properties["page_url"] = document.URL; + } + if (typeof this.properties["page_title"] == 'undefined') { + this.properties["page_title"] = document.title; + } + + if (typeof this.properties["referer"] == 'undefined') { + this.properties["referer"] = document.referer; + } + + return; + }, + + log : function() { + + logger = new OWA.log; + return logger._makeRequest(this.properties); + + }, + +} + + + +// OWA click object ///////////////////////////////////////// + +/** + * Constructor of the click object + * + * @param e Event Object + */ +OWA.click = function(caller_params) { + + this.properties = new Object(); + + for(param in caller_params) { // print out the params + + this.properties[param] = caller_params[param]; + + } + + this.e = ''; + + return; + +}; + +OWA.click.prototype = { + + properties : new Object, + + e : '', + + init: 0, + + + /** + * Sets all properties of the click object + * + * @param e Event Object + */ + setProperties : function(e) { + + + this.e = e; + this.properties["event"] = "base.click"; + this.properties["action"] = "base.processEvent"; + this._setTarget(); + this._setTagName(); + this._setCoords(); + this.properties["dom_element_name"] = this.targ.name; + this.properties["dom_element_value"] = this.targ.value; + this.properties["dom_element_id"] = this.targ.id; + this.properties["page_url"] = window.location.href; + this.init = 1; + + return true; + }, + + log : function() { + + //alert(this.properties["site_id"]); + //alert("hello from click.log"); + + if (this.init == 1) { + + var logger + + logger = new OWA.log; + logger._makeAjaxRequest(this.properties); + } + + this.init = 0; + return; + + }, + + /** + * Sets coordinates of where in the browser the user clicked + * + */ + _setCoords : function() { + + var windowWidth = window.innerWidth ? window.innerWidth : document.body.offsetWidth; + var windowHeight = window.innerHeight ? window.innerHeight : document.body.offsetHeight; + + if( typeof( this.e.pageX ) == 'number' ) { + + this.properties["click_x"] = this.e.pageX + ''; + this.properties["click_y"] = this.e.pageY + ''; + } + else { + + this.properties["click_x"] = this.e.clientX + ''; + this.properties["click_y"] = this.e.clientY + ''; + } + + this.properties["dom_element_x"] = this._findPosX(this.targ) + ''; + this.properties["dom_element_y"] = this._findPosY(this.targ) + ''; + this.properties["page_width"] = windowWidth + ''; + this.properties["page_height"] = windowHeight + ''; + + return; + }, + + /** + * Sets the X coordinate of where in the browser the user clicked + * + */ + _findPosX : function(obj) { + + var curleft = 0; + if (obj.offsetParent) + { + while (obj.offsetParent) + { + curleft += obj.offsetLeft + obj = obj.offsetParent; + } + } + else if (obj.x) + curleft += obj.x; + return curleft; + }, + + /** + * Sets the Y coordinates of where in the browser the user clicked + * + */ + _findPosY : function(obj) { + + var curtop = 0; + if (obj.offsetParent) + { + while (obj.offsetParent) + { + curtop += obj.offsetTop + obj = obj.offsetParent; + } + } + else if (obj.y) + curtop += obj.y; + return curtop; + }, + + /** + * Sets the HTML element that actually generated the event + * + */ + _setTarget : function() { + + // Determine the actual html element that generated the event + if (this.e.target) { + this.targ = this.e.target; + + } else if (this.e.srcElement) { + this.targ = this.e.srcElement; + } + + if (this.targ.nodeType == 3) { + // defeat Safari bug + this.targ = target.parentNode; + } + + return; + }, + + /** + * Sets the tag name of html eleemnt that generated the event + */ + _setTagName : function() { + + // Set properties of the owa_click object. + this.properties["dom_element_tag"] = this.targ.tagName; + + if (this.properties["dom_element_tag"] == "A") { + + if (this.targ.textContent != undefined) { + this.properties["dom_element_text"] = this.targ.textContent; + } else { + this.properties["dom_element_text"] = this.targ.innerText; + } + + this.properties["target_url"] = this.targ.href; + + } + else if (this.properties["dom_element_tag"] == "INPUT") { + + this.properties["dom_element_text"] = this.targ.value; + } + + else if (this.properties["html_element_tag"] == "IMG") { + + this.properties["target_url"] = this.targ.parentNode.href; + this.properties["dom_element_text"] = this.targ.alt; + } + + else { + + this.properties["target_url"] = this.targ.parentNode.href; + + if (this.targ.textContent != undefined) { + this.properties["html_element_text"] = this.targ.textContent; + } else { + this.properties["html_element_text"] = this.targ.innerText; + } + } + + return; + }, + +} + + + + diff --git a/modules/base/templates/js_log_tag.tpl b/modules/base/templates/js_log_tag.tpl new file mode 100644 index 000000000..78349a0c7 --- /dev/null +++ b/modules/base/templates/js_log_tag.tpl @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/modules/base/templates/js_logger.tpl b/modules/base/templates/js_logger.tpl new file mode 100644 index 000000000..b13fe0fd0 --- /dev/null +++ b/modules/base/templates/js_logger.tpl @@ -0,0 +1,82 @@ + + +// +// Open Web Analytics - An Open Source Web Analytics Framework +// +// Copyright 2006 Peter Adams. All rights reserved. +// +// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// $Id$ +// + + + +/** + * Logs Page View + * + * Takes owa_param object which is defined by the logging tag. + * + * @param owa_params Object + */ +var owa_pv = new OWA.pageView(owa_params); +owa_pv.log(); + + + + + + + + + + + +/** + * Logs Click + * + * Takes owa_param object which is defined by the logging tag. + * + * @param owa_params Object + */ +//Log Clicks +var owa_click = new OWA.click(owa_params); + + +/** + * Helper function for setting properties o nthe cick object + * + * Takes a DOM event object + * + * @param e Object + */ +function owa_setClick(e) { + + owa_click.setProperties(e); + return; + +} + +/** + * Helper Function for calling the log method on the lick object + * + */ +function owa_logClick() { + + owa_click.log(); + return; +} + +// Registers the handler for the on.click event so that click properties can be set +document.onclick = owa_setClick; + +// Registers the handler for the beforenavigate event so that the click can be logged +window.addEventListener('beforeunload', owa_logClick, false); + + \ No newline at end of file diff --git a/modules/base/templates/js_owa_params.tpl b/modules/base/templates/js_owa_params.tpl new file mode 100644 index 000000000..2dbdf2407 --- /dev/null +++ b/modules/base/templates/js_owa_params.tpl @@ -0,0 +1,2 @@ +var owa_params = new Object(); +owa_params["site_id"] = ""; diff --git a/modules/base/templates/js_url_encode_lib.tpl b/modules/base/templates/js_url_encode_lib.tpl new file mode 100644 index 000000000..b9eda3ed7 --- /dev/null +++ b/modules/base/templates/js_url_encode_lib.tpl @@ -0,0 +1,78 @@ +/** +* +* URL encode / decode +* http://www.webtoolkit.info/ +* +**/ + +var Url = { + + // public method for url encoding + encode : function (string) { + return escape(this._utf8_encode(string)); + }, + + // public method for url decoding + decode : function (string) { + return this._utf8_decode(unescape(string)); + }, + + // private method for UTF-8 encoding + _utf8_encode : function (string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; + }, + + // private method for UTF-8 decoding + _utf8_decode : function (utftext) { + var string = ""; + var i = 0; + var c = c1 = c2 = 0; + + while ( i < utftext.length ) { + + c = utftext.charCodeAt(i); + + if (c < 128) { + string += String.fromCharCode(c); + i++; + } + else if((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i+1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } + else { + c2 = utftext.charCodeAt(i+1); + c3 = utftext.charCodeAt(i+2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + + } + + return string; + } + +} \ No newline at end of file diff --git a/modules/base/templates/login_form.tpl b/modules/base/templates/login_form.tpl new file mode 100644 index 000000000..fac5a68fa --- /dev/null +++ b/modules/base/templates/login_form.tpl @@ -0,0 +1,42 @@ + + +

    + +
    +
    + +
    + Login + + + + + + + + + + + + + + + + + + + + + +
    User Name:
    Password:
    + + +
    +
    Forgot your password? +
    + +
    + +
    + +
    \ No newline at end of file diff --git a/modules/base/templates/msgs.tpl b/modules/base/templates/msgs.tpl new file mode 100644 index 000000000..d8133504d --- /dev/null +++ b/modules/base/templates/msgs.tpl @@ -0,0 +1,7 @@ + +
    + + + +
    + \ No newline at end of file diff --git a/modules/base/templates/new_session_email.tpl b/modules/base/templates/new_session_email.tpl new file mode 100644 index 000000000..f918625b7 --- /dev/null +++ b/modules/base/templates/new_session_email.tpl @@ -0,0 +1,8 @@ + +

    New Visit to from:

    + + Visitor:
    + Email or Username: |
    + Host:
    + City/Country:
    + Entry page: ()
    diff --git a/modules/base/templates/new_session_email_plain_text.tpl b/modules/base/templates/new_session_email_plain_text.tpl new file mode 100644 index 000000000..7f06943d8 --- /dev/null +++ b/modules/base/templates/new_session_email_plain_text.tpl @@ -0,0 +1,7 @@ +New Visit to from: + +Visitor: +Email or Username: | +Host: +City/Country: +Entry page: () diff --git a/modules/base/templates/news.tpl b/modules/base/templates/news.tpl new file mode 100644 index 000000000..8a0430df6 --- /dev/null +++ b/modules/base/templates/news.tpl @@ -0,0 +1,20 @@ + + + $value): ?> + + + + + + + + + +
    + : + + +
    + +
    + \ No newline at end of file diff --git a/modules/base/templates/options.tpl b/modules/base/templates/options.tpl new file mode 100644 index 000000000..2af5abfbf --- /dev/null +++ b/modules/base/templates/options.tpl @@ -0,0 +1,36 @@ + +
    + News + +
    + +
    + + + + + + + + + + + + + +
    + +
    +

    Open Web Analytics has several configuraion options that can be set using the controls below. Once changes are made click the save button to save the configuration to the database. To learn more about configuring OWA, visit the OWA Wiki

    +
    diff --git a/modules/base/templates/options_db.tpl b/modules/base/templates/options_db.tpl new file mode 100644 index 000000000..65ace4c53 --- /dev/null +++ b/modules/base/templates/options_db.tpl @@ -0,0 +1,54 @@ +

    + +
    + +
    + Database Options + + + +
    + Asynchronous Event Handling Mode: + +
    + +
    + + Event Log File Directory:
    + +
    + +
    + + Event Log File Name:
    + +
    + +
    + +
    + + + + +
    + \ No newline at end of file diff --git a/modules/base/templates/options_errors.tpl b/modules/base/templates/options_errors.tpl new file mode 100644 index 000000000..684f7253c --- /dev/null +++ b/modules/base/templates/options_errors.tpl @@ -0,0 +1,24 @@ +

    + +
    + +
    + Error Logging + +
    + Logging Mode: + + +
    + +
    + + + +
    \ No newline at end of file diff --git a/modules/base/templates/options_general.tpl b/modules/base/templates/options_general.tpl new file mode 100644 index 000000000..5a5cd19b7 --- /dev/null +++ b/modules/base/templates/options_general.tpl @@ -0,0 +1,184 @@ +
    +
    +
    + +
    + Request Processing Options + +
    + Resolve Host Names: + +
    + +
    + Log Requests from Feed Readers: + +
    + +
    + Log Requests from Known Robots: + +
    + +
    + Announce New Visitors via E-mail: + +
    + +
    + + Notice Email Address:
    + +
    + +
    + +
    + +
    + Geo-location + +
    + + Perform Geo-location Lookup: + +
    +
    + Geolocation Service: + + +
    + +
    + + +
    + +
    + Event Handling + + + +
    + Asynchronous Event Handling Mode: + +
    + +
    + + Event Log File Directory:
    + +
    + +
    + + Event Log File Name:
    + +
    + +
    + +
    + +
    + Error Logging + +
    + Logging Mode: + + +
    + +
    + +
    + +
    + Reporting + +
    + + Reporting Wrapper:
    + +
    + +
    + +
    + + + + + +
    +
    \ No newline at end of file diff --git a/modules/base/templates/options_reporting.tpl b/modules/base/templates/options_reporting.tpl new file mode 100644 index 000000000..b28030246 --- /dev/null +++ b/modules/base/templates/options_reporting.tpl @@ -0,0 +1,18 @@ +

    + +
    + +
    + Reporting + +
    + + Reporting Wrapper:
    + +
    + +
    + + + +
    \ No newline at end of file diff --git a/modules/base/templates/options_request_processing.tpl b/modules/base/templates/options_request_processing.tpl new file mode 100644 index 000000000..732a5302f --- /dev/null +++ b/modules/base/templates/options_request_processing.tpl @@ -0,0 +1,99 @@ +

    + +
    + +
    + Request Processing Options + +
    + Resolve Host Names: + +
    + +
    + Log Requests from Feed Readers: + +
    + +
    + Log Requests from Known Robots: + +
    + +
    + Announce New Visitors via E-mail: + +
    + +
    + + Notice Email Address:
    + +
    + +
    + +
    + Geo-location Options + +
    + + Perform Geo-location Lookup: + +
    +
    + Geolocation Service: + + +
    + +
    + + + +
    \ No newline at end of file diff --git a/modules/base/templates/pixel.tpl b/modules/base/templates/pixel.tpl new file mode 100644 index 000000000..5bf90630a --- /dev/null +++ b/modules/base/templates/pixel.tpl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/base/templates/report.tpl b/modules/base/templates/report.tpl new file mode 100644 index 000000000..221c22f00 --- /dev/null +++ b/modules/base/templates/report.tpl @@ -0,0 +1,8 @@ + + +
    + Report Filters + +
    + + \ No newline at end of file diff --git a/modules/base/templates/report_anchors.tpl b/modules/base/templates/report_anchors.tpl new file mode 100644 index 000000000..9cd87b047 --- /dev/null +++ b/modules/base/templates/report_anchors.tpl @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + +
    Anchor TextVisits
    + + There are no refering anchors for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_browser_types.tpl b/modules/base/templates/report_browser_types.tpl new file mode 100644 index 000000000..8d83da6d2 --- /dev/null +++ b/modules/base/templates/report_browser_types.tpl @@ -0,0 +1,32 @@ + + + + + + + + + $type): ?> + + + + + + + + + +
    BrowserVisits
    + choose_browser_icon($type['browser_type']);?> + + + Unknown Browser + + + + + +
    + + There are no browsers for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_clicks.tpl b/modules/base/templates/report_clicks.tpl new file mode 100644 index 000000000..74af301f2 --- /dev/null +++ b/modules/base/templates/report_clicks.tpl @@ -0,0 +1,67 @@ + + + +

    for

    + +
    + Document Details + +
    + +
    + + + +
    + + + diff --git a/modules/base/templates/report_content.tpl b/modules/base/templates/report_content.tpl new file mode 100644 index 000000000..8f7c08dfe --- /dev/null +++ b/modules/base/templates/report_content.tpl @@ -0,0 +1,37 @@ +

    + + + + + + +
    +
    + Most Popular Web Pages + +
    +
    +
    + Pages Types + +
    +
    + + + + + + +
    +
    + Top Entry pages + +
    +
    +
    + Top Exit pages + +
    +
    + + diff --git a/modules/base/templates/report_dashboard.tpl b/modules/base/templates/report_dashboard.tpl new file mode 100644 index 000000000..98ed61210 --- /dev/null +++ b/modules/base/templates/report_dashboard.tpl @@ -0,0 +1,84 @@ + + + +

    for

    + + + + + + + +
    +
    + Summary + +
    + +
    + Visitor Types + +
    + +
    + Visitor Sources + +
    + +
    +
    + Top Pages + +
    +
    + +
    +
    + Top Referering Web Pages + +
    +
    + +
    +
    + Top Visitors + +
    +
    + +
    +
    + Browser Types + +
    +
    + +
    +
    + 30 Day Trend + +
    + +
    + Core Metrics + +
    + +
    +
    + Recent Visitors + +
    +
    +
    diff --git a/modules/base/templates/report_dashboard_core_metrics.tpl b/modules/base/templates/report_dashboard_core_metrics.tpl new file mode 100644 index 000000000..c9c6a3cad --- /dev/null +++ b/modules/base/templates/report_dashboard_core_metrics.tpl @@ -0,0 +1,44 @@ + +There are no metrics yet for this time period. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MonthYearMonthDayYearPage ViewsVisitsUnique Visitors
    + + get_month_label($row['month']);?> + + get_month_label($row['month']);?> + + + +
    + \ No newline at end of file diff --git a/modules/base/templates/report_dashboard_summary_stats.tpl b/modules/base/templates/report_dashboard_summary_stats.tpl new file mode 100644 index 000000000..d7d769c3e --- /dev/null +++ b/modules/base/templates/report_dashboard_summary_stats.tpl @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + +
    Page Views:
    Visits:
    New Visitors:
    Repeat Visitors:
    Unique Visitors:
    + + There are no statistics for this time period. + + diff --git a/modules/base/templates/report_document.tpl b/modules/base/templates/report_document.tpl new file mode 100644 index 000000000..b9bc4cb2e --- /dev/null +++ b/modules/base/templates/report_document.tpl @@ -0,0 +1,35 @@ +

    for

    + + + +
    + + + + + + +
    +
    + Document Details + +
    +
    + Top Referers + +
    + +
    +
    + Summary Stats + +
    + +
    + Core Metrics + +
    +
    + \ No newline at end of file diff --git a/modules/base/templates/report_document_core_metrics.tpl b/modules/base/templates/report_document_core_metrics.tpl new file mode 100644 index 000000000..1d7b02736 --- /dev/null +++ b/modules/base/templates/report_document_core_metrics.tpl @@ -0,0 +1,42 @@ + +There are no metrics yet for this time period. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MonthMonthDayYearPage ViewsVisitsUnique Visitors
    + + get_month_label($row['month']);?> + + get_month_label($row['month']);?> + + + +
    + \ No newline at end of file diff --git a/modules/base/templates/report_document_detail.tpl b/modules/base/templates/report_document_detail.tpl new file mode 100644 index 000000000..0c4bdc377 --- /dev/null +++ b/modules/base/templates/report_document_detail.tpl @@ -0,0 +1,14 @@ + + + + + + + + + + + + + +
    Title
    URL:
    Page Type:
    diff --git a/modules/base/templates/report_document_summary_stats.tpl b/modules/base/templates/report_document_summary_stats.tpl new file mode 100644 index 000000000..e1a8e4b92 --- /dev/null +++ b/modules/base/templates/report_document_summary_stats.tpl @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + +
    Page Views:
    Visits:
    Unique Visitors:
    + + There are no statistics for this time period. + + diff --git a/modules/base/templates/report_feed_core_metrics.tpl b/modules/base/templates/report_feed_core_metrics.tpl new file mode 100644 index 000000000..9be5ff686 --- /dev/null +++ b/modules/base/templates/report_feed_core_metrics.tpl @@ -0,0 +1,35 @@ + +There are no metrics yet for this time period. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MonthYearMonthDayYearFeed FetchesUnique Readers
    + get_month_label($row['month']);?> + get_month_label($row['month']);?>
    + \ No newline at end of file diff --git a/modules/base/templates/report_feeds.tpl b/modules/base/templates/report_feeds.tpl new file mode 100644 index 000000000..3bd307a2e --- /dev/null +++ b/modules/base/templates/report_feeds.tpl @@ -0,0 +1,39 @@ + + +

    for

    + + + + + + + +
    + + +
    + Core Metrics + +
    +
    +
    + Feed Readers + +
    + +
    + Feed Formats + +
    + +
    + \ No newline at end of file diff --git a/modules/base/templates/report_hosts.tpl b/modules/base/templates/report_hosts.tpl new file mode 100644 index 000000000..0b854d981 --- /dev/null +++ b/modules/base/templates/report_hosts.tpl @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + +
    DomainVisits
    + + There are no refering domains for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_latest_visits.tpl b/modules/base/templates/report_latest_visits.tpl new file mode 100644 index 000000000..596596e2e --- /dev/null +++ b/modules/base/templates/report_latest_visits.tpl @@ -0,0 +1,96 @@ + + + +
    +
    + + / @ at : | + - , + choose_browser_icon($visit['ua_browser_type']);?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Visitor + + + + - + + New Visitor + + Returning Visitor (Last visit was + + day ago. + + days ago. + + ) + + +
    + +
    + Pages +
    +
    + + +
    +
    +
    + + +
    + Entry Page + + () +
    + + Refering URL + + truncate($visit['referer_page_title'], 80, '...');?> truncate($visit['referer_url'], 35, '...');?>truncate($visit['referer_url'], 50, '...');?> +
    + +
    + +
    +
    + + + + + There were no visits during this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_nav.tpl b/modules/base/templates/report_nav.tpl new file mode 100644 index 000000000..ec1238567 --- /dev/null +++ b/modules/base/templates/report_nav.tpl @@ -0,0 +1,16 @@ +
    + + + + + + + + + + + + +
    +
    + diff --git a/modules/base/templates/report_period_filters.tpl b/modules/base/templates/report_period_filters.tpl new file mode 100644 index 000000000..476e346bc --- /dev/null +++ b/modules/base/templates/report_period_filters.tpl @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + +
    SiteReporting Period
    +
    + +
    +
    + + + + + + + + + + + + +
    + CHECKED> + Time Period:
    + +
    +
    + CHECKED> + Date Period: +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + + + +
    MonthDayYear
    + + + + + + +
    +
    + +
    + + + + + + + + + + + + +
    MonthYear
    + + + +
    +
    + +
    + + + + + + + + + + +
    Year
    + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Start MonthStart DayStart YearEnd MonthEnd DayEnd Year
    + + + + + + + to + + + + + + +
    +
    + +
    + + + diff --git a/modules/base/templates/report_referers.tpl b/modules/base/templates/report_referers.tpl new file mode 100644 index 000000000..02012cdb6 --- /dev/null +++ b/modules/base/templates/report_referers.tpl @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + +
    ReferersVisitsPage Views
    + + + + + + + + + +
    +
    + truncate($referer['url'], 80);?>
    +
    +
    + Visits +
    +
    +
    +
    + Pages +
    +
    + + There are no refering web pages for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_se_hosts.tpl b/modules/base/templates/report_se_hosts.tpl new file mode 100644 index 000000000..0370618b3 --- /dev/null +++ b/modules/base/templates/report_se_hosts.tpl @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + +
    Search EngineVisits
    + () + + + +
    + + There are no refering search engines for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_top_entry_pages.tpl b/modules/base/templates/report_top_entry_pages.tpl new file mode 100644 index 000000000..d371ebd87 --- /dev/null +++ b/modules/base/templates/report_top_entry_pages.tpl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + +
    PageTitleViews
    + ()
    + + There are no Page Views for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_top_exit_pages.tpl b/modules/base/templates/report_top_exit_pages.tpl new file mode 100644 index 000000000..a9c09b28e --- /dev/null +++ b/modules/base/templates/report_top_exit_pages.tpl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + +
    PageTitleViews
    + ()
    + + There are no Page Views for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_top_keywords.tpl b/modules/base/templates/report_top_keywords.tpl new file mode 100644 index 000000000..84786fc5d --- /dev/null +++ b/modules/base/templates/report_top_keywords.tpl @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + +
    KeywordVisits
    + + There are no Keywords for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_top_pages.tpl b/modules/base/templates/report_top_pages.tpl new file mode 100644 index 000000000..e3569ac09 --- /dev/null +++ b/modules/base/templates/report_top_pages.tpl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + +
    PageTitleViews
    + ()
    + + There are no Page Views for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_top_referers.tpl b/modules/base/templates/report_top_referers.tpl new file mode 100644 index 000000000..fdf87249b --- /dev/null +++ b/modules/base/templates/report_top_referers.tpl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + +
    Web Page TitleVisits
    truncate($referer['url'], 100, '...');?>
    + + There are no referering web pages for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_top_visitors.tpl b/modules/base/templates/report_top_visitors.tpl new file mode 100644 index 000000000..733f5caa0 --- /dev/null +++ b/modules/base/templates/report_top_visitors.tpl @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + +
    VisitorVisits
    + + + + + + + + + + + + + +
    + + There are no visitors for this time period. + \ No newline at end of file diff --git a/modules/base/templates/report_traffic.tpl b/modules/base/templates/report_traffic.tpl new file mode 100644 index 000000000..336377676 --- /dev/null +++ b/modules/base/templates/report_traffic.tpl @@ -0,0 +1,65 @@ + + +

    + + + + + + + +
    +
    + Summary + +
    + +
    + Top Link Text + +
    + +
    + Top Domains + +
    + +
    + +
    + Traffic From Web Pages + +
    + +
    + Traffic From Search Engines + + + + + + + +
    +
    + Top Search Engines + +
    +
    + +
    + Top Keywords + +
    + +
    +
    + +
    + + \ No newline at end of file diff --git a/modules/base/templates/report_traffic_summary_stats.tpl b/modules/base/templates/report_traffic_summary_stats.tpl new file mode 100644 index 000000000..405c94c32 --- /dev/null +++ b/modules/base/templates/report_traffic_summary_stats.tpl @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + +
    Total Visits:
    from Search Engines:
    from Web Pages:
    from Your Feeds:
    from Direct/Unknown:
    + + There are no statistics for this time period. + + diff --git a/modules/base/templates/report_visit.tpl b/modules/base/templates/report_visit.tpl new file mode 100644 index 000000000..c16026228 --- /dev/null +++ b/modules/base/templates/report_visit.tpl @@ -0,0 +1,31 @@ +

    + +
    + Visit Detail + + +
    + + +
    + Click-stream + +
    + + + + + + + + + + + +
    TimePage
    :: + ()
    + +
    +
    +
    + \ No newline at end of file diff --git a/modules/base/templates/report_visitor.tpl b/modules/base/templates/report_visitor.tpl new file mode 100644 index 000000000..334720665 --- /dev/null +++ b/modules/base/templates/report_visitor.tpl @@ -0,0 +1,10 @@ +

    + +
    + Recent Visits for Visitor: + + + +
    + + diff --git a/modules/base/templates/report_visitors.tpl b/modules/base/templates/report_visitors.tpl new file mode 100644 index 000000000..6d9cdbae3 --- /dev/null +++ b/modules/base/templates/report_visitors.tpl @@ -0,0 +1,6 @@ +

    + +
    + Age of Visitors - + +
    diff --git a/modules/base/templates/report_visitors_age.tpl b/modules/base/templates/report_visitors_age.tpl new file mode 100644 index 000000000..51f28fb79 --- /dev/null +++ b/modules/base/templates/report_visitors_age.tpl @@ -0,0 +1,19 @@ + + + + + + + + + + + + +
    Date of First VisitVisitors
    daysAgo(mktime(23, 59, 59,$row['first_session_month'], $row['first_session_day'], $row['first_session_year']) );?> (get_month_label($row['first_session_month']);?> ) + + +
    + +
    There are no visitors for this time period
    + \ No newline at end of file diff --git a/modules/base/templates/sites.tpl b/modules/base/templates/sites.tpl new file mode 100644 index 000000000..866fb7bef --- /dev/null +++ b/modules/base/templates/sites.tpl @@ -0,0 +1,38 @@ +
    +
    +

    Below is the list of Web Sites that can be tracked. A site must appear in this list +if it is to be tracked/reported seperately.

    + +
    + Tracked Web Sites (Add a Site) + + + + + + + + +$value):?> + + + + + + + + + + +
    Name & DescriptionSite FamilyOptions
    +
    +
    + +
    + Edit | + Delete | + Get Tags +
    + +
    +
    diff --git a/modules/base/templates/sites_addoredit.tpl b/modules/base/templates/sites_addoredit.tpl new file mode 100644 index 000000000..e555cda89 --- /dev/null +++ b/modules/base/templates/sites_addoredit.tpl @@ -0,0 +1,46 @@ +
    +
    +
    + + Add/Edit + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Site ID:
    Domain:
    Site Name:
    Description: + +
    + + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/modules/base/templates/sites_invocation.tpl b/modules/base/templates/sites_invocation.tpl new file mode 100644 index 000000000..6ec3327f0 --- /dev/null +++ b/modules/base/templates/sites_invocation.tpl @@ -0,0 +1,6 @@ +
    +
    +

    The Site ID for the web site is:

    + + +
    diff --git a/modules/base/templates/users.tpl b/modules/base/templates/users.tpl new file mode 100644 index 000000000..788d4e588 --- /dev/null +++ b/modules/base/templates/users.tpl @@ -0,0 +1,43 @@ +
    +
    +
    + + Users (Add New User) + + + + + + + + + + + + + + + + $value):?> + + + + + + + + + + + + + + + + + + +
    User IdReal NameRoleLast UpdatedOptions
    Edit | Delete
    There are no User Accounts.
    + +
    +
    \ No newline at end of file diff --git a/modules/base/templates/users_addoredit.tpl b/modules/base/templates/users_addoredit.tpl new file mode 100644 index 000000000..fed5d741b --- /dev/null +++ b/modules/base/templates/users_addoredit.tpl @@ -0,0 +1,56 @@ +
    +
    +
    + + User Profile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    User Namedisabled size="30" name="getNs();?>user_id" value="">
    Real Name
    Role + + + +
    E-mail Address
    OptionsDelete User
    + + +
    + +
    +
    \ No newline at end of file diff --git a/modules/base/templates/users_change_password.tpl b/modules/base/templates/users_change_password.tpl new file mode 100644 index 000000000..1b72414e6 --- /dev/null +++ b/modules/base/templates/users_change_password.tpl @@ -0,0 +1,36 @@ + + +
    + +
    +
    + +
    + Password Setup + + + + + + + + + + + + + + + + + + +
    New Password
    Re-type your Password
    + + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/modules/base/templates/users_new_account_email.tpl b/modules/base/templates/users_new_account_email.tpl new file mode 100644 index 000000000..94819985e --- /dev/null +++ b/modules/base/templates/users_new_account_email.tpl @@ -0,0 +1,11 @@ +An Open Web Analytics account has been created for you. + +Your User Name is: + +To login you need to set your password by clicking on the link below. + +makeAbsoluteLink(array('view' => 'base.usersChangePassword', 'k' => $key));?> + +Once your password has been setup you can login to OWA at the following URL: + +makeAbsoluteLink(array('view' => 'base.reportDashboard'));?> \ No newline at end of file diff --git a/modules/base/templates/users_password_reset_request.tpl b/modules/base/templates/users_password_reset_request.tpl new file mode 100644 index 000000000..2a1f0c468 --- /dev/null +++ b/modules/base/templates/users_password_reset_request.tpl @@ -0,0 +1,29 @@ + + +

    + +
    +
    + +
    + Password Request Form + + + + + + + + + + + +
    Your E-mail Address:
    + + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/modules/base/templates/users_reset_password_email.tpl b/modules/base/templates/users_reset_password_email.tpl new file mode 100644 index 000000000..7eb5a50f1 --- /dev/null +++ b/modules/base/templates/users_reset_password_email.tpl @@ -0,0 +1,6 @@ +Someone, hopefully you, has requested a reset of your Open Web Analytics account password. + +If this message was generated in error, please disregard. If not, please click on the link below +to complete the process. + +makeAbsoluteLink(array('view' => 'base.usersChangePassword', 'k' => $key)); diff --git a/modules/base/templates/users_set_password_email.tpl b/modules/base/templates/users_set_password_email.tpl new file mode 100644 index 000000000..ee55ce9f7 --- /dev/null +++ b/modules/base/templates/users_set_password_email.tpl @@ -0,0 +1 @@ +Your Open Web Analytics password was successfully changed on from IP address . diff --git a/modules/base/templates/wrapper_blank.tpl b/modules/base/templates/wrapper_blank.tpl new file mode 100644 index 000000000..bcb94db13 --- /dev/null +++ b/modules/base/templates/wrapper_blank.tpl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/base/templates/wrapper_default.tpl b/modules/base/templates/wrapper_default.tpl new file mode 100644 index 000000000..8d40b8b8c --- /dev/null +++ b/modules/base/templates/wrapper_default.tpl @@ -0,0 +1,30 @@ + + + + + + Open Web Analytics - <?=$page_title;?> + + + + + + + + +
    + +
    + + + + + +
    + + + \ No newline at end of file diff --git a/modules/base/templates/wrapper_email.tpl b/modules/base/templates/wrapper_email.tpl new file mode 100644 index 000000000..491b13eef --- /dev/null +++ b/modules/base/templates/wrapper_email.tpl @@ -0,0 +1,8 @@ + + + Open Web Analytics E-mail + + + + + \ No newline at end of file diff --git a/modules/base/templates/wrapper_public.tpl b/modules/base/templates/wrapper_public.tpl new file mode 100644 index 000000000..d22a930a1 --- /dev/null +++ b/modules/base/templates/wrapper_public.tpl @@ -0,0 +1,43 @@ + + + + + + Open Web Analytics - <?=$page_title;?> + + + + + + + + + + + + + + + +
    + Open Web Analytics - + + The Open Source Web Analytics Framework. +
    + +
    +
    + + + +
    + + + +
    + + + \ No newline at end of file diff --git a/modules/base/templates/wrapper_subview.tpl b/modules/base/templates/wrapper_subview.tpl new file mode 100644 index 000000000..bcb94db13 --- /dev/null +++ b/modules/base/templates/wrapper_subview.tpl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/base/templates/wrapper_wordpress.tpl b/modules/base/templates/wrapper_wordpress.tpl new file mode 100644 index 000000000..265edae40 --- /dev/null +++ b/modules/base/templates/wrapper_wordpress.tpl @@ -0,0 +1,8 @@ + + +
    + + + + +
    diff --git a/modules/base/users.php b/modules/base/users.php new file mode 100644 index 000000000..62a1ecb57 --- /dev/null +++ b/modules/base/users.php @@ -0,0 +1,71 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersView extends owa_view { + + function owa_usersView($params) { + + $this->owa_view($params); + $this->priviledge_level = 'admin'; + + return; + } + + function construct() { + + //page title + $this->t->set('page_title', 'User Roster'); + + // load body template + $this->body->set_template('users.tpl'); + + // fetch admin links from all modules + // + + $this->body->set('headline', 'User Roster'); + + $u = owa_coreAPI::entityFactory('base.user'); + $params['constraints']['creation_date'] = array('operator' => '!=', 'value' => '0'); + $users = $u->find($params); + + $this->body->set('users', $users); + + return; + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/usersAdd.php b/modules/base/usersAdd.php new file mode 100644 index 000000000..781d81790 --- /dev/null +++ b/modules/base/usersAdd.php @@ -0,0 +1,131 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersAddView extends owa_view { + + function owa_usersAddView($params) { + + $this->owa_view($params); + $this->priviledge_level = 'admin'; + + return; + } + + function construct($data) { + + //page title + $this->t->set('page_title', 'Add A User'); + $this->body->set('headline', 'Add A User'); + // load body template + $this->body->set_template('users_addoredit.tpl'); + $auth = &owa_auth::get_instance(); + $this->body->set('roles', $auth->roles); + $this->body->set('action', 'base.usersAdd'); + $this->body->set('user', $data['user']); + return; + } + + +} + +/** + * Add User Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersAddController extends owa_controller { + + function owa_usersAddController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'admin'; + } + + function action() { + + $u = new owa_user; + $auth = &owa_auth::get_instance(); + + //Check to see if user name already exists + $u->getByColumn('user_id', $this->params['user_id']); + + // data + $data = array(); + + $id = $u->get('id'); + // Set user object Params + if (empty($id)): + + //Generate Initial Passkey and new account email + $auth->setInitialPasskey($this->params['user_id']); + + // log account creation event to event queue + $eq = &eventQueue::get_instance(); + $eq->log(array( 'user_id' => $this->params['user_id'], + 'real_name' => $this->params['real_name'], + 'role' => $this->params['role'], + 'email_address' => $this->params['email_address']), + 'base.new_user_account'); + + // return view + $data['view_method'] = 'redirect'; + $data['view'] = 'base.options'; + $data['subview'] = 'base.users'; + $data['status_code'] = 3000; + + //Send user and back to form to pick a new user name. + else: + $data['view_method'] = 'delegate'; + $data['view'] = 'base.options'; + $data['subview'] = 'base.usersAdd'; + $data['error_msg'] = $this->getMsg(3001); + //assign original form data so the user does not have to re-enter the data + $data['user'] = $this->params; + endif; + + return $data; + } + +} + + +?> \ No newline at end of file diff --git a/modules/base/usersChangePassword.php b/modules/base/usersChangePassword.php new file mode 100644 index 000000000..b6b47320a --- /dev/null +++ b/modules/base/usersChangePassword.php @@ -0,0 +1,137 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersChangePasswordController extends owa_controller { + + function owa_usersChangePasswordController($params) { + $this->owa_controller($params); + return; + + } + + function action() { + + + //check that password and password 2 match + $validation_error = $this->validatePassword(); + + if (empty($validation_error)): + $auth = &owa_auth::get_instance(); + $status = $auth->authenticateUserTempPasskey($this->params['k']); + + // log to event queue + if ($status == true): + $eq = & eventQueue::get_instance(); + $new_password = array('key' => $this->params['k'], 'password' => $auth->encryptPassword($this->params['password']), 'ip' => $_SERVER['REMOTE_ADDR']); + $eq->log($new_password, 'base.set_password'); + $auth->deleteCredentials(); + $data['view'] = 'base.login'; + $data['view_method'] = 'delegate'; + $data['status_msg'] = $this->getMsg(3006); + + else: + print 'could not find this user users temp passkey in the db'; + endif; + else: + $data['error_msg'] = $validation_error; + $data['view'] = 'base.usersSetPassword'; + $data['view_method'] = 'delegate'; + + endif; + + return $data; + } + + function validatePassword() { + + //check that passwords match + if ($this->params['password'] != $this->params['password2']): + $error_msg = $this->getMsg(3007); + + // check that passwords are a min length + elseif (strlen($this->params['password']) < $this->config['password_length']): + $error_msg = $this->getMsg(3008, $this->config['password_length']); + + endif; + + if (!empty($error_msg)): + return $error_msg; + else: + return; + endif; + } + + +} + +/** + * Change Password View + * + * Presents a simple form to the user asking them to enter a new password. + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersChangePasswordView extends owa_view { + + function owa_usersChangePasswordView() { + + $this->owa_view(); + return; + } + + function construct($data) { + + $this->body->set_template('users_change_password.tpl'); + $this->body->set('headline', $this->getMsg(3005)); + $this->body->set('key', $data['k']); + + return; + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/usersDelete.php b/modules/base/usersDelete.php new file mode 100644 index 000000000..b0f83973b --- /dev/null +++ b/modules/base/usersDelete.php @@ -0,0 +1,57 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersDeleteController extends owa_controller { + + function owa_usersDeleteController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'admin'; + } + + function action() { + + $u = owa_coreAPI::entityFactory('base.user'); + + $u->delete($this->params['user_id'], 'user_id'); + + $data['view_method'] = 'redirect'; + $data['view'] = 'base.options'; + $data['subview'] = 'base.users'; + $data['status_code'] = 3004; + + return $data; + } + +} + + +?> \ No newline at end of file diff --git a/modules/base/usersEdit.php b/modules/base/usersEdit.php new file mode 100644 index 000000000..03cefab0d --- /dev/null +++ b/modules/base/usersEdit.php @@ -0,0 +1,119 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersEditView extends owa_view { + + function owa_usersEditView($params) { + + $this->owa_view($params); + $this->priviledge_level = 'admin'; + + return; + } + + function construct($data) { + + //page title + $this->t->set('page_title', 'Edit A User'); + $this->body->set('headline', 'Edit A User'); + // load body template + $this->body->set_template('users_addoredit.tpl'); + $auth = &owa_auth::get_instance(); + $this->body->set('roles', $auth->roles); + $this->body->set('action', 'base.usersEdit'); + + //Check to see if user is passed by constructor or else fetch the object. + if ($data['user']): + $this->body->set('user', $data['user']); + $this->body->set('error_msg', $this->getMsg(3002)); + else: + $u = owa_coreAPI::entityFactory('base.user'); + $u->getByColumn('user_id', $data['user_id']); + $this->body->set('user', $u->_getProperties()); + endif; + + return; + } + + +} + +/** + * Edit User Controller + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersEditController extends owa_controller { + + function owa_usersEditController($params) { + $this->owa_controller($params); + $this->priviledge_level = 'admin'; + } + + function action() { + + // This needs form validation in a bad way. + + $u = owa_coreAPI::entityFactory('base.user'); + $u->getByColumn('user_id', $this->params['user_id']); + $u->set('email_address', $this->params['email_address']); + $u->set('real_name', $this->params['real_name']); + $u->set('role', $this->params['role']); + $u->update(); + + $data['view_method'] = 'redirect'; + $data['view'] = 'base.options'; + $data['subview'] = 'base.users'; + $data['status_code'] = 3003; + //assign original form data so the user does not have to re-enter the data + + + //$data['user'] = $this->params; + + + return $data; + } + +} + + +?> \ No newline at end of file diff --git a/modules/base/usersNewAccount.php b/modules/base/usersNewAccount.php new file mode 100644 index 000000000..509098622 --- /dev/null +++ b/modules/base/usersNewAccount.php @@ -0,0 +1,104 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersNewAccountController extends owa_controller { + + function owa_usersNewAccountController($params) { + $this->owa_controller($params); + + } + + function action() { + + // save new user to db + $auth = &owa_auth::get_instance(); + $u = owa_coreAPI::entityFactory('base.user'); + $u->set('user_id', $this->params['user_id']); + $u->set('role', $this->params['role']); + $u->set('real_name', $this->params['real_name']); + $u->set('email_address', $this->params['email_address']); + $u->set('temp_passkey', $auth->generateTempPasskey($this->params['user_id'])); + $u->set('creation_date', time()); + $u->set('last_update_date', time()); + $u->create(); + + // return email view + $data['user_id']= $this->params['user_id']; + $data['email_address']= $this->params['email_address']; + $data['temp_passkey'] = $u->get('temp_passkey'); + $data['subject'] = 'OWA User Account Setup'; + $data['view'] = 'base.usersNewAccount'; + $data['view_method'] = 'email'; + + return $data; + } + +} + +/** + * New Account Notification View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersNewAccountView extends owa_view { + + function owa_usersNewAccountView() { + + $this->owa_view(); + return; + } + + function construct($data) { + + $this->t->set_template('wrapper_email.tpl'); + $this->body->set_template('users_new_account_email.tpl'); + $this->body->set('user_id', $data['user_id']); + $this->body->set('key', $data['temp_passkey']); + + return; + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/usersResetPassword.php b/modules/base/usersResetPassword.php new file mode 100644 index 000000000..7ba74d0a7 --- /dev/null +++ b/modules/base/usersResetPassword.php @@ -0,0 +1,98 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersResetPasswordController extends owa_controller { + + function owa_usersResetPasswordController($params) { + $this->owa_controller($params); + + } + + function action() { + $auth = &owa_auth::get_instance(); + $u = owa_coreAPI::entityFactory('base.user'); + $u->getByColumn('user_id', $this->params['user_id']); + $u->set('temp_passkey', $auth->generateTempPasskey($this->params['user_id'])); + $status = $u->update(); + + if ($status == true): + + $data['view'] = 'base.usersResetPassword'; + $data['view_method'] = 'email'; + $data['subject'] = 'Password Reset Request'; + $data['key'] = $u->get('temp_passkey'); + $data['email_address'] = $u->get('email_address'); + + endif; + + return $data; + } + +} + +/** + * Reset Password Notification View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersResetPasswordView extends owa_view { + + function owa_usersSetPasswordView() { + + $this->owa_view(); + return; + } + + function construct($data) { + + $this->t->set_template('wrapper_email.tpl'); + $this->body->set_template('users_reset_password_email.tpl'); + $this->body->set('key', $data['key']); + + return; + + } + + +} + + +?> \ No newline at end of file diff --git a/modules/base/usersSetPassword.php b/modules/base/usersSetPassword.php new file mode 100644 index 000000000..69661def0 --- /dev/null +++ b/modules/base/usersSetPassword.php @@ -0,0 +1,99 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersSetPasswordController extends owa_controller { + + function owa_usersSetPasswordController($params) { + $this->owa_controller($params); + + } + + function action() { + + $u = owa_coreAPI::entityFactory('base.user'); + $u->getByColumn('temp_passkey', $this->params['key']); + $u->set('temp_passkey', ''); + $u->set('password', $this->params['password']); + $status = $u->update(); + + if ($status == true): + + $data['view'] = 'base.usersSetPassword'; + $data['view_method'] = 'email'; + $data['ip'] = $this->params['ip']; + $data['subject'] = 'Password Change Complete'; + $data['email_address'] = $u->get('email_address'); + + endif; + + return $data; + } + +} + +/** + * Set Password Notification View + * + * @author Peter Adams + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_usersSetPasswordView extends owa_view { + + function owa_usersSetPasswordView() { + + $this->owa_view(); + return; + } + + function construct($data) { + + $this->t->set_template('wrapper_email.tpl'); + $this->body->set_template('users_set_password_email.tpl'); + $this->body->set('ip', $data['ip']); + + return; + + } + + +} + + +?> \ No newline at end of file diff --git a/mw_plugin.php b/mw_plugin.php index a1d2ff9c0..b38cd5053 100644 --- a/mw_plugin.php +++ b/mw_plugin.php @@ -139,9 +139,10 @@ function owa_footer(&$article) { global $wgOut; $owa = &new owa_php; - $bug = $owa->placePageTags($echo = false); + + $tags = $owa->handleHelperPageTagsRequest(); - $wgOut->addHTML($bug); + $wgOut->addHTML($tags); return true; } \ No newline at end of file diff --git a/owa_api.php b/owa_api.php index a1eb686b7..161e55a51 100644 --- a/owa_api.php +++ b/owa_api.php @@ -101,7 +101,7 @@ function owa_api() { * @return object $api * @access public */ - function get_instance($api_type) { + function get_instance($api_type, $params = null) { $api = new owa_api; @@ -131,10 +131,10 @@ function get_instance($api_type) { * * @access private */ - function load_plugins() { + function load_plugins($params = null) { - if ($dir = @opendir($this->plugins_dir)): - while (($file = @readdir($dir)) !== false) { + if ($dir = opendir($this->plugins_dir)): + while (($file = readdir($dir)) !== false) { if (strstr($file, '.php') && substr($file, -1, 1) != "~" && @@ -143,7 +143,12 @@ function load_plugins() { if (require_once($this->plugins_dir . $file)): $this->plugins[] = substr($file, 0, -4); $class = $this->class_prefix . substr($file, 0, -4); - $plugin = new $class; + + //print $class; + + $plugin = new $class($params); + + //print get_class($plugin); foreach ($plugin->api_calls as $api_call) { @@ -176,7 +181,7 @@ function load_plugins() { * @return array $result */ function get($request_params) { - + //need to add error here incase the api call does not exist. $result = $this->api_calls[$this->api_type][$request_params['api_call']]->generate($request_params); diff --git a/owa_auth.php b/owa_auth.php index 38149b276..c3495a35e 100644 --- a/owa_auth.php +++ b/owa_auth.php @@ -1,257 +1,368 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_auth extends owa_base { - - /** - * User object - * - * @var unknown_type - */ - var $u; - - /** - * Array of permission roles that users can have - * - * @var array - */ - var $roles; - - /** - * Database Access Object - * - * @var unknown_type - */ - var $db; - - var $status_msg; - - /** - * Login credentials - * - * @var array - */ - var $credentials; - - /** - * Status of Authentication - * - * @var boolean - */ - var $auth_status = false; - - /** - * Abstract class Constructor - * - * @return owa_auth - */ - function owa_auth() { - - $this->owa_base(); - $this->setRoles(); - - return; - - } - - /** - * Sets the permission levels of each role. - * - */ - function setRoles() { - - $this->roles = array('admin' => array('level' => 10, 'label' => 'Administrator'), - 'viewer' => array('level' => 2, 'label' => 'Report Viewer'), - 'guest' => array('level' => 1, 'label' => 'Guest') - - ); - - return; - - } - - /** - * Looks up the priviledge level for a particular role - * - * @param unknown_type $role - * @return unknown - */ - function getLevel($role) { - - return $this->roles[$role]['level']; - } - - function authenticateUser() { - - return; - } - - /** - * Creates the concrete auth class - * - * @return object - */ - function &get_instance() { - - $config = &owa_settings::get_settings(); - - $auth = &owa_lib::singleton($config['plugin_dir'].'/auth/', - 'owa_auth_', - $config['authentication']); - - return $auth; - } - - /** - * Looks up user by temporary Passkey Column in db - * - * @param unknown_type $key - * @return unknown - */ - function authenticateUserTempPasskey($key) { - - $this->u = new owa_user; - $this->u->getUserByTempPasskey($key); - - if (!empty($this->u->user_id)): - return true; - else: - $this->showResetPasswordErrorPage; - endif; - - } - - /** - * Checks to see if the user credentials match a real user object in the DB - * - * @param string $user_id - * @param string $password - * @return boolean - */ - function isUser($user_id, $password) { - - // fetch user credenticals from the db - $this->u = new owa_user; - $this->u->getUserByPK($user_id); - - if ($user_id == $this->u->user_id): - if ($password === $this->u->password): - $this->auth_status = true; - return true; - else: - $this->auth_status = false; - return false; - endif; - else: - $this->auth_status = false; - return false; - endif; - } - - /** - * Checks to see if the user has appropriate priviledges - * - * @param string $necessary_role - * @return boolean - */ - function isPriviledged($necessary_role) { - - // compare priviledge levels - if ($this->getLevel($this->u->role) >= $this->getLevel($necessary_role)): - // authenticated - return true;; - else: - // not high enough priviledge level - return false; - endif; - - } - - /** - * Sets a temporary Passkey for a user - * - * @param string $email_address - * @return boolean - */ - function setTempPasskey($email_address) { - - $this->u = new owa_user; - $this->u->getUserByEmail($email_address); - - if (!empty($this->u->user_id)): - - $this->eq->log(array('email_address' => $this->u->email_address), 'user.set_temp_passkey'); - return true; - //$this->showRequestNewPasswordSuccessPage(); - else: - return false; - //$this->showResetPasswordErrorPage(); - endif; - - } - - /** - * Sets the initial Passkey for a new user - * - * @param string $user_id - * @return boolean - */ - function setInitialPasskey($user_id) { - - return $this->eq->log(array('user_id' => $user_id), 'user.set_initial_passkey'); - - } - - /** - * Used to auth a new browser that has no credentials set - * - * @param string $user_id - * @param string $password - * @return boolean - */ - function authenticateNewBrowser($user_id, $password) { - - $this->e->debug("Login attempt from ". $user_id); - - $is_user = $this->isUser($user_id, $this->encryptPassword($password)); - - if ($is_user == true): - $this->saveCredentials(); - return true; - else: - return false; - endif; - - return; - } - -} - - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_auth extends owa_base { + + /** + * User object + * + * @var unknown_type + */ + var $u; + + /** + * Array of permission roles that users can have + * + * @var array + */ + var $roles; + + /** + * Database Access Object + * + * @var unknown_type + */ + var $db; + + var $status_msg; + + /** + * Login credentials + * + * @var array + */ + var $credentials; + + /** + * Status of Authentication + * + * @var boolean + */ + var $auth_status = false; + + var $_is_user = false; + + var $_priviledge_level; + + var $_is_priviledged = false; + + var $params; + + var $check_for_credentials = false; + + /** + * Abstract class Constructor + * + * @return owa_auth + */ + function owa_auth() { + + $this->owa_base(); + $this->setRoles(); + $this->eq = &eventQueue::get_instance(); + $this->params = &owa_requestContainer::getInstance(); + + //sets credentials based on whatever is passed in on params + $this->_setCredentials($this->params['u'], $this->params['p']); + + return; + + } + + /** + * Sets the permission levels of each role. + * + */ + function setRoles() { + + $this->roles = array('admin' => array('level' => 10, 'label' => 'Administrator'), + 'viewer' => array('level' => 2, 'label' => 'Report Viewer'), + 'guest' => array('level' => 1, 'label' => 'Guest') + + ); + + return; + + } + + /** + * Looks up the priviledge level for a particular role + * + * @param unknown_type $role + * @return unknown + */ + function getLevel($role) { + + return $this->roles[$role]['level']; + } + + /** + * Used by controllers to check if the user exists and if they are priviledged. + * + * @param string $necessary_role + */ + function authenticateUser($necessary_role = '') { + + $data = array(); + + // If the view or controller did not specific a priviledge level then assume + // that none was required. + if (empty($necessary_role)): + $data['auth_status'] = true; + return $data; + endif; + + // If auth level is guest then return true, no need to check user. + if ($necessary_role == 'guest'): + $data['auth_status'] = true; + return $data; + endif; + + // if the user has no credentials then redirect them to the login page. + if($this->check_for_credentails == true): + if ((empty($this->credentials['user_id'])) || (empty($this->credentials['password']))): + // show login page + $data = $this->_setNotAuthenticatedView(); + $data['auth_status'] = false; + return $data; + endif; + endif; + + // lookup user if not already done. + if ($this->_is_user == false): + // check to see if they are a user. + $this->isUser(); + endif; + + if ($this->_is_user == true): + // check to see if their account is priviledged enough. + $priviledged = $this->isPriviledged($necessary_role); + if ($priviledged == true): + $data['auth_status'] = true; + else: + // show not priviledged error page + $data = $this->_setNotPriviledgedView(); + $data['auth_status'] = false; + endif; + // if they are not a user then redirect to login error page + else: + // Show not a user page + $data = $this->_setNotUserView(); + $data['auth_status'] = false; + endif; + + $this->e->debug('Auth Status: '.$data['auth_status']); + + return $data; + + } + + /** + * Creates the concrete auth class + * + * @return object + */ + function &get_instance() { + + $config = &owa_settings::get_settings(); + + $auth = &owa_lib::singleton($config['plugin_dir'].'/auth/', + 'owa_auth_', + $config['authentication']); + + return $auth; + } + + /** + * Looks up user by temporary Passkey Column in db + * + * @param unknown_type $key + * @return unknown + */ + function authenticateUserTempPasskey($key) { + + $this->u = owa_coreAPI::entityFactory('base.user'); + $this->u->getByColumn('temp_passkey', $key); + + $id = $this->u->get('id'); + if (!empty($id)): + return true; + else: + $this->showResetPasswordErrorPage; + endif; + + } + + /** + * abstract method for Checking to see if the user credentials match a real user object in the DB + * + * @return boolean + */ + function isUser() { + + return false; + } + + /** + * Checks to see if the user has appropriate priviledges + * + * @param string $necessary_role + * @return boolean + */ + function isPriviledged($necessary_role) { + + // compare priviledge levels + if ($this->_priviledge_level >= $this->getLevel($necessary_role)): + // authenticated + return true;; + else: + // not high enough priviledge level + return false; + endif; + + } + + /** + * Sets a temporary Passkey for a user + * + * @param string $email_address + * @return boolean + */ + function setTempPasskey($email_address) { + + $this->u = owa_coreAPI::entityFactory('base.user'); + $this->u->getByColumn('email_address', $email_address); + + $id = $u->get('id'); + + if (!empty($id)): + + $this->eq->log(array('email_address' => $this->u->email_address), 'user.set_temp_passkey'); + return true; + else: + return false; + endif; + + } + + function generateTempPasskey($seed) { + + return md5($seed.time().rand()); + } + + /** + * Sets the initial Passkey for a new user + * + * @param string $user_id + * @return boolean + * @deprecated + */ + function setInitialPasskey($user_id) { + + return $this->eq->log(array('user_id' => $user_id), 'user.set_initial_passkey'); + + } + + function _setCredentials($user_id, $password) { + + $this->credentials['user_id'] = $user_id; + $this->credentials['password'] = $password; + + return; + } + + /** + * Used to auth a new browser that has no credentials set + * + * @param string $user_id + * @param string $password + * @return boolean + */ + function authenticateNewBrowser($user_id, $password) { + + $this->e->debug("Login attempt from ". $user_id); + + $this->_setCredentials($user_id, $this->encryptPassword($password)); + + $is_user = $this->isUser(); + + $data = array(); + + if ($is_user == true): + $this->e->debug('setting user credential cookies'); + $this->saveCredentials(); + $data['auth_status'] = true; + + else: + $data['auth_status'] = false; + endif; + + return $data; + } + + /** + * Saves login credentails to persistant browser cookies + * + */ + function saveCredentials() { + + setcookie($this->config['ns'].'u', $this->u->get('user_id'), time()+3600*24*365*30, '/', $this->config['cookie_domain']); + setcookie($this->config['ns'].'p', $this->u->get('password'), time()+3600*24*365*30, '/', $this->config['cookie_domain']); + + return; + } + + /** + * Removes credentials + * + * @return boolean + */ + function deleteCredentials() { + + return setcookie($this->config['ns'].'p', '', time()-3600*24*365*30, '/', $this->config['cookie_domain']); + + } + + /** + * Simple Password Encryption Scheme + * + * @param string $password + * @return string + */ + function encryptPassword($password) { + + return md5(strtolower($password).strlen($password)); + } + +} + + ?> \ No newline at end of file diff --git a/owa_base.php b/owa_base.php index f1409d6ee..77dd6726e 100644 --- a/owa_base.php +++ b/owa_base.php @@ -1,65 +1,148 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_base { - - /** - * Configuration - * - * @var array - */ - var $config; - - /** - * Error Logger - * - * @var object - */ - var $e; - - /** - * Base Constructor - * - * @return owa_base - */ - function owa_base() { - - $this->config = &owa_settings::get_settings(); - $this->e = &owa_error::get_instance(); - - return; - } - -} - - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_base { + + /** + * Configuration + * + * @var array + */ + var $config; + + /** + * Error Logger + * + * @var object + */ + var $e; + + /** + * Module that this class belongs to + * + * @var unknown_type + */ + var $module; + + /** + * Request Params + * + * @var array + */ + var $params; + + /** + * Base Constructor + * + * @return owa_base + */ + function owa_base() { + + $this->config = &owa_settings::get_settings(); + $this->e = &owa_error::get_instance(); + + return; + } + + /** + * Retrieves string message from mesage file + * + * @param integer $code + * @param string $s1 + * @param string $s2 + * @param string $s3 + * @param string $s4 + * @return string + */ + function getMsg($code, $s1 = null, $s2 = null, $s3 = null, $s4 = null) { + + include_once(OWA_BASE_DIR.'/conf/messages.php'); + + switch ($_owa_messages[$code][1]) { + + case 0: + $msg = $_owa_messages[$code][0]; + break; + case 1: + $msg = sprintf($_owa_messages[$code][0], $s1); + break; + case 2: + $msg = sprintf($_owa_messages[$code][0], $s1, $s2); + break; + case 3: + $msg = sprintf($_owa_messages[$code][0], $s1, $s2, $s3); + break; + case 4: + $msg = sprintf($_owa_messages[$code][0], $s1, $s2, $s3, $s4); + break; + } + + return $msg; + + } + + /** + * Sets object attributes + * + * @param unknown_type $array + */ + function _setObjectValues($array) { + + foreach ($array as $n => $v) { + + $this->$n = $v; + + } + + return; + } + + /** + * Sets array attributes + * + * @param unknown_type $array + */ + function _setArrayValues($array) { + + foreach ($array as $n => $v) { + + $this->params['$n'] = $v; + + } + + return; + } + +} + + ?> \ No newline at end of file diff --git a/owa_browscap.php b/owa_browscap.php index 4fead5c80..1fb431af0 100644 --- a/owa_browscap.php +++ b/owa_browscap.php @@ -16,11 +16,14 @@ // $Id$ // -require_once(OWA_BASE_DIR.'/owa_settings_class.php'); +require_once(OWA_BASE_DIR.DIRECTORY_SEPARATOR.'owa_base.php'); +require_once(OWA_BASE_DIR.DIRECTORY_SEPARATOR.'ini_db.php'); /** * Browscap Class * + * Used to load and lookup user agents in a local Browscap file + * * @author Peter Adams * @copyright Copyright © 2006 Peter Adams * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 @@ -30,14 +33,8 @@ * @since owa 1.0.0 */ -class owa_browscap { +class owa_browscap extends owa_base { - /** - * Configuration - * - * @var array - */ - var $config; /** * main browscap_db maintained by Gary Keith's @@ -47,33 +44,12 @@ class owa_browscap { */ var $browscap_db; - /** - * Supplemental browscap db maintianed by OWA. - * - * @var array - */ - var $browscap_supplimental_db; - /** * Browscap Record for current User agent * * @var unknown_type */ - var $browscap; - - /** - * Supplemental Browscap Record for current User agent - * - * @var unknown_type - */ - var $browscap_supplemental; - - /** - * Error Handler - * - * @var object - */ - var $e; + var $browser; /** * Current user Agent @@ -83,52 +59,41 @@ class owa_browscap { var $ua; function owa_browscap($ua = '') { - - //Load Config - $this->config = &owa_settings::get_settings(); - //Load error handler - $this->e = &owa_error::get_instance(); + $this->owa_base(); // set user agent $this->ua = $ua; - $this->e->debug('UA: '.$this->ua); // Load main browscap $this->browscap_db = $this->load($this->config['browscap.ini']); - //load supplemental browscap - $this->browscap_supplemental_db = $this->load($this->config['browscap_supplemental.ini']); - //lookup robot in main browscap db - $this->browscap = $this->lookup($this->ua, $this->browscap_db); - $this->e->debug('Browser Type:'. $this->browscap->browser); - - //lookup robot in supplemental browscap db - $this->browscap_supplemental = $this->lookup($this->ua, $this->browscap_supplemental_db); - $this->e->debug('Browser Type (supplemental):'. $this->browscap_supplemental->browser); + $this->browser = $this->lookup($this->ua); + $this->e->debug('Browser Name: '. $this->browser->Browser); return; } function robotCheck() { - $main = $this->checkForCrawler_main(); - $supplemental = $this->checkForCrawler_supplemental(); - - if ($main == true || $supplemental == true): + if ($this->browser->Crawler == true): return true; else: - return false; + if($this->robotRegexCheck() == true): + return true; + else: + return false; + endif; endif; } - function lookup($user_agent, $db) { + function lookup($user_agent) { $cap=null; - foreach ($db as $key=>$value) { - if (($key!='*')&&(!array_key_exists('parent',$value))) continue; + foreach ($this->browscap_db as $key=>$value) { + if (($key!='*')&&(!array_key_exists('Parent',$value))) continue; $keyEreg='^'.str_replace( array('\\','.','?','*','^','$','[',']','|','(',')','+','{','}','%'), array('\\\\','\\.','.','.*','\\^','\\$','\\[','\\]','\\|','\\(','\\)','\\+','\\{','\\}','\\%'), @@ -137,8 +102,8 @@ function lookup($user_agent, $db) { { $cap=array('browser_name_regex'=>strtolower($keyEreg),'browser_name_pattern'=>$key)+$value; $maxDeep=8; - while (array_key_exists('parent',$value)&&(--$maxDeep>0)) - $cap+=($value=$db[$value['parent']]); + while (array_key_exists('Parent',$value)&&(--$maxDeep>0)) + $cap += ($value = $this->browscap_db[$value['Parent']]); break; } } @@ -147,39 +112,27 @@ function lookup($user_agent, $db) { } - function checkForCrawler_main() { + + + function load($file) { + + return parse_ini_file($file, true); - if ($this->browscap->browser != 'Default Browser'): - // If browscap has the UA listed as a crawler set is_robot, except for RSS feed readers - if ($this->browscap->parent != 'RSS Feeds'): - if ($this->browscap->crawler == true): - return true; - else: - return false; - endif; - else: - return false; - endif; - else: - return false; - endif; } - function checkForCrawler_supplemental() { + function robotRegexCheck() { - // If browscap has the UA listed as a crawler return true - if ($this->browscap_supplemental->crawler == true): + $db = new ini_db($this->config['robots.ini']); + $match = $db->match($this->ua); + + if (!empty($match)): + $this->e->debug(sprintf('Last chance robot detect string: %s', $match[0])); + $this->browser->Crawler = true; return true; else: - return false; + return false; endif; - - } - - function load($file) { - return parse_ini_file($file, true); - } diff --git a/owa_caller.php b/owa_caller.php index 84de25578..6712593a1 100644 --- a/owa_caller.php +++ b/owa_caller.php @@ -1,459 +1,387 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_caller { - - /** - * Configuration - * - * @var array - */ - var $config; - - /** - * Error handler - * - * @var object - */ - var $e; - - /** - * Instance of Request/Event Controller - * - * @var object - */ - var $controller; - - /** - * Constructor - * - * @param array $config - * @return owa_caller - */ - function owa_caller($config) { - - $this->config = &owa_settings::get_settings(); - - $this->apply_caller_config($config); - - if ($this->config['fetch_config_from_db'] == true): - $this->load_config_from_db(); - endif; - - // Needed to dump the error logger because it was loaded initially with the default setting - // and not the setting stored in the DB. - $this->e = null; - $this->e = owa_error::get_instance(); - - return; - - } - - /** - * Applies caller specific configuration params on top of - * those specified on the global OWA config file. - * - * @param array $config - */ - function apply_caller_config($config) { - - if (!empty($config)): - - foreach ($config as $key => $value) { - - $this->config[$key] = $value; - - } - - endif; - - return; - - } - - /** - * Fetches instance specific configuration params from the database - * - */ - function load_config_from_db() { - - $config_from_db = &owa_settings::fetch($this->config['configuration_id']); - - if (!empty($config_from_db)): - - foreach ($config_from_db as $key => $value) { - - $this->config[$key] = $value; - - } - - endif; - - return; - } - - /** - * Logs a Page Request - * - * @param array $app_params This is an array of application specific request params - */ - function log($app_params = '') { - - return $this->controller->logEvent('page_request', $app_params); - - } - - /** - * Logs any event to the event queue - * - * @param array $app_params - * @param string $event_type - * @return boolean - */ - function logEvent($event_type, $app_params = '') { - - return $this->controller->logEvent($event_type, $app_params); - - } - - function reset_config() { - - $config = $this->config->get_default_config(); - $this->config->save($config); - return; - - } - - function options_page() { - - require_once(OWA_BASE_DIR.'/owa_template.php'); - require_once(OWA_BASE_DIR.'/owa_news.php'); - - //Fetch latest OWA news - $rss = new owa_news; - $news = $rss->Get($rss->config['owa_rss_url']); - - //Setup templates - $options_page = & new owa_template; - $options_page->set_template($options_page->config['report_wrapper']); - $options_page->set('news', $news); - $body = & new owa_template; - $body->set_template('options.tpl');// This is the inner template - $body->set('config', $this->config); - $body->set('page_title', 'OWA Options'); - $options_page->set('content', $body); - // Make Page - echo $options_page->fetch(); - - return; - } - - function first_request_handler() { - - header('Content-type: image/gif'); - header('P3P: CP="'.$this->config['p3p_policy'].'"'); - header('Expires: Sat, 22 Apr 1978 02:19:00 GMT'); - header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); - header('Cache-Control: no-store, no-cache, must-revalidate'); - header('Cache-Control: post-check=0, pre-check=0', false); - header('Pragma: no-cache'); - - $this->e->debug('Handling special first_hit request...'); - - if (!empty($_COOKIE[$this->config['ns'].$this->config['first_hit_param']])): - $this->controller->process_first_request(); - endif; - - printf( - '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%', - 71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59 - ); - - return; - } - - - function getGraph($app_params = '') { - - if(empty($app_params)): - $app_params = owa_lib::getRestparams(); - endif; - - return $this->controller->getGraph($app_params); - - } - - /** - * Logs event whose properties are specified on the URL - * - * @param unknown_type $event_type - * @return unknown - */ - function logEventRest($event_type) { - - $app_params = owa_lib::getRestparams(); - - return $this->controller->logEvent($event_type, $app_params); - - } - - /** - * Saves Configuration values to the database - * - * @param array $form_data - */ - function save_config($form_data) { - - //create the new config array - $new_config = array(); - - // needed for following DB queries just in case the various - // implementations of the GUI does not allow you to set this. - $new_config['configuration_id'] = $this->config['configuration_id']; - - foreach ($form_data as $key => $value) { - - if ($key != 'wa_update_options'): - // update current config - $this->config[$key] = $value; - //add to config going to the db - $new_config[$key] = $value; - - endif; - } - - owa_settings::save($new_config); - $this->e->notice("Configuration changes saved to database."); - - return; - } - - /** - * Returns All Page Tags - * - * Setting $echo to false allows you to pass the tag code to whatever code is going - * to render your web page - * - * @param boolean $echo - * @return string - */ - function placePageTags($echo = true) { - - $tags = $this->firstHitTag($echo); - - if ($this->config['log_dom_clicks'] == true): - $tags .= $this->clickTag($echo); - endif; - - if ($echo === false): - return $tags; - else: - ; - endif; - - return; - - } - - - /** - * Generates First hit javascript tag - * - * @param boolean $echo - * @return string - */ - function firstHitTag($echo = true) { - - if (empty($_COOKIE[$this->config['ns'].$this->config['first_hit_param']]) && empty($_COOKIE[$this->config['ns'].$this->config['visitor_param']])): - - $bug = ""; - //$bug .= ""; - if ($echo === false): - return $bug; - else: - echo $bug; - endif; - endif; - - return; - - } - - function placeAllBugs($echo = true) { - - $bug = $this->place_log_bug(false); - $bug .= $this->place_click_bug(false); - - if ($echo === false): - return $bug; - else: - echo $bug; - endif; - - return; - - } - - /** - * Echos the request logger javascript library - * - */ - function place_log_bug($echo = true) { - - $url = $this->config['public_url'].'/page.php?'; - - $bug = 'var owa_url = \'' . $url . '\';'; - - $bug .= file_get_contents(OWA_INCLUDE_DIR.'/webbug.js'); - - if ($echo === false): - return $bug; - else: - echo $bug; - endif; - - return; - - } - - function clickTag($echo = true) { - - $tag = sprintf('
    ', - $this->config['action_url'], - rand()); - - if ($echo === false): - return $tag; - else: - echo $tag; - endif; - - return; - - } - - function place_click_bug($echo = true) { - - $url = $this->config['action_url'].'?owa_action=log_event&event=click&'; - - $js = file_get_contents(OWA_INCLUDE_DIR.'/clickbug.js'); - - $bug = sprintf($js, $url, $url); - - if ($echo === false): - return $bug; - else: - echo $bug; - endif; - - return; - - } - - function requestTag($site_id) { - - $tag = ''."\n\n"; - $tag .= sprintf('', - $this->config['public_url']); - - return $tag; - - } - - - /** - * Handler for special action requests - * - * This is sometimes called on every request by certain frameworks so nothing sounds be outside the - * switch statement. - * - */ - function actionRequestHandler() { - - switch ($_GET['owa_action']) { - - // This handles requests to log the delayed request contained in first_hit cookie for new users. - case $this->config['first_hit_param']: - $this->e->debug('Special action request received: first_hit'); - $this->first_request_handler(); - exit; - - // This handles requests for graphs - case $this->config['graph_param']: - $this->e->debug('Special action request received: graph'); - $this->getGraph(); - exit; - - // This handles requests for the click tracking javascript library - case "click_bug": - // This is the handler for javascript request for the logging web bug. - $this->e->debug('Special action request received: '.$_GET['owa_action']); - $this->place_click_bug(); - exit; - - // This handles requests o log an event via http - case "log_event": - $this->e->debug('Special action request received: '.$_GET['owa_action']); - ignore_user_abort(true); - $this->logEvent($_GET['event'], $_GET); - - // Return 1x1 pixel - header('Content-type: image/gif'); - header('P3P: CP="'.$l->config['p3p_policy'].'"'); - header('Expires: Sat, 22 Apr 1978 02:19:00 GMT'); - header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); - header('Cache-Control: no-store, no-cache, must-revalidate'); - header('Cache-Control: post-check=0, pre-check=0', false); - header('Pragma: no-cache'); - - printf( - '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%', - 71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59 - ); - - exit; - - } - - return; - - } - -} - -?> + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_caller extends owa_base { + + /** + * Request Params from get or post + * + * @var array + */ + var $params; + + /** + * Core API + * + * @var object + */ + var $api; + + /** + * Constructor + * + * @param array $config + * @return owa_caller + */ + function owa_caller($config) { + + //set_error_handler(array("owa_error", "handlePhpError"), E_ALL); + + $this->owa_base(); + + $this->config = &owa_settings::get_settings(); + + $this->apply_caller_config($config); + + if ($this->config['fetch_config_from_db'] == true): + $this->load_config_from_db(); + + // Needed to dump the error logger because it was loaded initially with the default setting + // and not the setting stored in the DB. + $this->e = null; + $this->e = owa_error::get_instance(); + endif; + + // Create Request Container + $this->params = &owa_requestContainer::getInstance(); + + // Load the core API + $this->api = &owa_coreAPI::singleton(); + // should only be called once to load all modules + $this->api->setupFramework(); + + + //ob_end_clean(); + + return; + + } + + function handleRequestFromUrl() { + + //$this->params = owa_lib::getRequestParams(); + return $this->handleRequest(); + + } + + /** + * Applies caller specific configuration params on top of + * those specified on the global OWA config file. + * + * @param array $config + */ + function apply_caller_config($config) { + + if (!empty($config)): + + foreach ($config as $key => $value) { + + $this->config[$key] = $value; + + } + + endif; + + return; + + } + + /** + * Fetches instance specific configuration params from the database + * + */ + function load_config_from_db() { + + $config_from_db = &owa_settings::fetch($this->config['configuration_id']); + + if (!empty($config_from_db)): + + foreach ($config_from_db as $key => $value) { + + $this->config[$key] = $value; + + } + + endif; + + return; + } + + /** + * Logs a Page Request + * + * @param array $app_params This is an array of application specific request params + */ + function log($caller_params = '') { + + return $this->logEvent('base.processRequest', $caller_params); + + } + + /** + * Logs an event to the event queue + * + * This function sets the action to be perfromed, santizes, + * and adds all of PHP's $_SERVER vars to the $caller_params. + * $_REQUEST vars are already added to $this->params in the constructor. + * + * @param array $caller_params + * @param string $event_type + * @return boolean + */ + function logEvent($event_type, $caller_params = '') { + + // Add PHP's $_SERVER scope variables to event properties + $params = $_SERVER; + + // Apply caller's params to event properties + if (!empty($caller_params)): + + // Apply caller specific params + foreach ($caller_params as $k => $v) { + + $params[$k] = $v; + + } + + endif; + + // set controller to invoke + $params['action'] = $event_type; + + // Filter input + $params = owa_lib::inputFilter($params); + + //Load browscap + $bcap = new owa_browscap($params['HTTP_USER_AGENT']); ///! + + // Abort if the request is from a robot + if ($this->config['log_robots'] != true): + if ($bcap->robotCheck() == true): + return; + endif; + endif; + + // Fetch browser capabilities and and apply to event params + $bcap_array = get_object_vars($bcap->browser); + + foreach ($bcap_array as $k => $v) { + + $params['browscap_'.$k] = $v; + + } + + return $this->handleRequest($params); + + } + + /** + * Logs event params taken from request scope (url, cookies, etc.). + * Takes event type from url. + * + * @return unknown + */ + function logEventFromUrl($caller_params) { + ignore_user_abort(true); + + //$clean_params = owa_lib::inputFilter($caller_params); + + $striped_params = owa_lib::stripParams($caller_params); + + // Apply caller specific params + foreach ($striped_params as $k => $v) { + + $params[$k] = base64_decode(urldecode($v)); + + } + + //$this->e->debug('logEventFromUrl decoded params: '. print_r($params, true)); + + return $this->logEvent($params['action'], $params); + + } + + function requestTag($site_id) { + + return $api->requestTag($site_id); + + } + + function handleHelperPageTagsRequest() { + + $params = array(); + $params['view'] = 'base.helperPageTags'; + $params['view_method'] = 'delegate'; + return $this->handleRequest($params); + + } + + /** + * Authenticated Rendering of view + * + * @param array $caller_data + * @return string + */ + function renderView($data) { + + $view = $this->api->moduleFactory($data['view'], 'View', $this->params); + + //perfrom authentication + $auth = &owa_auth::get_instance(); + $auth_data = $auth->authenticateUser($view->priviledge_level); + + // if auth was success then procead to assemble view. + if ($auth_data['auth_status'] == true): + + return $view->assembleView($data); + else: + //$this->e->debug('RenderView: '.print_r($data, true)); + return $this->api->displayView($auth_data); + endif; + + } + + /** + * Displays a View without user authentication. Takes array of data as input + * + * @param array $data + */ + function displayView($data) { + + $view = $this->api->moduleFactory($data['view'], 'View', $this->params); + + return $view->assembleView($data); + + } + + /** + * Invokes controller to perform controller + * + * @param $action string + * + */ + function performAction($action) { + + // Load + $controller = $this->api->moduleFactory($action, 'Controller', $this->params); + + //perfrom authentication + $auth = &owa_auth::get_instance(); + $data = $auth->authenticateUser($controller->priviledge_level); + + // if auth was success then procead to do action specified in the intended controller. + if ($data['auth_status'] == true): + $data = $controller->doAction(); + endif; + + // Display view if controller calls for one. + if (!empty($data['view'])): + + // + if ($data['view_method'] == 'delegate'): + return $this->api->displayView($data); + + // Redirect to a view + elseif ($data['view_method'] == 'redirect'): + owa_lib::redirectToView($data); + return; + + // return an image . Will output headers and binary data. + elseif ($data['view_method'] == 'image'): + return $this->api->displayImage($data); + + else: + return $this->api->displayView($data); + + endif; + + endif; + + return; + + } + + + /** + * Handles OWA internal page/action requests + * + * @return unknown + */ + function handleRequest($caller_params = null) { + + // Override request parsms with those passed by caller + if (!empty($caller_params)): + + foreach ($caller_params as $n => $v) { + $this->params[$n] = $v; + } + + endif; + + $this->e->debug('Request Params: '. print_r($this->params, true)); + + if (!empty($this->params['action'])): + + $result = $this->performAction($this->params['action']); + unset($this->params['action']); + + elseif (!empty($this->params['do'])): + $result = $this->performAction($this->params['do']); + //unset($this->params['action']); + + elseif ($this->params['view']): + // its a view request so the only data is in whats in the params + $result = $this->renderView($this->params); + unset($this->params['view']); + + else: + print 'Caller: No view or action param found. I\'m not sure what to do here.'; + return; + endif; + + //clean up any open db connection + if ($this->config['async_db'] == false): + $db = &owa_db::get_instance(); + $db->close(); + endif; + + return $result; + } + + +} + +?> diff --git a/owa_click.php b/owa_click.php index 2dfc6567b..3ad67d0e7 100644 --- a/owa_click.php +++ b/owa_click.php @@ -84,7 +84,7 @@ function process() { // Determine Browser type $this->determine_browser_type(); - $this->e->debug('click properties: '.print_r($this->properties, true)); + $this->e->debug('click properties: '. print_r($this->properties, true)); $this->state = 'click'; diff --git a/owa_controller.php b/owa_controller.php new file mode 100644 index 000000000..a1f64f922 --- /dev/null +++ b/owa_controller.php @@ -0,0 +1,90 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + + +class owa_controller extends owa_base { + + /** + * Request Parameters passed in from caller + * + * @var array + */ + var $params; + + /** + * The priviledge level required to access this controller + * + * @var string + */ + var $priviledge_level; + + /** + * Constructor + * + * @param array $params + * @return owa_controller + */ + function owa_controller($params) { + + $this->owa_base(); + $this->params = $params; + + return; + + } + + /** + * Handles request from caller + * + */ + function doAction() { + + $this->e->debug('Performing Action: '.get_class($this)); + + return $this->action(); + + } + + function logEvent($event_type, $properties) { + + if (!class_exists('eventQueue')): + require_once(OWA_BASE_DIR.DIRECTORY_SEPARATOR.'eventQueue.php'); + endif; + + $eq = &eventQueue::get_instance(); + return $eq->log($properties, $event_type); + } + +} + +?> \ No newline at end of file diff --git a/owa_coreAPI.php b/owa_coreAPI.php new file mode 100644 index 000000000..f70af036b --- /dev/null +++ b/owa_coreAPI.php @@ -0,0 +1,408 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_coreAPI extends owa_base { + + var $modules; + + var $admin_panels; + + var $init; + + var $params; + + + function owa_coreAPI() { + + $this->owa_base(); + + return; + } + + function &singleton($params = array()) { + + static $api; + + if(!isset($api)): + $api = new owa_coreAPI(); + endif; + + if(!empty($params)): + $api->params = $params; + endif; + + return $api; + } + + function setupFramework() { + + if ($this->init != true): + $this->_loadModules(); + $this->_loadEntities(); + $this->init = true; + endif; + + return; + } + + function _loadModules() { + + foreach ($this->config['modules'] as $k => $module) { + require_once(OWA_BASE_DIR.'/modules/'.$module.'/module.php'); + $m = owa_lib::factory(OWA_BASE_DIR.'/'.$module, 'owa_', $module.'Module'); + $this->modules[$m->name] = $m; + } + + return; + } + + function _loadEntities() { + + foreach ($this->modules as $k => $module) { + + foreach ($module->entities as $entitiy_k => $entitiy_v) { + + $this->entities[] = $module->name.$entitiy_v; + + } + } + + return; + } + + + function displayImage($data) { + + header('Content-type: image/gif'); + header('P3P: CP="'.$this->config['p3p_policy'].'"'); + header('Expires: Sat, 22 Apr 1978 02:19:00 GMT'); + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + header('Cache-Control: no-store, no-cache, must-revalidate'); + header('Cache-Control: post-check=0, pre-check=0', false); + header('Pragma: no-cache'); + + print owa_coreAPI::displayView($data); + + return; + + } + + + /** + * Displays a View without user authentication. Takes array of data as input + * + * @param array $data + * @param string $viewfile a specific view file to use + * @return string + * + */ + function displayView($data, $viewfile = '') { + + if (empty($viewfile)): + $viewfile = $data['view']; + endif; + + $view = owa_coreAPI::moduleFactory($viewfile, 'View', $params); + + return $view->assembleView($data); + + } + + function displaySubView($data, $viewfile = '') { + + if (empty($viewfile)): + $viewfile = $data['view']; + endif; + + $view = owa_coreAPI::subViewFactory($viewfile); + + return $view->assembleView($data); + + } + + function moduleRequireOnce($module, $class_dir, $file) { + + if (!empty($class_dir)): + + $class_dir .= DIRECTORY_SEPARATOR; + + endif; + + return require_once(OWA_BASE_DIR.'/modules/'.$module.DIRECTORY_SEPARATOR.$class_dir.$file.'.php'); + } + + function moduleFactory($modulefile, $class_suffix = null, $params = '') { + + list($module, $file) = split("\.", $modulefile); + $class = 'owa_'.$file.$class_suffix; + + // Require class file if class does not already exist + if(!class_exists($class)): + owa_coreAPI::moduleRequireOnce($module, '', $file); + endif; + + $obj = owa_lib::factory(OWA_BASE_DIR.'/modules/'.$module, '', $class, $params); + + //if (isset($obj->module)): + $obj->module = $module; + //endif; + + return $obj; + } + + function subViewFactory($subview, $params = array()) { + + list($module, $class) = split("\.", $subview); + + owa_lib::moduleRequireOnce($module, $class); + + $subview = owa_lib::moduleFactory($module, $class.'View', $params); + $subview->is_subview = true; + + return $subview; + } + + function supportClassFactory($module, $class, $params = array()) { + + $obj = owa_lib::factory(OWA_BASE_DIR.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR, 'owa_', $class, $params); + $obj->module = $module; + + return $obj; + + + } + + /** + * Convienence method for generating entities + * + * @param unknown_type $entity_name + * @return unknown + */ + function entityFactory($entity_name) { + + if (!class_exists('owa_entity')): + require_once(OWA_BASE_CLASSES_DIR.'owa_entity.php'); + endif; + + return owa_coreAPI::moduleSpecificFactory($entity_name, 'entities', '', '', false); + + } + + /** + * Convienence method for generating metrics + * + * @param unknown_type $entity_name + * @return unknown + */ + function getMetric($metric_name, $params) { + + $m = owa_coreAPI::moduleSpecificFactory($metric_name, 'metrics', '', $this->params, false); + $m->applyOverrides($params); + + return $m->generate(); + } + + /** + * Factory for generating graphs + * + * @param unknown_type $entity_name + * @return unknown + */ + function graphFactory($graph_name, $params = array()) { + + return owa_coreAPI::moduleSpecificFactory($graph_name, 'graphs', '', $params, false); + + } + + /** + * Factory for generating module specific classes + * + * @param string $modulefile + * @param string $class_dir + * @param string $class_suffix + * @param array $params + * @return unknown + */ + function moduleSpecificFactory($modulefile, $class_dir, $class_suffix = null, $params = '', $add_module_name = true) { + + list($module, $file) = split("\.", $modulefile); + $class = 'owa_'.$file.$class_suffix; + + // Require class file if class does not already exist + if(!class_exists($class)): + owa_coreAPI::moduleRequireOnce($module, $class_dir, $file); + endif; + + $obj = owa_lib::factory(OWA_BASE_DIR.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.$class_dir.DIRECTORY_SEPARATOR.$module, '', $class, $params); + + if ($add_module_name == true): + $obj->module = $module; + endif; + + return $obj; + + + } + + + /** + * Returns a consolidated list of admin/options panels from all active modules + * + * @return array + */ + function getAdminPanels() { + + $panels = array(); + + foreach ($this->modules as $k => $v) { + $v->registerAdminPanels(); + $module_panels = $v->getAdminPanels(); + + foreach ($module_panels as $key => $value) { + + $panels[$value['group']][] = $value; + } + + } + + return $panels; + } + + /** + * Returns a consolidated list of nav links from all active modules for a particular view + * + * @return array + */ + function getNavigation($view) { + + $links = array(); + + foreach ($this->modules as $k => $v) { + $v->registerNavigation(); + $module_nav = $v->getNavigationLinks(); + + foreach ($module_nav as $key => $value) { + + $links[$value['view']][] = $value; + } + + } + + return $links[$view]; + } + + /** + * JS invocation tag + * + * @param unknown_type $site_id + * @return unknown + * @deprecated + */ + function requestTag($site_id) { + + $tag = ''."\n\n"; + $tag .= sprintf('', + $this->config['public_url']); + + return $tag; + + } + + function makeAbsoluteLink($params, $url) { + + $get = ''; + + if (!empty($params)): + + foreach ($params as $n => $v) { + + $get .= $this->config['ns'].$n.'='.$v.'&'; + } + + endif; + + return sprintf($this->config['link_template'], $url, $get); + + } + + /** + * Strip a URL of certain GET params + * + * @return string + */ + function stripDocumentUrl($url) { + + if ($this->config['clean_query_string'] == true): + + if (!empty($this->config['query_string_filters'])): + $filters = str_replace(' ', '', $this->config['query_string_filters']); + $filters = explode(',', $filters); + else: + $filters = array(); + endif; + + // OWA specific params to filter + array_push($filters, $this->config['source_param']); + array_push($filters, $this->config['ns'].$this->config['feed_subscription_id']); + + //print_r($filters); + + foreach ($filters as $filter => $value) { + + $url = preg_replace( + '#\?' . + $value . + '=.*$|&' . + $value . + '=.*$|' . + $value . + '=.*&#msiU', + '', + $url + ); + + } + + endif; + //print $url; + + return $url; + + } + + +} +?> \ No newline at end of file diff --git a/owa_db.php b/owa_db.php index 0381fc14e..afac6f00b 100644 --- a/owa_db.php +++ b/owa_db.php @@ -16,7 +16,7 @@ // $Id$ // -require_once('owa_error.php'); +require_once(OWA_BASE_DIR.DIRECTORY_SEPARATOR.'owa_base.php'); /** * Database Connection Class @@ -29,7 +29,7 @@ * @version $Revision$ * @since owa 1.0.0 */ -class owa_db { +class owa_db extends owa_base { /** * Connection string @@ -60,11 +60,11 @@ class owa_db { var $result; /** - * Configuration + * Caller Params * * @var array */ - var $config = array(); + var $params = array(); /** * Status of selecting a databse @@ -94,14 +94,6 @@ class owa_db { */ var $rows_affected; - /** - * Error Logger - * - * @return object - * @access private - */ - var $e; - /** * Microtime Start of Query * @@ -124,8 +116,7 @@ class owa_db { */ function owa_db() { - $this->config = &owa_settings::get_settings(); - $this->e = &owa_error::get_instance(); + $this->owa_base(); return; } @@ -137,7 +128,7 @@ function owa_db() { * @access public * @static */ - function &get_instance() { + function &get_instance($params = array()) { static $db; @@ -160,11 +151,11 @@ function &get_instance() { return; else: $db = new $connection_class; - $this->e->debug(sprintf('Using db class at %s.', - $connection_class_path)); + + //$this->e->debug(sprintf('Using db class at %s.', $connection_class_path)); endif; endif; - + return $db; } diff --git a/owa_entity.php b/owa_entity.php new file mode 100644 index 000000000..20dcaf036 --- /dev/null +++ b/owa_entity.php @@ -0,0 +1,263 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_entity { + + function owa_entity() { + + $vars = $this->getColumns(); + + foreach ($vars as $k => $v) { + + $this->$v = new owa_dbColumn(); + } + + return; + } + + function _getProperties() { + + $vars = get_object_vars($this); + + $properties = array(); + + foreach ($vars as $k => $v) { + + $properties[$k] = $v->value; + + } + + return $properties; + } + + function getColumns() { + + $all_cols = get_object_vars($this); + + return array_keys($all_cols); + + } + + /** + * Persist new object + * + */ + function create() { + + // Setup databse access object + $db = &owa_db::get_instance(); + + $all_cols = $this->getColumns(); + + $cols = ''; + // Control loop + foreach ($all_cols as $k => $v){ + + // drop column is it is marked as auto-incement as DB will take car of that. + if ($this->$v->auto_increment == true): + break; + else: + $cols[$v] = $this->$v->value; + endif; + + } + + // Persist object + $status = $db->save($cols, get_class($this)); + + return $status; + + } + + /** + * Update all properties of an Existing object + * + */ + function update($where = '') { + + if(empty($where)): + $constraint = array('id' => $this->id->value); + else: + $constraint = array($where => $this->$where->value); + endif; + + // Setup databse access object + $db = &owa_db::get_instance(); + + // Persist object + $status = $db->update($this->_getProperties(), $constraint, get_class($this)); + + return $status; + + } + + /** + * Update anmed list of properties of an existing object + * + * @param array $named_properties + * @param array $where + * @return boolean + */ + function partialUpdate($named_properties, $where) { + + $properties = array(); + + foreach ($named_properties as $n) { + + $properties[$n] = $this->$n->value; + + } + + // Setup databse access object + $db = &owa_db::get_instance(); + + // Persist object + $status = $db->update($properties, $where, get_class($this)); + + return $status; + + } + + + /** + * Delete Object + * + */ + function delete($id, $col = '') { + + // Setup databse access object + $db = &owa_db::get_instance(); + + if (empty($col)): + $col = 'id'; + endif; + + // Persist object + $status = $db->delete($id, $col, get_class($this)); + + return $status; + + } + + function getByPk($col, $value) { + + return $this->getByColumn($col, $value); + + } + + function getByColumn($col, $value) { + + // Setup databse access object + $db = &owa_db::get_instance(); + + $constraint = array($col => $value); + + $properties = $db->select($this->_getProperties(), $constraint, get_class($this)); + + return $this->setProperties($properties); + + } + + function find($params = array()) { + + $db = &owa_db::get_instance(); + + $params['primary_obj'] = $this; + + return $db->getObjs($params); + + } + + function query($params) { + + $db = &owa_db::get_instance(); + + $params['primary_obj'] = $this; + + return $db->selectQuery($params); + + } + + + /** + * Sets object attributes + * + * @param unknown_type $array + */ + function setProperties($array) { + + $properties = $this->getColumns(); + + foreach ($properties as $k => $v) { + + $this->$v->value = $array[$v]; + + } + + return; + } + + function setGuid($string) { + + return owa_lib::setStringGuid($string); + + } + + function set($name, $value) { + + return $this->$name->value = $value; + } + + function setValues($values) { + + $properties = array_keys(get_object_vars($this)); + + foreach ($properties as $k => $v) { + + $this->$v->value = $values[$v]; + + } + + return; + + } + + function get($name) { + + return $this->$name->value; + } + +} + +?> \ No newline at end of file diff --git a/owa_env.php b/owa_env.php index 511debfee..43a9a4cfa 100644 --- a/owa_env.php +++ b/owa_env.php @@ -1,40 +1,43 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -define('OWA_BASE_DIR', dirname(__FILE__)); -define('OWA_INCLUDE_DIR', OWA_BASE_DIR.'/includes/'); -define('OWA_PEARLOG_DIR', OWA_BASE_DIR.'/includes/Log-1.9.8'); -define('OWA_JPGRAPH_DIR', OWA_BASE_DIR.'/includes/jpgraph-1.20.3/src'); -define('OWA_PLUGINS_DIR', OWA_BASE_DIR.'/plugins'); -define('OWA_METRICS_DIR', OWA_BASE_DIR.'/plugins/metrics/'); -define('OWA_GRAPHS_DIR', OWA_BASE_DIR.'/plugins/graphs/'); -define('OWA_VERSION', '1.0'); - -?> + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +define('OWA_BASE_DIR', dirname(__FILE__)); +define('OWA_BASE_CLASSES_DIR', dirname(__FILE__). DIRECTORY_SEPARATOR); +define('OWA_BASE_CLASS_DIR', OWA_BASE_DIR.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.'base'.DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR); +define('OWA_INCLUDE_DIR', OWA_BASE_DIR.'/includes/'); +define('OWA_PEARLOG_DIR', OWA_BASE_DIR.'/includes/Log-1.9.9'); +define('OWA_PHPMAILER_DIR', OWA_BASE_DIR.'/includes/phpmailer-1.73/'); +define('OWA_JPGRAPH_DIR', OWA_BASE_DIR.'/includes/jpgraph-1.20.3/src/'); +define('OWA_PLUGINS_DIR', OWA_BASE_DIR.'/plugins'); +define('OWA_METRICS_DIR', OWA_BASE_DIR.'/plugins/metrics/'); +define('OWA_GRAPHS_DIR', OWA_BASE_DIR.'/plugins/graphs/'); +define('OWA_VERSION', '1.0'); + +?> diff --git a/owa_error.php b/owa_error.php index 6c4961dfd..7c76b54b1 100644 --- a/owa_error.php +++ b/owa_error.php @@ -1,305 +1,308 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_error { - - /** - * Configuration - * - * @var array - */ - var $config = array(); - - /** - * Instance of the current logger - * - * @var object - */ - var $logger; - - /** - * Error priority - * - * @var unknown_type - */ - var $priority; - - /** - * Gets instance of error logger - * - * @return object $logger - */ - function &get_instance() { - - static $logger; - - if (!isset($logger)): - - $config = &owa_settings::get_settings(); - - switch ($config['error_handler']) { - - case "development": - - //$config['debug_to_screen'] = true; - //$window = owa_error::make_window_logger(); - $logger = owa_error::make_file_logger(); - $file_mask = PEAR_LOG_ALL; - $logger->setMask($file_mask); - - //$logger = &Log::singleton('composite'); - //$logger->addChild($window); - //$logger->addChild($file); - break; - - case "async_development": - //$file = owa_error::make_file_logger(); - $console = owa_error::make_console_logger(); - $logger = &Log::singleton('composite'); - //$logger->addChild($file); - $logger->addChild($console); - break; - - case "production": - - $file = owa_error::make_file_logger(); - $file_mask = PEAR_LOG_ALL ^ Log::MASK(PEAR_LOG_DEBUG) ^ Log::MASK(PEAR_LOG_INFO); - $file->setMask($file_mask); - $mail = owa_error::make_mail_logger(); - $mail_mask = Log::MASK(PEAR_LOG_EMERG) | Log::MASK(PEAR_LOG_CRIT) | Log::MASK(PEAR_LOG_ALERT); - //$mail_mask = PEAR_LOG_ALL; - $mail->setMask($mail_mask); - $logger = &Log::singleton('composite'); - $logger->addChild($mail); - $logger->addChild($file); - break; - - default: - $file = owa_error::make_file_logger(); - $file_mask = PEAR_LOG_ALL ^ Log::MASK(PEAR_LOG_DEBUG); - $file->setMask($file_mask); - $mail = owa_error::make_mail_logger(); - $mail_mask = Log::MASK(PEAR_LOG_EMERG) | Log::MASK(PEAR_LOG_CRIT) | Log::MASK(PEAR_LOG_ALERT); - $mail_mask = PEAR_LOG_ALL; - $mail->setMask($mail_mask); - $logger = &Log::singleton('composite'); - $logger->addChild($mail); - $logger->addChild($file); - - } - - endif; - - return $logger; - } - - /** - * Returns the buffered error output - * - * @return unknown - */ - function &get_msgs() { - - static $msgs; - return $msgs; - } - - /** - * Interface to build various loggers - * - * @param unknown_type $type - */ - function make_logger($type) { - - switch ($type) { - case "display": - $this->make_display_logger(); - break; - case "window": - $this->make_window_logger(); - break; - case "file": - $this->make_file_logger(); - break; - case "syslog": - $this->make_syslog_logger(); - break; - case "mail": - $this->make_mail_logger(); - break; - case "console": - $this->make_console_logger(); - break; - } - - return; - } - - /** - * Builds a logger that writes to a seperate browser window. - * This uses a custom log handler that writes output to a temp static variable. - * - * @return object - */ - function make_window_logger() { - - $conf = array('title' => 'Error Log Output'); - $logger = &Log::singleton('winstatic', 'LogWindow', posix_getpid(), $conf); - return $logger; - } - /** - * Builds a logger that writes to the browser window. - * - * @todo build a custom handler that writes output ot temp static varibale - * @return object - */ - function make_display_logger() { - - $conf = array('error_prepend' => '', 'error_append' => ''); - $logger = &Log::singleton('display', '', posix_getpid(), $conf); - return $logger; - } - - function make_console_logger() { - define('STDOUT', fopen("php://stdout", "r")); - $conf = array('stream' => STDOUT, 'buffering' => false); - $logger = &Log::singleton('console', '', posix_getpid(), $conf); - return $logger; - } - - /** - * Builds a logger that writes to a file. - * - * @return unknown - */ - function make_file_logger() { - - $conf = array('mode' => 0600, 'timeFormat' => '%X %x'); - $logger = &Log::singleton('file', $this->config['error_log_file'], posix_getpid(), $conf); - return $logger; - } - - /** - * Builds a logger that sends lines via email - * - * @return unknown - */ - function make_mail_logger() { - - $conf = array('subject' => 'Important Error Log Events', 'from' => 'OWA-Error-Logger'); - $logger = &Log::singleton('mail', $this->config['notice_email'], posix_getpid(), $conf); - return $logger; - } - - /** - * Builds a composite logger object - * - * @param array $loggers - * @return object - */ - function make_composite_logger($loggers) { - - $logger = &Log::singleton('composite'); - - foreach ($loggers as $key) { - - $this->logger->addChild($key); - } - - return $logger; - } - - /** - * Alternative ereor handler for PHP specific errors. - * - * @param string $errno - * @param string $errmsg - * @param string $filename - * @param string $linenum - * @param string $vars - */ - function handlePhpError($errno = null, $errmsg, $filename, $linenum, $vars) { - - /* Map the PHP error to a Log priority. */ - switch ($code) { - case E_WARNING: - case E_USER_WARNING: - $priority = PEAR_LOG_WARNING; - break; - case E_NOTICE: - case E_USER_NOTICE: - $priority = PEAR_LOG_NOTICE; - break; - case E_ERROR: - case E_USER_ERROR: - $priority = PEAR_LOG_ERR; - break; - case "debug": - $priority = PEAR_LOG_DEBUG; - break; - default: - $priotity = PEAR_LOG_INFO; - } - - $dt = date("Y-m-d H:i:s (T)"); - - // set of errors for which a var trace will be saved - $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); - - $err = "\n"; - $err .= "\t" . $dt . "\n"; - $err .= "\t" . $errno . "\n"; - $err .= "\t" . $errortype[$errno] . "\n"; - $err .= "\t" . $errmsg . "\n"; - $err .= "\t" . $filename . "\n"; - $err .= "\t" . $linenum . "\n"; - - if (in_array($errno, $user_errors)) { - $err .= "\t" . wddx_serialize_value($vars, "Variables") . "\n"; - } - - $err .= "\n\n"; - - $this->logger->log($err, $priority); - - return; - } - /* - function log($errmsg, $priority) { - - return $this->logger->log($errmsg, $priority); - } - */ -} - - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_error { + + /** + * Configuration + * + * @var array + */ + var $config = array(); + + /** + * Instance of the current logger + * + * @var object + */ + var $logger; + + /** + * Error priority + * + * @var unknown_type + */ + var $priority; + + /** + * Gets instance of error logger + * + * @return object $logger + */ + function &get_instance() { + + static $logger; + + if (!isset($logger)): + + $config = &owa_settings::get_settings(); + + switch ($config['error_handler']) { + + case "development": + + //$config['debug_to_screen'] = true; + //$window = owa_error::make_window_logger(); + $logger = owa_error::make_file_logger(); + $file_mask = PEAR_LOG_ALL; + $logger->setMask($file_mask); + + //$logger = &Log::singleton('composite'); + //$logger->addChild($window); + //$logger->addChild($file); + break; + + case "async_development": + //$file = owa_error::make_file_logger(); + $console = owa_error::make_console_logger(); + $logger = &Log::singleton('composite'); + //$logger->addChild($file); + $logger->addChild($console); + break; + + case "production": + + $file = owa_error::make_file_logger(); + $file_mask = PEAR_LOG_ALL ^ Log::MASK(PEAR_LOG_DEBUG) ^ Log::MASK(PEAR_LOG_INFO); + $file->setMask($file_mask); + $mail = owa_error::make_mail_logger(); + $mail_mask = Log::MASK(PEAR_LOG_EMERG) | Log::MASK(PEAR_LOG_CRIT) | Log::MASK(PEAR_LOG_ALERT); + //$mail_mask = PEAR_LOG_ALL; + $mail->setMask($mail_mask); + $logger = &Log::singleton('composite'); + $logger->addChild($mail); + $logger->addChild($file); + break; + + default: + $file = owa_error::make_file_logger(); + $file_mask = PEAR_LOG_ALL ^ Log::MASK(PEAR_LOG_DEBUG); + $file->setMask($file_mask); + $mail = owa_error::make_mail_logger(); + $mail_mask = Log::MASK(PEAR_LOG_EMERG) | Log::MASK(PEAR_LOG_CRIT) | Log::MASK(PEAR_LOG_ALERT); + $mail_mask = PEAR_LOG_ALL; + $mail->setMask($mail_mask); + $logger = &Log::singleton('composite'); + $logger->addChild($mail); + $logger->addChild($file); + + } + + endif; + + return $logger; + } + + /** + * Returns the buffered error output + * + * @return unknown + */ + function &get_msgs() { + + static $msgs; + return $msgs; + } + + /** + * Interface to build various loggers + * + * @param unknown_type $type + */ + function make_logger($type) { + + switch ($type) { + case "display": + $this->make_display_logger(); + break; + case "window": + $this->make_window_logger(); + break; + case "file": + $this->make_file_logger(); + break; + case "syslog": + $this->make_syslog_logger(); + break; + case "mail": + $this->make_mail_logger(); + break; + case "console": + $this->make_console_logger(); + break; + } + + return; + } + + /** + * Builds a logger that writes to a seperate browser window. + * This uses a custom log handler that writes output to a temp static variable. + * + * @return object + */ + function make_window_logger() { + + $conf = array('title' => 'Error Log Output'); + $logger = &Log::singleton('winstatic', 'LogWindow', posix_getpid(), $conf); + return $logger; + } + /** + * Builds a logger that writes to the browser window. + * + * @todo build a custom handler that writes output ot temp static varibale + * @return object + */ + function make_display_logger() { + + $conf = array('error_prepend' => '', 'error_append' => ''); + $logger = &Log::singleton('display', '', posix_getpid(), $conf); + return $logger; + } + + function make_console_logger() { + define('STDOUT', fopen("php://stdout", "r")); + $conf = array('stream' => STDOUT, 'buffering' => false); + $logger = &Log::singleton('console', '', posix_getpid(), $conf); + return $logger; + } + + /** + * Builds a logger that writes to a file. + * + * @return unknown + */ + function make_file_logger() { + + $conf = array('mode' => 0600, 'timeFormat' => '%X %x'); + $logger = &Log::singleton('file', $this->config['error_log_file'], posix_getpid(), $conf); + return $logger; + } + + /** + * Builds a logger that sends lines via email + * + * @return unknown + */ + function make_mail_logger() { + + $conf = array('subject' => 'Important Error Log Events', 'from' => 'OWA-Error-Logger'); + $logger = &Log::singleton('mail', $this->config['notice_email'], posix_getpid(), $conf); + return $logger; + } + + /** + * Builds a composite logger object + * + * @param array $loggers + * @return object + */ + function make_composite_logger($loggers) { + + $logger = &Log::singleton('composite'); + + foreach ($loggers as $key) { + + $this->logger->addChild($key); + } + + return $logger; + } + + /** + * Alternative error handler for PHP specific errors. + * + * @param string $errno + * @param string $errmsg + * @param string $filename + * @param string $linenum + * @param string $vars + */ + function handlePhpError($errno = null, $errmsg, $filename, $linenum, $vars) { + + /* Map the PHP error to a Log priority. */ + /*switch ($errno) { + case E_WARNING: + case E_USER_WARNING: + $priority = PEAR_LOG_WARNING; + break; + case E_NOTICE: + case E_USER_NOTICE: + $priority = PEAR_LOG_NOTICE; + break; + case E_ERROR: + case E_USER_ERROR: + $priority = PEAR_LOG_ERR; + break; + case "debug": + $priority = PEAR_LOG_DEBUG; + break; + default: + $priotity = PEAR_LOG_INFO; + } + */ + $dt = date("Y-m-d H:i:s (T)"); + + // set of errors for which a var trace will be saved + $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); + + $err = "\n"; + $err .= "\t" . $dt . "\n"; + $err .= "\t" . $errno . "\n"; + $err .= "\t" . $errmsg . "\n"; + $err .= "\t" . $filename . "\n"; + $err .= "\t" . $linenum . "\n"; + + if (in_array($errno, $user_errors)) { + $err .= "\t" . wddx_serialize_value($vars, "Variables") . "\n"; + } + + $err .= "\n\n"; + $conf = array('mode' => 0600, 'timeFormat' => '%X %x'); + $config = &owa_settings::get_settings(); + $logger = &Log::singleton('file', $config['error_log_file'], posix_getpid(), $conf); + $file_mask = PEAR_LOG_ALL; + $logger->setMask($file_mask); + $logger->log($err, $priority); + + return; + } + /* + function log($errmsg, $priority) { + + return $this->logger->log($errmsg, $priority); + } + */ +} + + ?> \ No newline at end of file diff --git a/owa_event_class.php b/owa_event_class.php index 22d838dd9..5b43276ed 100644 --- a/owa_event_class.php +++ b/owa_event_class.php @@ -16,8 +16,7 @@ // $Id$ // -require_once 'owa_settings_class.php'; -require_once 'owa_lib.php'; +require_once 'owa_base.php'; require_once 'eventQueue.php'; /** @@ -32,14 +31,7 @@ * @since owa 1.0.0 */ -class owa_event { - - /** - * Configuration - * - * @var array - */ - var $config; +class owa_event extends owa_base { /** * Event Properties @@ -55,13 +47,6 @@ class owa_event { */ var $eq; - /** - * Error handler - * - * @var object - */ - var $e; - /** * Database access object * @@ -89,26 +74,26 @@ class owa_event { */ function owa_event() { - $this->guid = $this->set_guid(); - $this->properties['guid'] = $this->guid; + $this->owa_base(); - $this->config = &owa_settings::get_settings(); - $this->e = &owa_error::get_instance(); + // Load event queue $this->eq = &eventQueue::get_instance(); - // Retrieve inbound visitor and session values - $this->properties['inbound_visitor_id'] = $_COOKIE[$this->config['ns'].$this->config['visitor_param']]; - $this->properties['inbound_session_id'] = $_COOKIE[$this->config['ns'].$this->config['session_param']]; - // Retrieve the time of last request - $this->properties['last_req'] = $_COOKIE[$this->config['ns'].$this->config['last_request_param']]; + // Set GUID for event + $this->guid = $this->set_guid(); + $this->properties['guid'] = $this->guid; - //epoc time - list($msec, $sec) = explode(" ", microtime()); - $this->properties['sec'] = $sec; - $this->properties['msec'] = $msec; + return; + } + + /** + * Sets time related event properties + * + * @param integer $timestamp + */ + function setTime($timestamp) { - //determine time of request - $this->properties['timestamp'] = time(); + $this->properties['timestamp'] = $timestamp; $this->properties['year'] = date("Y", $this->properties['timestamp']); $this->properties['month'] = date("n", $this->properties['timestamp']); $this->properties['day'] = date("d", $this->properties['timestamp']); @@ -119,27 +104,11 @@ function owa_event() { $this->properties['minute'] = date("i", $this->properties['timestamp']); $this->properties['second'] = date("s", $this->properties['timestamp']); - //set default site id. Can be overwriten by caller if needed. - $this->properties['site_id'] = $this->config['site_id']; - - $this->properties['ip_address'] = $this->get_ip(); - $this->properties['ua'] = $_SERVER['HTTP_USER_AGENT']; - $this->properties['site'] = $_SERVER['SERVER_NAME']; - $this->properties['referer'] = $_SERVER['HTTP_REFERER']; - - - return; - } - - /** - * Controller logic Stub for concrete classes - * - */ - function process() { - - $this->log(); + //epoc time + list($msec, $sec) = explode(" ", microtime()); + $this->properties['sec'] = $sec; + $this->properties['msec'] = $msec; - return; } /** @@ -147,10 +116,10 @@ function process() { * */ function log() { - - $this->eq->log($this->properties, $this->state); - $this->e->debug('Logged '.$this->state.' to event queue...'); - return; + + $this->e->debug('Logging '.$this->state.' to event queue...'); + return $this->eq->log($this->properties, $this->state); + } /** @@ -178,21 +147,21 @@ function _setProperties($properties = null) { * @return string * @access private */ - function get_ip() { + function get_ip(&$params) { - if ($_SERVER["HTTP_X_FORWARDED_FOR"]): - if ($_SERVER["HTTP_CLIENT_IP"]): - $proxy = $_SERVER["HTTP_CLIENT_IP"]; + if ($params["HTTP_X_FORWARDED_FOR"]): + if ($params["HTTP_CLIENT_IP"]): + $proxy = $params["HTTP_CLIENT_IP"]; else: - $proxy = $_SERVER["REMOTE_ADDR"]; + $proxy = $params["REMOTE_ADDR"]; endif; - $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; + $ip = $params["HTTP_X_FORWARDED_FOR"]; else: - if ($_SERVER["HTTP_CLIENT_IP"]): - $ip = $_SERVER["HTTP_CLIENT_IP"]; + if ($params["HTTP_CLIENT_IP"]): + $ip = $params["HTTP_CLIENT_IP"]; else: - $ip = $_SERVER["REMOTE_ADDR"]; + $ip = $params["REMOTE_ADDR"]; endif; endif; @@ -228,18 +197,19 @@ function set_string_guid($string) { /** * Resolve hostname from IP address * - * @access private + * @access public */ - function resolve_host() { + function setHost($remote_host) { // See if host is already resolved - if (!empty($_SERVER['REMOTE_HOST'])): + if (!empty($remote_host)): // Use pre-resolved host if available - $fullhost = $_SERVER['REMOTE_HOST']; - + $fullhost = $remote_host; else: // Do the host lookup - $fullhost = @gethostbyaddr($this->properties['ip_address']); + if ($this->config['resolve_hosts'] = true): + $fullhost = gethostbyaddr($this->properties['ip_address']); + endif; endif; if (!empty($fullhost)): diff --git a/owa_graph.php b/owa_graph.php index b20fc779e..6a977e892 100644 --- a/owa_graph.php +++ b/owa_graph.php @@ -1,456 +1,135 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_graph { - - /** - * Current Time - * - * @var array - */ - var $time_now; - - /** - * Graph Data - * - * @var array - */ - var $data = array(); - - /** - * Graph Parameters - * - * @var array - */ - var $params = array(); - - /** - * Graph Height - * - * @var integer - */ - var $height = 200; - - /** - * Graph Width - * - * @var integer - */ - var $width = 400; - - var $size = .3; - - /** - * Image Format - * - * @var string - */ - var $image_format = "png"; - - /** - * Metrics - * - * @var unknown_type - */ - var $metrics; - - /** - * API type - * - * @var string - */ - var $api_type = 'graph'; - - /** - * API Calls - * - * @var array - */ - var $api_calls = array(); - - /** - * Configuration - * - * @var array - */ - var $config; - - /** - * Error handler - * - * @var object - */ - var $e; - - /** - * Constructor - * - * @return owa_graph - * @access public - */ - function owa_graph() { - - $this->config = &owa_settings::get_settings(); - $this->e = &owa_error::get_instance(); - - // Set current time - $this->time_now = owa_lib::time_now(); - - // Fetch all metrics objects through the api - $this->metrics = owa_api::get_instance('metric'); - - return; - } - - function graph($type) { - - switch ($type) { - - case "bar": - $this->bar_graph(); - break; - case "line": - $this->line_graph(); - break; - case "pie": - $this->pie_graph(); - break; - case "bar_line": - $this->bar_line_graph(); - break; - case "stacked_area": - $this->stacked_area_graph(); - break; - default: - $this->bar_graph(); - - } - - return; - - } - - /** - * Line Graph Wrapper - * - */ - function line_graph() { - - require_once (OWA_JPGRAPH_DIR.'/jpgraph_line.php'); - - $datay = $this->data['datay']; - $graph = new Graph($this->width,$this->height,"auto"); - $graph->SetScale("textlin"); - $graph->img->SetImgFormat($this->image_format); - $graph->img->SetMargin(40,40,40,40); - $graph->SetShadow(); - - $graph->title->SetFont(FF_FONT1,FS_BOLD); - $graph->xaxis->SetTickLabels($this->data['datax']); - - $graph->title->Set($this->params['graph_title']); - $graph->xaxis->title->Set($this->params['xaxis_title']); - $graph->yaxis->title->Set($this->params['yaxis_title']); - - $p1 = new LinePlot($datay); - $p1->SetFillColor("orange"); - $p1->mark->SetType(MARK_FILLEDCIRCLE); - $p1->mark->SetFillColor("red"); - $p1->mark->SetWidth(2); - $graph->Add($p1); - - $graph->Stroke(); - - return; - } - - /** - * Vertical Bar Graph - * - */ - function bar_graph() { - - require_once (OWA_JPGRAPH_DIR .'/jpgraph_bar.php'); - - $datay = $this->data['datay']; - - // Create the graph. These two calls are always required - $graph = new Graph($this->params['width'],$this->params['height'],"auto"); - $graph->SetScale("textlin"); - $graph->img->SetImgFormat($this->image_format); - $graph->SetBackgroundGradient('white','white'); - - // Add a drop shadow - //$graph->SetShadow(); - - // Adjust the margin a bit to make more room for titles - $graph->img->SetMargin(40,30,20,40); - - // Create a bar pot - $bplot = new BarPlot($datay); - - $bplot->SetFillColor('orange'); - $bplot->SetWidth(1.0); - //$bplot->SetValuePos('top'); - $graph->Add($bplot); - - // Setup the titles - $graph->title->Set($this->params['graph_title']); - $graph->xaxis->SetTickLabels($this->data['datax']); - $graph->xaxis->SetLabelAngle(90); - $graph->xaxis->title->Set($this->params['xaxis_title']); - $graph->yaxis->title->Set($this->params['yaxis_title']); - - $graph->title->SetFont(FF_FONT1,FS_BOLD); - $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); - $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); - - // Display the graph - $graph->Stroke(); - - return; - } - - /** - * Pie Graph - * - */ - function pie_graph() { - - require_once (OWA_JPGRAPH_DIR.'/jpgraph_pie.php'); - require_once (OWA_JPGRAPH_DIR .'/jpgraph_pie3d.php'); - - $data = $this->data['data_pie']; - - // Create the Pie Graph. - $graph = new PieGraph($this->params['width'],$this->params['height']); - - // Set A title for the plot - //$graph->title->Set($this->params['graph_title']); - $graph->title->SetFont(FF_FONT1,FS_BOLD); - $graph->title->SetColor("black"); - //$graph->legend->SetAbsPos(10,10, 'right', 'top'); - //$graph->legend->SetColumns(3); - - // Create pie plot - $p1 = new PiePlot($data); - //$p1->SetCenter(0.5,0.55); - $p1->SetSize($this->size); - $p1->value->HideZero(); - - //Enable and set policy for guide-lines - $p1->SetGuideLines(true, false); - $p1->SetGuideLinesAdjust(1.4); - - // Setup the labels - $p1->SetLabelType(PIE_VALUE_ABS); - $p1->value->Show(); - $p1->value->SetFont(FF_FONT1,FS_BOLD); - //$p1->value->SetFormat('%d '.$this->params['slice_label']); - //$p1->SetLegends($this->params['legends']); - - $p1->SetLabels($this->params['labels'], 1.1); - - // Add and stroke - $graph->Add($p1); - - $graph->Stroke(); - - return; - } - - function bar_line_graph() { - - include_once (OWA_JPGRAPH_DIR .'/jpgraph_line.php'); - include_once (OWA_JPGRAPH_DIR .'/jpgraph_bar.php'); - - $data_y1 = $this->data['y1']; - $data_y2 = $this->data['y2']; - - $datax = $this->data['x']; - - // Create the graph. - $graph = new Graph($this->params['width'],$this->params['height']); - //$graph->img->SetAntiAliasing(); - $graph->SetColor('white'); - $graph->SetMarginColor('white'); - $graph->SetFrame(true,'silver',1); - $graph->SetScale("textlin"); - $graph->SetMargin(40,40,20,40); - //$graph->SetShadow(); - $graph->xaxis->SetTickLabels($datax); - $graph->xaxis->SetLabelAngle(90); - - // Create the linear error plot - $l1plot = new LinePlot($data_y1); - $l1plot->SetColor("lightblue"); - $l1plot->SetWeight(1); - $l1plot->SetFillColor("lightblue@0.2"); - $l1plot->SetLegend($this->params['y1_title']); - //Center the line plot in the center of the bars - $l1plot->SetBarCenter(); - - // Create the bar plot - $bplot = new BarPlot($data_y2); - $bplot->SetFillColor("orange"); - $bplot->SetWidth(1.0); - $bplot->SetLegend($this->params['y2_title']); - - // Add the plots to the graph - $graph->Add($bplot); - $graph->Add($l1plot); - - - $graph->title->Set($this->params['graph_title']); - $graph->xaxis->title->Set($this->params['xaxis_title']); - $graph->yaxis->title->Set($this->params['yaxis_title']); - - $graph->title->SetFont(FF_FONT1,FS_BOLD); - $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); - $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); - - - // Display the graph - $graph->Stroke(); - - return; - } - - function stacked_area_graph() { - - include_once (OWA_JPGRAPH_DIR .'/jpgraph_line.php'); - - $data_y1 = $this->data['y1']; - $data_y2 = $this->data['y2']; - $datax = $this->data['x']; - - // Create the graph. - $graph = new Graph($this->params['width'],$this->params['height']); - //$graph->img->SetAntiAliasing(); - $graph->SetColor('white'); - $graph->SetMarginColor('white'); - $graph->SetFrame(true,'silver',1); - $graph->SetScale("textlin"); - $graph->SetMargin(40,40,20,40); - $graph->xaxis->SetTickLabels($datax); - $graph->xaxis->SetLabelAngle(90); - - // Create the linear plots for each category - $dplot[] = new LinePLot($datay1); - $dplot[] = new LinePLot($datay2); - $dplot[] = new LinePLot($datay3); - - $dplot[0]->SetFillColor("red"); - $dplot[1]->SetFillColor("blue"); - $dplot[2]->SetFillColor("green"); - - // Create the accumulated graph - $accplot = new AccLinePlot($dplot); - - // Add the plot to the graph - $graph->Add($accplot); - - $dplot->SetLegend($this->params['y1_title']); - - $graph->title->Set($this->params['graph_title']); - $graph->xaxis->title->Set($this->params['xaxis_title']); - $graph->yaxis->title->Set($this->params['yaxis_title']); - - $graph->title->SetFont(FF_FONT1,FS_BOLD); - $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); - $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); - - // Display the graph - $graph->Stroke(); - - return; - } - - function error_graph($msg = 'There is no Data to Graph') { - - include_once (OWA_JPGRAPH_DIR .'/jpgraph_canvas.php'); - - $graph = new CanvasGraph($this->params['width'], $this->params['height']); - - $t1 = new Text($msg); - $t1->Pos(0.05, 0.1); - $t1->SetOrientation('h'); - $t1->SetFont(FF_FONT1, FS_BOLD); - $t1->SetColor('orange'); - $graph->AddText($t1); - $graph->Stroke(); - return; - } - - - /** - * Get Display Label for Reporting Period - * - * @param string $period - * @return string $label - * @access public - */ - function get_period_label($period) { - - return owa_lib::get_period_label($period); - } - - /** - * makes linear date scale for x axis - * - * @param array $variable - * @param string $label - * @param string $delim - * @return array - */ - function make_date_label($variable, $label, $delim = '/') { - - $date = array(); - foreach ($variable as $key => $value) { - - $date[$key] = $label[$key].$delim.$value; - - } - - return $date; - } - - function get_month_label($month) { - - return owa_lib::get_month_label($month); - } - -} - -?> + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_graph extends owa_base { + + /** + * Current Time + * + * @var array + */ + var $time_now; + + /** + * Graph Data + * + * @var array + */ + var $data = array(); + + /** + * Graph Parameters + * + * @var array + */ + var $params = array(); + + /** + * Graph Height + * + * @var integer + */ + var $height = 200; + + /** + * Graph Width + * + * @var integer + */ + var $width = 400; + + var $size = .3; + + /** + * Image Format + * + * @var string + */ + var $image_format = "jpeg"; + + /** + * Constructor + * + * @return owa_graph + * @access public + */ + function owa_graph() { + + // Set current time + $this->owa_base(); + $this->time_now = owa_lib::time_now(); + + return; + } + + /** + * Get Display Label for Reporting Period + * + * @param string $period + * @return string $label + * @access public + */ + function get_period_label($period) { + + return owa_lib::get_period_label($period); + } + + /** + * makes linear date scale for x axis + * + * @param array $variable + * @param string $label + * @param string $delim + * @return array + */ + function make_date_label($variable, $label, $delim = '/') { + + $date = array(); + foreach ($variable as $key => $value) { + + $date[$key] = $label[$key].$delim.$value; + + } + + return $date; + } + + function get_month_label($month) { + + return owa_lib::get_month_label($month); + } + + + +} + +?> diff --git a/owa_httpRequest.php b/owa_httpRequest.php index c3d0bcd10..3b671d814 100644 --- a/owa_httpRequest.php +++ b/owa_httpRequest.php @@ -1,156 +1,182 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_http extends Snoopy { - - /** - * Configuration - * - * @var array - */ - var $config; - - /** - * Error handler - * - * @var object - */ - var $e; - - /** - * The length of text contained in the snippet - * - * @var string - */ - var $snip_len = 100; - - /** - * The string that is added to the beginning and - * end of snippet text. - * - * @var string - */ - var $snip_str = '...'; - - /** - * Anchor information for a particular link - * - * @var array - */ - var $anchor_info; - - function owa_http() { - - $this->config = &owa_settings::get_settings(); - $this->e = &owa_error::get_instance(); - $this->agent = $this->config['owa_user_agent']; - - return; - } - - /** - * Searches a fetched html document for the anchor of a specific url - * - * @param string $link - */ - function extract_anchor($link) { - - $escaped_link = str_replace(array("/", "?"), array("\/", "\?"), $link); - $pattern = '/]*href=\"'.$escaped_link.'\"[^>]*>(.*?)<\/a>/'; - - $search = preg_match($pattern, $this->results, $matches); - - //print $pattern; - - $this->anchor_info = array('anchor_tag' => $matches[0], 'anchor_text' => strip_tags($matches[0])); - - return; - } - - /** - * Creates a text snippet of the portion of page where the - * specific link is found. - * - * Takes fully qualified URL for the link to search for. - * - * @param string $link - * @return string - */ - function extract_anchor_snippet($link){ - - // Search the page for a specific anchor - $this->extract_anchor($link); - - if(!empty($this->anchor_info['anchor_tag'])): - - // strip html from doc - $nohtml = strip_tags(owa_lib::inputFilter($this->results)); - - // calc len of the anchor text - $atext_len = strlen($this->anchor_info['anchor_text']); - - // find position within document of the anchor text - $start = strpos($nohtml, $this->anchor_info['anchor_text']); - - // Create first segment of snippet - $part1 = substr($nohtml, $start-$this->snip_len, $this->snip_len); - - // Create second segment of snippet - $part2 = substr($nohtml, $start+$atext_len, $this->snip_len); - - // Put humpty dumpy back together again and create actual snippet - $snippet = $this->snip_str.$part1.' '.strip_tags($this->anchor_info['anchor_tag']).' '.$part2.$this->snip_str; - - else: - - $snippet = ''; - - endif; - - return $snippet; - - } - - function extract_title() { - - preg_match('~(||(\s*(.*?)\s*))~i', $this->results, $m); - - return $m[3]; - } - -} - - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_http extends Snoopy { + + /** + * Configuration + * + * @var array + */ + var $config; + + /** + * Error handler + * + * @var object + */ + var $e; + + /** + * The length of text contained in the snippet + * + * @var string + */ + var $snip_len = 100; + + /** + * The string that is added to the beginning and + * end of snippet text. + * + * @var string + */ + var $snip_str = '...'; + + /** + * Anchor information for a particular link + * + * @var array + */ + var $anchor_info; + + function owa_http() { + + $this->config = &owa_settings::get_settings(); + $this->e = &owa_error::get_instance(); + $this->agent = $this->config['owa_user_agent']; + + return; + } + + /** + * Searches a fetched html document for the anchor of a specific url + * + * @param string $link + */ + function extract_anchor($link) { + + $escaped_link = str_replace(array("/", "?"), array("\/", "\?"), $link); + $pattern = '/]*href=\"'.$escaped_link.'\"[^>]*>(.*?)<\/a>/'; + + $search = preg_match($pattern, $this->results, $matches); + + //print $pattern; + + $this->anchor_info = array('anchor_tag' => $matches[0], 'anchor_text' => strip_tags($matches[0])); + + return; + } + + /** + * Creates a text snippet of the portion of page where the + * specific link is found. + * + * Takes fully qualified URL for the link to search for. + * + * @param string $link + * @return string + */ + function extract_anchor_snippet($link){ + + // Search the page for a specific anchor + $this->extract_anchor($link); + + if(!empty($this->anchor_info['anchor_tag'])): + + // drop certain HTML entitities and their content + $this->results = $this->strip_selected_tags($this->results, "<head><script><object>", true); + + // strip html from doc + $nohtml = strip_tags(owa_lib::inputFilter($this->results)); + + // calc len of the anchor text + $atext_len = strlen($this->anchor_info['anchor_text']); + + // find position within document of the anchor text + $start = strpos($nohtml, $this->anchor_info['anchor_text']); + + if ($start < $this->snip_len): + $part1_start_pos = 0; + $part1_snip_len = $start; + else: + $part1_start_pos = $start - $this->snip_len; + $part1_snip_len = $this->snip_len; + endif; + + + // Create first segment of snippet + $part1 = trim(substr($nohtml, $part1_start_pos, $part1_snip_len)); + //$part1 = str_replace(array('\r\n', '\n\n', '\t', '\r', '\n'), '', $part1); + + // Create second segment of snippet + $part2 = trim(substr($nohtml, $start + $atext_len, $this->snip_len)); + + // Put humpty dumpy back together again and create actual snippet + $snippet = $this->snip_str.$part1.' <span class="snippet_anchor">'.strip_tags($this->anchor_info['anchor_tag']).'</span> '.$part2.$this->snip_str; + + else: + + $snippet = ''; + + endif; + + return $snippet; + + } + + function extract_title() { + + preg_match('~(</head>|<body>|(<title>\s*(.*?)\s*))~i', $this->results, $m); + + $this->e->debug("referer title extract: ". print_r($m, true)); + + return $m[3]; + } + + function strip_selected_tags($str, $tags = "", $stripContent = false) { + preg_match_all("/<([^>]+)>/i",$tags,$allTags,PREG_PATTERN_ORDER); + foreach ($allTags[1] as $tag){ + if ($stripContent) { + $str = preg_replace("/<".$tag."[^>]*>.*<\/".$tag.">/iU","",$str); + } + $str = preg_replace("/<\/?".$tag."[^>]*>/iU","",$str); + } + return $str; + } + +} + + ?> \ No newline at end of file diff --git a/owa_install.php b/owa_install.php index f8fa36fd5..4dfe422ab 100644 --- a/owa_install.php +++ b/owa_install.php @@ -16,7 +16,7 @@ // $Id$ // -require_once (OWA_BASE_DIR.'/owa_settings_class.php'); +require_once (OWA_BASE_DIR.'/owa_base.php'); require_once (OWA_BASE_DIR.'/owa_db.php'); /** @@ -30,14 +30,7 @@ * @version $Revision$ * @since owa 1.0.0 */ -class owa_install { - - /** - * Configuration - * - * @var array - */ - var $config = array(); +class owa_install extends owa_base{ /** * Data access object @@ -54,18 +47,18 @@ class owa_install { var $version; /** - * Error Handler + * Params array * - * @var object + * @var array */ - var $e; + var $params; /** - * Params array + * Module name * - * @var array + * @var unknown_type */ - var $params; + var $module; /** * Constructor @@ -75,9 +68,8 @@ class owa_install { function owa_install() { - $this->config = &owa_settings::get_settings(); + $this->owa_base(); $this->db = &owa_db::get_instance(); - $this->e = &owa_error::get_instance(); return; } diff --git a/owa_lib.php b/owa_lib.php index 7d6e891c5..8ebb2a8a3 100644 --- a/owa_lib.php +++ b/owa_lib.php @@ -1,585 +1,794 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_lib { - - /** - * Convert Associative Array to String - * - * @param string $inner_glue - * @param string $outer_glue - * @param array $array - * @return string - */ - function implode_assoc($inner_glue, $outer_glue, $array) { - $output = array(); - foreach( $array as $key => $item ) { - $output[] = $key . $inner_glue . $item; - } - - return implode($outer_glue, $output); - } - - /** - * Deconstruct Associative Array - * - * For example this takes array([1] => array(a => dog, b => cat), [2] => array(a => sheep, b => goat)) - * and tunrs it into array([a] => array(dog, sheep), [b] => array(cat, goat)) - * - * @param array $a_array - * @return array $data_arrays - * @access public - */ - function deconstruct_assoc($a_array) { - - $data_arrays = array(); - - if(!empty($a_array[1])) : - - foreach ($a_array as $key => $value) { - foreach ($value as $k => $v) { - $data_arrays[$k][] = $v; - - } - } - else: - //print_r($a_array[0]); - foreach ($a_array[0] as $key => $value) { - $data_arrays[$key][] = $value; - } - endif; - - return $data_arrays; - } - - - function decon_assoc($a_array) { - - $data_arrays = array(); - - foreach ($a_array as $key => $value) { - //foreach ($value as $k => $v) { - $data_arrays[$key][] = $value; - - //} - } - - return $data_arrays; - } - - /** - * Array of Current Time - * - * @return array - * @access public - */ - function time_now() { - - $timestamp = time(); - - return array( - - 'year' => date("Y", $timestamp), - 'month' => date("n", $timestamp), - 'day' => date("d", $timestamp), - 'dayofweek' => date("w", $timestamp), - 'dayofyear' => date("z", $timestamp), - 'weekofyear' => date("W", $timestamp), - 'hour' => date("G", $timestamp), - 'minute' => date("i", $timestamp), - 'second' => date("s", $timestamp), - 'timestamp' => $timestamp - ); - } - - /** - * Stub of debug Handler - * - * @return string - * @access public - * @static - */ - function &get_debugmsgs() { - - static $msgs; - return $msgs; - } - - /** - * Error Handler - * - * @param string $msg - * @access public - */ - function errorHandler($msg) { - - $conf = array('mode' => 0755, 'timeFormat' => '%X %x'); - $error_logger = &Log::singleton('file', $this->config['error_log_file'], 'ident', $conf); - $this->error_logger->_lineFormat = '[%3$s]'; - - return; - } - - /** - * Information array for Months in the year. - * - * @return array - */ - function months() { - - return array( - - 1 => array('label' => 'January'), - 2 => array('label' => 'February'), - 3 => array('label' => 'March'), - 4 => array('label' => 'April'), - 5 => array('label' => 'May'), - 6 => array('label' => 'June'), - 7 => array('label' => 'July'), - 8 => array('label' => 'August'), - 9 => array('label' => 'September'), - 10 => array('label' => 'October'), - 11 => array('label' => 'November'), - 12 => array('label' => 'December') - ); - - } - - function days() { - - return array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); - } - - function years() { - - static $years; - - if (empty($years)): - - $start_year = 2005; - - $years = array($start_year); - - $num_years = date("Y", time()) - $start_year; - - for($i=1; $i<=$num_years; $i++) { - - $years[] = $start_year + $i; - } - - $years = array_reverse($years); - - endif; - - return $years; - } - - - /** - * Returns a label from an array of months - * - * @param int $month - * @return string - */ - function get_month_label($month) { - - static $months; - - if (empty($months)): - - $months = owa_lib::months(); - - endif; - - return $months[$month]['label']; - - } - - - /** - * Sets the suffix for Days used in Date labels - * - * @param string $day - * @return string - */ - function setDaySuffix($day) { - - switch ($day) { - - case "1": - $day_suffix = 'st'; - break; - case "2": - $day_suffix = 'nd'; - break; - case "3": - $day_suffix = 'rd'; - break; - default: - $day_suffix = 'th'; - } - - return $day_suffix; - - } - - /** - * Generates the label for a date - * - * @param array $params - * @return string - */ - function getDatelabel($params) { - - switch ($params['period']) { - - case "day": - return sprintf("%s, %d%s %s", - owa_lib::get_month_label($params['month']), - $params['day'], - $day_suffix, - $params['year'] - ); - break; - - case "month": - return sprintf("%s %s", - owa_lib::get_month_label($params['month']), - $params['year'] - ); - break; - - case "year": - return sprintf("%s", - $params['year'] - ); - break; - case "date_range": - return sprintf("%s, %d%s %s - %s, %d%s %s", - owa_lib::get_month_label($params['month']), - $params['day'], - owa_lib::setDaySuffix($params['day']), - $params['year'], - owa_lib::get_month_label($params['month2']), - $params['day2'], - owa_lib::setDaySuffix($params['day2']), - $params['year2'] - ); - break; - } - - return false; - - } - - /** - * Array of Reporting Periods - * - * @return array - */ - function reporting_periods() { - - return array( - - 'today' => array('label' => 'Today'), - 'yesterday' => array('label' => 'Yesterday'), - 'this_week' => array('label' => 'This Week'), - 'this_month' => array('label' => 'This Month'), - 'this_year' => array('label' => 'This Year'), - 'last_week' => array('label' => 'Last Week'), - 'last_month' => array('label' => 'Last Month'), - 'last_year' => array('label' => 'Last Year'), - 'last_half_hour' => array('label' => 'The Last 30 Minutes'), - 'last_hour' => array('label' => 'Last Hour'), - 'last_24_hours' => array('label' => 'The Last 24 Hours'), - 'last_seven_days' => array('label' => 'The Last Seven Days'), - 'last_thirty_days' => array('label' => 'The Last Thirty Days'), - 'same_day_last_week' => array('label' => 'Same Day last Week'), - 'same_week_last_year' => array('label' => 'Same Week Last Year'), - 'same_month_last_year' => array('label' => 'Same Month Last Year'), - //'day' => array('label' => 'Day'), - //'month' => array('label' => 'Month'), - //'year' => array('label' => 'Year'), - //'date_range' => array('label' => 'Date Range') - ); - - } - - /** - * Array of Date specific Reporting Periods - * - * @return array - */ - function date_reporting_periods() { - - return array( - - 'day' => array('label' => 'Day'), - 'month' => array('label' => 'Month'), - 'year' => array('label' => 'Year'), - 'date_range' => array('label' => 'Date Range') - ); - - } - - /** - * Gets label for a particular reporting period - * - * @param unknown_type $period - * @return unknown - */ - function get_period_label($period) { - - $periods = owa_lib::reporting_periods(); - - return $periods[$period]['label']; - } - - /** - * Assembles the current URL from request params - * - * @return string - */ - function get_current_url() { - - $url = 'http'; - - if($_SERVER['HTTPS']=='on'): - $url.= 's'; - endif; - - $url .= '://'.$_SERVER['SERVER_NAME']; - - if($_SERVER['SERVER_PORT'] != 80): - $url .= ':'.$_SERVER['SERVER_PORT']; - endif; - - $url .= $_SERVER['REQUEST_URI']; - - return $url; - } - - /** - * Builds date param array from GET - * - * @return array - */ - function getRestparams() { - - $config = &owa_settings::get_settings(); - - $params = array(); - - $params['owa_action'] = $_GET['owa_action']; - $params['owa_page'] = $_GET['owa_page']; - $params['year'] = $_GET['year']; - $params['month'] = $_GET['month']; - $params['day'] = $_GET['day']; - $params['dayofyear'] = $_GET['dayofyear']; - $params['weekofyear'] = $_GET['weekofyear']; - $params['hour'] = $_GET['hour']; - $params['minute'] = $_GET['minute']; - $params['year2'] = $_GET['year2']; - $params['month2'] = $_GET['month2']; - $params['day2'] = $_GET['day2']; - $params['dayofyear2'] = $_GET['dayofyear2']; - $params['weekofyear2'] = $_GET['weekofyear2']; - $params['hour2'] = $_GET['hour2']; - $params['minute2'] = $_GET['minute2']; - $params['limit'] = $_GET['limit']; - $params['offset'] = $_GET['offset']; - $params['sortby'] = $_GET['sortby']; - $params['period'] = $_GET['period']; - $params['site_id'] = $_GET['site_id']; - $params['type'] = $_GET['type']; - $params['api_call'] = $_GET['name']; - $params['session_id'] = $_GET['session_id']; - $params['visitor_id'] = $_GET['visitor_id']; - $params['document_id'] = $_GET['document_id']; - $params['referer_id'] = $_GET['referer_id']; - $params['source'] = $_GET['source']; - $params['page_url'] = base64_decode($_GET['page_url']); - $params['target_url'] = base64_decode($_GET['target_url']); - $params['dom_element_name'] = $_GET['dom_element_name']; - $params['dom_element_value'] = $_GET['dom_element_value']; - $params['dom_element_id'] = $_GET['dom_element_id']; - $params['dom_element_x'] = $_GET['dom_element_x']; - $params['dom_element_y'] = $_GET['dom_element_y']; - $params['dom_element_text'] = $_GET['dom_element_text']; - $params['dom_element_tag'] = $_GET['dom_element_tag']; - $params['click_x'] = $_GET['click_x']; - $params['click_y'] = $_GET['click_y']; - $params['page_width'] = $_GET['page_width']; - $params['page_height'] = $_GET['page_height']; - - - return $params; - - } - - function inputFilter($array) { - - $f = new InputFilter; - - return $f->process($array); - - } - - /** - * Generic Factory method - * - * @param string $class_dir - * @param string $class_prefix - * @param string $class_name - * @param array $conf - * @return object - */ - function &factory($class_dir, $class_prefix, $class_name, $conf = array()) { - - $class_dir = strtolower($class_dir); - $classfile = $class_dir . $class_name . '.php'; - $class = $class_prefix . $class_name; - - /* - * Attempt to include a version of the named class, but don't treat - * a failure as fatal. The caller may have already included their own - * version of the named class. - */ - if (!class_exists($class)): - include_once $classfile; - endif; - - /* If the class exists, return a new instance of it. */ - if (class_exists($class)): - $obj = &new $class($conf); - return $obj; - endif; - - $null = null; - return $null; - } - - /** - * Generic Object Singleton - * - * @param string $class_dir - * @param string $class_prefix - * @param string $class_name - * @param array $conf - * @return object - */ - function &singleton($class_dir, $class_prefix, $class_name, $conf = array()) { - - static $instance; - - if (!isset($instance)): - // below missing a reference becasue the static vriable can not handle a reference - $instance = owa_lib::factory($class_dir, $class_prefix, $class_name, $conf = array()); - endif; - - return $instance; - } - - /** - * 301 HTP redirect the user to a new url - * - * @param string $url - */ - function redirectBrowser($url) { - - // 301 redirect to URL - header ('Location: '.$url); - header ('HTTP/1.0 301 Moved Permanently'); - return; - } - - /** - * Generates a link between admin screens - * - * @param array $query_params - * @return string - */ - function makeAdminLink($admin_page, $query_params = null, $make_query_string = true) { - - if ($make_query_string == true): - $get = owa_lib::makeLinkQueryString($query_params); - else: - $get = ''; - endif; - - //Return URL - return sprintf($this->config['inter_admin_link_template'], - $this->config['admin_url'], - $admin_page, - $get); - } - - function makeLinkQueryString($query_params) { - - $new_query_params = array(); - - //Load params passed by caller - if (!empty($this->caller_params)): - foreach ($this->caller_params as $name => $value) { - if (!empty($value)): - $new_query_params[$name] = $value; - endif; - } - endif; - - // Load overrides - if (!empty($query_params)): - foreach ($query_params as $name => $value) { - if (!empty($value)): - $new_query_params[$name] = $value; - endif; - } - endif; - - // Construct GET request - if (!empty($new_query_params)): - foreach ($new_query_params as $name => $value) { - if (!empty($value)): - $get .= $name . "=" . $value . "&"; - endif; - } - endif; - - return $get; - - } - -} - -?> + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_lib { + + /** + * Convert Associative Array to String + * + * @param string $inner_glue + * @param string $outer_glue + * @param array $array + * @return string + */ + function implode_assoc($inner_glue, $outer_glue, $array) { + $output = array(); + foreach( $array as $key => $item ) { + $output[] = $key . $inner_glue . $item; + } + + return implode($outer_glue, $output); + } + + /** + * Deconstruct Associative Array + * + * For example this takes array([1] => array(a => dog, b => cat), [2] => array(a => sheep, b => goat)) + * and tunrs it into array([a] => array(dog, sheep), [b] => array(cat, goat)) + * + * @param array $a_array + * @return array $data_arrays + * @access public + */ + function deconstruct_assoc($a_array) { + + $data_arrays = array(); + + if(!empty($a_array[1])) : + + foreach ($a_array as $key => $value) { + foreach ($value as $k => $v) { + $data_arrays[$k][] = $v; + + } + } + else: + //print_r($a_array[0]); + foreach ($a_array[0] as $key => $value) { + $data_arrays[$key][] = $value; + } + endif; + + return $data_arrays; + } + + + function decon_assoc($a_array) { + + $data_arrays = array(); + + foreach ($a_array as $key => $value) { + //foreach ($value as $k => $v) { + $data_arrays[$key][] = $value; + + //} + } + + return $data_arrays; + } + + /** + * Array of Current Time + * + * @return array + * @access public + */ + function time_now() { + + $timestamp = time(); + + return array( + + 'year' => date("Y", $timestamp), + 'month' => date("n", $timestamp), + 'day' => date("d", $timestamp), + 'dayofweek' => date("w", $timestamp), + 'dayofyear' => date("z", $timestamp), + 'weekofyear' => date("W", $timestamp), + 'hour' => date("G", $timestamp), + 'minute' => date("i", $timestamp), + 'second' => date("s", $timestamp), + 'timestamp' => $timestamp + ); + } + + /** + * Stub of debug Handler + * + * @return string + * @access public + * @static + */ + function &get_debugmsgs() { + + static $msgs; + return $msgs; + } + + /** + * Error Handler + * + * @param string $msg + * @access public + */ + function errorHandler($msg) { + + $conf = array('mode' => 0755, 'timeFormat' => '%X %x'); + $error_logger = &Log::singleton('file', $this->config['error_log_file'], 'ident', $conf); + $this->error_logger->_lineFormat = '[%3$s]'; + + return; + } + + /** + * Information array for Months in the year. + * + * @return array + */ + function months() { + + return array( + + 1 => array('label' => 'January'), + 2 => array('label' => 'February'), + 3 => array('label' => 'March'), + 4 => array('label' => 'April'), + 5 => array('label' => 'May'), + 6 => array('label' => 'June'), + 7 => array('label' => 'July'), + 8 => array('label' => 'August'), + 9 => array('label' => 'September'), + 10 => array('label' => 'October'), + 11 => array('label' => 'November'), + 12 => array('label' => 'December') + ); + + } + + function days() { + + return array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); + } + + function years() { + + static $years; + + if (empty($years)): + + $start_year = 2005; + + $years = array($start_year); + + $num_years = date("Y", time()) - $start_year; + + for($i=1; $i<=$num_years; $i++) { + + $years[] = $start_year + $i; + } + + $years = array_reverse($years); + + endif; + + return $years; + } + + + /** + * Returns a label from an array of months + * + * @param int $month + * @return string + */ + function get_month_label($month) { + + static $months; + + if (empty($months)): + + $months = owa_lib::months(); + + endif; + + return $months[$month]['label']; + + } + + + /** + * Sets the suffix for Days used in Date labels + * + * @param string $day + * @return string + */ + function setDaySuffix($day) { + + switch ($day) { + + case "1": + $day_suffix = 'st'; + break; + case "2": + $day_suffix = 'nd'; + break; + case "3": + $day_suffix = 'rd'; + break; + default: + $day_suffix = 'th'; + } + + return $day_suffix; + + } + + /** + * Generates the label for a date + * + * @param array $params + * @return string + */ + function getDatelabel($params) { + + switch ($params['period']) { + + case "day": + return sprintf("%s, %d%s %s", + owa_lib::get_month_label($params['month']), + $params['day'], + owa_lib::setDaySuffix($params['day']), + $params['year'] + ); + break; + + case "month": + return sprintf("%s %s", + owa_lib::get_month_label($params['month']), + $params['year'] + ); + break; + + case "year": + return sprintf("%s", + $params['year'] + ); + break; + case "date_range": + return sprintf("%s, %d%s %s - %s, %d%s %s", + owa_lib::get_month_label($params['month']), + $params['day'], + owa_lib::setDaySuffix($params['day']), + $params['year'], + owa_lib::get_month_label($params['month2']), + $params['day2'], + owa_lib::setDaySuffix($params['day2']), + $params['year2'] + ); + break; + } + + return false; + + } + + /** + * Array of Reporting Periods + * + * @return array + */ + function reporting_periods() { + + return array( + + 'today' => array('label' => 'Today'), + 'yesterday' => array('label' => 'Yesterday'), + 'this_week' => array('label' => 'This Week'), + 'this_month' => array('label' => 'This Month'), + 'this_year' => array('label' => 'This Year'), + 'last_week' => array('label' => 'Last Week'), + 'last_month' => array('label' => 'Last Month'), + 'last_year' => array('label' => 'Last Year'), + 'last_half_hour' => array('label' => 'The Last 30 Minutes'), + 'last_hour' => array('label' => 'Last Hour'), + 'last_24_hours' => array('label' => 'The Last 24 Hours'), + 'last_seven_days' => array('label' => 'The Last Seven Days'), + 'last_thirty_days' => array('label' => 'The Last Thirty Days'), + 'same_day_last_week' => array('label' => 'Same Day last Week'), + 'same_week_last_year' => array('label' => 'Same Week Last Year'), + 'same_month_last_year' => array('label' => 'Same Month Last Year'), + //'day' => array('label' => 'Day'), + //'month' => array('label' => 'Month'), + //'year' => array('label' => 'Year'), + //'date_range' => array('label' => 'Date Range') + ); + + } + + /** + * Array of Date specific Reporting Periods + * + * @return array + */ + function date_reporting_periods() { + + return array( + + 'day' => array('label' => 'Day'), + 'month' => array('label' => 'Month'), + 'year' => array('label' => 'Year'), + 'date_range' => array('label' => 'Date Range') + ); + + } + + /** + * Gets label for a particular reporting period + * + * @param unknown_type $period + * @return unknown + */ + function get_period_label($period) { + + $periods = owa_lib::reporting_periods(); + + return $periods[$period]['label']; + } + + /** + * Assembles the current URL from request params + * + * @return string + */ + function get_current_url() { + + $url = 'http'; + + if($_SERVER['HTTPS']=='on'): + $url.= 's'; + endif; + + $url .= '://'.$_SERVER['SERVER_NAME']; + + if($_SERVER['SERVER_PORT'] != 80): + $url .= ':'.$_SERVER['SERVER_PORT']; + endif; + + $url .= $_SERVER['REQUEST_URI']; + + return $url; + } + + /** + * Builds date param array from GET + * + * @return array + */ + function getRestparams() { + + $config = &owa_settings::get_settings(); + + $params = array(); + + $params['owa_action'] = $_GET['owa_action']; + $params['owa_page'] = $_GET['owa_page']; + $params['year'] = $_GET['year']; + $params['month'] = $_GET['month']; + $params['day'] = $_GET['day']; + $params['dayofyear'] = $_GET['dayofyear']; + $params['weekofyear'] = $_GET['weekofyear']; + $params['hour'] = $_GET['hour']; + $params['minute'] = $_GET['minute']; + $params['year2'] = $_GET['year2']; + $params['month2'] = $_GET['month2']; + $params['day2'] = $_GET['day2']; + $params['dayofyear2'] = $_GET['dayofyear2']; + $params['weekofyear2'] = $_GET['weekofyear2']; + $params['hour2'] = $_GET['hour2']; + $params['minute2'] = $_GET['minute2']; + $params['limit'] = $_GET['limit']; + $params['offset'] = $_GET['offset']; + $params['sortby'] = $_GET['sortby']; + $params['period'] = $_GET['period']; + $params['site_id'] = $_GET['site_id']; + $params['type'] = $_GET['type']; + $params['api_call'] = $_GET['name']; + $params['session_id'] = $_GET['session_id']; + $params['visitor_id'] = $_GET['visitor_id']; + $params['document_id'] = $_GET['document_id']; + $params['referer_id'] = $_GET['referer_id']; + $params['source'] = $_GET['source']; + $params['page_url'] = base64_decode($_GET['page_url']); + $params['target_url'] = base64_decode($_GET['target_url']); + $params['dom_element_name'] = $_GET['dom_element_name']; + $params['dom_element_value'] = $_GET['dom_element_value']; + $params['dom_element_id'] = $_GET['dom_element_id']; + $params['dom_element_x'] = $_GET['dom_element_x']; + $params['dom_element_y'] = $_GET['dom_element_y']; + $params['dom_element_text'] = $_GET['dom_element_text']; + $params['dom_element_tag'] = $_GET['dom_element_tag']; + $params['click_x'] = $_GET['click_x']; + $params['click_y'] = $_GET['click_y']; + $params['page_width'] = $_GET['page_width']; + $params['page_height'] = $_GET['page_height']; + + + return $params; + + } + + function inputFilter($array) { + + $f = new InputFilter; + + return $f->process($array); + + } + + /** + * Generic Factory method + * + * @param string $class_dir + * @param string $class_prefix + * @param string $class_name + * @param array $conf + * @return object + */ + function &factory($class_dir, $class_prefix, $class_name, $conf = array()) { + + $class_dir = strtolower($class_dir).'/'; + $classfile = $class_dir . $class_name . '.php'; + $class = $class_prefix . $class_name; + + /* + * Attempt to include a version of the named class, but don't treat + * a failure as fatal. The caller may have already included their own + * version of the named class. + */ + if (!class_exists($class)): + include_once $classfile; + endif; + + /* If the class exists, return a new instance of it. */ + if (class_exists($class)): + $obj = &new $class($conf); + return $obj; + endif; + + $null = null; + return $null; + } + + /** + * Generic Object Singleton + * + * @param string $class_dir + * @param string $class_prefix + * @param string $class_name + * @param array $conf + * @return object + */ + function &singleton($class_dir, $class_prefix, $class_name, $conf = array()) { + + static $instance; + + if (!isset($instance)): + // below missing a reference becasue the static vriable can not handle a reference + $instance = owa_lib::factory($class_dir, $class_prefix, $class_name, $conf = array()); + endif; + + return $instance; + } + + /** + * 302 HTTP redirect the user to a new url + * + * @param string $url + */ + function redirectBrowser($url) { + + // 302 redirect to URL + header ('Location: '.$url); + header ('HTTP/1.0 302 Found'); + return; + } + + /** + * Generates a link between admin screens + * + * @param array $query_params + * @return string + */ + function makeAdminLink($admin_page, $query_params = null, $make_query_string = true) { + + if ($make_query_string == true): + $get = owa_lib::makeLinkQueryString($query_params); + else: + $get = ''; + endif; + + //Return URL + return sprintf($this->config['inter_admin_link_template'], + $this->config['admin_url'], + $admin_page, + $get); + } + + function makeLinkQueryString($query_params) { + + $new_query_params = array(); + + //Load params passed by caller + if (!empty($this->caller_params)): + foreach ($this->caller_params as $name => $value) { + if (!empty($value)): + $new_query_params[$name] = $value; + endif; + } + endif; + + // Load overrides + if (!empty($query_params)): + foreach ($query_params as $name => $value) { + if (!empty($value)): + $new_query_params[$name] = $value; + endif; + } + endif; + + // Construct GET request + if (!empty($new_query_params)): + foreach ($new_query_params as $name => $value) { + if (!empty($value)): + $get .= $name . "=" . $value . "&"; + endif; + } + endif; + + return $get; + + } + + function getRequestParams() { + + // Clean Input arrays + $params = owa_lib::inputFilter($_REQUEST); + + return owa_lib::stripParams($params); + } + + function stripParams($params) { + + $config = & owa_settings::get_settings(); + + $striped_params = array(); + + $len = strlen($config['ns']); + + foreach ($params as $n => $v) { + + // if namespace is present in param + if (strstr($n, $config['ns'])): + // strip the namespace value + $striped_n = substr($n, $len); + //add to striped array + $striped_params[$striped_n] = $v; + + endif; + + } + + return $striped_params; + + } + /** + * Enter description here... + * + * @param unknown_type $module + * @param unknown_type $file + * @return unknown + * @deprecated + */ + function moduleRequireOnce($module, $file) { + + return require_once(OWA_BASE_DIR.'/modules/'.$module.'/'.$file.'.php'); + } + + /** + * Enter description here... + * + * @param unknown_type $modulefile + * @param unknown_type $class_suffix + * @param unknown_type $params + * @return unknown + * @deprecated + */ + function moduleFactory($modulefile, $class_suffix = null, $params = '') { + + list($module, $file) = split("\.", $modulefile); + $class = 'owa_'.$file.$class_suffix; + + // Require class file if class does not already exist + if(!class_exists($class)): + owa_lib::moduleRequireOnce($module, $file); + endif; + + $obj = owa_lib::factory(OWA_BASE_DIR.'/modules/'.$module, '', $class, $params); + $obj->module = $module; + + return $obj; + } + + /** + * redirects borwser to a particular view + * + * @param unknown_type $data + */ + function redirectToView($data) { + + $config = &owa_settings::get_settings(); + + $control_params = array('view_method', 'auth_status'); + + //$url = $config['public_url'].'/main.php?'; + + $get = ''; + + foreach ($data as $n => $v) { + + if (!in_array($n, $control_params)): + + $get .= $config['ns'].$n.'='.$v.'&'; + + endif; + } + $new_url = sprintf($this->config['link_template'], $this->config['main_url'], $get); + owa_lib::redirectBrowser($new_url); + + return; + } + + /** + * Displays a View without user authentication. Takes array of data as input + * + * @param array $data + * @deprecated + */ + function displayView($data, $params = array()) { + + $view = owa_lib::moduleFactory($data['view'], 'View', $params); + + return $view->assembleView($data); + + } + + function &coreAPISingleton() { + + static $api; + + if(!isset($api)): + require_once('owa_coreAPI.php'); + $api = new owa_coreAPI; + endif; + + return $api; + } + + /** + * Create guid from string + * + * @param string $string + * @return integer + * @access private + */ + function setStringGuid($string) { + if (!empty($string)): + return crc32(strtolower($string)); + else: + return; + endif; + } + + /** + * Add constraints into SQL where clause + * + * @param array $constraints + * @return string $where + * @access public + */ + function addConstraints($constraints) { + + if (!empty($constraints)): + + $count = count($constraints); + + $i = 0; + + $where = ''; + + foreach ($constraints as $key => $value) { + + if (empty($value)): + $i++; + else: + + if (!is_array($value)): + $where .= $key . ' = ' . "'$value'"; + else: + + switch ($value['operator']) { + case 'BETWEEN': + $where .= sprintf("%s BETWEEN '%s' AND '%s'", $key, $value['start'], $value['end']); + break; + default: + $where .= sprintf("%s %s '%s'", $key, $value['operator'], $value['value']); + break; + } + + + endif; + + if ($i < $count - 1): + + $where .= " AND "; + + endif; + + $i++; + + endif; + + } + // needed in case all values in the array are empty + if (!empty($where)): + return $where; + else: + return; + endif; + + else: + + return; + + endif; + + + + } + + +} + +?> diff --git a/owa_metric.php b/owa_metric.php index ad2f09f14..e111754fa 100644 --- a/owa_metric.php +++ b/owa_metric.php @@ -1,471 +1,413 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_metric { - - /** - * Current Time - * - * @var array - */ - var $time_now = array(); - - /** - * Data - * - * @var array - */ - var $data; - - /** - * Configuration - * - * @var array - */ - var $config = array(); - - /** - * Databse Access Object - * - * @var object - */ - var $db; - - /** - * Metric Api - * - * @var object - */ - var $api_type = 'metric'; - - /** - * API Calls - * - * @var array - */ - var $api_calls = array(); - - /** - * The params of the caller, either a report or graph - * - * @var array - */ - var $params = array(); - - /** - * Error handler - * - * @var object - */ - var $e; - - /** - * Summary Framework Object - * - * @var object - */ - var $summaryFramework; - - /** - * Constructor - * - * @access public - * @return owa_metric - */ - function owa_metric() { - - $this->config = &owa_settings::get_settings(); - $this->e = &owa_error::get_instance(); - $this->db = &owa_db::get_instance(); - - // Setup time and query periods - $this->time_now = owa_lib::time_now(); - - if ($this->config['use_summary_tables']): - // This is a stub for getting Summary Framework object - //$this->summaryFramework = &owa_summary::get_instance(); - endif; - - return; - } - - /** - * Metric factory - * - * @param string $class_name - * @param array $params - * @return object - */ - function get_instance($class_name, $params) { - - $config = &owa_settings::get_settings(); - - if (!require_once(OWA_METRICS_DIR.$class_name . '.php')): - print "error locating proper class file from: " . OWA_METRICS_DIR; //error - else: - $o = new $class_name; - $o->params = $params; - endif; - - return $o; - } - - /** - * Time Period SQL constraint - * - * @access private - * @param string $period - * @param array $params - * @return string $where - */ - function time_period($period, $params = null) { - - switch ($period) { - case "last_24_hours": - - $bound = $this->time_now['timestamp'] - 3600*24; - $where = sprintf( - "timestamp >= '%s'", - $bound - ); - break; - - case "last_hour": - $bound = $this->time_now['timestamp'] - 3600; - $where = sprintf( - "timestamp >= '%s'", - $bound - ); - break; - - case "last_half_hour": - $bound = $this->time_now['timestamp'] - 1800; - $where = sprintf( - "timestamp >= '%s'", - $bound - ); - break; - - case "last_seven_days": - $bound = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*7; - - $where = sprintf( - "timestamp >= '%s' and year = '%s'", - $bound, - $this->time_now['year'] - ); - break; - - case "today": - $where = sprintf( - "day = '%s' and month = '%s' and year = '%s'", - $this->time_now['day'], - $this->time_now['month'], - $this->time_now['year'] - ); - break; - - case "this_week": - $where = sprintf( - "weekofyear = '%s' and year = '%s'", - $this->time_now['weekofyear'], - $this->time_now['year'] - ); - break; - - case "this_month": - $where = sprintf( - "month = '%s' and year = '%s'", - $this->time_now['month'], - $this->time_now['year'] - ); - break; - - case "this_year": - $where = sprintf( - "year = '%s'", - $this->time_now['year'] - ); - break; - - case "yesterday": - - $bound = mktime(12, 00, 00, $this->time_now['month'], $this->time_now['day']-1, $this->time_now['year']); - - - $where = sprintf( - "day = '%s' and month = '%s' and year = '%s'", - date("d", $bound), - date("n", $bound), - date("Y", $bound) - ); - break; - - case "last_week": - $daybound = 7 + $this->time_now['dayofweek']; - $end = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*$this->time_now['dayofweek']; - $start = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*$daybound; - $where = sprintf( - "timestamp BETWEEN '%d' and '%d'", - $start, - $end - ); - break; - - case "last_month": - - $bound = mktime(12, 0, 0, $this->time_now['month']-1, $this->time_now['day'], $this->time_now['year']); - - $where = sprintf("month = '%s' and year ='%s'", - date("n", $bound), - date("Y", $bound) - ); - break; - - case "last_year": - - $where = sprintf("year = '%s'", - $this->time_now['year'] - 1 - ); - break; - - case "same_day_last_week": - - $bound = mktime(12, 0, 0, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*7; - - $where = sprintf("day = '%s' and month = '%s' and year = '%s'", - date("d", $bound), - date("n", $bound), - date("Y", $bound) - ); - break; - - case "same_week_last_year": - $where = sprintf( - "AND weekofyear = '%s' and year = '%s'", - $this->time_now['weekofyear'], - $this->time_now['year'] - 1 - ); - break; - - case "same_month_last_year": - $where = sprintf( - "month = '%s' and year = '%s'", - $this->time_now['month'], - $this->time_now['year'] - 1 - ); - break; - - case "all_time": - $where = sprintf( - "timestamp <= '%s'", - $this->time_now['timestamp'] - ); - break; - - case "last_tuesday": - $where = sprintf( - "dayofweek = '2' and weekofyear = '%s'", - $this->time_now['weekofyear'] - 1 - ); - break; - - case "last_thirty_days": - $bound = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*30; - - $where = sprintf( - "timestamp >= '%s' and year = '%s'", - $bound, - $this->time_now['year'] - ); - - break; - - case "day": - - $where = sprintf( - "day = '%s' and month = '%s' and year = '%s'", - $this->params['request_params']['day'], - $this->params['request_params']['month'], - $this->params['request_params']['year'] - ); - - break; - - case "month": - - $where = sprintf( - "month = '%s' and year = '%s'", - $this->params['request_params']['month'], - $this->params['request_params']['year'] - ); - - break; - - case "year": - - $where = sprintf( - "year = '%s'", - $this->params['request_params']['year'] - ); - - break; - - case "date_range": - - $start = mktime(0, 0, 0, $this->params['request_params']['month'], $this->params['request_params']['day'], $this->params['request_params']['year']); - $end = mktime(23, 59, 59, $this->params['request_params']['month2'], $this->params['request_params']['day2'], $this->params['request_params']['year2']); - - $where = sprintf( - "timestamp BETWEEN '%s' and '%s'", - $start, - $end - ); - - break; - - default: - $where = ''; - - } - - if(!empty($where)): - return ' AND '.$where; - else: - return; - endif; - } - - /** - * Add constraints into SQL where clause - * - * @param array $constraints - * @return string $where - * @access public - */ - function add_constraints($constraints) { - - if (!empty($constraints)): - - $this->e->debug(' CONSTRAINT: '. print_r($constraints, true)); - - $count = 0; - - foreach ($constraints as $key => $value) { - - if (!empty($value) || $value === 0 || $value === '0' || $value === false): - $count++; - endif; - } - - $i = 0; - - foreach ($constraints as $key => $value) { - - if (!empty($value) || $value === 0 || $value === '0' || $value === false): - $where .= $key . ' = ' . "'$value'"; - $i++; - if ($count != $i): - - $where .= " AND "; - - endif; - - endif; - - } - - if (!empty($where)): - - return $where = ' AND '.$where; - else: - return; - endif; - - else: - - return; - - endif; - - - - } - - /** - * Hook for using summary tables - * - * @param string $table_name - * @return unknown - */ - function setTable($table_name) { - - if ($this->config['use_summary_tables']): - // Set summary table suffix - $table_name = $this->summaryFramework->getTable($table_name, $this->params['period']); - endif; - - return sprintf("%s%s", - $this->config['ns'], - $table_name); - - } - - - /** - * Retrieve Result data for a particular metric - * - * @param array $params - * @return array $data - * @access public - */ - function get_metric($params) { - - $m = owa_metric::get_instance($params['metric_package'], $params); - $data = $m->generate($params); - - switch ($params['result_format']) { - case 'a_array': - return $data; - case 'inverted_array': - return $data; - default: - return $data; - } - - return $data; - } - -} - -?> + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_metric extends owa_base { + + /** + * Current Time + * + * @var array + */ + var $time_now = array(); + + /** + * Data + * + * @var array + */ + var $data; + + /** + * Databse Access Object + * + * @var object + */ + var $db; + + /** + * The params of the caller, either a report or graph + * + * @var array + */ + var $params = array(); + + /** + * Summary Framework Object + * + * @var object + */ + var $summaryFramework; + + /** + * Constructor + * + * @access public + * @return owa_metric + */ + function owa_metric() { + + //$this->db = &owa_db::get_instance(); + + // Setup time and query periods + $this->time_now = owa_lib::time_now(); + + if ($this->config['use_summary_tables']): + // This is a stub for getting Summary Framework object + ;//$this->summaryFramework = &owa_summary::get_instance(); + endif; + + return; + } + + + /* + * Applies specific overrides specified in the request to the params of the metric. + * + */ + function applyOverrides($params = array()) { + + //$params = & owa_requestContainer::getInstance(); + + foreach ($params as $k => $v) { + + if (!empty($v)): + $this->params[$k] = $v; + endif; + + } + + /*if (!empty($params['limit'])): + $this->params['limit'] = $params['limit']; + endif; + + if (!empty($params['offset'])): + $this->params['offset'] = $params['offset']; + endif; + + if (!empty($params['site_id'])): + $this->params['site_id'] = $params['site_id']; + endif; + */ + + return; + } + + function setTimePeriod() { + + switch ($this->params['period']) { + + case "today": + + $end = mktime(0, 0, 0, $this->time_now['month'], $this->time_now['day'] + 1, $this->time_now['year']); + $start = $end - 3600*24; + + $this->params['constraints']['timestamp'] = array('operator' => 'BETWEEN', 'start' => $start, 'end' => $end); + + break; + + case "last_24_hours": + $bound = $this->time_now['timestamp'] - 3600*24; + $this->params['constraints']['timestamp'] = array('operator' => '>=', 'value' => $bound); + + break; + + case "last_hour": + + $bound = $this->time_now['timestamp'] - 3600; + $this->params['constraints']['timestamp'] = array('operator' => '>=', 'value' => $bound); + + break; + + case "last_half_hour": + + $bound = $this->time_now['timestamp'] - 1800; + $this->params['constraints']['timestamp'] = array('operator' => '>=', 'value' => $bound); + + break; + + case "last_seven_days": + + $bound = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*7; + $this->params['constraints']['timestamp'] = array('operator' => '>=', 'value' => $bound); + + break; + + case "this_week": + + $this->params['constraints']['weekofyear'] = $this->time_now['weekofyear']; + $this->params['constraints']['year'] = $this->time_now['year']; + + break; + + case "this_month": + + $this->params['constraints']['month'] = $this->time_now['month']; + $this->params['constraints']['year'] = $this->time_now['year']; + + break; + + case "this_year": + + $this->params['constraints']['year'] = $this->time_now['year']; + + break; + + case "yesterday": + + $end = mktime(0, 0, 0, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']); + $start = $end - 3600*24; + + $this->params['constraints']['timestamp'] = array('operator' => 'BETWEEN', 'start' => $start, 'end' => $end); + + break; + + case "last_week": + + $daybound = 7 + $this->time_now['dayofweek']; + + $end = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*$this->time_now['dayofweek']; + + $start = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*$daybound; + + $this->params['constraints']['timestamp'] = array('operator' => 'BETWEEN', 'start' => $start, 'end' => $end); + + break; + + case "last_month": + + $bound = mktime(12, 0, 0, $this->time_now['month']-1, $this->time_now['day'], $this->time_now['year']); + + $this->params['constraints']['month'] = date("n", $bound); + $this->params['constraints']['year'] = date("Y", $bound); + + break; + + case "last_year": + + $this->params['constraints']['year'] = $this->time_now['year'] - 1; + + break; + + case "same_day_last_week": + + $bound = mktime(12, 0, 0, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*7; + + $this->params['constraints']['day'] = date("d", $bound); + $this->params['constraints']['month'] = date("n", $bound); + $this->params['constraints']['year'] = date("Y", $bound); + + break; + + case "same_week_last_year": + + $this->params['constraints']['weekofyear'] = $this->time_now['weekofyear']; + $this->params['constraints']['year'] = $this->time_now['year'] - 1; + + break; + + case "same_month_last_year": + + $this->params['constraints']['month'] = $this->time_now['month']; + $this->params['constraints']['year'] = $this->time_now['year'] - 1; + + break; + + case "all_time": + + $this->params['constraints']['timestamp'] = array('operator' => '<=', 'value' => $this->time_now['timestamp']); + + break; + + case "last_tuesday": + + $this->params['constraints']['dayofweek'] = 2; + $this->params['constraints']['weekofyear'] = $this->time_now['weekofyear'] - 1; + + break; + + case "last_thirty_days": + + $bound = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']) - 3600*24*30; + + $this->params['constraints']['timestamp'] = array('operator' => '>=', 'value' => $bound); + + break; + + case "day": + + $end = mktime(0, 0, 0, $this->params['month'], $this->params['day'] + 1, $this->params['year']); + + $start = $end - 3600*24; + + $this->params['constraints']['timestamp'] = array('operator' => 'BETWEEN', 'start' => $start, 'end' => $end); + + break; + + case "month": + + $end = mktime(0, 0, 0, $this->params['month'] + 1, 0, $this->params['year']); + + $start = mktime(0, 0, 0, $this->params['month'], 0, $this->params['year']); + + $this->params['constraints']['timestamp'] = array('operator' => 'BETWEEN', 'start' => $start, 'end' => $end); + + break; + + case "year": + + $end = mktime(0, 0, 0, 1, 1, $this->params['year'] + 1); + $start = mktime(0, 0, 0, 1, 1, $this->params['year']); + + $this->params['constraints']['timestamp'] = array('operator' => 'BETWEEN', 'start' => $start, 'end' => $end); + + break; + + case "date_range": + + $start = mktime(0, 0, 0, $this->params['month'], $this->params['day'], $this->params['year']); + $end = mktime(0, 0, 0, $this->params['month2'], $this->params['day2'] + 1, $this->params['year2']); + + $this->params['constraints']['timestamp'] = array('operator' => 'BETWEEN', 'start' => $start, 'end' => $end); + + break; + + } + + return; + } + + + /** + * Add constraints into SQL where clause + * + * @param array $constraints + * @return string $where + * @access public + */ + function add_constraints($constraints) { + + if (!empty($constraints)): + //print_r($constraints); + $this->e->debug(' CONSTRAINT: '. print_r($constraints, true)); + + $count = 0; + + foreach ($constraints as $key => $value) { + + if (!empty($value) || $value === 0 || $value === '0' || $value === false): + $count++; + endif; + } + + $i = 0; + + foreach ($constraints as $key => $value) { + + if (!empty($value) || $value === 0 || $value === '0' || $value === false): + $where .= $key . ' = ' . "'$value'"; + $i++; + if ($count != $i): + + $where .= " AND "; + + endif; + + endif; + + } + + if (!empty($where)): + + return $where = ' AND '.$where; + else: + return; + endif; + + else: + + return; + + endif; + + + + } + + /** + * Hook for using summary tables + * + * @param string $table_name + * @return unknown + */ + function setTable($table_name) { + + if ($this->config['use_summary_tables']): + // Set summary table suffix + $table_name = $this->summaryFramework->getTable($table_name, $this->params['period']); + endif; + + return sprintf("%s%s", + $this->config['ns'], + $table_name); + + } + + + /** + * Retrieve Result data for a particular metric + * + * @param array $params + * @return array $data + * @access public + */ + function get_metric($params) { + + $m = owa_metric::get_instance($params['metric_package'], $params); + $data = $m->generate($params); + + switch ($params['result_format']) { + case 'a_array': + return $data; + case 'inverted_array': + return $data; + default: + return $data; + } + + return $data; + } + +} + +?> diff --git a/owa_module.php b/owa_module.php new file mode 100644 index 000000000..9b217370c --- /dev/null +++ b/owa_module.php @@ -0,0 +1,333 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_module extends owa_base { + + /** + * Name of module + * + * @var string + */ + var $name; + + /** + * Description of Module + * + * @var string + */ + var $description; + + /** + * Version of Module + * + * @var string + */ + var $version; + + /** + * Name of author of module + * + * @var string + */ + var $author; + + /** + * URL for author of module + * + * @var unknown_type + */ + var $author_url; + + /** + * Wiki Page title. Sused to generate link to OWA wiki for this module. + * Must be unique. Check the wiki if you are unsure. + * + * @var string + */ + var $wiki_title; + + /** + * name used in display situations + * + * @var unknown_type + */ + var $display_name; + + /** + * Array of event names that this module has handlers for + * + * @var array + */ + var $subscribed_events; + + /** + * Array of link information for admin panels that this module implements. + * + * @var array + */ + var $admin_panels; + + /** + * Array of navigation links that this module implements + * + * @var unknown_type + */ + var $nav_links; + + /** + * Array of metric names that this module implements + * + * @var unknown_type + */ + var $metrics; + + /** + * Array of graph names that this module implments + * + * @var unknown_type + */ + var $graphs; + + var $group; + + var $entities; + + /** + * Constructor + * + * @return owa_module + */ + function owa_module() { + + $this->owa_base(); + + // register event handlers + $this->_registerEventHandlers(); + $this->_registerEntities(); + + return; + + } + + /** + * Returns array of admin Links for this module to be used in navigation + * @access public + * @return array + */ + function getAdminPanels() { + + return $this->admin_panels; + } + + /** + * Returns array of report links for this module that will be + * used in report navigation + * + * @access public + * @return array + */ + function getNavigationLinks() { + + return $this->nav_links; + } + + /** + * Registers handlers + * + * @access public + * @return array + */ + function _registerEventHandlers() { + + return; + } + + /** + * Registers Admin Panels + * + * @access public + * @return array + */ + function _registerAdminPanels() { + + return; + } + + /** + * Attaches a handler to the event queue + * + * @param array $event_name + * @param string $handler_name + * @return boolean + */ + function _addHandler($event_name, $handler_name) { + + $handler_dir = OWA_BASE_DIR.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.$this->name.DIRECTORY_SEPARATOR.'handlers'; + + $class = 'owa_'.$handler_name; + + // Require class file if class does not already exist + if(!class_exists('owa_'.$handler_name)): + require_once($handler_dir.DIRECTORY_SEPARATOR.$handler_name.'.php'); + endif; + + $handler = &owa_lib::factory($handler_dir,'owa_', $handler_name); + $handler->_priority = PEAR_LOG_INFO; + + $eq = &eventQueue::get_instance(); + + // Register event names for this handler + if(is_array($event_name)): + + foreach ($event_name as $k => $name) { + $handler->_event_type[] = $name; + } + + else: + $handler->_event_type[] = $event_name; + + endif; + + + $eq->attach($handler); + //print_r($eq); + return ; + + } + + /** + * Registers a report with this module + * + */ + function _addReport() { + + return; + } + + /** + * Registers an admin panel with this module + * + */ + function addAdminPanel($panel) { + + $this->admin_panels[] = $panel; + + return; + } + + /* + * Registers Navigation Link with a particular View + * + */ + function addNavigationLink($link) { + + $this->nav_links[] = $link; + + return; + } + + /** + * Registers a report with this module + * + */ + function _addMetric() { + + return; + } + + /** + * Registers a graph with this module + * + */ + function _addGraph() { + + return; + } + + /** + * Installation method for this module + * + * Concrete classes must be placed in the install sub directory and + * use the following naming convention: owa_install_{module name}_{database type}. + * + */ + function install() { + + $obj = $this->installerFactory(); + return $obj->install(); + + } + + function installerFactory($params = array()) { + + $obj = owa_lib::factory(OWA_BASE_DIR.'/modules/'.$this->name.'/install/', 'owa_', 'install_'.$this->name.'_'.$this->config['db_type'], $params); + + $obj->module = $this->name; + + return $obj; + + } + + /** + * Upgrade method for this module + * + */ + function upgrade() { + + return; + } + + function uninstall() { + + return; + } + + function activiate() { + + return; + } + + function deactivate() { + + return; + } + + function _registerEntities() { + + return; + } + + +} + + + + +?> \ No newline at end of file diff --git a/owa_observer.php b/owa_observer.php index 7481cee32..d1abea790 100644 --- a/owa_observer.php +++ b/owa_observer.php @@ -17,9 +17,10 @@ // require_once(OWA_PEARLOG_DIR . '/Log/observer.php'); +require_once(OWA_BASE_DIR . '/owa_coreAPI.php'); /** - * WA Observer extends PEAR Log's observer to add event type. + * Abstract observer class, wraps PEAR Log's observer to add event type. * * @author Peter Adams * @copyright Copyright © 2006 Peter Adams @@ -35,19 +36,10 @@ class owa_observer extends Log_observer { /** * The type of event that an observer would want to hear about. * - * @var string + * @var array * @access private */ var $_event_type = array(); - - - /** - * The directory that concrete classes can be found. - * - * @var string - * @access private - */ - var $_plugin_path; /** * Error handler @@ -69,6 +61,8 @@ class owa_observer extends Log_observer { * @var array */ var $config; + + var $api; /** * Creates a new basic Log_observer instance. @@ -82,9 +76,68 @@ function owa_observer($priority = PEAR_LOG_INFO) { $this->Log_observer($priority); $this->config = &owa_settings::get_settings(); - //$this->_id = md5(microtime()); - //$this->_priority = $priority; $this->e = &owa_error::get_instance(); + $this->api = &owa_coreAPI::singleton(); + return; + } + + function handleEvent($action) { + + // Create controller, passing event message as params + $controller = $this->api->moduleFactory($action, 'Controller', $this->m); + + // Run controller + $data = $controller->doAction(); + $this->e->debug(sprintf("Handled Event with Controller: %s", $action.'Controller')); + + // Create View if called for + if ($data['view']): + + // Determine what to do with view + switch ($data['view_method']) { + case 'email-html': + + require_once(OWA_BASE_CLASS_DIR.'mailer.php'); + + $mailer = new owa_mailer; + + $mailer->Subject = $data['subject']; + $mailer->Body = $this->api->displayView($data); + + $mailer->AltBody = $this->api->displayView($data, $data['plainTextView']); + $mailer->AddAddress($data['email_address'], $data['name']); + + $mailer->sendMail(); + break; + + case 'email': + + require_once(OWA_BASE_CLASS_DIR.'mailer.php'); + + $mailer = new owa_mailer; + + $mailer->Subject = $data['subject']; + $mailer->Body = $this->api->displayView($data); + + $mailer->AddAddress($data['email_address'], $data['name']); + + $mailer->sendMail(); + break; + } + + $this->e->debug(sprintf("Handled Event. Assembled View: %s", $data['view'].'View')); + + endif; + + return; + + } + + function sendMail($email_address, $subject, $msg) { + + mail($email_address, $subject, $msg); + $this->e->debug('Sent e-mail with subject of "'.$subject.'" to: '.$email_address); + return; } } diff --git a/owa_php.php b/owa_php.php index a4c16d6bd..e47cf2653 100644 --- a/owa_php.php +++ b/owa_php.php @@ -42,8 +42,7 @@ class owa_php extends owa_caller { function owa_php($config = null) { $this->owa_caller($config); - $this->e = &owa_error::get_instance(); - $this->controller = new owa; + return; } diff --git a/owa_requestContainer.php b/owa_requestContainer.php new file mode 100644 index 000000000..e1a13ca06 --- /dev/null +++ b/owa_requestContainer.php @@ -0,0 +1,76 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_requestContainer { + + /** + * Request Params + * + * @var array + */ + var $params; + + /** + * Constructor + * + * @return owa_requestParams + */ + function owa_requestContainer() { + + return; + } + + /** + * Singleton returns request params + * + * @return array + */ + function & getInstance() { + + static $params; + + if(!isset($params)): + + $params = owa_lib::getRequestParams(); + $params['guid'] = crc32($_SERVER['REQUEST_TIME'].getmypid()); + + return $params; + + else: + + return $params; + + endif; + + } + +} + +?> \ No newline at end of file diff --git a/owa_request_class.php b/owa_request_class.php index 9b005b1fe..ac8f24d77 100644 --- a/owa_request_class.php +++ b/owa_request_class.php @@ -169,6 +169,11 @@ function process() { return; } + + /** + * Log page request to event queue + * + */ function log() { if ($this->state == 'page_request'): @@ -184,16 +189,17 @@ function log() { endif; endif; endif; + + $this->eq->log($this->properties, 'base.'.$this->state); - $this->eq->log($this->properties, $this->state); - $this->e->debug('Logged '.$this->state.' to event queue...'); + $this->e->debug('Logged '.'base.'.$this->state.' to event queue...'); return; } /** - * Saves Request to DB + * Save Request to database * */ function save() { diff --git a/owa_session_class.php b/owa_session_class.php index 447119cb5..e73e5131a 100644 --- a/owa_session_class.php +++ b/owa_session_class.php @@ -17,8 +17,6 @@ // require_once 'owa_event_class.php'; -require_once 'owa_env.php'; -require_once 'owa_db.php'; require_once 'owa_location.php'; /** diff --git a/owa_settings_class.php b/owa_settings_class.php index 8212deefc..751649ea7 100644 --- a/owa_settings_class.php +++ b/owa_settings_class.php @@ -1,310 +1,331 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_settings { - - /** - * Databse access object - * - * @var unknown_type - */ - var $db; - - /** - * Configuration properties - * - * @var array - */ - var $properties; - - /** - * Error Handler - * - * @var object - */ - var $e; - - /** - * Constructor - * - * @return owa_settings - */ - function owa_settings() { - - $this->properties = $this->get_settings(); - //$this->e = &owa_error::get_instance(); - return; - } - - - /** - * Returns the configuration - * - * @return array - * @access public - * @static - */ - function &get_settings() { - - static $config; - - if(!isset($config)): - - // get base config - $config = &owa_settings::get_default_config(); - - //load overrides from config file - if (file_exists($config['config_file_path'])): - include_once ($config['config_file_path']); - if (!empty($OWA_CONFIG)): - foreach ($OWA_CONFIG as $key => $value) { - - // update current config - $config[$key] = $value; - - } - endif; - // Setup special public URLs - - $base_url = "http"; - - if($_SERVER['HTTPS']=='on'): - $base_url .= 's'; - endif; - - $base_url .= '://'.$_SERVER['SERVER_NAME']; - - if($_SERVER['SERVER_PORT'] != 80): - $base_url .= ':'.$_SERVER['SERVER_PORT']; - endif; - - $config['public_url'] = $base_url . $OWA_CONFIG['public_url']; - - $config['action_url'] = $OWA_CONFIG['public_url']."/action.php"; - $config['images_url'] = $OWA_CONFIG['public_url']."/i"; - $config['reporting_url'] = $OWA_CONFIG['public_url']."/reports/index.php"; - $config['home_url'] = $config['public_url']."/reports/index.php?page=dashboard_report.php"; - $config['admin_url'] = $OWA_CONFIG['public_url']."/admin/index.php"; - - endif; - endif; - - return $config; - } - - /** - * Returns default settings array - * - * @return array - */ - function get_default_config() { - - return array( - - 'ns' => 'owa_', - 'visitor_param' => 'v', - 'session_param' => 's', - 'last_request_param' => 'last_req', - 'first_hit_param' => 'first_hit', - 'feed_subscription_param' => 'sid', - 'source_param' => 'from', - 'graph_param' => 'graph', - 'period_param' => 'period', - 'document_param' => 'document', - 'referer_param' => 'referer', - 'site_id' => '1', - 'configuration_id' => '1', - 'session_length' => '1800', - 'debug_to_screen' => false, - 'requests_table' => 'requests', - 'sessions_table' => 'sessions', - 'referers_table' => 'referers', - 'ua_table' => 'ua', - 'os_table' => 'os', - 'documents_table' => 'documents', - 'sites_table' => 'sites', - 'hosts_table' => 'hosts', - 'config_table' => 'configuration', - 'version_table' => 'version', - 'feed_requests_table' => 'feed_requests', - 'visitors_table' => 'visitors', - 'impressions_table' => 'impressions', - 'clicks_table' => 'clicks', - 'exits_table' => 'exits', - 'users_table' => 'users', - 'db_class' => '', - 'db_type' => '', - 'db_name' => OWA_DB_NAME, - 'db_user' => OWA_DB_USER, - 'db_password' => OWA_DB_PASSWORD, - 'db_host' => OWA_DB_HOST, - 'resolve_hosts' => true, - 'log_feedreaders' => true, - 'log_robots' => false, - 'log_sessions' => true, - 'log_dom_clicks' => true, - 'delay_first_hit' => true, - 'async_db' => false, - 'clean_query_string' => true, - 'fetch_refering_page_info' => true, - 'query_string_filters' => '', - 'async_log_dir' => OWA_BASE_DIR . '/logs/', - 'async_log_file' => 'events.txt', - 'async_lock_file' => 'owa.lock', - 'async_error_log_file' => 'events_error.txt', - 'notice_email' => '', - 'error_handler' => 'production', - 'error_log_file' => OWA_BASE_DIR . '/logs/errors.txt', - 'browscap.ini' => OWA_BASE_DIR . '/conf/browscap.ini', - 'browscap_supplemental.ini' => OWA_BASE_DIR . '/conf/browscap_supplemental.ini', - 'search_engines.ini' => OWA_BASE_DIR . '/conf/search_engines.ini', - 'query_strings.ini' => OWA_BASE_DIR . '/conf/query_strings.ini', - 'os.ini' => OWA_BASE_DIR . '/conf/os.ini', - 'robots.ini' => OWA_BASE_DIR . '/conf/robots.ini', - 'db_class_dir' => OWA_BASE_DIR . '/plugins/db/', - 'templates_dir' => OWA_BASE_DIR . '/templates/', - 'plugin_dir' => OWA_BASE_DIR . '/plugins/', - 'install_plugin_dir' => OWA_BASE_DIR . '/plugins/install/', - 'reporting_dir' => OWA_BASE_DIR . '/public/reports/', - 'geolocation_lookup' => true, - 'geolocation_service' => 'hostip', - 'report_wrapper' => 'default_wrap.tpl', - 'config_file_path' => OWA_BASE_DIR . '/conf/owa_config.php', - 'fetch_config_from_db' => true, - 'announce_visitors' => false, - 'public_url' => '', - 'action_url' => '', - 'images_url' => '', - 'reporting_url' => '', - 'p3p_policy' => 'NOI NID ADMa OUR IND UNI COM NAV', - 'inter_report_link_template' => '%s?page=%s&%s', //base_url?report=report_name&get... - 'inter_admin_link_template' => '%s?admin=%s&%s', //base_url?report=report_name&get... - 'graph_link_template' => '%s?owa_action=graph&name=%s&%s', //action_url?... - 'owa_user_agent' => 'Open Web Analytics Bot '.OWA_VERSION, - 'fetch_owa_news' => true, - 'owa_rss_url' => 'http://www.openwebanalytics.com/?feed=rss2', - 'use_summary_tables' => false, - 'summary_framework' => '', - 'click_drawing_mode' => 'center_on_page', - 'log_clicks' => true, - 'authentication' => 'simple', - 'owa_wiki_link_template' => 'http://wiki.openwebanalytics.com/index.php?title=%s' - ); - } - - /** - * Save Config to database - * Site_id needs to be in the array so that it can be changed via the options GUI - * - * @param array $settings - */ - function save($new_config) { - - $config = &owa_settings::get_settings(); - - $this->db = &owa_db::get_instance(); - //print sprintf("Saving new config for site id: %s", $new_new_config['site_id']); - $check = $this->db->get_row( - sprintf("SELECT settings from %s where id = '%s'", - $config['ns'].$config['config_table'], - $new_config['configuration_id'] - )); - - - if (empty($check)): - - $this->db->query( - sprintf(" - INSERT into %s (id, settings) VALUES ('%s', '%s')", - $config['ns'].$config['config_table'], - $new_config['configuration_id'], - serialize($new_config)) - - ); - - else: - - $this->db->query( - sprintf(" - UPDATE %s SET settings = '%s' where id = '%s'", - $config['ns'].$config['config_table'], - serialize($new_config), - $new_config['configuration_id'] - ) - - ); - - endif; - - return; - } - - /** - * Fetch Config from database - * - * @return array - */ - function &fetch($configuration_id = 1) { - - $config = &owa_settings::get_settings(); - - static $settings; - - if (!isset($settings)): - - $this->db = &owa_db::get_instance(); - - $sql = sprintf(" - SELECT - settings - from - %s - WHERE - id = '%s'", - $config['ns'].$config['config_table'], - $configuration_id); - - $settings = $this->db->get_row($sql); - - // Special Debug variable because error loggers will not have been initialized yet. - $from_db = true; - //$e = &owa_error::get_instance(); - //$e->debug(debug_backtrace()); - - endif; - - return unserialize($settings['settings']); - - } - -} - -?> + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_settings { + + /** + * Databse access object + * + * @var unknown_type + */ + var $db; + + /** + * Configuration properties + * + * @var array + */ + var $properties; + + /** + * Error Handler + * + * @var object + */ + var $e; + + /** + * Constructor + * + * @return owa_settings + */ + function owa_settings() { + + $this->properties = $this->get_settings(); + //$this->e = &owa_error::get_instance(); + return; + } + + + /** + * Returns the configuration + * + * @return array + * @access public + * @static + */ + function &get_settings() { + + static $config; + + if(!isset($config)): + + // get base config + $config = &owa_settings::get_default_config(); + + //load overrides from config file + if (file_exists($config['config_file_path'])): + include_once ($config['config_file_path']); + if (isset($OWA_CONFIG)): + if (!empty($OWA_CONFIG)): + foreach ($OWA_CONFIG as $key => $value) { + // update current config + $config[$key] = $value; + } + endif; + endif; + // Setup special public URLs + + $base_url = "http"; + + if(isset($_SERVER['HTTPS'])): + $base_url .= 's'; + endif; + + $base_url .= '://'.$_SERVER['SERVER_NAME']; + + if($_SERVER['SERVER_PORT'] != 80): + $base_url .= ':'.$_SERVER['SERVER_PORT']; + endif; + + $config['public_url'] = $base_url . $OWA_CONFIG['public_url']; + $config['main_url'] = $OWA_CONFIG['public_url']."/main.php"; + $config['main_absolute_url'] = $base_url . $config['main_url']; + //$config['action_url'] = $OWA_CONFIG['public_url']."/action.php"; + $config['action_url'] = $config['main_url']; + $config['log_url'] = $OWA_CONFIG['public_url']."/log.php"; + $config['images_url'] = $OWA_CONFIG['public_url']."/i"; + $config['reporting_url'] = $OWA_CONFIG['public_url']."/reports/index.php"; + $config['home_url'] = $config['public_url']."/reports/index.php?page=dashboard_report.php"; + $config['admin_url'] = $OWA_CONFIG['public_url']."/admin/index.php"; + + endif; + endif; + + return $config; + } + + /** + * Returns default settings array + * + * @return array + */ + function get_default_config() { + + return array( + + 'ns' => 'owa_', + 'visitor_param' => 'v', + 'session_param' => 's', + 'last_request_param' => 'last_req', + 'first_hit_param' => 'first_hit', + 'feed_subscription_param' => 'sid', + 'source_param' => 'from', + 'graph_param' => 'graph', + 'period_param' => 'period', + 'document_param' => 'document', + 'referer_param' => 'referer', + 'site_id' => '', + 'configuration_id' => '1', + 'session_length' => '1800', + 'debug_to_screen' => false, + 'requests_table' => 'request', + 'sessions_table' => 'session', + 'referers_table' => 'referer', + 'ua_table' => 'ua', + 'os_table' => 'os', + 'documents_table' => 'document', + 'sites_table' => 'site', + 'hosts_table' => 'host', + 'config_table' => 'configuration', + 'version_table' => 'version', + 'feed_requests_table' => 'feed_request', + 'visitors_table' => 'visitor', + 'impressions_table' => 'impression', + 'clicks_table' => 'click', + 'exits_table' => 'exit', + 'users_table' => 'user', + 'db_class' => '', + 'db_type' => '', + 'db_name' => '', + 'db_user' => '', + 'db_password' => '', + 'db_host' => '', + 'resolve_hosts' => true, + 'log_feedreaders' => true, + 'log_robots' => false, + 'log_sessions' => true, + 'log_dom_clicks' => true, + 'delay_first_hit' => true, + 'async_db' => false, + 'clean_query_string' => true, + 'fetch_refering_page_info' => true, + 'query_string_filters' => '', + 'async_log_dir' => OWA_BASE_DIR . '/logs/', + 'async_log_file' => 'events.txt', + 'async_lock_file' => 'owa.lock', + 'async_error_log_file' => 'events_error.txt', + 'notice_email' => '', + 'error_handler' => 'production', + 'error_log_file' => OWA_BASE_DIR . '/logs/errors.txt', + 'browscap.ini' => OWA_BASE_DIR . '/modules/base/data/php_browscap.ini', + 'browscap_supplemental.ini' => OWA_BASE_DIR . '/conf/browscap_supplemental.ini', + 'search_engines.ini' => OWA_BASE_DIR . '/conf/search_engines.ini', + 'query_strings.ini' => OWA_BASE_DIR . '/conf/query_strings.ini', + 'os.ini' => OWA_BASE_DIR . '/conf/os.ini', + 'robots.ini' => OWA_BASE_DIR . '/conf/robots.ini', + 'db_class_dir' => OWA_BASE_DIR . '/plugins/db/', + 'templates_dir' => OWA_BASE_DIR . '/templates/', + 'plugin_dir' => OWA_BASE_DIR . '/plugins/', + 'module_dir' => OWA_BASE_DIR . '/modules', + 'install_plugin_dir' => OWA_BASE_DIR . '/plugins/install/', + 'reporting_dir' => OWA_BASE_DIR . '/public/reports/', + 'geolocation_lookup' => true, + 'geolocation_service' => 'hostip', + 'report_wrapper' => 'wrapper_default.tpl', + 'config_file_path' => OWA_BASE_DIR . '/conf/owa_config.php', + 'fetch_config_from_db' => true, + 'announce_visitors' => false, + 'public_url' => '', + 'action_url' => '', + 'images_url' => '', + 'reporting_url' => '', + 'p3p_policy' => 'NOI NID ADMa OUR IND UNI COM NAV', + 'inter_report_link_template' => '%s?%s', //base_url?report=report_name&get... + 'inter_admin_link_template' => '%s?admin=%s&%s', //base_url?report=report_name&get... DEPRICATED + 'graph_link_template' => '%s?owa_action=graph&name=%s&%s', //action_url?... + 'link_template' => '%s?%s', // main_url?key=value.... + 'owa_user_agent' => 'Open Web Analytics Bot '.OWA_VERSION, + 'fetch_owa_news' => true, + 'owa_rss_url' => 'http://www.openwebanalytics.com/?feed=rss2', + 'use_summary_tables' => false, + 'summary_framework' => '', + 'click_drawing_mode' => 'center_on_page', + 'log_clicks' => true, + 'authentication' => 'simple', + 'owa_wiki_link_template' => 'http://wiki.openwebanalytics.com/index.php?title=%s', + 'password_length' => 4, + 'modules' => array('base'), + 'mailer-from' => '', + 'mailer-fromName' => 'OWA Mailer', + 'mailer-host' => '', + 'mailer-port' => '', + 'mailer-smtpAuth' => '', + 'mailer-username' => '', + 'mailer-password' => '', + 'cookie_domain' => $_SERVER['SERVER_NAME'] + + ); + } + + /** + * Save Config to database + * Site_id needs to be in the array so that it can be changed via the options GUI + * + * @param array $settings + */ + function save($new_config) { + + $config = &owa_settings::get_settings(); + + if (empty($new_config['configuration_id'])): + $new_config['configuration_id'] = $config['configuration_id']; + endif; + + $this->db = &owa_db::get_instance(); + //print sprintf("Saving new config for site id: %s", $new_new_config['site_id']); + $check = $this->db->get_row( + sprintf("SELECT settings from %s where id = '%s'", + $config['ns'].$config['config_table'], + $new_config['configuration_id'] + )); + + + if (empty($check)): + + $this->db->query( + sprintf(" + INSERT into %s (id, settings) VALUES ('%s', '%s')", + $config['ns'].$config['config_table'], + $new_config['configuration_id'], + serialize($new_config)) + + ); + + else: + + $this->db->query( + sprintf(" + UPDATE %s SET settings = '%s' where id = '%s'", + $config['ns'].$config['config_table'], + serialize($new_config), + $new_config['configuration_id'] + ) + + ); + + endif; + + return; + } + + /** + * Fetch Config from database + * + * @return array + */ + function &fetch($configuration_id = 1) { + + $config = &owa_settings::get_settings(); + + static $settings; + + if (!isset($settings)): + + $this->db = &owa_db::get_instance(); + + $sql = sprintf(" + SELECT + settings + from + %s + WHERE + id = '%s'", + $config['ns'].$config['config_table'], + $configuration_id); + + $settings = $this->db->get_row($sql); + + // Special Debug variable because error loggers will not have been initialized yet. + $from_db = true; + //$e = &owa_error::get_instance(); + //$e->debug(debug_backtrace()); + + $config_values = unserialize($settings['settings']); + endif; + + return $config_values; + + } + +} + +?> diff --git a/owa_site.php b/owa_site.php index 38d268086..8362cb254 100644 --- a/owa_site.php +++ b/owa_site.php @@ -60,6 +60,13 @@ class owa_site { */ var $name; + /** + * Domain of web site + * + * @var unknown_type + */ + var $domain; + /** * Description of web site * @@ -117,23 +124,44 @@ function getSiteByPK($site_id) { */ function getSite($site_id) { + return $this->getSiteBase('site_id', $site_id); + } + + function getSiteById($id) { + + return $this->getSiteBase('id', $id); + + } + + function getSiteByDomain($domain) { + + return $this->getSiteBase('domain', $domain); + + } + + function getSiteBase($constraint, $value) { + $row = $this->db->get_row(sprintf("SELECT + id, site_id, name, + domain, description, site_family FROM %s WHERE - site_id = '%s'", + %s = '%s'", $this->config['ns'].$this->config['sites_table'], - $site_id)); + $constraint, + $value)); if (!empty($row)): $this->_setAttributes($row); return true; else: return false; endif; + } /** @@ -155,7 +183,7 @@ function _setAttributes($array) { function save() { - return $this->addSite(); + return $this->addNewSite(); } /** @@ -165,23 +193,28 @@ function save() { */ function addSite() { - $insert = $this->db->query(sprintf(" + $status = $this->db->query(sprintf(" INSERT INTO %s - (name, description, site_family) + (site_id, name, domain, description, site_family) VALUES - ('%s', '%s', '%s') + ('%s', '%s', '%s', '%s', '%s') ", $this->config['ns'].$this->config['sites_table'], + $this->site_id, $this->db->prepare($this->name), + $this->db->prepare($this->domain), $this->db->prepare($this->description), $this->site_family)); - - if ($insert == true): - return $this->site_id; + + + if ($status == true): + $site_id = $this->site_id; else: - return false; + $site_id = false; endif; + return $site_id; + } /** @@ -191,10 +224,29 @@ function addSite() { */ function addNewSite() { - //$this->site_id = md5($this->name.rand().time()); + $this->site_id = md5($this->domain); return $this->addSite(); + } + + function saveSiteCustomId() { + + return $this->addSite(); + + } + + function delete() { + + return $this->db->query(sprintf("DELETE FROM + %s + WHERE + site_id = '%s'", + $this->config['ns'].$this->config['sites_table'], + $this->site_id)); + + + } /** @@ -206,21 +258,28 @@ function addNewSite() { function updateSite($site_id) { return $this->db->query(sprintf("UPDATE - %S + %s SET - name = '%s' - AND description = '%s' + name = '%s', + description = '%s', + site_family = '%s' WHERE site_id = '%s' ", $this->config['ns'].$this->config['sites_table'], $this->db->prepare($this->name), $this->db->prepare($this->description), - $this->db->prepare($this->site_family) + $this->db->prepare($this->site_family), + $this->db->prepare($this->site_id) )); } + function update() { + + return $this->updateSite($this->site_id); + } + /** * Get list of all sites from the db * @@ -233,6 +292,7 @@ function getAllSites() { site_id, name, description, + domain, site_family FROM %s", diff --git a/owa_template.php b/owa_template.php index ba0a273f5..39fa463a9 100644 --- a/owa_template.php +++ b/owa_template.php @@ -1,259 +1,334 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_template extends Template { - - /** - * Configuration - * - * @var array - */ - var $config; - - /** - * Params passed by calling caller - * - * @var array - */ - var $caller_params; - - function owa_template($caller_params = null) { - - $this->caller_params = $caller_params; - $this->config = &owa_settings::get_settings(); - $this->template_dir = $this->config['templates_dir']; - $this->time_now = owa_lib::time_now(); - - return; - } - - /** - * Truncate string - * - * @param string $str - * @param integer $length - * @param string $trailing - * @return string - */ - function truncate ($str, $length=10, $trailing='...') { - - // take off chars for the trailing - $length-=strlen($trailing); - if (strlen($str) > $length): - // string exceeded length, truncate and add trailing dots - return substr($str,0,$length).$trailing; - else: - // string was already short enough, return the string - $res = $str; - endif; - - return $res; - } - - function get_month_label($month) { - - return owa_lib::get_month_label($month); - } - - /** - * Chooses the right icon based on browser type - * - * @param unknown_type $browser_type - * @return unknown - */ - function choose_browser_icon($browser_type) { - - switch (strtolower($browser_type)) { - - case "ie": - $file = 'msie.png'; - break; - case "internet explorer": - $file = 'msie.png'; - break; - case "firefox": - $file = 'firefox.png'; - break; - case "safari": - $file = 'safari.png'; - break; - case "opera": - $file = 'opera.png'; - break; - case "netscape": - $file = 'netscape.png'; - break; - case "mozilla": - $file = 'mozilla.png'; - break; - case "konqueror": - $file = 'kon.png'; - break; - case "camino": - $file = 'camino.png'; - break; - - - } - if (!empty($file)): - return $icon = "config['images_url']."/".$file."\">"; - else: - return $browser_type; - endif; - - return; - } - - /** - * Generates a link between reports - * - * @param array $query_params - * @return string - */ - function make_report_link($report, $query_params = null, $make_query_string = true) { - - if ($make_query_string == true): - $get = $this->makeLinkQueryString($query_params); - else: - $get = ''; - endif; - - //Return URL - return sprintf($this->config['inter_report_link_template'], - $this->config['reporting_url'], - $report, - $get); - } - - /** - * Generates a link between admin screens - * - * @param array $query_params - * @return string - */ - function make_admin_link($admin_page, $query_params = null, $make_query_string = true) { - - if ($make_query_string == true): - $get = $this->makeLinkQueryString($query_params); - else: - $get = ''; - endif; - - //Return URL - return sprintf($this->config['inter_admin_link_template'], - $this->config['admin_url'], - $admin_page, - $get); - } - - function makeLinkQueryString($query_params) { - - $new_query_params = array(); - - //Load params passed by caller - if (!empty($this->caller_params)): - foreach ($this->caller_params as $name => $value) { - if (!empty($value)): - $new_query_params[$name] = $value; - endif; - } - endif; - - // Load overrides - if (!empty($query_params)): - foreach ($query_params as $name => $value) { - if (!empty($value)): - $new_query_params[$name] = $value; - endif; - } - endif; - - // Construct GET request - if (!empty($new_query_params)): - foreach ($new_query_params as $name => $value) { - if (!empty($value)): - $get .= $name . "=" . $value . "&"; - endif; - } - endif; - - return $get; - - } - - function makeGraphLink($graph, $query_params = null) { - - $get = $this->makeLinkQueryString($query_params); - - //Return URL - return sprintf($this->config['graph_link_template'], - $this->config['action_url'], - $graph, - $get); - - - } - - function daysAgo($time) { - - $now = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']); - - $days = ($now - $time) / (3600*24); - - switch ($days) { - - case 1: - return $days . " day ago"; - - default: - return $days . " days ago"; - } - - } - - function getAuthStatus() { - - $auth = &owa_auth::get_instance(); - - return $auth->auth_status; - } - - function makeWikiLink($page) { - - return sprintf($this->config['owa_wiki_link_template'], $page); - } -} - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_template extends Template { + + /** + * Configuration + * + * @var array + */ + var $config; + + /** + * Params passed by calling caller + * + * @var array + */ + var $caller_params; + + function owa_template($module = null, $caller_params = null) { + + $this->caller_params = $caller_params; + + $this->config = &owa_settings::get_settings(); + // set template dir + + if(!empty($caller_params['module'])): + $this->_setTemplateDir($module); + else: + $this->_setTemplateDir('base'); + endif; + + $this->time_now = owa_lib::time_now(); + + return; + } + + function _setTemplateDir($module) { + + $this->template_dir = OWA_BASE_DIR . '/modules/' . $module . '/templates/'; + + return; + } + + /** + * Truncate string + * + * @param string $str + * @param integer $length + * @param string $trailing + * @return string + */ + function truncate ($str, $length=10, $trailing='...') { + + // take off chars for the trailing + $length-=strlen($trailing); + if (strlen($str) > $length): + // string exceeded length, truncate and add trailing dots + return substr($str,0,$length).$trailing; + else: + // string was already short enough, return the string + $res = $str; + endif; + + return $res; + } + + function get_month_label($month) { + + return owa_lib::get_month_label($month); + } + + /** + * Chooses the right icon based on browser type + * + * @param unknown_type $browser_type + * @return unknown + */ + function choose_browser_icon($browser_type) { + + switch (strtolower($browser_type)) { + + case "ie": + $file = 'msie.png'; + break; + case "internet explorer": + $file = 'msie.png'; + break; + case "firefox": + $file = 'firefox.png'; + break; + case "safari": + $file = 'safari.png'; + break; + case "opera": + $file = 'opera.png'; + break; + case "netscape": + $file = 'netscape.png'; + break; + case "mozilla": + $file = 'mozilla.png'; + break; + case "konqueror": + $file = 'kon.png'; + break; + case "camino": + $file = 'camino.png'; + break; + + + } + if (!empty($file)): + return $icon = "config['images_url']."/".$file."\">"; + else: + return $browser_type; + endif; + + } + + + function makeLinkQueryString($query_params) { + + $new_query_params = array(); + + //Load params passed by caller + if (!empty($this->caller_params)): + foreach ($this->caller_params as $name => $value) { + if (!empty($value)): + $new_query_params[$name] = $value; + endif; + } + endif; + + // Load overrides + if (!empty($query_params)): + foreach ($query_params as $name => $value) { + if (!empty($value)): + $new_query_params[$name] = $value; + endif; + } + endif; + + // Construct GET request + if (!empty($new_query_params)): + foreach ($new_query_params as $name => $value) { + if (!empty($value)): + $get .= $name . "=" . $value . "&"; + endif; + } + endif; + + return $get; + + } + + function makeNavigation($nav) { + + $navigation = ''; + + return $navigation; + + + } + + function daysAgo($time) { + + $now = mktime(23, 59, 59, $this->time_now['month'], $this->time_now['day'], $this->time_now['year']); + + $days = ($now - $time) / (3600*24); + + switch ($days) { + + case 1: + return $days . " day ago"; + + default: + return $days . " days ago"; + } + + } + + function getAuthStatus() { + + $auth = &owa_auth::get_instance(); + + return $auth->auth_status; + } + + function makeWikiLink($page) { + + return sprintf($this->config['owa_wiki_link_template'], $page); + } + + /** + * Returns Namespace value to template + * + * @return string + */ + function getNs() { + + return $this->config['ns']; + } + + function graphLink($params, $add_state = false) { + + return $this->makeLink($params, $add_state, $this->config['action_url']); + } + + /* + * Convienence method for making links to other reports + * + * @var array $params + * @return string The link + */ + function reportLink($params) { + + $params['view'] = 'base.report'; + return $this->makeLink($params, true); + + } + + /** + * Makes Links, adds state to links optionaly. + * + * @param array $params + * @param boolean $add_state + * @return string + */ + function makeLink($params = array(), $add_state = false, $url = '') { + + //Loads link state passed by caller + if ($add_state == true): + if (!empty($this->caller_params['link_state'])): + foreach ($this->caller_params['link_state'] as $name => $value) { + if (!empty($value)): + $all_params[$name] = $value; + endif; + } + endif; + endif; + + // Load overrides + if (!empty($params)): + foreach ($params as $name => $value) { + if (!empty($value)): + $all_params[$name] = $value; + endif; + } + endif; + + $get = ''; + + if (!empty($all_params)): + foreach ($all_params as $n => $v) { + + $get .= $this->config['ns'].$n.'='.$v.'&'; + } + endif; + + if (empty($url)): + $url = $this->config['main_url']; + endif; + + return sprintf($this->config['link_template'], $url, $get); + + } + + function makeAbsoluteLink($params, $url = '') { + + $get = ''; + + if (!empty($params)): + foreach ($params as $n => $v) { + + $get .= $this->config['ns'].$n.'='.$v.'&'; + } + endif; + + if (empty($url)): + $url = $this->config['main_absolute_url']; + endif; + + return owa_coreAPI::makeAbsoluteLink($params, $url); + //return sprintf($this->config['link_template'], $this->config['main_absolute_url'], $get); + + } + +} + + ?> \ No newline at end of file diff --git a/owa_tracking_controller.php b/owa_tracking_controller.php index 866c2a505..0454b72fb 100644 --- a/owa_tracking_controller.php +++ b/owa_tracking_controller.php @@ -17,7 +17,7 @@ // require_once 'owa_event_class.php'; -require_once 'owa_request_class.php'; +//require_once 'owa_request_class.php'; require_once 'owa_click.php'; require_once 'owa_lib.php'; require_once 'owa_browscap.php'; @@ -57,6 +57,8 @@ function owa() { * to be processed by a second http request on the same page. * */ + + /* function process_first_request() { // Create a new request object @@ -75,6 +77,7 @@ function process_first_request() { return; } + */ /** * Graph Controller @@ -121,9 +124,9 @@ function logEvent($event_type, $app_params = '') { $event = new owa_click; break; - case "page_request": - $event = new owa_request; - break; + //case "page_request": + //$event = new owa_request; + //break; default: $event = new owa_event; diff --git a/owa_user.php b/owa_user.php index 618f6075b..cc9c2b848 100644 --- a/owa_user.php +++ b/owa_user.php @@ -112,6 +112,7 @@ function owa_user() { function selectUser($constraint) { return sprintf(" SELECT + id, user_id, password, role, diff --git a/owa_view.php b/owa_view.php new file mode 100644 index 000000000..e77366c85 --- /dev/null +++ b/owa_view.php @@ -0,0 +1,317 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_view extends owa_base { + + /** + * Main view template object + * + * @var object + */ + var $t; + + /** + * Body content template object + * + * @var object + */ + var $body; + + /** + * Sub View object + * + * @var object + */ + var $subview; + + /** + * Rednered subview + * + * @var string + */ + var $subview_rendered; + + /** + * CSS file for main template + * + * @var unknown_type + */ + var $css_file; + + /** + * The priviledge level required to access this view + * + * @var string + */ + var $priviledge_level; + + /** + * Type of page + * + * @var unknown_type + */ + var $page_type; + + /** + * Request Params + * + * @var unknown_type + */ + var $params; + + /** + * Authorization object + * + * @var object + */ + var $auth; + + var $module; // set by factory. + + var $data; + + var $default_subview; + + var $is_subview; + + /** + * Constructor + * + * @return owa_view + */ + function owa_view($params = null) { + + $this->owa_base(); + $this->auth = & owa_auth::get_instance(); + $this->t = new owa_template(); + $this->body = new owa_template($this->module); + $this->setTheme(); + return; + } + + /** + * Assembles the view using passed model objects + * + * @param unknown_type $data + * @return unknown + */ + function assembleView($data) { + + $this->data = $data; + + $this->e->debug('Assembling view: '.get_class($this)); + + // auth user + $this->auth->authenticateUser($this->priviledge_level); + + // Assign status msg + if (!empty($data['status_msg'])): + $this->t->set('status_msg', $data['status_msg']); + endif; + + // get status msg from code passed on the query string from a redirect. + if (!empty($data['status_code'])): + $this->t->set('status_msg', $this->getMsg($data['status_code'])); + endif; + + // set error msg directly if passed from constructor + $this->t->set('error_msg', $data['error_msg']); + + // authentication status + if(!empty($data['p'])): + $this->t->set('authStatus', true); + endif; + + //array or errors usually used for field validations + $this->body->set('errors', $data['errors']); + + // get error msg from error code passed on the query string from a redirect. + if (!empty($data['error_code'])): + $this->t->set('error_msg', $this->getMsg($data['error_code'])); + endif; + + // load subview + if (!empty($this->data['subview']) || !empty($this->default_subview)): + // Load subview + $this->loadSubView($this->data['subview']); + endif; + + // construct main view. This might set some properties of the subview. + $this->construct($this->data); + + // assemble subview + if (!empty($this->data['subview'])): + // Load subview + $this->renderSubView($this->data); + // assign subview to body template + $this->body->set('subview', $this->subview_rendered); + endif; + + //Assign body to main template + $this->t->set('body', $this->body); + + // Return fully asembled View + return $this->t->fetch(); + + } + + /** + * Sets the theme to be used by a view + * + */ + function setTheme() { + + $this->t->set_template($this->config['report_wrapper']); + + return; + } + + /** + * Abstract method for assembling a view + * + * @param array $data + */ + function construct($data) { + + return; + + } + + /** + * Assembles subview + * + * @param array $data + */ + function loadSubView($subview) { + + if (empty($subview)): + if (!empty($this->default_subview)): + $subview = $this->default_subview; + $this->data['subview'] = $this->default_subview; + else: + return $this->e->debug("No Subview was specified by caller."); + endif; + endif; + + $this->subview = owa_coreAPI::subViewFactory($subview); + + return; + + } + + /** + * Assembles subview + * + * @param array $data + */ + function renderSubView($data) { + + // Stores subview as string into $this->subview + $this->subview_rendered = $this->subview->assembleSubView($data); + + return; + + } + + /** + * Assembles the view using passed model objects + * + * @param unknown_type $data + * @return unknown + */ + function assembleSubView($data) { + + // auth user + $auth_data = $this->auth->authenticateUser($this->priviledge_level); + + // if auth was success then procead to assemble view. + if ($auth_data['auth_status'] == true): + + // construct view + $this->construct($data); + + $this->t->set_template('wrapper_subview.tpl'); + + //Assign body to main template + $this->t->set('body', $this->body); + + // Return fully asembled View + $page = $this->t->fetch(); + + return $page; + + else: + //$this->e->debug('RenderView: '.print_r($data, true)); + $api = &owa_coreAPI::singleton(); + + $subview = $api->displaySubView($auth_data); + + return $subview; + endif; + + + } + + + /** + * Sets the Priviledge Level required to access this view + * + * @param string $level + */ + function _setPriviledgeLevel($level) { + + $this->priviledge_level = $level; + + return; + } + + /** + * Sets the page type of this view. Used for tracking. + * + * @param string $page_type + */ + function _setPageType($page_type) { + + $this->page_type = $page_type; + + return; + } + +} + + + + +?> \ No newline at end of file diff --git a/owa_wp.php b/owa_wp.php index 46bad94a8..f0d52b31d 100644 --- a/owa_wp.php +++ b/owa_wp.php @@ -1,102 +1,107 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_wp extends owa_caller { - - /** - * Constructor - * - * @return owa_wp - */ - function owa_wp($config = null) { - - $this->owa_caller($config); - $this->e = &owa_error::get_instance(); - $this->controller = new owa; - return; - } - - function add_link_tracking($link) { - - if (!empty($_GET[$this->config['feed_subscription_id']])): - return $link."&"."from=feed"."&".$this->config['ns'].$this->config['feed_subscription_id']."=".$_GET[$this->config['feed_subscription_id']]; - else: - return $link."&"."from=feed"; - endif; - - return; - - } - - function add_feed_tracking($binfo) { - - $guid = crc32(posix_getpid().microtime()); - - return $binfo."&".$this->config['ns'].$this->config['feed_subscription_param']."=".$guid; - } - - function logComment() { - - return $this->controller->logEvent('new_comment'); - - } - - /** - * Installation Controller - * - * @param string $type - * @param array $params - * @return boolean - */ - function install($type, $params = '') { - - $this->config['fetch_config_from_db'] = false; - $installer = &owa_installer::get_instance($params); - $install_check = $installer->plugins[$type]->check_for_schema(); - - if ($install_check == false): - //Install owa schema - $status = $installer->plugins[$type]->install(); - $default_site = $installer->plugins[$type]->addDefaultSite(); - else: - // owa already installed - $status = false; - endif; - - return $status; - - } - - - -} - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_wp extends owa_caller { + + /** + * Constructor + * + * @return owa_wp + */ + function owa_wp($config = null) { + + $this->owa_caller($config); + + return; + } + + + function add_link_tracking($link) { + + if (!empty($_GET[$this->config['feed_subscription_id']])): + return $link."&"."from=feed"."&".$this->config['ns'].$this->config['feed_subscription_id']."=".$_GET[$this->config['feed_subscription_id']]; + else: + return $link."&"."from=feed"; + endif; + + } + + /** + * Wordpress filter method. Adds tracking to feed links. + * + * @var string the feed link + * @return string link string with special tracking id + */ + function add_feed_tracking($binfo) { + + $guid = crc32(posix_getpid().microtime()); + + return $binfo."&".$this->config['ns'].$this->config['feed_subscription_param']."=".$guid; + } + + /** + * Convienence function for logging comments. + * + * @return boolean + */ + function logComment() { + + return $this->logEvent('base.processEvent',array('event' => 'base.new_comment')); + + } + + function handleSpecialActionRequest() { + + if(isset($_GET['owa_specialAction'])): + $this->e->debug("special action received"); + echo $this->handleRequestFromUrl(); + exit; + elseif(isset($_GET['owa_logAction'])): + $this->e->debug("log action received"); + echo $this->logEventFromUrl($_GET); + exit; + else: + return; + endif; + + } + + + function placeHelperPageTags() { + + echo $this->handleHelperPageTagsRequest(); + + return; + } + +} + ?> \ No newline at end of file diff --git a/plugins/auth/none.php b/plugins/auth/none.php index 47e093b2e..28b92cb77 100644 --- a/plugins/auth/none.php +++ b/plugins/auth/none.php @@ -60,7 +60,10 @@ function authenticateNewBrowser($user_id, $password) { */ function authenticateUser($necessary_role) { - return; + $data = array(); + $data['auth_status'] = true; + + return $data; } diff --git a/plugins/auth/simple.php b/plugins/auth/simple.php index 80454fd66..fb6661254 100644 --- a/plugins/auth/simple.php +++ b/plugins/auth/simple.php @@ -1,190 +1,119 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ - -class owa_auth_simple extends owa_auth { - - function owa_auth_simple($role) { - - $this->owa_auth(); - $this->eq = &eventQueue::get_instance(); - - $cookies = owa_lib::inputFilter($_COOKIE); - - $this->credentials['user_id'] = $cookies[$this->config['ns'].'u']; - $this->credentials['password'] = $cookies[$this->config['ns'].'p']; - return; - } - - /** - * Simple Password Encryption Scheme - * - * @param string $password - * @return string - */ - function encryptPassword($password) { - - return md5(strtolower($password).strlen($password)); - } - - /** - * Used by controllers to check if the user exists and if they are priviledged. - * - * @param string $necessary_role - */ - function authenticateUser($necessary_role) { - - //print_r($this->credentials); - //print "hello"; - - if ((empty($this->credentials['user_id'])) || (empty($this->credentials['password']))): - if ($necessary_role == 'guest'): - return; - else: - $this->showLoginPage(); - endif; - else: - - $is_user = $this->isUser($this->credentials['user_id'], $this->credentials['password']); - - if ($is_user == true): - $priviledged = $this->isPriviledged($necessary_role); - if ($priviledged == true): - return; - else: - $this->showPriviledgeErrorPage(); - endif; - else: - $this->showLoginErrorPage(); - endif; - endif; - - return; - - } - - /** - * Send user to the Login page Controller - * - * @param array $params - */ - - function showLoginPage($params = array()) { - - $url = $this->config['public_url'].'/login.php?page=login&go='.urlencode(owa_lib::get_current_url()); - owa_lib::redirectBrowser($url); - return; - - } - - /** - * Shown when the user does not enough priviledges - * - */ - function showPriviledgeErrorPage() { - - $url = $this->config['public_url'].'/login.php?page=not_priviledged'; - owa_lib::redirectBrowser($url); - return; - - } - - /** - * Shown when login credentials are not correct - * - */ - function showLoginErrorPage() { - - $url = $this->config['public_url'].'/login.php?page=bad_pass&go='.urlencode(owa_lib::get_current_url()); - owa_lib::redirectBrowser($url); - return; - - } - - /** - * Shown after the temp passkey is found in the database - * - */ - function showResetPasswordPage() { - - $url = $this->config['public_url'].'/login.php?page=reset_password'; - owa_lib::redirectBrowser($url); - return; - } - - /** - * Shown when the temp passkey is not found in the DB - * - */ - function showResetPasswordErrorPage() { - $url = $this->config['public_url'].'/login.php?page=reset_password_error'; - owa_lib::redirectBrowser($url); - return; - } - - /** - * Shown when the temp passkey has been set nd mailed. - * - */ - function showRequestNewPasswordSuccessPage() { - $url = $this->config['public_url'].'/login.php?page=request_password_success'; - owa_lib::redirectBrowser($url); - return; - } - - - /** - * Saves login credentails to persistant browser cookies - * - */ - function saveCredentials() { - - setcookie($this->config['ns'].'u', $this->u->user_id, time()+3600*24*365*30, '/', $_SERVER['SERVER_NAME']); - setcookie($this->config['ns'].'p', $this->u->password, time()+3600*24*365*30, '/', $_SERVER['SERVER_NAME']); - - return; - } - - /** - * Removes credentials - * - * @return boolean - */ - function deleteCredentials() { - - return setcookie($this->config['ns'].'p', $this->u->password, time()-3600*24*365*30, '/', $_SERVER['SERVER_NAME']); - - } -} - - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_auth_simple extends owa_auth { + + function owa_auth_simple() { + + $this->owa_auth(); + $this->check_for_credentials = true; + + return; + } + + function getUser() { + + // fetch user object from the db + $this->u = owa_coreAPI::entityFactory('base.user'); + $this->u->getByColumn('user_id', $this->credentials['user_id']); + } + + /** + * Simple Password Encryption Scheme + * + * @param string $password + * @return string + */ + function encryptPassword($password) { + + return md5(strtolower($password).strlen($password)); + } + + + + /** + * Checks to see if the user credentials match a real user object in the DB + * + * @return boolean + */ + function isUser() { + + // fetches user object from DB + $this->getUser(); + + // sets priviledge level + $this->_priviledge_level = $this->getLevel($this->u->get('role')); + + if ($this->credentials['user_id'] == $this->u->get('user_id')): + if ($this->credentials['password'] === $this->u->get('password')): + $this->_is_user = true; + return true; + else: + $this->_is_user = false; + return false; + endif; + else: + $this->_is_user = false; + return false; + endif; + } + + function _setNotPriviledgedView() { + $data['view_method'] = 'delegate'; + $data['view'] = 'base.error'; + $data['error_msg'] = $this->getMsg(2003); + $data['go'] = urlencode(owa_lib::get_current_url()); + return $data; + } + + function _setNotUserView() { + + $data['view_method'] = 'delegate'; + $data['view'] = 'base.login'; + $data['go'] = urlencode(owa_lib::get_current_url()); + $data['error_msg'] = $this->getMsg(2002); + return $data; + } + + function _setNotAuthenticatedView() { + + $data['view_method'] = 'delegate'; + $data['view'] = 'base.login'; + $data['go'] = urlencode(owa_lib::get_current_url()); + $data['error_msg'] = $this->getMsg(2004); + return $data; + } + +} + + ?> \ No newline at end of file diff --git a/plugins/auth/wordpress.php b/plugins/auth/wordpress.php new file mode 100644 index 000000000..5c96f3c96 --- /dev/null +++ b/plugins/auth/wordpress.php @@ -0,0 +1,155 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_auth_wordpress extends owa_auth { + + function owa_auth_wordpress() { + + $this->owa_auth(); + + return; + } + + function getUser() { + + $this->u = owa_coreAPI::entityFactory('base.user'); + + $this->u->email_address = $this->params['caller']['wordpress']['user_data']['user_email']; + $this->u->real_name = $this->params['caller']['wordpress']['user_data']['user_identity']; + $this->u->user_id = $this->params['caller']['wordpress']['user_data']['user_login']; + + return; + + } + + function isUser() { + + // fetch user object + $this->getUser(); + + // set priviledge level + $this->mapPriviledgeLevel($this->params['caller']['wordpress']['user_data']['user_level']); + //$this->_priviledge_level = 2; //test param + //print $this->_priviledge_level; + + // check to see if this is a valid user + if (!empty($this->_priviledge_level)): + + // set user flag + $this->_is_user = true; + + return true; + + else: + + return false; + + endif; + + } + + function mapPriviledgeLevel($level) { + + switch($level) { + + case 0: + $this->_priviledge_level = 2; + break; + case 1: + $this->_priviledge_level = 2; + break; + case 2: + $this->_priviledge_level = 2; + break; + case 3: + $this->_priviledge_level = 2; + break; + case 4: + $this->_priviledge_level = 2; + break; + case 5: + $this->_priviledge_level = 2; + break; + case 6: + $this->_priviledge_level = 2; + break; + case 7: + $this->_priviledge_level = 2; + break; + case 8: + $this->_priviledge_level = 2; + break; + case 9: + $this->_priviledge_level = 2; + break; + case 10: + $this->_priviledge_level = 10; + break; + + } + + return; + } + + function _setNotPriviledgedView() { + $data['view_method'] = 'delegate'; + $data['view'] = 'base.error'; + $data['error_msg'] = $this->getMsg(2003); + $data['go'] = urlencode(owa_lib::get_current_url()); + return $data; + } + + function _setNotUserView() { + + $data['view_method'] = 'delegate'; + $data['view'] = 'base.error'; + $data['go'] = urlencode(owa_lib::get_current_url()); + $data['error_msg'] = $this->getMsg(2003); + return $data; + } + + function _setNotAuthenticatedView() { + + $data['view_method'] = 'delegate'; + $data['view'] = 'base.error'; + $data['go'] = urlencode(owa_lib::get_current_url()); + $data['error_msg'] = $this->getMsg(2004); + return $data; + } +} + + +?> \ No newline at end of file diff --git a/plugins/db/owa_db_mysql.php b/plugins/db/owa_db_mysql.php index 28d9f1505..b7675a5ce 100644 --- a/plugins/db/owa_db_mysql.php +++ b/plugins/db/owa_db_mysql.php @@ -1,172 +1,523 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_db_mysql extends owa_db { - - /** - * Constructor - * - * @return owa_db_mysql - * @access public - */ - function owa_db_mysql() { - - $this->owa_db(); - - $connectionString = sprintf( - '%s', - $this->config['db_host'] - ); - - $this->connection = @mysql_connect( - $connectionString, - $this->config['db_user'], - $this->config['db_password'], - true - ); - - $this->database_selection = @mysql_select_db($this->config['db_name'], $this->connection); - - if (!$this->connection || !$this->database_selection): - $this->e->alert('Could not connect to database. '); - $this->connection_status = false; - else: - $this->connection_status = true; - endif; - - return; - } - - - /** - * Database Query - * - * @param string $sql - * @access public - * - */ - function query($sql) { - - $this->e->debug(sprintf('Query: %s', $sql)); - - @mysql_free_result($this->new_result); - $this->result = ''; - $this->new_result = ''; - $result = @mysql_unbuffered_query($sql, $this->connection); - - // Log Errors - if (mysql_errno()): - $this->e->debug(sprintf('A MySQL error occured. Error: (%s) %s. Query: %s', - mysql_errno(), - htmlspecialchars(mysql_error()), - $sql)); - endif; - - $this->new_result = $result; - - // hack for when calling applications catch all mysql errors and you nee to flush the error - // this only is an issue with respect to inserts that fail. - if ($result == false): - //mysql_ping($this->connection); - endif; - - return $this->new_result; - } - - function close() { - - @mysql_close($this->connection); - return; - - } - - /** - * Fetch result set array - * - * @param string $sql - * @return array - * @access public - */ - function get_results($sql) { - - if ($sql): - $this->query($sql); - endif; - - $num_rows = 0; - - while ( $row = @mysql_fetch_object($this->new_result) ) { - $this->result[$num_rows] = $row; - $num_rows++; - } - - if ($this->result): - $i = 0; - foreach($this->result as $row ) { - $new_array[$i] = (array) $row; - $i++; - } - - return $new_array; - else: - return null; - endif; - } - - /** - * Fetch Single Row - * - * @param string $sql - * @return array - */ - function get_row($sql) { - - $this->query($sql); - - //print_r($this->result); - $row = mysql_fetch_assoc($this->new_result); - - return $row; - } - - /** - * Prepares and escapes string - * - * @param string $string - * @return string - */ - function prepare($string) { - - $string = mysql_real_escape_string($string, $this->connection); - return $string; - } - -} - -?> + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_db_mysql extends owa_db { + + /** + * Constructor + * + * @return owa_db_mysql + * @access public + */ + function owa_db_mysql() { + + $this->owa_db(); + + $connectionString = sprintf( + '%s', + $this->config['db_host'] + ); + + $this->connection = @mysql_connect( + $connectionString, + $this->config['db_user'], + $this->config['db_password'], + true + ); + + $this->database_selection = @mysql_select_db($this->config['db_name'], $this->connection); + + if (!$this->connection || !$this->database_selection): + $this->e->alert('Could not connect to database. '); + $this->connection_status = false; + else: + $this->connection_status = true; + endif; + + return; + } + + + /** + * Database Query + * + * @param string $sql + * @access public + * + */ + function query($sql) { + + $this->e->debug(sprintf('Query: %s', $sql)); + + $this->result = ''; + $this->new_result = ''; + + if (!empty($this->new_result)): + mysql_free_result($this->new_result); + endif; + + $result = @mysql_unbuffered_query($sql, $this->connection); + + // Log Errors + if (mysql_errno($this->connection)): + $this->e->debug(sprintf('A MySQL error occured. Error: (%s) %s. Query: %s', + mysql_errno($this->connection), + htmlspecialchars(mysql_error($this->connection)), + $sql)); + endif; + + $this->new_result = $result; + + // hack for when calling applications catch all mysql errors and you nee to flush the error + // this only is an issue with respect to inserts that fail. + if ($result == false): + ;//mysql_ping($this->connection); + endif; + + return $this->new_result; + + } + + function close() { + + @mysql_close($this->connection); + return; + + } + + /** + * Fetch result set array + * + * @param string $sql + * @return array + * @access public + */ + function get_results($sql) { + + if ($sql): + $this->query($sql); + endif; + + $num_rows = 0; + + while ( $row = @mysql_fetch_object($this->new_result) ) { + $this->result[$num_rows] = $row; + $num_rows++; + } + + if ($this->result): + $i = 0; + foreach($this->result as $row ) { + + // Hook for caching goes here + + $new_array[$i] = (array) $row; + $i++; + } + + + return $new_array; + + else: + return null; + endif; + } + + /** + * Fetch Single Row + * + * @param string $sql + * @return array + */ + function get_row($sql) { + + $this->query($sql); + + //print_r($this->result); + $row = mysql_fetch_assoc($this->new_result); + + return $row; + } + + /** + * Prepares and escapes string + * + * @param string $string + * @return string + */ + function prepare($string) { + + $string = mysql_real_escape_string($string, $this->connection); + return $string; + } + + /** + * Save Request to database + * + */ + function save($properties, $table) { + + $count = count($properties); + + $i = 0; + + foreach ($properties as $key => $value) { + + $sql_cols = $sql_cols.$key; + $sql_values = $sql_values."'".$this->prepare($value)."'"; + + $i++; + + // Add commas + if ($i < $count): + + $sql_cols = $sql_cols.", "; + $sql_values = $sql_values.", "; + + endif; + } + + return $this->query(sprintf( + "INSERT into %s (%s) VALUES (%s)", + $table, + $sql_cols, + $sql_values) + ); + + } + + function update($properties, $constraints, $table) { + + $count = count($properties); + + $i = 0; + + foreach ($properties as $key => $value) { + + $sql_cols = $sql_cols.$key; + $sql_values = $sql_values."'".$this->prepare($value)."'"; + + // Add commas + if ($i != 0): + + $set .= ', '; + + endif; + + $set .= $key .' = \'' . $value . '\''; + + $i++; + } + + $where = owa_lib::addConstraints($constraints); + + return $this->query(sprintf("UPDATE %s SET %s WHERE %s", $table, $set, $where)); + + } + + function delete($id, $col, $table) { + + return $this->query(sprintf("DELETE from %s WHERE %s = '%s'", $table, $col, $id)); + + } + + function select($values, $constraints, $table) { + + $cols = ''; + $i = 0; + $count = count($values); + + foreach ($values as $k => $v) { + + $cols .= $k; + + // Add commas + if ($i < $count - 1): + + $cols .= ', '; + + endif; + + $i++; + + } + + $where = owa_lib::addConstraints($constraints); + + return $this->get_row(sprintf("SELECT %s FROM %s WHERE %s", $cols, $table, $where)); + + } + + /** + * Fetches primary and related objects from DB + * + * @param array $params caller params + * @return array + */ + function getObjs($params) { + + // Adds caller params to class var + $this->params = $params; + + // construct COLUMNS + + $cols = $this->makeColumnList($this->params['primary_obj']); + + // add related objects + if(!empty($this->params['related_objs'])): + + foreach ($this->params['related_objs'] as $k => $v) { + + $cols .= ', '.$this->makeColumnList($v); + + } + + endif; + + + return $this->buildSelectStm($cols); + } + + function selectQuery($params) { + + // Adds caller params to class var + $this->params = $params; + + return $this->buildSelectStm($this->params['select']); + + + } + + function buildSelectStm($cols) { + + $orderby_stm = ''; + $limit_stm = ''; + $offset_stm = ''; + // construct FROM + + $from = $this->makeFromStm(); + + // construct WHERE + if(!empty($this->params['constraints'])): + $where = 'WHERE '.owa_lib::addConstraints($this->params['constraints']); + endif; + + // construct GROUP BY + + if(!empty($this->params['groupby'])): + + $groupby_stm = $this->makeGroupByStm(); + + endif; + + // construct ORDER + + if(!empty($this->params['orderby'])): + + $orderby_stm = $this->makeOrderByStm(); + + endif; + + // construct LIMIT + + if(!empty($this->params['limit'])): + + $limit_stm = $this->makeLimitStm(); + + endif; + + // construct OFFSET + + if(!empty($this->params['offset'])): + + $offset_stm = $this->makeOffsetStm(); + + endif; + + // Issue query + + $ret = $this->get_results(sprintf("SELECT %s FROM %s %s %s %s %s %s", $cols, $from, $where, $groupby_stm, $orderby_stm, $limit_stm, $offset_stm)); + + // format results + if(!empty($ret)): + + $ret = $this->formatResults($ret); + + endif; + + // clear out params. + $this->params = ''; + + return $ret; + + + } + + function formatResults($results) { + + switch ($this->params['result_format']) { + + case "single_array": + return $results[0]; + break; + case "single_row": + return $results[0]; + break; + case "inverted_array": + return owa_lib::deconstruct_assoc($results); + break; + default: + return $results; + break; + } + + } + + function makeFromStm() { + + // construct FROM + + $primary_obj_ns = $this->removeNs(get_class($this->params['primary_obj'])); + + $from = get_class($this->params['primary_obj']) . ' as ' . $primary_obj_ns; + + // add related objects + if(!empty($this->params['related_objs'])): + + foreach ($this->params['related_objs'] as $k => $v) { + $joinTableNs = $this->removeNs(get_class($v)); + + $from .= ' LEFT OUTER JOIN ' . get_class($v) . ' as ' . $joinTableNs . ' ON ' . $primary_obj_ns . '.' . $k . ' = ' . $joinTableNs . '.id'; + } + + endif; + + return $from; + + } + + function makeGroupByStm() { + + return 'GROUP BY ' . $this->makeDelimitedList($this->params['groupby']); + + } + + function makeOrderByStm() { + + if (empty($this->params['order'])): + $this->params['order'] = 'DESC'; + endif; + + return 'ORDER BY ' . $this->makeDelimitedList($this->params['orderby']). ' '. $this->params['order']; + + } + + function makeLimitStm() { + + return 'LIMIT ' . $this->params['limit']; + + } + + function makeOffsetStm() { + + return 'OFFSET ' . $this->params['offset']; + + } + + function makeColumnList($obj) { + + $values = $obj->getColumns(); + + $ns = $this->removeNs(get_class($obj)); + $cols = ''; + $i = 0; + $count = count($values); + + foreach ($values as $k => $v) { + + $cols .= $ns.'.'.$v.' as '.$ns.'_'.$v; + + // Add commas + if ($i < $count - 1): + + $cols .= ', '; + + endif; + + $i++; + + } + + return $cols; + + } + + function removeNs($string) { + + $ns_len = strlen($this->config['ns']); + return substr($string, $ns_len); + + } + + function makeDelimitedList($values, $delimiter = ', ') { + + $items = ''; + $i = 0; + $count = count($values); + + if (is_array($values)): + + foreach ($values as $k) { + + $items .= $k; + + // Add commas + if ($i < $count - 1): + + $items .= $delimiter; + + endif; + + $i++; + + } + + else: + + $items = $values; + + endif; + + return $items; + + } + +} + +?> diff --git a/plugins/event_handlers/observer_password_reset.php b/plugins/event_handlers/observer_password_reset.php index f1aef439d..f5dff3d16 100644 --- a/plugins/event_handlers/observer_password_reset.php +++ b/plugins/event_handlers/observer_password_reset.php @@ -16,9 +16,6 @@ // $Id$ // -require_once(OWA_BASE_DIR.'/owa_user.php'); -require_once(OWA_BASE_DIR.'/owa_template.php'); - /** * OWA user password reset Event handler * @@ -32,20 +29,6 @@ */ class Log_observer_password_reset extends owa_observer { - - /** - * Email that mail should go to - * - * @var string - */ - var $_to; - - /** - * Subject of email - * - * @var string - */ - var $_subject; /** * Constructor @@ -60,7 +43,7 @@ function Log_observer_password_reset($priority, $conf) { $this->owa_observer($priority); // Configure the observer to listen for event types - $this->_event_type = array('user.set_temp_passkey', 'user.reset_password', 'user.set_initial_passkey'); + $this->_event_type = array('base.set_password', 'base.reset_password', 'base.new_user_account'); return; } @@ -76,110 +59,20 @@ function notify($event) { $this->m = $event['message']; switch ($event['event_type']) { - case "user.set_temp_passkey": - $this->setTempPasskey(); + case "base.reset_password": + $this->handleEvent('base.usersResetPassword'); break; - case "user.reset_password": - $this->resetPassword(); + case "base.set_password": + $this->handleEvent('base.usersSetPassword'); break; - case "user.set_initial_passkey": - $this->setInitialPasskey(); + case "base.new_user_account": + $this->handleEvent('base.usersNewAccount'); break; } return; } - function sendMail($address, $subject, $msg) { - - mail($address, $subject, $msg); - - $this->e->debug('sending e-mail with subject of "'.$subject.'" to: '.$u->email_address); - - return; - } - - function setInitialPasskey() { - - $u = new owa_user; - $u->getUserByPK($this->m['user_id']); - $u->temp_passkey = md5($u->user_id.time().rand()); - $status = $u->update(); - - if ($status == true): - - $msg = new owa_template(); - - $msg->set_template('email_new_account.tpl'); - $msg->set('user_id', $u->user_id); - $msg->set('key', $u->temp_passkey); - $email = $msg->fetch(); - - //send mail - $this->sendMail($u->email_address, - "OWA Account Setup", - $email); - - endif; - - return; - } - - function setTempPasskey() { - - $u = new owa_user; - $u->getUserByEmail($this->m['email_address']); - $u->temp_passkey = md5($u->user_id.time().rand()); - $status = $u->update(); - - // Create mail msg template - if ($status == true): - - $msg = new owa_template(); - - $msg->set_template('password_reset_request_email.tpl'); - $msg->set('key', $u->temp_passkey); - $email = $msg->fetch(); - - //send mail - $this->sendMail($u->email_address, - "Request for Password Reset", - $email); - - endif; - - return; - - } - - function resetPassword() { - - $u = new owa_user; - $u->getUserByTempPasskey($this->m['key']); - $u->temp_passkey = ''; - $u->password = $this->m['password']; - $status = $u->update(); - - if ($status == true): - - $msg = new owa_template(); - - $msg->set_template('password_reset_email.tpl'); - $msg->set('ip', $this->m['ip']); - $email = $msg->fetch(); - - //send mail - - mail($u->email_address, - "Password Reset", - $email); - - $this->e->debug('sending password reset mail to: '.$u->email_address); - endif; - - - return; - } } ?> diff --git a/plugins/install/mysql/owa_install_base.php b/plugins/install/mysql/owa_install_base.php index 4522eaa8f..a28449464 100644 --- a/plugins/install/mysql/owa_install_base.php +++ b/plugins/install/mysql/owa_install_base.php @@ -123,34 +123,34 @@ function create($table) { switch ($table) { - case 'requests': + case $this->config['requests_table']: return $this->create_requests_table(); break; - case 'sessions': + case $this->config['sessions_table']: return $this->create_sessions_table(); break; - case 'documents': + case $this->config['documents_table']: return $this->create_documents_table(); break; - case 'referers': + case $this->config['referers_table']: return $this->create_referers_table(); break; - case 'hosts': + case $this->config['hosts_table']: return $this->create_hosts_table(); break; - case 'ua': + case $this->config['ua_table']: return $this->create_ua_table(); break; - case 'os': + case $this->config['os_table']: return $this->create_os_table(); break; - case 'configuration': + case $this->config['config_table']: return $this->create_config_table(); break; - case 'sites': + case $this->config['sites_table']: return $this->create_sites_table(); break; - case 'version': + case $this->config['version_table']: return $this->create_version_table(); break; case $this->config['feed_requests_table']: @@ -191,7 +191,6 @@ function create_requests_table() { request_id bigint, inbound_visitor_id bigint, inbound_session_id bigint, - inbound_first_hit_properties varchar(255), visitor_id bigint, session_id bigint, user_name varchar(255), @@ -214,7 +213,6 @@ function create_requests_table() { site varchar(255), site_id varchar(255), ip_address varchar(255), - host varchar(255), host_id varchar(255), os varchar(255), os_id varchar(255), @@ -248,7 +246,6 @@ function create_feed_requests_table() { document_id BIGINT, ua_id VARCHAR(255), site_id VARCHAR(255), - site VARCHAR(255), timestamp bigint, month INT, day tinyint(2), @@ -264,10 +261,7 @@ function create_feed_requests_table() { feed_reader_guid VARCHAR(255), subscription_id BIGINT, feed_format VARCHAR(255), - ip_address VARCHAR(255), - host VARCHAR(255), host_id BIGINT, - os VARCHAR(255), os_id VARCHAR(255), PRIMARY KEY (request_id)) ", @@ -527,7 +521,7 @@ function create_users_table() { } function create_hosts_table() { - + return $this->db->query( sprintf(" CREATE TABLE %1\$s ( @@ -535,6 +529,8 @@ function create_hosts_table() { ip_address VARCHAR(255), host VARCHAR(255), full_host VARCHAR(255), + city VARCHAR(255), + country VARCHAR(255), PRIMARY KEY (id) )", $this->config['ns'].$this->config['hosts_table']) @@ -605,7 +601,7 @@ function create_sites_table() { return $this->db->query( sprintf(" CREATE TABLE %1\$s ( - site_id SERIAL, + site_id VARCHAR(255), domain VARCHAR(255), name VARCHAR(255), description TEXT, diff --git a/plugins/location/hostip.php b/plugins/location/hostip.php index b8a920430..56e0cd5eb 100644 --- a/plugins/location/hostip.php +++ b/plugins/location/hostip.php @@ -1,113 +1,115 @@ - - * @copyright Copyright © 2006 Peter Adams - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - */ -class owa_hostip extends owa_location { - - /** - * URL template for REST based web service - * - * @var unknown_type - */ - var $ws_url = "http://api.hostip.info/get_html.php?ip=%s&position=true"; - - /** - * Constructor - * - * @return owa_hostip - */ - function owa_hostip(){ - - $this->owa_location(); - - return; - } - - function get_location_xml($ip) { - - $url = sprintf($this->ws_url, - $ip); - - $crawler = new owa_http; - $crawler->fetch($url); - - // XML parsing needs to go here. - - $this->city = trim($result['City'], "\n"); - $this->country = trim($result['Country'], "\n"); - $this->latitude = $result['Latitude']; - $this->longitude = $result['Longitude']; - - print_r($results); - - return; - - } - - /** - * Fetches the location from the hostip.info web service - * - * @param string $ip - */ - function get_location($ip) { - - $crawler = new owa_http; - $crawler->fetch(sprintf($this->ws_url, $ip)); - $location = $crawler->results; - - $location = str_replace("\n", "|", $location); - - $loc_array = explode("|", $location); - //print_r($loc_array); - $result = array(); - - foreach ($loc_array as $k => $v) { - - list($name, $value) = split(":", $v, 2); - $result[$name] = $value; - } - - //print_r($result); - - - $this->city = $result['City']; - $this->country = trim($result['Country'], "\n"); - $this->latitude = $result['Latitude']; - $this->longitude = $result['Longitude']; - - return; - } - -} - - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ +class owa_hostip extends owa_location { + + /** + * URL template for REST based web service + * + * @var unknown_type + */ + var $ws_url = "http://api.hostip.info/get_html.php?ip=%s&position=true"; + + /** + * Constructor + * + * @return owa_hostip + */ + function owa_hostip(){ + + $this->owa_location(); + + return; + } + + function get_location_xml($ip) { + + $url = sprintf($this->ws_url, + $ip); + + $crawler = new owa_http; + $crawler->fetch($url); + + $result = ''; + + // XML parsing needs to go here. + + $this->city = trim($result['City'], "\n"); + $this->country = trim($result['Country'], "\n"); + $this->latitude = $result['Latitude']; + $this->longitude = $result['Longitude']; + + //print_r($result); + + return; + + } + + /** + * Fetches the location from the hostip.info web service + * + * @param string $ip + */ + function get_location($ip) { + + $crawler = new owa_http; + $crawler->fetch(sprintf($this->ws_url, $ip)); + $location = $crawler->results; + + $location = str_replace("\n", "|", $location); + + $loc_array = explode("|", $location); + //print_r($loc_array); + $result = array(); + + foreach ($loc_array as $k => $v) { + + list($name, $value) = split(":", $v, 2); + $result[$name] = $value; + } + + //print_r($result); + + + $this->city = $result['City']; + $this->country = trim($result['Country'], "\n"); + $this->latitude = $result['Latitude']; + $this->longitude = $result['Longitude']; + + return; + } + +} + + ?> \ No newline at end of file diff --git a/plugins/metrics/dashboard.php b/plugins/metrics/dashboard.php index 8019cb99e..6b61c4316 100644 --- a/plugins/metrics/dashboard.php +++ b/plugins/metrics/dashboard.php @@ -29,8 +29,10 @@ */ class owa_metric_dashboard extends owa_metric { - function owa_metric_dashboard() { + function owa_metric_dashboard($params) { + $this->params = $params; + $this->owa_metric(); $this->api_calls = array('dash_core', 'page_views', 'page_view_count', 'dash_counts', 'session_count'); diff --git a/public/action.php b/public/action.php index f5df098ac..909f16bd4 100644 --- a/public/action.php +++ b/public/action.php @@ -31,10 +31,11 @@ * @since owa 1.0.0 */ -$l = new owa_php; +$owa = new owa_php; -$l->e->debug('Special action request received...'); +$owa->e->debug('Special action request received...'); -$l->actionRequestHandler(); +// run controller or view and echo page content +echo $owa->handleRequestFromUrl(); ?> \ No newline at end of file diff --git a/public/install.php b/public/install.php new file mode 100644 index 000000000..3d5c69ce4 --- /dev/null +++ b/public/install.php @@ -0,0 +1,52 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +// Initialize owa admin +$config['fetch_config_from_db'] = false; +$owa = new owa_php($config); + +// Santize input +$params = owa_lib::inputFilter($_REQUEST); + +// run controller or view and echo page content + +if (empty($params['view'])): + $params['view'] = 'base.install'; +endif; + +echo $owa->handleRequest($params); + +// unload owa + +?> \ No newline at end of file diff --git a/public/main.php b/public/main.php new file mode 100644 index 000000000..4594c6905 --- /dev/null +++ b/public/main.php @@ -0,0 +1,42 @@ + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +// Initialize owa admin +$owa = new owa_php; + +// run controller or view and echo page content +echo $owa->handleRequestFromURL(); + +// unload owa + +?> \ No newline at end of file diff --git a/templates/default_wrap.tpl b/templates/default_wrap.tpl index 3054f86d6..ba61fe1a3 100644 --- a/templates/default_wrap.tpl +++ b/templates/default_wrap.tpl @@ -53,7 +53,17 @@
    + + +
    + + + +
    + + +
    diff --git a/templates/installer_env_status.tpl b/templates/installer_env_status.tpl index fdd13d1a1..0feb0d816 100644 --- a/templates/installer_env_status.tpl +++ b/templates/installer_env_status.tpl @@ -4,7 +4,7 @@ Site Information - +
    diff --git a/templates/options_edit_user_profile.tpl b/templates/options_edit_user_profile.tpl index 62482359a..2430d0826 100644 --- a/templates/options_edit_user_profile.tpl +++ b/templates/options_edit_user_profile.tpl @@ -1,8 +1,3 @@ - - -
    - -
    @@ -16,12 +11,12 @@
    - + - - + + - - - + + + @@ -41,9 +36,8 @@ + + diff --git a/templates/session.tpl b/templates/session.tpl index d73da4b55..1ce9d425b 100644 --- a/templates/session.tpl +++ b/templates/session.tpl @@ -1,30 +1,30 @@ -

    - -
    - Details - - -
    - - -
    - Click-Stream - -
    -
    PHP Version Options
    disabled size="30" name="user_id" value="">disabled size="30" name="getNs();?>user_id" value=""> - $value):?> Delete UserDelete User
    - - -
    - - - - - - - - - - -
    TimePage
    :: - ()
    - -
    - +

    + +
    + Details + + +
    + + +
    + Click-Stream + +
    + + + + + + + + + + + +
    TimePage
    :: + ()
    + +
    +
    \ No newline at end of file diff --git a/templates/top_pages.tpl b/templates/top_pages.tpl index 63926afa2..3aaaef5ef 100644 --- a/templates/top_pages.tpl +++ b/templates/top_pages.tpl @@ -1,11 +1,11 @@ - + - +
    PageTitle Views
    diff --git a/templates/wordpress.tpl b/templates/wordpress.tpl index 670662ca3..5ee3c702c 100644 --- a/templates/wordpress.tpl +++ b/templates/wordpress.tpl @@ -23,5 +23,5 @@
    - +
    diff --git a/wp_plugin.php b/wp_plugin.php index 2b1f8de8b..ca7b1ea80 100644 --- a/wp_plugin.php +++ b/wp_plugin.php @@ -1,384 +1,399 @@ -save_config($_POST); - break; - case "reset_config": - $owa_wp->reset_config(); - break; -} - -/** - * This is the main logger function that calls wa on each normal web request. - * Application specific request data should be set here. as part of the $app_params array. - */ - -function owa_main() { - - global $user_level; - - // Wordpress 2.x check to see if the page request is a preview - if (function_exists(is_preview)): - if (is_preview()): - return; - endif; - endif; - - // Check to see if user is an admin - if($user_level == '10'): - return; - endif; - - owa_log(); - - return; - -} - - -function owa_log() { - - // WORDPRESS SPECIFIC DATA // - - // Get the type of page - $app_params['page_type'] = owa_get_page_type(); - - //Check to see if this is a Feed Reeder - if(is_feed()): - $app_params['is_feedreader'] = true; - $app_params['feed_format'] = $_GET['feed']; - endif; - - // Track users by the email address of that they used when posting a comment - $app_params['user_email'] = $_COOKIE['comment_author_email_'.COOKIEHASH]; - - // Track users who have a named account - $app_params['user_name'] = $_COOKIE['wordpressuser_'.COOKIEHASH]; - - // Get Title of Page - $app_params['page_title'] = owa_get_title($app_params['page_type']); - - // Get Feed Tracking Code - //$app_params['feed_subscription_id'] = '' - - // Get Source Tracking code - //$app_params['source'] = ''; - - // Provide an ID for this instance in case you want to track multiple blogs/sites seperately - //$app_params['site_id'] = ''; - - // Process the request by calling owa - $owa_wp = &new owa_wp; - $owa_wp->logEvent('page_request', $app_params); - return; -} - -/** - * Determines the title of the page being requested - * - * @param string $page_type - * @return string $title - */ -function owa_get_title($page_type) { - - if ($page_type == "Home"): - $title = get_bloginfo('name'); - elseif ($page_type == "Search Results"): - $title = "Search Results for \"".$_GET['s']."\""; - elseif ($page_type == "Page" || "Post"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Author"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Category"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Month"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Day"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Year"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Time"): - $title = wp_title($sep = '', $display = 0); - elseif ($page_type == "Feed"): - $title = wp_title($sep = '', $display = 0); - endif; - - return $title; -} - -/** - * Determines the type of page being requested - * - * @return string $type - */ -function owa_get_page_type() { - - if (is_home()): - $type = "Home"; - elseif (is_single()): - $type = "Post"; - elseif (is_page()): - $type = "Page"; - elseif (is_author()): - $type = "Author"; - elseif (is_category()): - $type = "Category"; - elseif (is_search()): - $type = "Search Results"; - elseif (is_month()): - $type = "Month"; - elseif (is_day()): - $type = "Day"; - elseif (is_year()): - $type = "Year"; - elseif (is_time()): - $type = "Time"; - elseif (is_archive()): - $type = "Archive"; - elseif (is_feed()): - $type = "Feed"; - endif; - - return $type; -} - -/** - * Adds a GUID to the feed URL. - * - * @param array $binfo - * @return string $newbinfo - */ -function add_feed_sid($binfo) { - - $owa_wp = &new owa_wp; - - if (strstr($binfo, "feed=")): - - $newbinfo = $owa_wp->add_feed_tracking($binfo); - - else: - - $newbinfo = $binfo; - - endif; - - return $newbinfo; - -} - -/** - * Adds tracking source param to links in feeds - * - * @param string $link - * @return string - */ -function owa_post_link($link) { - - global $owa_wp; - global $doing_rss; - - if($doing_rss): - - $tracked_link = $owa_wp->add_link_tracking($link); - return $tracked_link; - else: - return $link; - endif; - - -} - -/** - * Schema and setting installation - * - */ -function owa_install_1() { - - global $user_level; - global $owa_wp; - - //check to see if the user has permissions to install or not... - get_currentuserinfo(); - - if ($user_level < 8): - return; - else: - $conf = &owa_settings::get_settings(); - $conf['fetch_config_from_db'] = false; - print_r($config); - //$owa_wp = &new owa_wp; - $owa_wp->config['db_type'] = 'mysql'; - $owa_wp->install('base'); - endif; - - return; -} - -/** - * Schema and setting installation - * - */ -function owa_install_2() { - - global $owa_wp; - - $conf = &owa_settings::get_settings(); - $conf['fetch_config_from_db'] = false; - //$owa_wp = &new owa_wp; - $owa_wp->config['db_type'] = 'mysql'; - $install_params = array('name' => get_bloginfo('name'), 'description' => get_bloginfo('description')); - $owa_wp->install('base_schema', $install_params); - - - return; -} - -/** - * Adds Analytics sub tab to admin dashboard screens. - * - */ -function owa_dashboard_view() { - - if (function_exists('add_submenu_page')): - add_submenu_page('index.php', 'OWA Dashboard', 'Analytics', 1, dirname(__FILE__) . '/public/reports/dashboard_report.php'); - endif; - - return; - -} - -/** - * Adds Options page to admin interface - * - */ -function owa_options() { - - if (function_exists('add_options_page')): - add_options_page('Options', 'OWA', 8, basename(__FILE__), 'owa_options_page'); - endif; - - return; -} - -/** - * Generates Options Management Page - * - */ -function owa_options_page() { - - global $owa_wp; - - //$owa_wp = &new owa_wp; - $owa_wp->options_page(); - - return; -} - -/** - * Parses string to get the major and minor version of the - * instance of wordpress that is running - * - * @param string $version - * @return array - */ -function owa_parse_version($version) { - - $version_array = explode(".", $version); - - return $version_array; - -} - -?> +params['caller']['wordpress']['user_data'] = array( + + 'user_level' => $user_level, + 'user_ID' => $user_ID, + 'user_login' => $user_login, + 'user_email' => $user_email, + 'user_identity' => $user_identity); + + return; +} + +/** + * This is the main logger function that calls owa on each normal web request. + * Application specific request data should be set here. as part of the $app_params array. + */ + +function owa_main() { + + global $user_level; + + // Wordpress 2.x check to see if the page request is a preview + if (function_exists(is_preview)): + if (is_preview()): + return; + endif; + endif; + + // Check to see if user is an admin + if($user_level == '10'): + return; + endif; + + owa_log(); + + return; + +} + + +function owa_log() { + + // WORDPRESS SPECIFIC DATA // + + // Get the type of page + $app_params['page_type'] = owa_get_page_type(); + + //Check to see if this is a Feed Reeder + if(is_feed()): + $app_params['is_feedreader'] = true; + $app_params['feed_format'] = $_GET['feed']; + endif; + + // Track users by the email address of that they used when posting a comment + $app_params['user_email'] = $_COOKIE['comment_author_email_'.COOKIEHASH]; + + // Track users who have a named account + $app_params['user_name'] = $_COOKIE['wordpressuser_'.COOKIEHASH]; + + // Get Title of Page + $app_params['page_title'] = owa_get_title($app_params['page_type']); + + // Get Feed Tracking Code + //$app_params['feed_subscription_id'] = '' + + // Get Source Tracking code + //$app_params['source'] = ''; + + // Provide an ID for this instance in case you want to track multiple blogs/sites seperately + //$app_params['site_id'] = ''; + + // Process the request by calling owa + $owa_wp = &new owa_wp; + $owa_wp->log($app_params); + return; +} + +/** + * Determines the title of the page being requested + * + * @param string $page_type + * @return string $title + */ +function owa_get_title($page_type) { + + if ($page_type == "Home"): + $title = get_bloginfo('name'); + elseif ($page_type == "Search Results"): + $title = "Search Results for \"".$_GET['s']."\""; + elseif ($page_type == "Page" || "Post"): + $title = wp_title($sep = '', $display = 0); + elseif ($page_type == "Author"): + $title = wp_title($sep = '', $display = 0); + elseif ($page_type == "Category"): + $title = wp_title($sep = '', $display = 0); + elseif ($page_type == "Month"): + $title = wp_title($sep = '', $display = 0); + elseif ($page_type == "Day"): + $title = wp_title($sep = '', $display = 0); + elseif ($page_type == "Year"): + $title = wp_title($sep = '', $display = 0); + elseif ($page_type == "Time"): + $title = wp_title($sep = '', $display = 0); + elseif ($page_type == "Feed"): + $title = wp_title($sep = '', $display = 0); + endif; + + return $title; +} + +/** + * Determines the type of page being requested + * + * @return string $type + */ +function owa_get_page_type() { + + if (is_home()): + $type = "Home"; + elseif (is_single()): + $type = "Post"; + elseif (is_page()): + $type = "Page"; + elseif (is_author()): + $type = "Author"; + elseif (is_category()): + $type = "Category"; + elseif (is_search()): + $type = "Search Results"; + elseif (is_month()): + $type = "Month"; + elseif (is_day()): + $type = "Day"; + elseif (is_year()): + $type = "Year"; + elseif (is_time()): + $type = "Time"; + elseif (is_archive()): + $type = "Archive"; + elseif (is_feed()): + $type = "Feed"; + endif; + + return $type; +} + +/** + * Adds a GUID to the feed URL. + * + * @param array $binfo + * @return string $newbinfo + */ +function add_feed_sid($binfo) { + + $owa_wp = &new owa_wp; + + if (strstr($binfo, "feed=")): + + $newbinfo = $owa_wp->add_feed_tracking($binfo); + + else: + + $newbinfo = $binfo; + + endif; + + return $newbinfo; + +} + +/** + * Adds tracking source param to links in feeds + * + * @param string $link + * @return string + */ +function owa_post_link($link) { + + global $owa_wp; + global $doing_rss; + + if($doing_rss): + + $tracked_link = $owa_wp->add_link_tracking($link); + return $tracked_link; + else: + return $link; + endif; + + +} + +/** + * Schema and setting installation + * + */ +function owa_install() { + + global $user_level; + global $owa_wp; + + //check to see if the user has permissions to install or not... + get_currentuserinfo(); + + if ($user_level < 8): + return; + else: + $conf = &owa_settings::get_settings(); + $conf['fetch_config_from_db'] = false; + + $owa_wp->config['db_type'] = 'mysql'; + + $install_params = array('site_id' => $conf['site_id'], + 'name' => get_bloginfo('name'), + 'domain' => get_settings('siteurl'), + 'description' => get_bloginfo('description'), + 'action' => 'base.installEmbedded'); + + $owa_wp->handleRequest($install_params); + endif; + + return; +} + + + +/** + * Adds Analytics sub tab to admin dashboard screens. + * + */ +function owa_dashboard_menu() { + + if (function_exists('add_submenu_page')): + add_submenu_page('index.php', 'OWA Dashboard', 'Analytics', 1, dirname(__FILE__), 'owa_dashboard_report'); + endif; + + return; + +} + +function owa_dashboard_report() { + + global $owa_wp; + + $params = array(); + $params['do'] = 'base.reportDashboard'; + echo $owa_wp->handleRequest($params); + + return; + +} + +/** + * Adds Options page to admin interface + * + */ +function owa_options_menu() { + + if (function_exists('add_options_page')): + add_options_page('Options', 'OWA', 8, basename(__FILE__), 'owa_options_page'); + endif; + + return; +} + +/** + * Generates Options Management Page + * + */ +function owa_options_page() { + + global $owa_wp; + + $params = array(); + $params['view'] = 'base.options'; + $params['subview'] = 'base.optionsGeneral'; + echo $owa_wp->handleRequest($params); + + return; +} + +/** + * Parses string to get the major and minor version of the + * instance of wordpress that is running + * + * @param string $version + * @return array + */ +function owa_parse_version($version) { + + $version_array = explode(".", $version); + + return $version_array; + +} + +?>