From 1a949f7c97dc2f34c135f5cdf088df2927d3d652 Mon Sep 17 00:00:00 2001 From: hernani Date: Sat, 10 Apr 2010 04:19:53 +0000 Subject: [PATCH] initial import git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@17 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- .gitignore | 15 + .idea/ant.xml | 7 + .idea/compiler.xml | 24 + .idea/copyright/profiles_settings.xml | 5 + .idea/dictionaries/Fatima.xml | 3 + .idea/encodings.xml | 5 + .idea/misc.xml | 238 ++ .idea/modules.xml | 9 + .idea/uiDesigner.xml | 125 + .idea/vcs.xml | 7 + .project | 23 + .pydevproject | 10 + HOW_TO_DEBUG | 39 + INSTALL | 266 ++ INSTALL.pip | 31 + INSTALL.webfaction | 346 ++ LICENSE | 14 + PENDING | 28 + README | 10 + ROADMAP.rst | 32 + UPGRADE | 10 + WISH_LIST | 24 + __init__.py | 0 cron/README | 5 + cron/multi_award_badges | 5 + cron/multi_award_badges_virtualenv | 10 + cron/once_award_badges | 14 + cron/once_award_badges_virtualenv | 10 + cron/send_email_alerts | 5 + cron/send_email_alerts_virtualenv | 10 + dos2unix.sh | 12 + forum/__init__.py | 1 + forum/activity.py | 132 + forum/admin.py | 72 + forum/authentication/__init__.py | 58 + forum/authentication/base.py | 44 + forum/authentication/forms.py | 64 + forum/badges/__init__.py | 10 + forum/badges/base.py | 106 + forum/const.py | 115 + forum/context.py | 48 + forum/feed.py | 43 + forum/forms.py | 263 ++ forum/management/__init__.py | 13 + forum/management/commands/__init__.py | 0 forum/management/commands/base_command.py | 35 + .../commands/create_extended_user.py | 285 ++ .../commands/create_subscriptions.py | 15 + .../commands/message_to_everyone.py | 12 + forum/management/commands/sample_command.py | 7 + .../management/commands/send_email_alerts.py | 171 + forum/middleware/__init__.py | 0 forum/middleware/anon_user.py | 35 + forum/middleware/cancel.py | 15 + forum/middleware/extended_user.py | 15 + forum/middleware/request_utils.py | 28 + forum/migrations/0001_initial.py | 764 ++++ ...ld_repute_positive__del_field_repute_ne.py | 481 +++ forum/migrations/0003_repute_changes.py | 355 ++ ...__del_field_repute_positive__del_field_.py | 357 ++ .../migrations/0005_fill_accepted_by_field.py | 341 ++ forum/migrations/__init__.py | 0 forum/models/__init__.py | 38 + forum/models/answer.py | 132 + forum/models/base.py | 234 ++ forum/models/meta.py | 152 + forum/models/question.py | 260 ++ forum/models/repute.py | 123 + forum/models/tag.py | 36 + forum/models/user.py | 376 ++ forum/models/utils.py | 77 + forum/modules.py | 103 + forum/reputation.py | 92 + forum/settings/__init__.py | 23 + forum/settings/base.py | 139 + forum/settings/basic.py | 61 + forum/settings/email.py | 53 + forum/settings/extkeys.py | 18 + forum/settings/forms.py | 63 + forum/settings/minrep.py | 94 + forum/settings/pages.py | 28 + forum/settings/repgain.py | 94 + forum/settings/settings.py | 0 forum/settings/upload.py | 25 + forum/settings/voting.py | 40 + forum/sitemap.py | 14 + forum/skins/README | 22 + forum/skins/__init__.py | 57 + forum/skins/common/media/README | 1 + forum/skins/css3/media/images/img_tag.jpg | Bin 0 -> 676 bytes forum/skins/css3/media/images/tag.png | Bin 0 -> 1215 bytes forum/skins/css3/media/style/style.css | 2510 +++++++++++ forum/skins/css3/templates/header.html | 58 + forum/skins/css3/templates/search.html | 25 + .../media/images/blue-up-arrow-h18px.png | Bin 0 -> 593 bytes .../skins/default/media/images/box-arrow.gif | Bin 0 -> 69 bytes .../default/media/images/bullet_green.gif | Bin 0 -> 64 bytes forum/skins/default/media/images/cc-88x31.png | Bin 0 -> 5460 bytes forum/skins/default/media/images/cc-wiki.png | Bin 0 -> 2333 bytes .../default/media/images/close-small-dark.png | Bin 0 -> 226 bytes .../media/images/close-small-hover.png | Bin 0 -> 337 bytes .../default/media/images/close-small.png | Bin 0 -> 293 bytes .../media/images/comment-delete-hover.png | Bin 0 -> 1113 bytes .../default/media/images/comment-delete.png | Bin 0 -> 1092 bytes .../media/images/comment-edit-hover.png | Bin 0 -> 448 bytes .../default/media/images/comment-edit.png | Bin 0 -> 433 bytes .../default/media/images/comment-like-on.png | Bin 0 -> 1523 bytes .../default/media/images/comment-like.png | Bin 0 -> 1530 bytes forum/skins/default/media/images/dash.gif | Bin 0 -> 44 bytes .../media/images/djangomade124x25_grey.gif | Bin 0 -> 2035 bytes forum/skins/default/media/images/dot-g.gif | Bin 0 -> 61 bytes forum/skins/default/media/images/dot-list.gif | Bin 0 -> 56 bytes forum/skins/default/media/images/edit.png | Bin 0 -> 758 bytes .../media/images/expander-arrow-hide.gif | Bin 0 -> 126 bytes .../media/images/expander-arrow-show.gif | Bin 0 -> 135 bytes forum/skins/default/media/images/favicon.gif | Bin 0 -> 3918 bytes forum/skins/default/media/images/favicon.ico | Bin 0 -> 1150 bytes .../default/media/images/feed-icon-small.png | Bin 0 -> 689 bytes .../media/images/gray-up-arrow-h18px.png | Bin 0 -> 383 bytes forum/skins/default/media/images/grippie.png | Bin 0 -> 162 bytes .../skins/default/media/images/indicator.gif | Bin 0 -> 2545 bytes forum/skins/default/media/images/logo.gif | Bin 0 -> 2114 bytes forum/skins/default/media/images/logo.png | Bin 0 -> 2081 bytes forum/skins/default/media/images/logo1.png | Bin 0 -> 2752 bytes forum/skins/default/media/images/logo2.png | Bin 0 -> 2124 bytes forum/skins/default/media/images/medala.gif | Bin 0 -> 801 bytes .../skins/default/media/images/medala_on.gif | Bin 0 -> 957 bytes forum/skins/default/media/images/new.gif | Bin 0 -> 635 bytes forum/skins/default/media/images/nophoto.png | Bin 0 -> 696 bytes forum/skins/default/media/images/openid.gif | Bin 0 -> 910 bytes .../skins/default/media/images/openid/aol.gif | Bin 0 -> 2205 bytes .../default/media/images/openid/blogger.ico | Bin 0 -> 3638 bytes .../default/media/images/openid/claimid.ico | Bin 0 -> 3638 bytes .../default/media/images/openid/facebook.gif | Bin 0 -> 2075 bytes .../default/media/images/openid/flickr.ico | Bin 0 -> 1150 bytes .../default/media/images/openid/google.gif | Bin 0 -> 1596 bytes .../media/images/openid/livejournal.ico | Bin 0 -> 5222 bytes .../default/media/images/openid/myopenid.ico | Bin 0 -> 2862 bytes .../media/images/openid/openid-inputicon.gif | Bin 0 -> 237 bytes .../default/media/images/openid/openid.gif | Bin 0 -> 740 bytes .../media/images/openid/technorati.ico | Bin 0 -> 2294 bytes .../default/media/images/openid/twitter.png | Bin 0 -> 3130 bytes .../default/media/images/openid/verisign.ico | Bin 0 -> 4710 bytes .../default/media/images/openid/vidoop.ico | Bin 0 -> 1406 bytes .../default/media/images/openid/wordpress.ico | Bin 0 -> 1150 bytes .../default/media/images/openid/yahoo.gif | Bin 0 -> 1510 bytes forum/skins/default/media/images/quest-bg.gif | Bin 0 -> 294 bytes .../default/media/images/vote-accepted-on.png | Bin 0 -> 1124 bytes .../default/media/images/vote-accepted.png | Bin 0 -> 1058 bytes .../media/images/vote-arrow-down-on.png | Bin 0 -> 905 bytes .../default/media/images/vote-arrow-down.png | Bin 0 -> 876 bytes .../default/media/images/vote-arrow-up-on.png | Bin 0 -> 906 bytes .../default/media/images/vote-arrow-up.png | Bin 0 -> 843 bytes .../media/images/vote-favorite-off.png | Bin 0 -> 930 bytes .../default/media/images/vote-favorite-on.png | Bin 0 -> 1023 bytes forum/skins/default/media/js/compress.bat | 1 + forum/skins/default/media/js/excanvas.min.js | 1 + forum/skins/default/media/js/flot-build.bat | 3 + forum/skins/default/media/js/jquery-1.2.6.js | 3549 ++++++++++++++++ .../default/media/js/jquery-1.2.6.min.js | 32 + .../default/media/js/jquery.ajaxfileupload.js | 195 + forum/skins/default/media/js/jquery.flot.js | 2421 +++++++++++ .../skins/default/media/js/jquery.flot.min.js | 1 + forum/skins/default/media/js/jquery.form.js | 654 +++ forum/skins/default/media/js/jquery.i18n.js | 133 + forum/skins/default/media/js/jquery.openid.js | 176 + .../default/media/js/jquery.validate.pack.js | 15 + forum/skins/default/media/js/osqa.main.js | 787 ++++ forum/skins/default/media/js/osqa.main.min.js | 1 + forum/skins/default/media/js/se_hilite.js | 1 + forum/skins/default/media/js/se_hilite_src.js | 273 ++ .../media/js/wmd/images/wmd-buttons.png | Bin 0 -> 7465 bytes .../default/media/js/wmd/showdown-min.js | 1 + forum/skins/default/media/js/wmd/showdown.js | 1309 ++++++ forum/skins/default/media/js/wmd/wmd-min.js | 1 + .../skins/default/media/js/wmd/wmd-test.html | 158 + forum/skins/default/media/js/wmd/wmd.css | 129 + forum/skins/default/media/js/wmd/wmd.js | 2434 +++++++++++ .../default/media/js/yuicompressor-2.4.2.jar | Bin 0 -> 851219 bytes forum/skins/default/media/style/admin.css | 33 + forum/skins/default/media/style/auth.css | 48 + forum/skins/default/media/style/default.css | 1754 ++++++++ .../media/style/jquery.autocomplete.css | 49 + forum/skins/default/media/style/openid.css | 45 + forum/skins/default/media/style/prettify.css | 27 + forum/skins/default/media/style/style.css | 2481 +++++++++++ forum/skins/default/templates/404.html | 49 + forum/skins/default/templates/500.html | 35 + .../default/templates/_question_list.html | 39 + forum/skins/default/templates/about.html | 14 + .../default/templates/account_settings.html | 45 + .../skins/default/templates/answer_edit.html | 76 + .../default/templates/answer_edit_tips.html | 55 + forum/skins/default/templates/ask.html | 124 + .../default/templates/auth/auth_settings.html | 35 + .../default/templates/auth/complete.html | 95 + .../templates/auth/email_validation.html | 20 + .../skins/default/templates/auth/signin.html | 173 + .../skins/default/templates/auth/signup.html | 36 + .../templates/auth/temp_login_email.html | 20 + .../templates/auth/temp_login_request.html | 28 + forum/skins/default/templates/badge.html | 37 + forum/skins/default/templates/badges.html | 76 + forum/skins/default/templates/base.html | 79 + .../skins/default/templates/base_content.html | 74 + forum/skins/default/templates/book.html | 152 + forum/skins/default/templates/close.html | 36 + .../templates/edit_user_email_feeds_form.html | 4 + forum/skins/default/templates/email_base.html | 46 + forum/skins/default/templates/faq.html | 146 + forum/skins/default/templates/feedback.html | 55 + .../default/templates/feedback_email.txt | 19 + .../templates/feeds/rss_description.html | 1 + .../default/templates/feeds/rss_title.html | 1 + forum/skins/default/templates/footer.html | 48 + forum/skins/default/templates/header.html | 65 + forum/skins/default/templates/index.html | 16 + forum/skins/default/templates/logout.html | 23 + forum/skins/default/templates/notarobot.html | 15 + .../notifications/answeraccepted.html | 17 + .../templates/notifications/digest.html | 79 + .../templates/notifications/newanswer.html | 27 + .../templates/notifications/newcomment.html | 34 + .../templates/notifications/newmember.html | 17 + .../templates/notifications/newquestion.html | 27 + .../default/templates/osqaadmin/base.html | 35 + .../default/templates/osqaadmin/index.html | 80 + .../default/templates/osqaadmin/set.html | 21 + forum/skins/default/templates/pagesize.html | 27 + forum/skins/default/templates/paginator.html | 38 + .../templates/post_contributor_info.html | 55 + forum/skins/default/templates/privacy.html | 42 + forum/skins/default/templates/question.html | 266 ++ .../templates/question/accept_button.html | 7 + .../default/templates/question/comments.html | 82 + .../templates/question/favorite_mark.html | 8 + .../templates/question/post_controls.html | 11 + .../templates/question/vote_buttons.html | 12 + .../default/templates/question_edit.html | 122 + .../default/templates/question_edit_tips.html | 58 + .../templates/question_list/count.html | 10 + .../default/templates/question_list/item.html | 36 + .../templates/question_list/related_tags.html | 15 + .../templates/question_list/sort_tabs.html | 8 + .../templates/question_list/tag_selector.html | 45 + .../templates/question_list/title.html | 21 + .../default/templates/question_retag.html | 103 + .../templates/question_summary_list_roll.html | 55 + forum/skins/default/templates/questions.html | 44 + forum/skins/default/templates/reopen.html | 37 + .../default/templates/revisions_answer.html | 81 + .../default/templates/revisions_question.html | 81 + .../templates/sidebar/recent_awards.html | 17 + .../templates/sidebar/recent_tags.html | 14 + .../templates/subscription_status.html | 30 + .../skins/default/templates/tag_selector.html | 42 + forum/skins/default/templates/tags.html | 67 + forum/skins/default/templates/user.html | 52 + forum/skins/default/templates/user_edit.html | 95 + .../templates/user_email_subscriptions.html | 26 + .../default/templates/user_favorites.html | 8 + .../skins/default/templates/user_footer.html | 4 + forum/skins/default/templates/user_info.html | 108 + .../skins/default/templates/user_recent.html | 26 + .../default/templates/user_reputation.html | 42 + .../default/templates/user_responses.html | 23 + forum/skins/default/templates/user_stats.html | 138 + .../default/templates/user_subscriptions.html | 126 + forum/skins/default/templates/user_tabs.html | 32 + forum/skins/default/templates/user_votes.html | 32 + forum/skins/default/templates/users.html | 73 + .../templates/users/info_small_full.html | 23 + .../templates/users/info_small_lite.html | 6 + .../default/templates/users_questions.html | 66 + forum/startup.py | 8 + forum/subscriptions.py | 223 + forum/templatetags/__init__.py | 0 forum/templatetags/extra_filters.py | 26 + forum/templatetags/extra_tags.py | 415 ++ forum/templatetags/general_sidebar_tags.py | 16 + forum/templatetags/question_list_tags.py | 50 + forum/templatetags/question_page_tags.py | 123 + forum/templatetags/smart_if.py | 401 ++ forum/templatetags/user_tags.py | 24 + forum/upfiles/README | 2 + forum/upfiles/logo.png | Bin 0 -> 21607 bytes forum/urls.py | 128 + forum/user_messages/__init__.py | 36 + forum/user_messages/context_processors.py | 55 + forum/utils/__init__.py | 0 forum/utils/cache.py | 92 + forum/utils/decorators.py | 25 + forum/utils/diff.py | 66 + forum/utils/forms.py | 155 + forum/utils/html.py | 51 + forum/utils/html2text.py | 140 + forum/utils/lists.py | 86 + forum/utils/mail.py | 132 + forum/utils/odict.py | 1399 +++++++ forum/utils/time.py | 4 + forum/views/README | 12 + forum/views/__init__.py | 7 + forum/views/admin.py | 156 + forum/views/auth.py | 367 ++ forum/views/commands.py | 426 ++ forum/views/decorators.py | 77 + forum/views/meta.py | 108 + forum/views/readers.py | 304 ++ forum/views/users.py | 958 +++++ forum/views/writers.py | 354 ++ forum_modules/__init__.py | 0 forum_modules/books/__init__.py | 3 + forum_modules/books/models.py | 63 + forum_modules/books/urls.py | 10 + forum_modules/books/views.py | 142 + forum_modules/default_badges/__init__.py | 0 forum_modules/default_badges/badges.py | 314 ++ forum_modules/default_badges/settings.py | 136 + forum_modules/facebookauth/__init__.py | 0 forum_modules/facebookauth/authentication.py | 87 + forum_modules/facebookauth/settings.py | 17 + .../facebookauth/templates/button.html | 38 + .../facebookauth/templates/xd_receiver.html | 1 + forum_modules/facebookauth/urls.py | 9 + forum_modules/facebookauth/views.py | 11 + forum_modules/localauth/__init__.py | 0 forum_modules/localauth/authentication.py | 18 + forum_modules/localauth/forms.py | 100 + .../localauth/templates/loginform.html | 31 + forum_modules/localauth/urls.py | 8 + forum_modules/localauth/views.py | 41 + forum_modules/oauthauth/__init__.py | 0 forum_modules/oauthauth/authentication.py | 41 + forum_modules/oauthauth/consumer.py | 87 + forum_modules/oauthauth/lib/__init__.py | 0 forum_modules/oauthauth/lib/oauth.py | 594 +++ forum_modules/oauthauth/settings.py | 19 + forum_modules/openidauth/__init__.py | 5 + forum_modules/openidauth/authentication.py | 196 + forum_modules/openidauth/consumer.py | 112 + forum_modules/openidauth/models.py | 26 + forum_modules/openidauth/settings.py | 9 + forum_modules/openidauth/store.py | 86 + .../openidauth/templates/openidurl.html | 20 + forum_modules/pgfulltext/__init__.py | 10 + forum_modules/pgfulltext/handlers.py | 11 + forum_modules/pgfulltext/management.py | 29 + forum_modules/pgfulltext/pg_fts_install.sql | 54 + forum_modules/project_badges/__init__.py | 0 forum_modules/project_badges/badges.py | 21 + forum_modules/project_badges/settings.py | 8 + forum_modules/recaptcha/__init__.py | 0 forum_modules/recaptcha/formfield.py | 32 + forum_modules/recaptcha/handlers.py | 4 + forum_modules/recaptcha/lib/__init__.py | 0 forum_modules/recaptcha/lib/captcha.py | 96 + forum_modules/recaptcha/settings.py | 17 + forum_modules/robotstxt/__init__.py | 0 forum_modules/robotstxt/settings.py | 16 + forum_modules/robotstxt/templates/robots.txt | 2 + forum_modules/robotstxt/urls.py | 7 + forum_modules/sphinxfulltext/README.txt | 29 + forum_modules/sphinxfulltext/__init__.py | 5 + forum_modules/sphinxfulltext/dependencies.py | 2 + forum_modules/sphinxfulltext/handlers.py | 4 + forum_modules/sphinxfulltext/models.py | 11 + forum_modules/sphinxfulltext/settings.py | 5 + locale/en/LC_MESSAGES/django.mo | Bin 0 -> 27289 bytes locale/en/LC_MESSAGES/django.po | 3662 +++++++++++++++++ locale/es/LC_MESSAGES/django.mo | Bin 0 -> 367 bytes locale/es/LC_MESSAGES/django.po | 3297 +++++++++++++++ locale/zh_CN/LC_MESSAGES/django.mo | Bin 0 -> 37880 bytes locale/zh_CN/LC_MESSAGES/django.po | 2418 +++++++++++ log/README.TXT | 1 + log/django.osqa.log | 2648 ++++++++++++ manage.py | 13 + osqa-requirements.txt | 4 + osqa.iml | 18 + osqa.wsgi.dist | 7 + pip-log.txt | 11 + rmpyc | 1 + settings.py | 88 + settings_local.py.dist | 78 + sphinx/sphinx.conf | 127 + urls.py | 8 + 385 files changed, 52669 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/ant.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/dictionaries/Fatima.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 .project create mode 100644 .pydevproject create mode 100644 HOW_TO_DEBUG create mode 100644 INSTALL create mode 100644 INSTALL.pip create mode 100644 INSTALL.webfaction create mode 100644 LICENSE create mode 100644 PENDING create mode 100644 README create mode 100644 ROADMAP.rst create mode 100644 UPGRADE create mode 100644 WISH_LIST create mode 100644 __init__.py create mode 100644 cron/README create mode 100644 cron/multi_award_badges create mode 100644 cron/multi_award_badges_virtualenv create mode 100644 cron/once_award_badges create mode 100644 cron/once_award_badges_virtualenv create mode 100644 cron/send_email_alerts create mode 100644 cron/send_email_alerts_virtualenv create mode 100644 dos2unix.sh create mode 100644 forum/__init__.py create mode 100644 forum/activity.py create mode 100644 forum/admin.py create mode 100644 forum/authentication/__init__.py create mode 100644 forum/authentication/base.py create mode 100644 forum/authentication/forms.py create mode 100644 forum/badges/__init__.py create mode 100644 forum/badges/base.py create mode 100644 forum/const.py create mode 100644 forum/context.py create mode 100644 forum/feed.py create mode 100644 forum/forms.py create mode 100644 forum/management/__init__.py create mode 100644 forum/management/commands/__init__.py create mode 100644 forum/management/commands/base_command.py create mode 100644 forum/management/commands/create_extended_user.py create mode 100644 forum/management/commands/create_subscriptions.py create mode 100644 forum/management/commands/message_to_everyone.py create mode 100644 forum/management/commands/sample_command.py create mode 100644 forum/management/commands/send_email_alerts.py create mode 100644 forum/middleware/__init__.py create mode 100644 forum/middleware/anon_user.py create mode 100644 forum/middleware/cancel.py create mode 100644 forum/middleware/extended_user.py create mode 100644 forum/middleware/request_utils.py create mode 100644 forum/migrations/0001_initial.py create mode 100644 forum/migrations/0002_auto__add_likedcomment__del_field_repute_positive__del_field_repute_ne.py create mode 100644 forum/migrations/0003_repute_changes.py create mode 100644 forum/migrations/0004_auto__del_field_repute_negative__del_field_repute_positive__del_field_.py create mode 100644 forum/migrations/0005_fill_accepted_by_field.py create mode 100644 forum/migrations/__init__.py create mode 100644 forum/models/__init__.py create mode 100644 forum/models/answer.py create mode 100644 forum/models/base.py create mode 100644 forum/models/meta.py create mode 100644 forum/models/question.py create mode 100644 forum/models/repute.py create mode 100644 forum/models/tag.py create mode 100644 forum/models/user.py create mode 100644 forum/models/utils.py create mode 100644 forum/modules.py create mode 100644 forum/reputation.py create mode 100644 forum/settings/__init__.py create mode 100644 forum/settings/base.py create mode 100644 forum/settings/basic.py create mode 100644 forum/settings/email.py create mode 100644 forum/settings/extkeys.py create mode 100644 forum/settings/forms.py create mode 100644 forum/settings/minrep.py create mode 100644 forum/settings/pages.py create mode 100644 forum/settings/repgain.py create mode 100644 forum/settings/settings.py create mode 100644 forum/settings/upload.py create mode 100644 forum/settings/voting.py create mode 100644 forum/sitemap.py create mode 100644 forum/skins/README create mode 100644 forum/skins/__init__.py create mode 100644 forum/skins/common/media/README create mode 100644 forum/skins/css3/media/images/img_tag.jpg create mode 100644 forum/skins/css3/media/images/tag.png create mode 100644 forum/skins/css3/media/style/style.css create mode 100644 forum/skins/css3/templates/header.html create mode 100644 forum/skins/css3/templates/search.html create mode 100644 forum/skins/default/media/images/blue-up-arrow-h18px.png create mode 100644 forum/skins/default/media/images/box-arrow.gif create mode 100644 forum/skins/default/media/images/bullet_green.gif create mode 100644 forum/skins/default/media/images/cc-88x31.png create mode 100644 forum/skins/default/media/images/cc-wiki.png create mode 100644 forum/skins/default/media/images/close-small-dark.png create mode 100644 forum/skins/default/media/images/close-small-hover.png create mode 100644 forum/skins/default/media/images/close-small.png create mode 100644 forum/skins/default/media/images/comment-delete-hover.png create mode 100644 forum/skins/default/media/images/comment-delete.png create mode 100644 forum/skins/default/media/images/comment-edit-hover.png create mode 100644 forum/skins/default/media/images/comment-edit.png create mode 100644 forum/skins/default/media/images/comment-like-on.png create mode 100644 forum/skins/default/media/images/comment-like.png create mode 100644 forum/skins/default/media/images/dash.gif create mode 100644 forum/skins/default/media/images/djangomade124x25_grey.gif create mode 100644 forum/skins/default/media/images/dot-g.gif create mode 100644 forum/skins/default/media/images/dot-list.gif create mode 100644 forum/skins/default/media/images/edit.png create mode 100644 forum/skins/default/media/images/expander-arrow-hide.gif create mode 100644 forum/skins/default/media/images/expander-arrow-show.gif create mode 100644 forum/skins/default/media/images/favicon.gif create mode 100644 forum/skins/default/media/images/favicon.ico create mode 100644 forum/skins/default/media/images/feed-icon-small.png create mode 100644 forum/skins/default/media/images/gray-up-arrow-h18px.png create mode 100644 forum/skins/default/media/images/grippie.png create mode 100644 forum/skins/default/media/images/indicator.gif create mode 100644 forum/skins/default/media/images/logo.gif create mode 100644 forum/skins/default/media/images/logo.png create mode 100644 forum/skins/default/media/images/logo1.png create mode 100644 forum/skins/default/media/images/logo2.png create mode 100644 forum/skins/default/media/images/medala.gif create mode 100644 forum/skins/default/media/images/medala_on.gif create mode 100644 forum/skins/default/media/images/new.gif create mode 100644 forum/skins/default/media/images/nophoto.png create mode 100644 forum/skins/default/media/images/openid.gif create mode 100644 forum/skins/default/media/images/openid/aol.gif create mode 100644 forum/skins/default/media/images/openid/blogger.ico create mode 100644 forum/skins/default/media/images/openid/claimid.ico create mode 100644 forum/skins/default/media/images/openid/facebook.gif create mode 100644 forum/skins/default/media/images/openid/flickr.ico create mode 100644 forum/skins/default/media/images/openid/google.gif create mode 100644 forum/skins/default/media/images/openid/livejournal.ico create mode 100644 forum/skins/default/media/images/openid/myopenid.ico create mode 100644 forum/skins/default/media/images/openid/openid-inputicon.gif create mode 100644 forum/skins/default/media/images/openid/openid.gif create mode 100644 forum/skins/default/media/images/openid/technorati.ico create mode 100644 forum/skins/default/media/images/openid/twitter.png create mode 100644 forum/skins/default/media/images/openid/verisign.ico create mode 100644 forum/skins/default/media/images/openid/vidoop.ico create mode 100644 forum/skins/default/media/images/openid/wordpress.ico create mode 100644 forum/skins/default/media/images/openid/yahoo.gif create mode 100644 forum/skins/default/media/images/quest-bg.gif create mode 100644 forum/skins/default/media/images/vote-accepted-on.png create mode 100644 forum/skins/default/media/images/vote-accepted.png create mode 100644 forum/skins/default/media/images/vote-arrow-down-on.png create mode 100644 forum/skins/default/media/images/vote-arrow-down.png create mode 100644 forum/skins/default/media/images/vote-arrow-up-on.png create mode 100644 forum/skins/default/media/images/vote-arrow-up.png create mode 100644 forum/skins/default/media/images/vote-favorite-off.png create mode 100644 forum/skins/default/media/images/vote-favorite-on.png create mode 100644 forum/skins/default/media/js/compress.bat create mode 100644 forum/skins/default/media/js/excanvas.min.js create mode 100644 forum/skins/default/media/js/flot-build.bat create mode 100644 forum/skins/default/media/js/jquery-1.2.6.js create mode 100644 forum/skins/default/media/js/jquery-1.2.6.min.js create mode 100644 forum/skins/default/media/js/jquery.ajaxfileupload.js create mode 100644 forum/skins/default/media/js/jquery.flot.js create mode 100644 forum/skins/default/media/js/jquery.flot.min.js create mode 100644 forum/skins/default/media/js/jquery.form.js create mode 100644 forum/skins/default/media/js/jquery.i18n.js create mode 100644 forum/skins/default/media/js/jquery.openid.js create mode 100644 forum/skins/default/media/js/jquery.validate.pack.js create mode 100644 forum/skins/default/media/js/osqa.main.js create mode 100644 forum/skins/default/media/js/osqa.main.min.js create mode 100644 forum/skins/default/media/js/se_hilite.js create mode 100644 forum/skins/default/media/js/se_hilite_src.js create mode 100644 forum/skins/default/media/js/wmd/images/wmd-buttons.png create mode 100644 forum/skins/default/media/js/wmd/showdown-min.js create mode 100644 forum/skins/default/media/js/wmd/showdown.js create mode 100644 forum/skins/default/media/js/wmd/wmd-min.js create mode 100644 forum/skins/default/media/js/wmd/wmd-test.html create mode 100644 forum/skins/default/media/js/wmd/wmd.css create mode 100644 forum/skins/default/media/js/wmd/wmd.js create mode 100644 forum/skins/default/media/js/yuicompressor-2.4.2.jar create mode 100644 forum/skins/default/media/style/admin.css create mode 100644 forum/skins/default/media/style/auth.css create mode 100644 forum/skins/default/media/style/default.css create mode 100644 forum/skins/default/media/style/jquery.autocomplete.css create mode 100644 forum/skins/default/media/style/openid.css create mode 100644 forum/skins/default/media/style/prettify.css create mode 100644 forum/skins/default/media/style/style.css create mode 100644 forum/skins/default/templates/404.html create mode 100644 forum/skins/default/templates/500.html create mode 100644 forum/skins/default/templates/_question_list.html create mode 100644 forum/skins/default/templates/about.html create mode 100644 forum/skins/default/templates/account_settings.html create mode 100644 forum/skins/default/templates/answer_edit.html create mode 100644 forum/skins/default/templates/answer_edit_tips.html create mode 100644 forum/skins/default/templates/ask.html create mode 100644 forum/skins/default/templates/auth/auth_settings.html create mode 100644 forum/skins/default/templates/auth/complete.html create mode 100644 forum/skins/default/templates/auth/email_validation.html create mode 100644 forum/skins/default/templates/auth/signin.html create mode 100644 forum/skins/default/templates/auth/signup.html create mode 100644 forum/skins/default/templates/auth/temp_login_email.html create mode 100644 forum/skins/default/templates/auth/temp_login_request.html create mode 100644 forum/skins/default/templates/badge.html create mode 100644 forum/skins/default/templates/badges.html create mode 100644 forum/skins/default/templates/base.html create mode 100644 forum/skins/default/templates/base_content.html create mode 100644 forum/skins/default/templates/book.html create mode 100644 forum/skins/default/templates/close.html create mode 100644 forum/skins/default/templates/edit_user_email_feeds_form.html create mode 100644 forum/skins/default/templates/email_base.html create mode 100644 forum/skins/default/templates/faq.html create mode 100644 forum/skins/default/templates/feedback.html create mode 100644 forum/skins/default/templates/feedback_email.txt create mode 100644 forum/skins/default/templates/feeds/rss_description.html create mode 100644 forum/skins/default/templates/feeds/rss_title.html create mode 100644 forum/skins/default/templates/footer.html create mode 100644 forum/skins/default/templates/header.html create mode 100644 forum/skins/default/templates/index.html create mode 100644 forum/skins/default/templates/logout.html create mode 100644 forum/skins/default/templates/notarobot.html create mode 100644 forum/skins/default/templates/notifications/answeraccepted.html create mode 100644 forum/skins/default/templates/notifications/digest.html create mode 100644 forum/skins/default/templates/notifications/newanswer.html create mode 100644 forum/skins/default/templates/notifications/newcomment.html create mode 100644 forum/skins/default/templates/notifications/newmember.html create mode 100644 forum/skins/default/templates/notifications/newquestion.html create mode 100644 forum/skins/default/templates/osqaadmin/base.html create mode 100644 forum/skins/default/templates/osqaadmin/index.html create mode 100644 forum/skins/default/templates/osqaadmin/set.html create mode 100644 forum/skins/default/templates/pagesize.html create mode 100644 forum/skins/default/templates/paginator.html create mode 100644 forum/skins/default/templates/post_contributor_info.html create mode 100644 forum/skins/default/templates/privacy.html create mode 100644 forum/skins/default/templates/question.html create mode 100644 forum/skins/default/templates/question/accept_button.html create mode 100644 forum/skins/default/templates/question/comments.html create mode 100644 forum/skins/default/templates/question/favorite_mark.html create mode 100644 forum/skins/default/templates/question/post_controls.html create mode 100644 forum/skins/default/templates/question/vote_buttons.html create mode 100644 forum/skins/default/templates/question_edit.html create mode 100644 forum/skins/default/templates/question_edit_tips.html create mode 100644 forum/skins/default/templates/question_list/count.html create mode 100644 forum/skins/default/templates/question_list/item.html create mode 100644 forum/skins/default/templates/question_list/related_tags.html create mode 100644 forum/skins/default/templates/question_list/sort_tabs.html create mode 100644 forum/skins/default/templates/question_list/tag_selector.html create mode 100644 forum/skins/default/templates/question_list/title.html create mode 100644 forum/skins/default/templates/question_retag.html create mode 100644 forum/skins/default/templates/question_summary_list_roll.html create mode 100644 forum/skins/default/templates/questions.html create mode 100644 forum/skins/default/templates/reopen.html create mode 100644 forum/skins/default/templates/revisions_answer.html create mode 100644 forum/skins/default/templates/revisions_question.html create mode 100644 forum/skins/default/templates/sidebar/recent_awards.html create mode 100644 forum/skins/default/templates/sidebar/recent_tags.html create mode 100644 forum/skins/default/templates/subscription_status.html create mode 100644 forum/skins/default/templates/tag_selector.html create mode 100644 forum/skins/default/templates/tags.html create mode 100644 forum/skins/default/templates/user.html create mode 100644 forum/skins/default/templates/user_edit.html create mode 100644 forum/skins/default/templates/user_email_subscriptions.html create mode 100644 forum/skins/default/templates/user_favorites.html create mode 100644 forum/skins/default/templates/user_footer.html create mode 100644 forum/skins/default/templates/user_info.html create mode 100644 forum/skins/default/templates/user_recent.html create mode 100644 forum/skins/default/templates/user_reputation.html create mode 100644 forum/skins/default/templates/user_responses.html create mode 100644 forum/skins/default/templates/user_stats.html create mode 100644 forum/skins/default/templates/user_subscriptions.html create mode 100644 forum/skins/default/templates/user_tabs.html create mode 100644 forum/skins/default/templates/user_votes.html create mode 100644 forum/skins/default/templates/users.html create mode 100644 forum/skins/default/templates/users/info_small_full.html create mode 100644 forum/skins/default/templates/users/info_small_lite.html create mode 100644 forum/skins/default/templates/users_questions.html create mode 100644 forum/startup.py create mode 100644 forum/subscriptions.py create mode 100644 forum/templatetags/__init__.py create mode 100644 forum/templatetags/extra_filters.py create mode 100644 forum/templatetags/extra_tags.py create mode 100644 forum/templatetags/general_sidebar_tags.py create mode 100644 forum/templatetags/question_list_tags.py create mode 100644 forum/templatetags/question_page_tags.py create mode 100644 forum/templatetags/smart_if.py create mode 100644 forum/templatetags/user_tags.py create mode 100644 forum/upfiles/README create mode 100644 forum/upfiles/logo.png create mode 100644 forum/urls.py create mode 100644 forum/user_messages/__init__.py create mode 100644 forum/user_messages/context_processors.py create mode 100644 forum/utils/__init__.py create mode 100644 forum/utils/cache.py create mode 100644 forum/utils/decorators.py create mode 100644 forum/utils/diff.py create mode 100644 forum/utils/forms.py create mode 100644 forum/utils/html.py create mode 100644 forum/utils/html2text.py create mode 100644 forum/utils/lists.py create mode 100644 forum/utils/mail.py create mode 100644 forum/utils/odict.py create mode 100644 forum/utils/time.py create mode 100644 forum/views/README create mode 100644 forum/views/__init__.py create mode 100644 forum/views/admin.py create mode 100644 forum/views/auth.py create mode 100644 forum/views/commands.py create mode 100644 forum/views/decorators.py create mode 100644 forum/views/meta.py create mode 100644 forum/views/readers.py create mode 100644 forum/views/users.py create mode 100644 forum/views/writers.py create mode 100644 forum_modules/__init__.py create mode 100644 forum_modules/books/__init__.py create mode 100644 forum_modules/books/models.py create mode 100644 forum_modules/books/urls.py create mode 100644 forum_modules/books/views.py create mode 100644 forum_modules/default_badges/__init__.py create mode 100644 forum_modules/default_badges/badges.py create mode 100644 forum_modules/default_badges/settings.py create mode 100644 forum_modules/facebookauth/__init__.py create mode 100644 forum_modules/facebookauth/authentication.py create mode 100644 forum_modules/facebookauth/settings.py create mode 100644 forum_modules/facebookauth/templates/button.html create mode 100644 forum_modules/facebookauth/templates/xd_receiver.html create mode 100644 forum_modules/facebookauth/urls.py create mode 100644 forum_modules/facebookauth/views.py create mode 100644 forum_modules/localauth/__init__.py create mode 100644 forum_modules/localauth/authentication.py create mode 100644 forum_modules/localauth/forms.py create mode 100644 forum_modules/localauth/templates/loginform.html create mode 100644 forum_modules/localauth/urls.py create mode 100644 forum_modules/localauth/views.py create mode 100644 forum_modules/oauthauth/__init__.py create mode 100644 forum_modules/oauthauth/authentication.py create mode 100644 forum_modules/oauthauth/consumer.py create mode 100644 forum_modules/oauthauth/lib/__init__.py create mode 100644 forum_modules/oauthauth/lib/oauth.py create mode 100644 forum_modules/oauthauth/settings.py create mode 100644 forum_modules/openidauth/__init__.py create mode 100644 forum_modules/openidauth/authentication.py create mode 100644 forum_modules/openidauth/consumer.py create mode 100644 forum_modules/openidauth/models.py create mode 100644 forum_modules/openidauth/settings.py create mode 100644 forum_modules/openidauth/store.py create mode 100644 forum_modules/openidauth/templates/openidurl.html create mode 100644 forum_modules/pgfulltext/__init__.py create mode 100644 forum_modules/pgfulltext/handlers.py create mode 100644 forum_modules/pgfulltext/management.py create mode 100644 forum_modules/pgfulltext/pg_fts_install.sql create mode 100644 forum_modules/project_badges/__init__.py create mode 100644 forum_modules/project_badges/badges.py create mode 100644 forum_modules/project_badges/settings.py create mode 100644 forum_modules/recaptcha/__init__.py create mode 100644 forum_modules/recaptcha/formfield.py create mode 100644 forum_modules/recaptcha/handlers.py create mode 100644 forum_modules/recaptcha/lib/__init__.py create mode 100644 forum_modules/recaptcha/lib/captcha.py create mode 100644 forum_modules/recaptcha/settings.py create mode 100644 forum_modules/robotstxt/__init__.py create mode 100644 forum_modules/robotstxt/settings.py create mode 100644 forum_modules/robotstxt/templates/robots.txt create mode 100644 forum_modules/robotstxt/urls.py create mode 100644 forum_modules/sphinxfulltext/README.txt create mode 100644 forum_modules/sphinxfulltext/__init__.py create mode 100644 forum_modules/sphinxfulltext/dependencies.py create mode 100644 forum_modules/sphinxfulltext/handlers.py create mode 100644 forum_modules/sphinxfulltext/models.py create mode 100644 forum_modules/sphinxfulltext/settings.py create mode 100644 locale/en/LC_MESSAGES/django.mo create mode 100644 locale/en/LC_MESSAGES/django.po create mode 100644 locale/es/LC_MESSAGES/django.mo create mode 100644 locale/es/LC_MESSAGES/django.po create mode 100644 locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 locale/zh_CN/LC_MESSAGES/django.po create mode 100644 log/README.TXT create mode 100644 log/django.osqa.log create mode 100644 manage.py create mode 100644 osqa-requirements.txt create mode 100644 osqa.iml create mode 100644 osqa.wsgi.dist create mode 100644 pip-log.txt create mode 100644 rmpyc create mode 100644 settings.py create mode 100644 settings_local.py.dist create mode 100644 sphinx/sphinx.conf create mode 100644 urls.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a424d31 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.pyc +*.swp +*.log +cache/?? +osqa.wsgi +nbproject +settings_local.py +.idea +*.iml +env +nbproject +pip-log.txt +*.zip +tmp/* +forum/upfiles/[^R]* diff --git a/.idea/ant.xml b/.idea/ant.xml new file mode 100644 index 0000000..db0112b --- /dev/null +++ b/.idea/ant.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b9a1798 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..b385f01 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/.idea/dictionaries/Fatima.xml b/.idea/dictionaries/Fatima.xml new file mode 100644 index 0000000..14c87b3 --- /dev/null +++ b/.idea/dictionaries/Fatima.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..7c62b52 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5e539f7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9a64d92 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..1e7cce4 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..7e76f0f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..8e56b00 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + osqa + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.python.pydev.PyDevBuilder + + + + + + org.python.pydev.pythonNature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/.pydevproject b/.pydevproject new file mode 100644 index 0000000..f7f3fd1 --- /dev/null +++ b/.pydevproject @@ -0,0 +1,10 @@ + + + + +Default +python 2.6 + +/osqa + + diff --git a/HOW_TO_DEBUG b/HOW_TO_DEBUG new file mode 100644 index 0000000..ba36198 --- /dev/null +++ b/HOW_TO_DEBUG @@ -0,0 +1,39 @@ +1) LOGGING +Please remember that log files may contain plaintext passwords, etc. + +Please do not add print statements - at least do not commit them to git +because in some environments printing to stdout causes errors + +Instead use python logging this way: +-------------------------------- +#somewere on top of file +import logging + +#anywhere below +logging.debug('this maybe works') +logging.error('have big error!') +#or even +logging.debug('') #this will add time, line number, function and file record +#sometimes useful record for call tracing on its own +#etc - take a look at http://docs.python.org/library/logging.html +------------------------------- + +in OSQA logging is currently set up in settings_local.py.dist +please update it if you need - in older revs logging strings have less info + +messages of interest can be grepped out of the log file by module/file/function name +e.g. to take out all django_authopenid logs run: +>grep 'osqa\/django_authopenid' log/django.osqa.log | sed 's/^.*MSG: //' +in the example above 'sed' call truncates out a long prefix +and makes output look more meaningful + +2) DJANGO DEBUG TOOLBAR +osqa works with django debug toolbar +if debugging under apache server, check +that debug toolbar media is loaded correctly +if toolbar is enabled but you do not see it, possibly some Alias statement +in apache config is wrong in your VirtualHost or elsewhere + +3) If you discover new debugging techniques, please add here. +Possible areas to improve - at this point there is no SQL query logging, +as well as request data and http header. diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..f655e1d --- /dev/null +++ b/INSTALL @@ -0,0 +1,266 @@ +CONTENTS +------------------ +A. PREREQUISITES +B. INSTALLATION + 1. Settings file + 2. Database + 3. Running OSQA in the development server + 4. Installation under Apache/WSGI + 5. Email subscriptions +C. CONFIGURATION PARAMETERS (settings_local.py) +D. CUSTOMIZATION + + +A. PREREQUISITES +----------------------------------------------- +0. We recommend you to use python-setuptools to install pre-requirement libraries. +If you haven't installed it, please try to install it first. +e.g, sudo apt-get install python-setuptools + +1. Python2.5/2.6, a rdbm (such as MySql or PostgreSql), Django v1.0/1.1 +Note: email subscription sender job requires Django 1.1, everything else works with 1.0 +Make sure you have the necessary support for python to communicate with your rdbm. +sudo easy_install mysql-python (for MySql) +sudo easy_install postgresql_psycopg2 (for PostgreSql) + +2. html5lib +http://code.google.com/p/html5lib/ +Used for HTML sanitizer +sudo easy_install html5lib + +3. Markdown2 +http://code.google.com/p/python-markdown2/ +sudo easy_install markdown2 + +4. Optional, but highly recommended, you may want to install south from http://south.aeracode.org/ , it will make upgrades a lot easier. + + +5. Also optionally you may want to install Django Debug Toolbar for debugging. +This is not required and OSQA will just ignore it if you don't have it. +http://github.com/robhudson/django-debug-toolbar/tree/master + +6. Depending on which modules you decide to enable (see bellow for more info on modules), +you may need to install some aditional dependencies. Here's a list of the dependencies of each bundled module if any: + + a) openidauth, depends on Python-openid + http://openidenabled.com/python-openid/ + + b) sphinxfulltext, depends on djangosphinx, and obviously you'll have to install the sphinx search engine + http://sphinxsearch.com/downloads.html + http://github.com/dcramer/django-sphinx/tree/master/djangosphinx + + + +B. INSTALLATION +----------------------------------------------- +0. Make sure you have all above python libraries installed. + + make osqa installation server-readable on Linux command might be: + chown -R yourlogin:apache /path/to/OSQA + + directories templates/upfiles and log must be server writable + + on Linux type chmod + chmod -R g+w /path/to/OSQA/upfiles + chmod -R g+w /path/to/log + + above it is assumed that webserver runs under group named "apache" + +1. Settings file + +Copy settings_local.py.dist to settings_local.py and +update all your settings. Check settings.py and update +it as well if necessory. +Section C explains configuration paramaters. + +1b. Modules + +Decide which modules you want to DISABLE. Each module adds a specific piece of functionality to OSQA, and +by default, all are enabled, you have to disable the ones you want. If any module doesn't meet the required dependencies it just +won't load. +Currently bundled modules are: + + localauth - provides local authentication and registration on your site, disable this if you want only external login + through any external provider + + openidauth - adds support for open id on osqa and adds some openid providers to the signin page + + oauthauth - adds support for oauth authentication on osqa and adds twitter as a signin provider on the signin page + + facebookauth - adds facebook as an authentication provider + + pgfulltext - adds support to full text search functionality through postgresql if you're useing it as your rdbm + + sphinxfulltext - adds support for full text search with the sphinx search engine + (detailed instructions are in the module root folder) + + robotstxt - adds a robots file editable throug the admin interface + + recaptcha - adds support for recaptcha in the registration form + + default_badges - the default set of badges, others can be added or used instead + + books - don't really does anything, it's disabled by default, and you should keep it that way, you can delete it if you want to + + +2. Database + +Prepare your database by using the same database/account +configuration from above. +e.g, +create database osqa DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci; +grant all on osqa.* to 'osqa'@'localhost'; +And then run "python manage.py syncdb" to synchronize your database. + +If you're using south, then run "python manage.py migrate forum 0001 --fake". + +When you're prompted to create a new superuser, answer "no". Once you get your site running, create a new user through the normal +OSQA account creation process and that will be your super user. + +3. Running OSQA on the development server + +Run "python manage.py runserver" to startup django +development environment. +(Under Linux you can use command "python manage.py runserver `hostname -i`:8000", +where you can use any other available number for the port) + +4. Installation under Apache/WSGI + +4.1 Prepare wsgi script + +Make a file readable by your webserver with the following content: + +--------- +import os +import sys + +sys.path.insert(0,'/one/level/above') #insert to make sure that forum will be found +sys.path.append('/one/level/above/OSQA') #maybe this is not necessary +os.environ['DJANGO_SETTINGS_MODULE'] = 'OSQA.settings' +import django.core.handlers.wsgi +application = django.core.handlers.wsgi.WSGIHandler() +----------- + +insert method is used for path because if the forum directory name +is by accident the same as some other python module +you wull see strange errors - forum won't be found even though +it's in the python path. for example using name "test" is +not a good idea - as there is a module with such name + + +4.2 Configure webserver +Settings below are not perfect but may be a good starting point + +--------- +WSGISocketPrefix /path/to/socket/sock #must be readable and writable by apache +WSGIPythonHome /usr/local #must be readable by apache +WSGIPythonEggs /var/python/eggs #must be readable and writable by apache + +#NOTE: all urs below will need to be adjusted if +#settings.FORUM_SCRIPT_ALIAS !='' (e.g. = 'forum/') +#this allows "rooting" forum at http://example.com/forum, if you like + + ServerAdmin forum@example.com + DocumentRoot /path/to/osqa-site + ServerName example.com + + #run mod_wsgi process for django in daemon mode + #this allows avoiding confused timezone settings when + #another application runs in the same virtual host + WSGIDaemonProcess OSQA + WSGIProcessGroup OSQA + + #force all content to be served as static files + #otherwise django will be crunching images through itself wasting time + Alias /m/ /path/to/osqa-site/forum/skins/ + Alias /upfiles/ /path/to/osqa-site/forum/upfiles/ + + Order deny,allow + Allow from all + + + #this is your wsgi script described in the prev section + WSGIScriptAlias / /path/to/osqa-site/osqa.wsgi + + #this will force admin interface to work only + #through https (optional) + #"nimda" is the secret spelling of "admin" ;) + + RewriteEngine on + RewriteRule /nimda(.*)$ https://example.com/nimda$1 [L,R=301] + + CustomLog /var/log/httpd/OSQA/access_log common + ErrorLog /var/log/httpd/OSQA/error_log + +#(optional) run admin interface under https + + ServerAdmin forum@example.com + DocumentRoot /path/to/osqa-site + ServerName example.com + SSLEngine on + SSLCertificateFile /path/to/ssl-certificate/server.crt + SSLCertificateKeyFile /path/to/ssl-certificate/server.key + WSGIScriptAlias / /path/to/osqa-site/osqa.wsgi + CustomLog /var/log/httpd/OSQA/access_log common + ErrorLog /var/log/httpd/OSQA/error_log + DirectoryIndex index.html + +------------- + +5. Email subscriptions + + edit paths in the file cron/send_email_alerts + set up a cron job to call cron/send_email_alerts once or twice a day + subscription sender may be tested manually in shell + by calling cron/send_email_alerts + + +C. CONFIGURATION PARAMETERS + +Most stuff can be configured through the admin interface, +but there are some important settings that need to live in the settings files: + +#all forum parameters are set in file settings_local.py +DEBUG=False #set to True to enable debug mode +LOG_FILENAME = 'osqa.log' #where logging messages should go +DATABASE_NAME = 'osqa' # Or path to database file if using sqlite3. +DATABASE_USER = '' # Not used with sqlite3. +DATABASE_PASSWORD = '' # Not used with sqlite3. +DATABASE_ENGINE = 'mysql' #mysql, etc +SERVER_EMAIL = '' +DEFAULT_FROM_EMAIL = '' +EMAIL_HOST_USER = '' +EMAIL_HOST_PASSWORD = '' #not necessary if mailserver is run on local machine +EMAIL_SUBJECT_PREFIX = '[OSQA] ' +EMAIL_HOST='osqa.com' +EMAIL_PORT='25' +EMAIL_USE_TLS=False +TIME_ZONE = 'America/Tijuana' + +#if you set FORUM_SCRIPT_ALIAS= 'forum/' +#then OSQA will run at url http://example.com/forum +#FORUM_SCRIPT_ALIAS cannot have leading slash, otherwise it can be set to anything +FORUM_SCRIPT_ALIAS = '' #no leading slash, default = '' empty string + +LANGUAGE_CODE = 'en' #forum language (see language instructions on the wiki) +EMAIL_VALIDATION = 'off' #string - on|off +MIN_USERNAME_LENGTH = 1 +EMAIL_UNIQUE = False #if True, email addresses must be unique in all accounts +APP_URL = 'http://osqa.com' #used by email notif system and RSS +WIKI_ON = True #if False - community wiki feature is disabled + +FEEDBACK_SITE_URL = None #None or url +LOGIN_URL = '/%s%s%s' % (FORUM_SCRIPT_ALIAS,'account/','signin/') + +DJANGO_VERSION = 1.1 #must be either 1.0 or 1.1 +RESOURCE_REVISION=4 #increment when you update media files - clients will be forced to load new version + +D. Customization + +Other than settings_local.py the following will most likely need customization: +* locale/*/django.po - language files that may also contain your site-specific messages + if you want to start with english messages file - look for words like "forum" and + "OSQA" in the msgstr lines +* templates/header.html and templates/footer.html may contain extra links +* templates/faq.html - put answers to users frequent questions +* templates/content/style/style.css - modify style sheet to add disctinctive look to your forum diff --git a/INSTALL.pip b/INSTALL.pip new file mode 100644 index 0000000..92b1c7f --- /dev/null +++ b/INSTALL.pip @@ -0,0 +1,31 @@ +* Install virtualenv and pip: + easy_install virtualenv + easy_install pip + +* Install MySQL: + sudo apt-get install mysql-client mysql-server + +* Install sphinxsearch. See: + [optional] + http://sphinxsearch.com/downloads.html + http://www.hackido.com/2009/01/install-sphinx-search-on-ubuntu.html + git://github.com/johnl/deb-sphinx-search.git + +* Install a virtual environment OUTSIDE of this directory: + pip install -E ~/env -r osqa-requirements.txt +[there is discussion on the pinax forums about what it should be outside +the source directory] + +* Notice that you will need to register with recaptcha.net and receive + recaptcha public and private keys that need to be saved in your + settings_local.py file + +* Start your environment: + source ~/env/bin/activate + +* Install mysql-python into your virtualenv, because we can't +automagically install it with pip: + easy_install --prefix ~/env/ mysql-python + +For more information about why pip can't automatically install the +MySQL driver, see this message: http://groups.google.com/group/python-virtualenv/msg/ea988085951c92b3 diff --git a/INSTALL.webfaction b/INSTALL.webfaction new file mode 100644 index 0000000..401971a --- /dev/null +++ b/INSTALL.webfaction @@ -0,0 +1,346 @@ +Detailed instructions for installing OSQA on WebFaction + +Adapted from http://code.pinaxproject.com/wiki/DetailedPinaxWebfaction/ + +Please email turian at gmail with any updates or corrections. + + +Installing OSQA on Webfaction +------------------------------------ + +Details the steps for setting up OSQA on a Webfaction shared-hosting +account, including email setup, using Apache2, mod_wsgi, psycopg2. + +If you want to search-and-replace through this file, you will need to replace: + osqa_server [name of Webfaction application, which will be in ~/webapps/] + osqa_static [name of Webfaction application for static media serving] + DOMAIN.com [domain name for OSQA site] + PORT [port number assigned by WebFaction to your mod_wsgi application] + SITENAME [name you give the OSQA site, which will contain the apache logs] + MYOSQA [name of the OSQA project] + MAILBOX_USERNAME [username you give the email address] + MAILBOX_PASSWORD [password that webfaction gives to this email username] + OSQADATABASE_NAME [username you give the database] + OSQADATABASE_PASSWORD [password that webfaction gives to this database] + ~/envs/osqa [directory for the OSQA python environment, grep for 'env'] + USERNAME [your WebFaction username] + +Some things I'm not sure about: + +Here's what I don't know how to do: + * Set up a nginx server for static media. + * Configure sphinx search + * Use PostgreSQL, not MySQL: http://osqa.net/question/13/can-i-use-osqa-with-postgresql + + +Webfaction Control Panel +-------------------------- + +(Note: if you sign up and pick django it will create the application +for you, website/subdomain and associate the two for you.) + + If necessary, add or create any domains or subdomains you may need. + + https://panel.webfaction.com/domain/list/ + + Let's call the domain DOMAIN.com. + + Create a new Webfaction application with a "Type:" of "mod_wsgi + 2.5/Python2.5", naming it "osqa_server". (These instructions + might also work with mod_wsgi 2.0, if you like.) + + https://panel.webfaction.com/app_/list + + Note the port number assigned to the mod_wsgi application. Call + it PORT. + + Create a new Webfaction website which will associate the subdomain + with the new osqa_server application. Give it name SITENAME, at least one + domain, and set it to use the osqa_server application for the site's + root location, "/". + + https://panel.webfaction.com/site/list + + You will need to create a database, typically one for each project + you create. Change the type to PostgreSql and modify the name (it + defaults to your webfaction account name) by adding an underscore + and a project-specific identifier such as "_osqa". Before + leaving this section of the control panel, you may wish to change + the password. + + https://panel.webfaction.com/database/create + + Call these OSQADATABASE_NAME and OSQADATABASE_PASSWORD. + + Save the database password for later. + + [The following I haven't figured out yet] + You will probably want to add a static media server. This is a + Webfaction application. I created one of type "Static only (no + .htaccess)" and with the name of "osqa_static". + + https://panel.webfaction.com/app_/create + + To configure email, you need an email mailbox. Add one here. Note + that your mailbox password shouldn't be the same password you use + to SSH to webfaction. + + https://panel.webfaction.com/mailbox/list + + Save the mail password for later. + We will call the username and password MAILBOX_USERNAME and + MAILBOX_PASSWORD, respectively. + You might also consider adding an email address like admin@DOMAIN.com, + here: + + https://panel.webfaction.com/email/list + + +OSQA Software +-------------- + + Log onto webfaction and get the code. I use my fork because I have + a simple pip installation: + git://github.com/turian/osqa.git + In my situation, I keep source code in ~/utils/src, create + virtual environments in ~/envs/osqa, and create Pinax projects in + ~/webapps/osqa_server/projects. + + You will need pip + virtualenv installed: + + easy_install --prefix=~/utils/ pip + easy_install --prefix=~/utils/ virtualenv + + cd ~/utils/src/ + git clone git://github.com/turian/osqa.git + cd osqa + + # We need python2.5 to be compatible with WSGI + python2.5 ~/utils/bin/pip install -E ~/envs/osqa -r osqa-requirements.txt + source ~/envs/osqa/bin/activate + + # [Optional] If you want a MySQL database + easy_install-2.5 --prefix ~/envs/osqa/ mysql-python + +Additional Software +------------------- + + [Note that PostgreSQL installation doesn't work for me.] + + You will need to install psycopg2 separately for PostgreSQL. + Psycopg2 requires a little fiddling. Continuing to + work in the ~/utils/src/ directory: + + cd ~/utils/src/ + wget http://initd.org/pub/software/psycopg/psycopg2-2.0.13.tar.gz + tar zxf psycopg2-2.0.13.tar.gz + cd psycopg2-2.0.13 + nano setup.cfg + + # edit the line reading "#pg_config=" so that it reads: + "pg_config=/usr/local/pgsql/bin/pg_config" + + python2.5 setup.py build + python2.5 setup.py install + + +Create a Project +---------------- + + In Pinax, you clone a project from OSQA. + However, OSQA we just copy it. + + cd ~/webapps/osqa_server + mkdir projects + cd projects + cp -R ~/utils/src/osqa MYOSQA + cd MYOSQA + export OSQAPROJECT=`pwd` + + Make some directories, as described in the OSQA INSTALL file: + [okay I haven't actually done this yet] + +# mkdir -p $OSQASITE/upfiles/ +# mkdir -p $OSQALOG +# sudo chown -R `whoami`:www-data $OSQASITE +# sudo chown -R `whoami`:www-data $OSQALOG +# chmod -R g+w $OSQASITE/upfiles +# chmod -R g+w $OSQALOG + + + Edit the settings files: + + cd $OSQAPROJECT + cp settings_local.py.dist settings_local.py + vi settings_local.py settings.py + + Pay attention to the following settings: + + DATABASE_ENGINE = 'mysql' + DATABASE_NAME = 'OSQADATABASE_NAME' + DATABASE_USER = 'OSQADATABASE_NAME' + DATABASE_PASSWORD = 'OSQADATABASE_PASSWORD' + + EMAIL_HOST='smtp.webfaction.com' + EMAIL_HOST_USER='MAILBOX_USERNAME' + EMAIL_HOST_PASSWORD='MAILBOX_PASSWORD' + EMAIL_PORT='25' + DEFAULT_FROM_EMAIL = 'MAILBOX_USERNAME@DOMAIN.com' + SERVER_EMAIL = 'MAILBOX_USERNAME@DOMAIN.com' + # The following setting might not be necessary, it's used in Pinax tho + CONTACT_EMAIL = "MAILBOX_USERNAME@DOMAIN.com" + + APP_URL = 'http://DOMAIN.com' #used by email notif system and RSS + + [Later on, the install instructions should talk about] + SERVE_MEDIA = False # [Not present, not ready yet] + + Create a directory for logs: + + cd $OSQAPROJECT + mkdir log + + Modify mail cron scripts "cron/send_email_alerts" as follows: + [Pinax has cron/emit_notices.sh, cron/retry_deferred.sh, + cron/send_mail.sh, are these also necessary?] + + #!/bin/sh + + WORKON_HOME=~/envs/osqa + PROJECT_ROOT=~/webapps/osqa_server/projects/MYOSQA/ + + # activate virtual environment + . $WORKON_HOME/bin/activate + + cd $PROJECT_ROOT + python manage.py send_email_alerts >> $PROJECT_ROOT/log/cron_mail.log 2>&1 + + Use command "crontab -e" to add this script to your cron file, to run twice a day:: + + 1 0,12 * * * ~/webapps/osqa_server/projects/MYOSQA/cron/send_email_alerts + + [Configure sphinx] + + Create the database tables, indices, and so forth: + + python manage.py syncdb + + [Ignore the following static media steps, I haven't tried them] + Build media directory links within the project and create symbolic + links on the static media server. + python manage.py build_media -all + mkdir ~/webapps/OSQA_STATIC/MYOSQA + ln -sd ~/webapps/osqa_server/projects/MYOSQA/site_media ~/webapps/OSQA_STATIC/MYOSQA/site_media + + + Set up the badges: + + 1. You should run the SQL commands in: + + sql_scripts/badges.sql + + 2. Edit paths in the file `cron/multi_award_badges`. (This + file doesn't yet exist in the git repositories, so just + copy `cron/send_email_alerts` and make sure the command + `multi_award_badges` is executed.) + + 3. Run `cron/multi_award_badges` to make sure it works okay. + + 4. Use `crontab -e` to call `cron/multi_award_badges` maybe + four times an hour. + + 4,19,34,49 * * * * ~/webapps/osqa_server/projects/MYOSQA/cron/multi_award_badges + + 5. Repeat steps 1-4 for `cron/once_award_badges`. + + +Configure Apache2 +---------------- + + Edit ~/webapps/osqa_server/apache2/conf/httpd.conf as follows:: + + ServerAdmin "MAILBOX_USERNAME@DOMAIN.com" + ServerRoot "/home/USERNAME/webapps/osqa_server/apache2" + ServerName DOMAIN.com + + LoadModule dir_module modules/mod_dir.so + LoadModule env_module modules/mod_env.so + #LoadModule setenvif_module modules/mod_setenvif.so + LoadModule log_config_module modules/mod_log_config.so + LoadModule mime_module modules/mod_mime.so + LoadModule rewrite_module modules/mod_rewrite.so + LoadModule wsgi_module modules/mod_wsgi.so + + KeepAlive Off + Listen PORT + LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + CustomLog /home/USERNAME/logs/user/access_osqa_server_log combined + ErrorLog /home/USERNAME/logs/user/error_osqa_server_log + ServerLimit 2 + + #SetEnvIf X-Forwarded-SSL on HTTPS=1 + + WSGIPythonPath /home/USERNAME/envs/osqa/lib/python2.5/site-packages/ + WSGIScriptAlias / /home/USERNAME/webapps/osqa_server/projects/MYOSQA/osqa.wsgi + + LoadModule alias_module modules/mod_alias.so + WSGIDaemonProcess osqaWSGI user=USERNAME group=USERNAME threads=25 python-path=/home/USERNAME/envs/osqa/lib/python2.5/site-packages + WSGIProcessGroup osqaWSGI + + NameVirtualHost 127.0.0.1:PORT + + #ErrorLog "logs/MYOSQA_2009_05_06.log" + SetHandler none + #Alias /site_media /home/USERNAME/webapps/static/MYOSQA/site_media + + #force all content to be served as static files + #otherwise django will be crunching images through itself wasting time + Alias /content/ /home/USERNAME/webapps/osqa_server/projects/MYOSQA/templates/content/ + Alias /forum/admin/media/ /home/turian/envs/osqa/lib/python2.5/site-packages/django/contrib/admin/media/ + #AliasMatch /([^/]*\.css) /home/USERNAME/webapps/osqa_server/projects/MYOSQA/templates/content/style/$1 + + # Order deny,allow + # Allow from all + + + If you want virtual hosts of the admin interface under HTTPS, please + look at OSQA's install file. + + Create osqa.wsgi and edit it: + cp osqa.wsgi.dist osqa.wsgi + + Edit ~/webapps/osqa_server/projects/MYOSQA/deploy/osqa.wsgi as follows:: + + import os + import sys + + # redirect sys.stdout to sys.stderr for bad libraries like geopy that uses + # print statements for optional import exceptions. + sys.stdout = sys.stderr + + from os.path import abspath, dirname, join + from site import addsitedir + + # add the virtual environment site-packages to the path + from site import addsitedir + addsitedir('/home/USERNAME/envs/osqa/lib/python2.5/site-packages') + + sys.path.insert(0, abspath(join(dirname(__file__), "../"))) + sys.path.append(abspath(dirname(__file__))) + + from django.conf import settings + os.environ["DJANGO_SETTINGS_MODULE"] = "MYOSQA.settings" + + #print sys.path + + from django.core.handlers.wsgi import WSGIHandler + application = WSGIHandler() + +And then you're up and running with: + + ~/webapps/osqa_server/apache2/bin/stop + ~/webapps/osqa_server/apache2/bin/start + +You should log in to the admin interface (http://DOMAIN.com/admin/), +and go to "Sites > Sites", and change the domain name that is used in +all emails. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..803781c --- /dev/null +++ b/LICENSE @@ -0,0 +1,14 @@ +Copyright (C) 2009. Chen Gang + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . diff --git a/PENDING b/PENDING new file mode 100644 index 0000000..2931303 --- /dev/null +++ b/PENDING @@ -0,0 +1,28 @@ +There are two kinds of things that can be done: +refactorings (think of jogging in the morning, going to a spa, well make the code better :) +new features (go to law school, get a job, do something real) +Just a joke - pick yourself a task and work on it. + +==Refactoring== +* validate HTML +* set up loading of default settings from inside the /forum dir +* automatic dependency checking for modules +* propose how to rename directory forum --> osqa + without breaking things and keeping name of the project root + named the same way - osqa + +==New features== +Whoever wants - pick a feature from the WISH_LIST +add it here and start working on it +If you are not starting immediately - leave it on the wishlist :) + +==Notes== +1)after this is done most new suggested features + may be worked on easily since most of them + only require editing view functions and templates + + However, anyone can work on new features anyway - you'll + just have to probably copy-paste your code into + the branch undergoing refactoring which involves + splitting the files. Auto merging across split points + is harder or impossible. diff --git a/README b/README new file mode 100644 index 0000000..e941164 --- /dev/null +++ b/README @@ -0,0 +1,10 @@ +This is OSQA project - open source Q&A system + +Project Q&A site - http://meta.osqa.net +Homepage - http://www.osqa.net +MASTER devel. code - http://github.com/OSQA/osqa/ +Bug tracking - http://jira.osqa.net (bugs can be also at http://meta.osqa.net too) +Wiki - http://wiki.osqa.net + +OSQA is based on the CNPROG project, originally created by Mike Chen and Sailing Cai. + diff --git a/ROADMAP.rst b/ROADMAP.rst new file mode 100644 index 0000000..42f2e8c --- /dev/null +++ b/ROADMAP.rst @@ -0,0 +1,32 @@ +This document is a map for our activities down the road - therefore ROADMAP. +ROADMAP does not specify deadlines - those belong to the PENDING file + +Intro +========= +ROADMAP aims to streamline activities of the OSQA open source project and +to minimize ad-hoc approaches of "big-picture" level. + +With one exception: under extreme time pressure improvised approaches are perfectly acceptable. + +Items in this document must be discussed in public via dev@osqa.net + +Architecture +============= + +Sub-systems +----------------- +* authentication system +* Q&A system + +Authentication system +------------------------- +* MUST authenticate people visiting the website via web browsers. +* Upon successful authentication must associates the visitor with + his/her Django system user account +* MUST allow multiple methods of authentication to the same account +* MUST support a method to recover lost authentication link by email +* MAY offer an option to "soft-validate" user's email (send a link + with a special key, so that user clicks and we know that email is valid) + "soft" - meaning that lack of validation won't block people + from using the site + diff --git a/UPGRADE b/UPGRADE new file mode 100644 index 0000000..8da5137 --- /dev/null +++ b/UPGRADE @@ -0,0 +1,10 @@ +If you're upgrading your code, please take the following steps in consideration: + +If your current code is older than March 27 2010, you'll have to run the syncdb management command again +and the create_subscriptions command. + +If your code is older than March 29 2010, you'll have to run the create_extended_user management command. + +Starting at April 6 2010 we started bundling south migrations with OSQA. If your code is older than that, you'll need to run +"python manage.py migrate forum 0001 --fake", after that, or if your code is newer than this date just run "python manage.py migrate forum" +each time you upgrade your code. \ No newline at end of file diff --git a/WISH_LIST b/WISH_LIST new file mode 100644 index 0000000..3df3c30 --- /dev/null +++ b/WISH_LIST @@ -0,0 +1,24 @@ +* The wonder bar (integrated the search / ask functionality) +* The authentication system ??? +* allow multiple logins to the same account +* allow multiple logins to the same account +* more advanced templating/skinning system +* per-tag email subscriptions +* view for personalized news on the site +* a little flag popping when there are news +* drill-down mode for navigation by tags +* improved admin console +* sort out mess with profile - currently we patch django User + +* Some functionality should be moved out of the forums app, in the case +that the forum app is restricted only to authenticated users: + + (r'^%s/$' % _('signin/'), 'django_authopenid.views.signin'), + url(r'^%s$' % _('about/'), app.about, name='about'), + url(r'^%s$' % _('faq/'), app.faq, name='faq'), + url(r'^%s$' % _('privacy/'), app.privacy, name='privacy'), + url(r'^%s$' % _('logout/'), app.logout, name='logout'), + url(r'^%s$' % _('feedback/'), app.feedback, name='feedback'), + (r'^%sfb/' % _('account/'), include('fbconnect.urls')), + (r'^%s' % _('account/'), include('django_authopenid.urls')), + diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cron/README b/cron/README new file mode 100644 index 0000000..d557315 --- /dev/null +++ b/cron/README @@ -0,0 +1,5 @@ +this directory contains sample commands to be executed +by cron + +files with names ending "virtuanenv" should work under Python virtualenv system +other files - with standard unix setup diff --git a/cron/multi_award_badges b/cron/multi_award_badges new file mode 100644 index 0000000..b34abd0 --- /dev/null +++ b/cron/multi_award_badges @@ -0,0 +1,5 @@ +#!/bin/sh +PYTHONPATH=/path/to/dir_above_osqa_site +export PYTHONPATH +PROJECT_ROOT=$PYTHONPATH/osqa_site +python manage.py multi_award_badges >> $PROJECT_ROOT/log/cron_badges.log 2>&1 diff --git a/cron/multi_award_badges_virtualenv b/cron/multi_award_badges_virtualenv new file mode 100644 index 0000000..df58155 --- /dev/null +++ b/cron/multi_award_badges_virtualenv @@ -0,0 +1,10 @@ +#!/bin/sh + +WORKON_HOME=~/envs/osqa +PROJECT_ROOT=~/webapps/osqa_server/projects/osqa/ + +# activate virtual environment +. $WORKON_HOME/bin/activate + +cd $PROJECT_ROOT +python manage.py multi_award_badges >> $PROJECT_ROOT/log/cron_badges.log 2>&1 diff --git a/cron/once_award_badges b/cron/once_award_badges new file mode 100644 index 0000000..43ee224 --- /dev/null +++ b/cron/once_award_badges @@ -0,0 +1,14 @@ +#!/bin/sh +PYTHONPATH=/path/to/dir_above_osqa_site +export PYTHONPATH +PROJECT_ROOT=$PYTHONPATH/osqa_site +python manage.py once_award_badges >> $PROJECT_ROOT/log/cron_badges.log 2>&1 + + +#!/bin/sh +PYTHONPATH=/usr/local/sites/osqa_production +export PYTHONPATH +PROJECT_ROOT=$PYTHONPATH/robofaqs +python $PROJECT_ROOT/manage.py once_award_badges >> $PROJECT_ROOT/log/cron_badges.log 2>&1 +python $PROJECT_ROOT/manage.py multi_award_badges >> $PROJECT_ROOT/log/cron_badges.log 2>&1 +python $PROJECT_ROOT/manage.py send_email_alerts >> $PROJECT_ROOT/log/cron_email.log 2>&1 \ No newline at end of file diff --git a/cron/once_award_badges_virtualenv b/cron/once_award_badges_virtualenv new file mode 100644 index 0000000..1241496 --- /dev/null +++ b/cron/once_award_badges_virtualenv @@ -0,0 +1,10 @@ +#!/bin/sh + +WORKON_HOME=~/envs/osqa +PROJECT_ROOT=~/webapps/osqa_server/projects/osqa/ + +# activate virtual environment +. $WORKON_HOME/bin/activate + +cd $PROJECT_ROOT +python manage.py once_award_badges >> $PROJECT_ROOT/log/cron_badges.log 2>&1 diff --git a/cron/send_email_alerts b/cron/send_email_alerts new file mode 100644 index 0000000..cae0960 --- /dev/null +++ b/cron/send_email_alerts @@ -0,0 +1,5 @@ +#!/bin/sh +PYTHONPATH=/path/to/dir_above_osqa_site +export PYTHONPATH +PROJECT_ROOT=$PYTHONPATH/osqa_site +/path/to/python $PROJECT_ROOT/manage.py send_email_alerts diff --git a/cron/send_email_alerts_virtualenv b/cron/send_email_alerts_virtualenv new file mode 100644 index 0000000..6c9e154 --- /dev/null +++ b/cron/send_email_alerts_virtualenv @@ -0,0 +1,10 @@ +#!/bin/sh + +WORKON_HOME=~/envs/osqa +PROJECT_ROOT=~/webapps/osqa_server/projects/osqa/ + +# activate virtual environment +. $WORKON_HOME/bin/activate + +cd $PROJECT_ROOT +python manage.py send_email_alerts >> $PROJECT_ROOT/log/cron_mail.log 2>&1 diff --git a/dos2unix.sh b/dos2unix.sh new file mode 100644 index 0000000..2864426 --- /dev/null +++ b/dos2unix.sh @@ -0,0 +1,12 @@ +#please take care not to dos2unix anything in your .git directory +#because that will probably break your repo +dos2unix `find . -name '*.py'` +dos2unix `find . -name '*.po'` +dos2unix `find . -name '*.js'` +dos2unix `find . -name '*.css'` +dos2unix `find . -name '*.txt'` +dos2unix `find ./sphinx -type f` +dos2unix `find ./cron -type f` +dos2unix settings_local.py.dist +dos2unix README +dos2unix INSTALL diff --git a/forum/__init__.py b/forum/__init__.py new file mode 100644 index 0000000..85cd5d2 --- /dev/null +++ b/forum/__init__.py @@ -0,0 +1 @@ +__all__ = ['admin','auth','const','feed','forms','managers','models','sitemap','urls','views'] diff --git a/forum/activity.py b/forum/activity.py new file mode 100644 index 0000000..9c27e12 --- /dev/null +++ b/forum/activity.py @@ -0,0 +1,132 @@ +import datetime +from django.db.models.signals import post_save +from forum.models import * +from forum.models.base import marked_deleted +from forum.models.meta import vote_canceled +from forum.authentication import user_updated +from forum.const import * + +def record_ask_event(instance, created, **kwargs): + if created: + activity = Activity(user=instance.author, active_at=instance.added_at, content_object=instance, activity_type=TYPE_ACTIVITY_ASK_QUESTION) + activity.save() + +post_save.connect(record_ask_event, sender=Question) + + +def record_answer_event(instance, created, **kwargs): + if created: + activity = Activity(user=instance.author, active_at=instance.added_at, content_object=instance, activity_type=TYPE_ACTIVITY_ANSWER) + activity.save() + +post_save.connect(record_answer_event, sender=Answer) + + +def record_comment_event(instance, created, **kwargs): + if created: + act_type = (instance.content_object.__class__ is Question) and TYPE_ACTIVITY_COMMENT_QUESTION or TYPE_ACTIVITY_COMMENT_ANSWER + activity = Activity(user=instance.user, active_at=instance.added_at, content_object=instance, activity_type=act_type) + activity.save() + +post_save.connect(record_comment_event, sender=Comment) + + +def record_question_revision_event(instance, created, **kwargs): + if created and instance.revision <> 1: + activity = Activity(user=instance.author, active_at=instance.revised_at, content_object=instance, activity_type=TYPE_ACTIVITY_UPDATE_QUESTION) + activity.save() + +post_save.connect(record_question_revision_event, sender=QuestionRevision) + + +def record_answer_revision_event(instance, created, **kwargs): + if created and instance.revision <> 1: + activity = Activity(user=instance.author, active_at=instance.revised_at, content_object=instance, activity_type=TYPE_ACTIVITY_UPDATE_ANSWER) + activity.save() + +post_save.connect(record_answer_revision_event, sender=AnswerRevision) + + +def record_award_event(instance, created, **kwargs): + if created: + activity = Activity(user=instance.user, active_at=instance.awarded_at, content_object=instance, + activity_type=TYPE_ACTIVITY_PRIZE) + activity.save() + +post_save.connect(record_award_event, sender=Award) + + +def record_answer_accepted(instance, created, **kwargs): + if not created and 'accepted' in instance.get_dirty_fields() and instance.accepted: + activity = Activity(user=instance.question.author, active_at=datetime.datetime.now(), \ + content_object=instance, activity_type=TYPE_ACTIVITY_MARK_ANSWER) + activity.save() + +post_save.connect(record_answer_accepted, sender=Answer) + + +def update_last_seen(instance, **kwargs): + user = instance.user + user.last_seen = datetime.datetime.now() + user.save() + +post_save.connect(update_last_seen, sender=Activity) + + +def record_vote(instance, created, **kwargs): + if created: + act_type = (instance.vote == 1) and TYPE_ACTIVITY_VOTE_UP or TYPE_ACTIVITY_VOTE_DOWN + + activity = Activity(user=instance.user, active_at=instance.voted_at, content_object=instance, activity_type=act_type) + activity.save() + +post_save.connect(record_vote, sender=Vote) + + +def record_cancel_vote(instance, **kwargs): + act_type = (instance.vote == 1) and TYPE_ACTIVITY_CANCEL_VOTE_UP or TYPE_ACTIVITY_CANCEL_VOTE_DOWN + activity = Activity(user=instance.user, active_at=datetime.datetime.now(), content_object=instance, activity_type=act_type) + activity.save() + +vote_canceled.connect(record_cancel_vote) + + +def record_delete_post(instance, **kwargs): + act_type = (instance.__class__ is Question) and TYPE_ACTIVITY_DELETE_QUESTION or TYPE_ACTIVITY_DELETE_ANSWER + activity = Activity(user=instance.deleted_by, active_at=datetime.datetime.now(), content_object=instance, activity_type=act_type) + activity.save() + +marked_deleted.connect(record_delete_post, sender=Question) +marked_deleted.connect(record_delete_post, sender=Answer) + + +def record_update_tags(instance, created, **kwargs): + if not created and 'tagnames' in instance.get_dirty_fields(): + activity = Activity(user=instance.author, active_at=datetime.datetime.now(), content_object=instance, activity_type=TYPE_ACTIVITY_UPDATE_TAGS) + activity.save() + +post_save.connect(record_update_tags, sender=Question) + + +def record_mark_offensive(instance, created, **kwargs): + if created: + activity = Activity(user=instance.user, active_at=datetime.datetime.now(), content_object=instance.content_object, activity_type=TYPE_ACTIVITY_MARK_OFFENSIVE) + activity.save() + +post_save.connect(record_mark_offensive, sender=FlaggedItem) + + +def record_favorite_question(instance, created, **kwargs): + if created: + activity = Activity(user=instance.user, active_at=datetime.datetime.now(), content_object=instance, activity_type=TYPE_ACTIVITY_FAVORITE) + activity.save() + +post_save.connect(record_favorite_question, sender=FavoriteQuestion) + + +def record_user_full_updated(instance, **kwargs): + activity = Activity(user=instance, active_at=datetime.datetime.now(), content_object=instance, activity_type=TYPE_ACTIVITY_USER_FULL_UPDATED) + activity.save() + +user_updated.connect(record_user_full_updated, sender=User) + diff --git a/forum/admin.py b/forum/admin.py new file mode 100644 index 0000000..3afa224 --- /dev/null +++ b/forum/admin.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- + +from django.contrib import admin +from models import * + +class AnonymousQuestionAdmin(admin.ModelAdmin): + """AnonymousQuestion admin class""" + +class QuestionAdmin(admin.ModelAdmin): + """Question admin class""" + +class TagAdmin(admin.ModelAdmin): + """Tag admin class""" + +class Answerdmin(admin.ModelAdmin): + """Answer admin class""" + +class CommentAdmin(admin.ModelAdmin): + """ admin class""" + +class VoteAdmin(admin.ModelAdmin): + """ admin class""" + +class FlaggedItemAdmin(admin.ModelAdmin): + """ admin class""" + +class FavoriteQuestionAdmin(admin.ModelAdmin): + """ admin class""" + +class QuestionRevisionAdmin(admin.ModelAdmin): + """ admin class""" + +class AnswerRevisionAdmin(admin.ModelAdmin): + """ admin class""" + +class AwardAdmin(admin.ModelAdmin): + """ admin class""" + +class BadgeAdmin(admin.ModelAdmin): + """ admin class""" + +class ReputeAdmin(admin.ModelAdmin): + """ admin class""" + +class ActivityAdmin(admin.ModelAdmin): + """ admin class""" + +#class BookAdmin(admin.ModelAdmin): +# """ admin class""" + +#class BookAuthorInfoAdmin(admin.ModelAdmin): +# """ admin class""" + +#class BookAuthorRssAdmin(admin.ModelAdmin): +# """ admin class""" + +admin.site.register(Question, QuestionAdmin) +admin.site.register(Tag, TagAdmin) +admin.site.register(Answer, Answerdmin) +admin.site.register(Comment, CommentAdmin) +admin.site.register(Vote, VoteAdmin) +admin.site.register(FlaggedItem, FlaggedItemAdmin) +admin.site.register(FavoriteQuestion, FavoriteQuestionAdmin) +admin.site.register(QuestionRevision, QuestionRevisionAdmin) +admin.site.register(AnswerRevision, AnswerRevisionAdmin) +admin.site.register(Badge, BadgeAdmin) +admin.site.register(Award, AwardAdmin) +admin.site.register(Repute, ReputeAdmin) +admin.site.register(Activity, ActivityAdmin) +#admin.site.register(Book, BookAdmin) +#admin.site.register(BookAuthorInfo, BookAuthorInfoAdmin) +#admin.site.register(BookAuthorRss, BookAuthorRssAdmin) diff --git a/forum/authentication/__init__.py b/forum/authentication/__init__.py new file mode 100644 index 0000000..b275236 --- /dev/null +++ b/forum/authentication/__init__.py @@ -0,0 +1,58 @@ +import re +import django.dispatch +from forum.modules import get_modules_script_classes +from forum.authentication.base import AuthenticationConsumer, ConsumerTemplateContext + +class ConsumerAndContext: + def __init__(self, id, consumer, context): + self.id = id + self._consumer = consumer + + context.id = id + self.context = context + + @property + def consumer(self): + return self._consumer() + +consumers = dict([ + (re.sub('AuthConsumer$', '', name).lower(), cls) for name, cls + in get_modules_script_classes('authentication', AuthenticationConsumer).items() + if not re.search('AbstractAuthConsumer$', name) + ]) + +contexts = dict([ + (re.sub('AuthContext$', '', name).lower(), cls) for name, cls + in get_modules_script_classes('authentication', ConsumerTemplateContext).items() + ]) + +AUTH_PROVIDERS = dict([ + (name, ConsumerAndContext(name, consumers[name], contexts[name])) for name in consumers.keys() + if name in contexts + ]) + + +#todo: probably this don't belong here, also this post_stored routine needs a lot of work +user_logged_in = django.dispatch.Signal(providing_args=["user", "old_session"]) +user_updated = django.dispatch.Signal(providing_args=["instance", "updated_by"]) + +def post_stored_anonymous_content(user,old_session,**kwargs): + from forum.models import AnonymousQuestion, AnonymousAnswer + aq_list = AnonymousQuestion.objects.filter(session_key = old_session) + aa_list = AnonymousAnswer.objects.filter(session_key = old_session) + import settings + if settings.EMAIL_VALIDATION == 'on':#add user to the record + for aq in aq_list: + aq.author = user + aq.save() + for aa in aa_list: + aa.author = user + aa.save() + #maybe add pending posts message? + else: #just publish the questions + for aq in aq_list: + aq.publish(user) + for aa in aa_list: + aa.publish(user) + +user_logged_in.connect(post_stored_anonymous_content) \ No newline at end of file diff --git a/forum/authentication/base.py b/forum/authentication/base.py new file mode 100644 index 0000000..9900586 --- /dev/null +++ b/forum/authentication/base.py @@ -0,0 +1,44 @@ + +class AuthenticationConsumer(object): + + def prepare_authentication_request(self, request, redirect_to): + raise NotImplementedError() + + def process_authentication_request(self, response): + raise NotImplementedError() + + def get_user_data(self, key): + raise NotImplementedError() + + +class ConsumerTemplateContext(object): + """ + Class that provides information about a certain authentication provider context in the signin page. + + class attributes: + + mode - one of BIGICON, SMALLICON, FORM + + human_name - the human readable name of the provider + + extra_js - some providers require us to load extra javascript on the signin page for them to work, + this is the place to add those files in the form of a list + + extra_css - same as extra_js but for css files + """ + mode = '' + weight = 500 + human_name = '' + extra_js = [] + extra_css = [] + show_to_logged_in_user = True + + @classmethod + def readable_key(cls, key): + return key.key + +class InvalidAuthentication(Exception): + def __init__(self, message): + self.message = message + + \ No newline at end of file diff --git a/forum/authentication/forms.py b/forum/authentication/forms.py new file mode 100644 index 0000000..01c857d --- /dev/null +++ b/forum/authentication/forms.py @@ -0,0 +1,64 @@ +from forum.utils.forms import NextUrlField, UserNameField, UserEmailField, SetPasswordForm +from forum.models import Question, User +from django.contrib.contenttypes.models import ContentType +from django.utils.translation import ugettext as _ +from django.utils.safestring import mark_safe +from django import forms +import logging + +class SimpleRegistrationForm(forms.Form): + next = NextUrlField() + username = UserNameField() + email = UserEmailField() + +class TemporaryLoginRequestForm(forms.Form): + def __init__(self, data=None): + super(TemporaryLoginRequestForm, self).__init__(data) + self.user_cache = None + + email = forms.EmailField( + required=True, + label=_("Your account email"), + error_messages={ + 'required': _("You cannot leave this field blank"), + 'invalid': _('please enter a valid email address'), + } + ) + + def clean_email(self): + try: + user = User.objects.get(email=self.cleaned_data['email']) + except: + raise forms.ValidationError(_("Sorry, but this email is not on our database.")) + + self.user_cache = user + return self.cleaned_data['email'] + + +class SimpleEmailSubscribeForm(forms.Form): + SIMPLE_SUBSCRIBE_CHOICES = ( + ('y',_('okay, let\'s try!')), + ('n',_('no OSQA community email please, thanks')) + ) + subscribe = forms.ChoiceField(widget=forms.widgets.RadioSelect(), \ + error_messages={'required':_('please choose one of the options above')}, + choices=SIMPLE_SUBSCRIBE_CHOICES) + + +class ChangePasswordForm(SetPasswordForm): + """ change password form """ + oldpw = forms.CharField(widget=forms.PasswordInput(attrs={'class':'required'}), + label=mark_safe(_('Current password'))) + + def __init__(self, data=None, user=None, *args, **kwargs): + if user is None: + raise TypeError("Keyword argument 'user' must be supplied") + super(ChangePasswordForm, self).__init__(data, *args, **kwargs) + self.user = user + + def clean_oldpw(self): + """ test old password """ + if not self.user.check_password(self.cleaned_data['oldpw']): + raise forms.ValidationError(_("Old password is incorrect. \ + Please enter the correct password.")) + return self.cleaned_data['oldpw'] diff --git a/forum/badges/__init__.py b/forum/badges/__init__.py new file mode 100644 index 0000000..421348f --- /dev/null +++ b/forum/badges/__init__.py @@ -0,0 +1,10 @@ +import re + +from forum.badges.base import AbstractBadge +from forum.modules import get_modules_script_classes + +ALL_BADGES = [ + cls() for name, cls + in get_modules_script_classes('badges', AbstractBadge).items() + if not re.search('AbstractBadge$', name) + ] diff --git a/forum/badges/base.py b/forum/badges/base.py new file mode 100644 index 0000000..c3e9fcb --- /dev/null +++ b/forum/badges/base.py @@ -0,0 +1,106 @@ +import re +from string import lower + +from django.contrib.contenttypes.models import ContentType +from django.db.models.signals import post_save + +from forum.models.user import activity_record +from forum.models import Badge, Award, Activity + +import logging + +class AbstractBadge(object): + + _instance = None + + @property + def name(self): + return " ".join(re.findall(r'([A-Z][a-z1-9]+)', re.sub('Badge', '', self.__class__.__name__))) + + @property + def description(self): + raise NotImplementedError + + def __new__(cls, *args, **kwargs): + if cls._instance is None: + cls.badge = "-".join(map(lower, re.findall(r'([A-Z][a-z1-9]+)', re.sub('Badge', '', cls.__name__)))) + cls._instance = super(AbstractBadge, cls).__new__(cls, *args, **kwargs) + + return cls._instance + + def install(self): + try: + installed = Badge.objects.get(slug=self.badge) + except: + badge = Badge(name=self.name, description=self.description, slug=self.badge, type=self.type) + badge.save() + + def award_badge(self, user, obj=None, award_once=False): + try: + badge = Badge.objects.get(slug=self.badge) + except: + logging.log('Trying to award a badge not installed in the database.') + return + + content_type = ContentType.objects.get_for_model(obj.__class__) + + awarded = user.awards.filter(badge=badge) + + if not award_once: + awarded = awarded.filter(content_type=content_type, object_id=obj.id) + + if len(awarded): + logging.log(1, 'Trying to award badged already awarded.') + return + + award = Award(user=user, badge=badge, content_type=content_type, object_id=obj.id) + award.save() + +class CountableAbstractBadge(AbstractBadge): + + def __init__(self, model, field, expected_value, handler): + def wrapper(instance, **kwargs): + dirty_fields = instance.get_dirty_fields() + if field in dirty_fields and instance.__dict__[field] == expected_value: + handler(instance=instance) + + post_save.connect(wrapper, sender=model, weak=False) + +class PostCountableAbstractBadge(CountableAbstractBadge): + def __init__(self, model, field, expected_value): + + def handler(instance): + self.award_badge(instance.author, instance) + + super(PostCountableAbstractBadge, self).__init__(model, field, expected_value, handler) + + +class ActivityAbstractBadge(AbstractBadge): + + def __init__(self, activity_type, handler): + + def wrapper(sender, **kwargs): + handler(instance=kwargs['instance']) + + activity_record.connect(wrapper, sender=activity_type, weak=False) + + +class ActivityCountAbstractBadge(AbstractBadge): + + def __init__(self, activity_type, count): + + def handler(sender, **kwargs): + instance = kwargs['instance'] + if Activity.objects.filter(user=instance.user, activity_type__in=activity_type).count() == count: + self.award_badge(instance.user, instance.content_object) + + if not isinstance(activity_type, (tuple, list)): + activity_type = (activity_type, ) + + for type in activity_type: + activity_record.connect(handler, sender=type, weak=False) + +class FirstActivityAbstractBadge(ActivityCountAbstractBadge): + + def __init__(self, activity_type): + super(FirstActivityAbstractBadge, self).__init__(activity_type, 1) diff --git a/forum/const.py b/forum/const.py new file mode 100644 index 0000000..b44ed04 --- /dev/null +++ b/forum/const.py @@ -0,0 +1,115 @@ +# encoding:utf-8 +from django.utils.translation import ugettext as _ +""" +All constants could be used in other modules +For reasons that models, views can't have unicode text in this project, all unicode text go here. +""" +CLOSE_REASONS = ( + (1, _('duplicate question')), + (2, _('question is off-topic or not relevant')), + (3, _('too subjective and argumentative')), + (4, _('is not an answer to the question')), + (5, _('the question is answered, right answer was accepted')), + (6, _('problem is not reproducible or outdated')), + (7, _('question contains offensive inappropriate, or malicious remarks')), + (8, _('spam or advertising')), +) + +TYPE_REPUTATION_GAIN_BY_UPVOTED = 1 +TYPE_REPUTATION_GAIN_BY_ANSWER_ACCEPTED = 2 +TYPE_REPUTATION_GAIN_BY_ACCEPTING_ANSWER = 3 +TYPE_REPUTATION_GAIN_BY_DOWNVOTE_CANCELED = 4 +TYPE_REPUTATION_GAIN_BY_CANCELING_DOWNVOTE = 5 +TYPE_REPUTATION_LOST_BY_CANCELLING_ACCEPTED_ANSWER = -1 +TYPE_REPUTATION_LOST_BY_ACCEPTED_ANSWER_CANCELED = -2 +TYPE_REPUTATION_LOST_BY_DOWNVOTED = -3 +TYPE_REPUTATION_LOST_BY_FLAGGED = -4 +TYPE_REPUTATION_LOST_BY_DOWNVOTING = -5 +TYPE_REPUTATION_LOST_BY_FLAGGED_3_TIMES = -6 +TYPE_REPUTATION_LOST_BY_FLAGGED_5_TIMES = -7 +TYPE_REPUTATION_LOST_BY_UPVOTE_CANCELED = -8 + +TYPE_REPUTATION = ( + (TYPE_REPUTATION_GAIN_BY_UPVOTED, 'gain_by_upvoted'), + (TYPE_REPUTATION_GAIN_BY_ANSWER_ACCEPTED, 'gain_by_answer_accepted'), + (TYPE_REPUTATION_GAIN_BY_ACCEPTING_ANSWER, 'gain_by_accepting_answer'), + (TYPE_REPUTATION_GAIN_BY_DOWNVOTE_CANCELED, 'gain_by_downvote_canceled'), + (TYPE_REPUTATION_GAIN_BY_CANCELING_DOWNVOTE, 'gain_by_canceling_downvote'), + (TYPE_REPUTATION_LOST_BY_CANCELLING_ACCEPTED_ANSWER, 'lose_by_canceling_accepted_answer'), + (TYPE_REPUTATION_LOST_BY_ACCEPTED_ANSWER_CANCELED, 'lose_by_accepted_answer_cancled'), + (TYPE_REPUTATION_LOST_BY_DOWNVOTED, 'lose_by_downvoted'), + (TYPE_REPUTATION_LOST_BY_FLAGGED, 'lose_by_flagged'), + (TYPE_REPUTATION_LOST_BY_DOWNVOTING, 'lose_by_downvoting'), + (TYPE_REPUTATION_LOST_BY_FLAGGED_3_TIMES, 'lose_by_flagged_lastrevision_3_times'), + (TYPE_REPUTATION_LOST_BY_FLAGGED_5_TIMES, 'lose_by_flagged_lastrevision_5_times'), + (TYPE_REPUTATION_LOST_BY_UPVOTE_CANCELED, 'lose_by_upvote_canceled'), +) + +TYPE_ACTIVITY_ASK_QUESTION=1 +TYPE_ACTIVITY_ANSWER=2 +TYPE_ACTIVITY_COMMENT_QUESTION=3 +TYPE_ACTIVITY_COMMENT_ANSWER=4 +TYPE_ACTIVITY_UPDATE_QUESTION=5 +TYPE_ACTIVITY_UPDATE_ANSWER=6 +TYPE_ACTIVITY_PRIZE=7 +TYPE_ACTIVITY_MARK_ANSWER=8 +TYPE_ACTIVITY_VOTE_UP=9 +TYPE_ACTIVITY_VOTE_DOWN=10 +TYPE_ACTIVITY_CANCEL_VOTE_UP=11 +TYPE_ACTIVITY_CANCEL_VOTE_DOWN=19 +TYPE_ACTIVITY_DELETE_QUESTION=12 +TYPE_ACTIVITY_DELETE_ANSWER=13 +TYPE_ACTIVITY_MARK_OFFENSIVE=14 +TYPE_ACTIVITY_UPDATE_TAGS=15 +TYPE_ACTIVITY_FAVORITE=16 +TYPE_ACTIVITY_USER_FULL_UPDATED = 17 +TYPE_ACTIVITY_QUESTION_EMAIL_UPDATE_SENT = 18 +#TYPE_ACTIVITY_EDIT_QUESTION=17 +#TYPE_ACTIVITY_EDIT_ANSWER=18 + +TYPE_ACTIVITY = ( + (TYPE_ACTIVITY_ASK_QUESTION, _('question')), + (TYPE_ACTIVITY_ANSWER, _('answer')), + (TYPE_ACTIVITY_COMMENT_QUESTION, _('commented question')), + (TYPE_ACTIVITY_COMMENT_ANSWER, _('commented answer')), + (TYPE_ACTIVITY_UPDATE_QUESTION, _('edited question')), + (TYPE_ACTIVITY_UPDATE_ANSWER, _('edited answer')), + (TYPE_ACTIVITY_PRIZE, _('received award')), + (TYPE_ACTIVITY_MARK_ANSWER, _('marked best answer')), + (TYPE_ACTIVITY_VOTE_UP, _('upvoted')), + (TYPE_ACTIVITY_VOTE_DOWN, _('downvoted')), + (TYPE_ACTIVITY_CANCEL_VOTE_UP, _('upvote canceled')), + (TYPE_ACTIVITY_CANCEL_VOTE_DOWN, _('downvote canceled')), + (TYPE_ACTIVITY_DELETE_QUESTION, _('deleted question')), + (TYPE_ACTIVITY_DELETE_ANSWER, _('deleted answer')), + (TYPE_ACTIVITY_MARK_OFFENSIVE, _('marked offensive')), + (TYPE_ACTIVITY_UPDATE_TAGS, _('updated tags')), + (TYPE_ACTIVITY_FAVORITE, _('selected favorite')), + (TYPE_ACTIVITY_USER_FULL_UPDATED, _('completed user profile')), + (TYPE_ACTIVITY_QUESTION_EMAIL_UPDATE_SENT, _('email update sent to user')), +) + +TYPE_RESPONSE = { + 'QUESTION_ANSWERED' : _('question_answered'), + 'QUESTION_COMMENTED': _('question_commented'), + 'ANSWER_COMMENTED' : _('answer_commented'), + 'ANSWER_ACCEPTED' : _('answer_accepted'), +} + +CONST = { + 'closed' : _('[closed]'), + 'deleted' : _('[deleted]'), + 'default_version' : _('initial version'), + 'retagged' : _('retagged'), +} + +BRONZE_BADGE = 3 +SILVER_BADGE = 2 +GOLD_BADGE = 1 + +NOTIFICATION_CHOICES = ( + ('i', _('Instantly')), + ('d', _('Daily')), + ('w', _('Weekly')), + ('n', _('No notifications')), +) diff --git a/forum/context.py b/forum/context.py new file mode 100644 index 0000000..3814bb6 --- /dev/null +++ b/forum/context.py @@ -0,0 +1,48 @@ +from django.conf import settings +def application_settings(context): + my_settings = { + 'APP_TITLE' : settings.APP_TITLE, + 'APP_SHORT_NAME' : settings.APP_SHORT_NAME, + 'APP_URL' : settings.APP_URL, + 'APP_KEYWORDS' : settings.APP_KEYWORDS, + 'APP_DESCRIPTION' : settings.APP_DESCRIPTION, + 'APP_INTRO' : settings.APP_INTRO, + 'APP_LOGO' : settings.APP_LOGO, + 'EMAIL_VALIDATION': settings.EMAIL_VALIDATION, + 'FEEDBACK_SITE_URL': settings.FEEDBACK_SITE_URL, + 'FORUM_SCRIPT_ALIAS': settings.FORUM_SCRIPT_ALIAS, + 'LANGUAGE_CODE': settings.LANGUAGE_CODE, + 'GOOGLE_SITEMAP_CODE':settings.GOOGLE_SITEMAP_CODE, + 'GOOGLE_ANALYTICS_KEY':settings.GOOGLE_ANALYTICS_KEY, + 'WIKI_ON':settings.WIKI_ON, + 'RESOURCE_REVISION':settings.RESOURCE_REVISION, + 'OSQA_SKIN':settings.OSQA_DEFAULT_SKIN, + 'APP_FAVICON':settings.APP_FAVICON, + } + return {'settings':my_settings} + +def auth_processor(request): + """ + Returns context variables required by apps that use Django's authentication + system. + + If there is no 'user' attribute in the request, uses AnonymousUser (from + django.contrib.auth). + """ + if hasattr(request, 'user'): + user = request.user + if user.is_authenticated(): + messages = user.message_set.all() + else: + messages = None + else: + from django.contrib.auth.models import AnonymousUser + user = AnonymousUser() + messages = None + + from django.core.context_processors import PermWrapper + return { + 'user': user, + 'messages': messages, + 'perms': PermWrapper(user), + } diff --git a/forum/feed.py b/forum/feed.py new file mode 100644 index 0000000..e4b929e --- /dev/null +++ b/forum/feed.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +#encoding:utf-8 +#------------------------------------------------------------------------------- +# Name: Syndication feed class for subsribtion +# Purpose: +# +# Author: Mike +# +# Created: 29/01/2009 +# Copyright: (c) CNPROG.COM 2009 +# Licence: GPL V2 +#------------------------------------------------------------------------------- +from django.contrib.syndication.feeds import Feed, FeedDoesNotExist +from django.utils.translation import ugettext as _ +from models import Question +from django.conf import settings +class RssLastestQuestionsFeed(Feed): + title = settings.APP_TITLE + _(' - ')+ _('latest questions') + link = settings.APP_URL #+ '/' + _('question/') + description = settings.APP_DESCRIPTION + #ttl = 10 + copyright = settings.APP_COPYRIGHT + + def item_link(self, item): + return self.link + item.get_absolute_url() + + def item_author_name(self, item): + return item.author.username + + def item_author_link(self, item): + return item.author.get_profile_url() + + def item_pubdate(self, item): + return item.added_at + + def items(self, item): + return Question.objects.filter(deleted=False).order_by('-last_activity_at')[:30] + +def main(): + pass + +if __name__ == '__main__': + main() diff --git a/forum/forms.py b/forum/forms.py new file mode 100644 index 0000000..a78f207 --- /dev/null +++ b/forum/forms.py @@ -0,0 +1,263 @@ +import re +from datetime import date +from django import forms +from models import * +from const import * +from django.utils.translation import ugettext as _ +from forum.models import User +from django.contrib.contenttypes.models import ContentType +from django.utils.safestring import mark_safe +from forum.utils.forms import NextUrlField, UserNameField, SetPasswordForm +from django.conf import settings +from django.contrib.contenttypes.models import ContentType +import logging + +class TitleField(forms.CharField): + def __init__(self, *args, **kwargs): + super(TitleField, self).__init__(*args, **kwargs) + self.required = True + self.widget = forms.TextInput(attrs={'size' : 70, 'autocomplete' : 'off'}) + self.max_length = 255 + self.label = _('title') + self.help_text = _('please enter a descriptive title for your question') + self.initial = '' + + def clean(self, value): + if len(value) < 10: + raise forms.ValidationError(_('title must be > 10 characters')) + + return value + +class EditorField(forms.CharField): + def __init__(self, *args, **kwargs): + super(EditorField, self).__init__(*args, **kwargs) + self.required = True + self.widget = forms.Textarea(attrs={'id':'editor'}) + self.label = _('content') + self.help_text = u'' + self.initial = '' + + def clean(self, value): + if len(value) < 10: + raise forms.ValidationError(_('question content must be > 10 characters')) + + return value + +class TagNamesField(forms.CharField): + def __init__(self, *args, **kwargs): + super(TagNamesField, self).__init__(*args, **kwargs) + self.required = True + self.widget = forms.TextInput(attrs={'size' : 50, 'autocomplete' : 'off'}) + self.max_length = 255 + self.label = _('tags') + #self.help_text = _('please use space to separate tags (this enables autocomplete feature)') + self.help_text = _('Tags are short keywords, with no spaces within. Up to five tags can be used.') + self.initial = '' + + def clean(self, value): + value = super(TagNamesField, self).clean(value) + data = value.strip() + if len(data) < 1: + raise forms.ValidationError(_('tags are required')) + + split_re = re.compile(r'[ ,]+') + list = split_re.split(data) + list_temp = [] + if len(list) > 5: + raise forms.ValidationError(_('please use 5 tags or less')) + + tagname_re = re.compile(r'[a-z0-9]+') + for tag in list: + if len(tag) > 20: + raise forms.ValidationError(_('tags must be shorter than 20 characters')) + if not tagname_re.match(tag): + raise forms.ValidationError(_('please use following characters in tags: letters \'a-z\', numbers, and characters \'.-_#\'')) + # only keep one same tag + if tag not in list_temp and len(tag.strip()) > 0: + list_temp.append(tag) + return u' '.join(list_temp) + +class WikiField(forms.BooleanField): + def __init__(self, *args, **kwargs): + super(WikiField, self).__init__(*args, **kwargs) + self.required = False + self.label = _('community wiki') + self.help_text = _('if you choose community wiki option, the question and answer do not generate points and name of author will not be shown') + def clean(self,value): + return value and settings.WIKI_ON + +class EmailNotifyField(forms.BooleanField): + def __init__(self, *args, **kwargs): + super(EmailNotifyField, self).__init__(*args, **kwargs) + self.required = False + self.widget.attrs['class'] = 'nomargin' + +class SummaryField(forms.CharField): + def __init__(self, *args, **kwargs): + super(SummaryField, self).__init__(*args, **kwargs) + self.required = False + self.widget = forms.TextInput(attrs={'size' : 50, 'autocomplete' : 'off'}) + self.max_length = 300 + self.label = _('update summary:') + self.help_text = _('enter a brief summary of your revision (e.g. fixed spelling, grammar, improved style, this field is optional)') + +class ModerateUserForm(forms.ModelForm): + is_approved = forms.BooleanField(label=_("Automatically accept user's contributions for the email updates"), + required=False) + + def clean_is_approved(self): + if 'is_approved' not in self.cleaned_data: + self.cleaned_data['is_approved'] = False + return self.cleaned_data['is_approved'] + + class Meta: + model = User + fields = ('is_approved',) + +class FeedbackForm(forms.Form): + name = forms.CharField(label=_('Your name:'), required=False) + email = forms.EmailField(label=_('Email (not shared with anyone):'), required=False) + message = forms.CharField(label=_('Your message:'), max_length=800,widget=forms.Textarea(attrs={'cols':60})) + next = NextUrlField() + +class AskForm(forms.Form): + title = TitleField() + text = EditorField() + tags = TagNamesField() + wiki = WikiField() + + openid = forms.CharField(required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 40, 'class':'openid-input'})) + user = forms.CharField(required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35})) + email = forms.CharField(required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35})) + +class AnswerForm(forms.Form): + text = EditorField() + wiki = WikiField() + openid = forms.CharField(required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 40, 'class':'openid-input'})) + user = forms.CharField(required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35})) + email = forms.CharField(required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35})) + email_notify = EmailNotifyField() + def __init__(self, question, user, *args, **kwargs): + super(AnswerForm, self).__init__(*args, **kwargs) + self.fields['email_notify'].widget.attrs['id'] = 'question-subscribe-updates'; + if question.wiki and settings.WIKI_ON: + self.fields['wiki'].initial = True + if user.is_authenticated(): + if user in question.followed_by.all(): + self.fields['email_notify'].initial = True + return + self.fields['email_notify'].initial = False + + +class CloseForm(forms.Form): + reason = forms.ChoiceField(choices=CLOSE_REASONS) + +class RetagQuestionForm(forms.Form): + tags = TagNamesField() + # initialize the default values + def __init__(self, question, *args, **kwargs): + super(RetagQuestionForm, self).__init__(*args, **kwargs) + self.fields['tags'].initial = question.tagnames + +class RevisionForm(forms.Form): + """ + Lists revisions of a Question or Answer + """ + revision = forms.ChoiceField(widget=forms.Select(attrs={'style' : 'width:520px'})) + + def __init__(self, post, latest_revision, *args, **kwargs): + super(RevisionForm, self).__init__(*args, **kwargs) + revisions = post.revisions.all().values_list( + 'revision', 'author__username', 'revised_at', 'summary') + date_format = '%c' + self.fields['revision'].choices = [ + (r[0], u'%s - %s (%s) %s' % (r[0], r[1], r[2].strftime(date_format), r[3])) + for r in revisions] + self.fields['revision'].initial = latest_revision.revision + +class EditQuestionForm(forms.Form): + title = TitleField() + text = EditorField() + tags = TagNamesField() + summary = SummaryField() + + def __init__(self, question, revision, *args, **kwargs): + super(EditQuestionForm, self).__init__(*args, **kwargs) + self.fields['title'].initial = revision.title + self.fields['text'].initial = revision.text + self.fields['tags'].initial = revision.tagnames + # Once wiki mode is enabled, it can't be disabled + if not question.wiki: + self.fields['wiki'] = WikiField() + +class EditAnswerForm(forms.Form): + text = EditorField() + summary = SummaryField() + + def __init__(self, answer, revision, *args, **kwargs): + super(EditAnswerForm, self).__init__(*args, **kwargs) + self.fields['text'].initial = revision.text + +class EditUserForm(forms.Form): + email = forms.EmailField(label=u'Email', help_text=_('this email does not have to be linked to gravatar'), required=True, max_length=255, widget=forms.TextInput(attrs={'size' : 35})) + if settings.EDITABLE_SCREEN_NAME: + username = UserNameField(label=_('Screen name')) + realname = forms.CharField(label=_('Real name'), required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35})) + website = forms.URLField(label=_('Website'), required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35})) + city = forms.CharField(label=_('Location'), required=False, max_length=255, widget=forms.TextInput(attrs={'size' : 35})) + birthday = forms.DateField(label=_('Date of birth'), help_text=_('will not be shown, used to calculate age, format: YYYY-MM-DD'), required=False, widget=forms.TextInput(attrs={'size' : 35})) + about = forms.CharField(label=_('Profile'), required=False, widget=forms.Textarea(attrs={'cols' : 60})) + + def __init__(self, user, *args, **kwargs): + super(EditUserForm, self).__init__(*args, **kwargs) + logging.debug('initializing the form') + if settings.EDITABLE_SCREEN_NAME: + self.fields['username'].initial = user.username + self.fields['username'].user_instance = user + self.fields['email'].initial = user.email + self.fields['realname'].initial = user.real_name + self.fields['website'].initial = user.website + self.fields['city'].initial = user.location + + if user.date_of_birth is not None: + self.fields['birthday'].initial = user.date_of_birth + else: + self.fields['birthday'].initial = '1990-01-01' + self.fields['about'].initial = user.about + self.user = user + + def clean_email(self): + """For security reason one unique email in database""" + if self.user.email != self.cleaned_data['email']: + #todo dry it, there is a similar thing in openidauth + if settings.EMAIL_UNIQUE == True: + if 'email' in self.cleaned_data: + try: + user = User.objects.get(email = self.cleaned_data['email']) + except User.DoesNotExist: + return self.cleaned_data['email'] + except User.MultipleObjectsReturned: + raise forms.ValidationError(_('this email has already been registered, please use another one')) + raise forms.ValidationError(_('this email has already been registered, please use another one')) + return self.cleaned_data['email'] + + +class SubscriptionSettingsForm(forms.Form): + member_joins = forms.ChoiceField(widget=forms.RadioSelect, choices=NOTIFICATION_CHOICES) + new_question = forms.ChoiceField(widget=forms.RadioSelect, choices=NOTIFICATION_CHOICES) + new_question_watched_tags = forms.ChoiceField(widget=forms.RadioSelect, choices=NOTIFICATION_CHOICES) + subscribed_questions = forms.ChoiceField(widget=forms.RadioSelect, choices=NOTIFICATION_CHOICES) + + all_questions = forms.BooleanField(required=False, initial=False) + all_questions_watched_tags = forms.BooleanField(required=False, initial=False) + questions_asked = forms.BooleanField(required=False, initial=False) + questions_answered = forms.BooleanField(required=False, initial=False) + questions_commented = forms.BooleanField(required=False, initial=False) + questions_viewed = forms.BooleanField(required=False, initial=False) + + notify_answers = forms.BooleanField(required=False, initial=False) + notify_reply_to_comments = forms.BooleanField(required=False, initial=False) + notify_comments_own_post = forms.BooleanField(required=False, initial=False) + notify_comments = forms.BooleanField(required=False, initial=False) + notify_accepted = forms.BooleanField(required=False, initial=False) + diff --git a/forum/management/__init__.py b/forum/management/__init__.py new file mode 100644 index 0000000..49ad8d5 --- /dev/null +++ b/forum/management/__init__.py @@ -0,0 +1,13 @@ +from forum.modules import get_modules_script +from django.db.models.signals import post_syncdb +import forum.models + +def setup_badges(sender, **kwargs): + from forum.badges import ALL_BADGES + + for badge in ALL_BADGES: + badge.install() + +post_syncdb.connect(setup_badges, sender=forum.models) + +get_modules_script('management') \ No newline at end of file diff --git a/forum/management/commands/__init__.py b/forum/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/forum/management/commands/base_command.py b/forum/management/commands/base_command.py new file mode 100644 index 0000000..c073bf7 --- /dev/null +++ b/forum/management/commands/base_command.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +#encoding:utf-8 +#------------------------------------------------------------------------------- +# Name: Award badges command +# Purpose: This is a command file croning in background process regularly to +# query database and award badges for user's special acitivities. +# +# Author: Mike, Sailing +# +# Created: 22/01/2009 +# Copyright: (c) Mike 2009 +# Licence: GPL V2 +#------------------------------------------------------------------------------- + +from datetime import datetime, date +from django.core.management.base import NoArgsCommand +from django.db import connection +from django.shortcuts import get_object_or_404 +from django.contrib.contenttypes.models import ContentType + +from forum.models import * +from forum.const import * + +class BaseCommand(NoArgsCommand): + def update_activities_auditted(self, cursor, activity_ids): + # update processed rows to auditted + if len(activity_ids): + query = "UPDATE activity SET is_auditted = 1 WHERE id in (%s)"\ + % ','.join('%s' % item for item in activity_ids) + cursor.execute(query) + + + + + diff --git a/forum/management/commands/create_extended_user.py b/forum/management/commands/create_extended_user.py new file mode 100644 index 0000000..4969ad2 --- /dev/null +++ b/forum/management/commands/create_extended_user.py @@ -0,0 +1,285 @@ + +PG_MIGRATION_QUERY = """ +SELECT id AS user_ptr_id, is_approved, email_isvalid, email_key, reputation, gravatar, gold, silver, bronze, questions_per_page, last_seen, real_name, website, location, date_of_birth, about, hide_ignored_questions, tag_filter_setting INTO forum_user FROM auth_user; + +ALTER TABLE forum_user + ADD CONSTRAINT forum_user_pkey PRIMARY KEY(user_ptr_id); + +ALTER TABLE forum_user + ADD CONSTRAINT forum_user_user_ptr_id_fkey FOREIGN KEY (user_ptr_id) + REFERENCES auth_user (id) MATCH SIMPLE + ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE forum_user + ADD CONSTRAINT forum_user_reputation_check CHECK (reputation >= 0); + +ALTER TABLE auth_user DROP COLUMN is_approved; +ALTER TABLE auth_user DROP COLUMN email_isvalid; +ALTER TABLE auth_user DROP COLUMN email_key; +ALTER TABLE auth_user DROP COLUMN reputation; +ALTER TABLE auth_user DROP COLUMN gravatar; +ALTER TABLE auth_user DROP COLUMN gold; +ALTER TABLE auth_user DROP COLUMN silver; +ALTER TABLE auth_user DROP COLUMN bronze; +ALTER TABLE auth_user DROP COLUMN questions_per_page; +ALTER TABLE auth_user DROP COLUMN last_seen; +ALTER TABLE auth_user DROP COLUMN real_name; +ALTER TABLE auth_user DROP COLUMN website; +ALTER TABLE auth_user DROP COLUMN "location"; +ALTER TABLE auth_user DROP COLUMN date_of_birth; +ALTER TABLE auth_user DROP COLUMN about; +ALTER TABLE auth_user DROP COLUMN hide_ignored_questions; +ALTER TABLE auth_user DROP COLUMN tag_filter_setting; + +""" + +PG_FKEYS_QUERY = """ + +ALTER TABLE "public"."activity" +DROP CONSTRAINT "activity_user_id_fkey", +ADD CONSTRAINT "activity_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."answer" +DROP CONSTRAINT "answer_author_id_fkey", +ADD CONSTRAINT "answer_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED, +DROP CONSTRAINT "answer_deleted_by_id_fkey", +ADD CONSTRAINT "answer_deleted_by_id_fkey" FOREIGN KEY ("deleted_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED, +DROP CONSTRAINT "answer_last_edited_by_id_fkey", +ADD CONSTRAINT "answer_last_edited_by_id_fkey" FOREIGN KEY ("last_edited_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED, +DROP CONSTRAINT "answer_locked_by_id_fkey", +ADD CONSTRAINT "answer_locked_by_id_fkey" FOREIGN KEY ("locked_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."answer_revision" +DROP CONSTRAINT "answer_revision_author_id_fkey", +ADD CONSTRAINT "answer_revision_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."award" +DROP CONSTRAINT "award_user_id_fkey", +ADD CONSTRAINT "award_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."comment" +DROP CONSTRAINT "comment_user_id_fkey", +ADD CONSTRAINT "comment_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."favorite_question" +DROP CONSTRAINT "favorite_question_user_id_fkey", +ADD CONSTRAINT "favorite_question_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."flagged_item" +DROP CONSTRAINT "flagged_item_user_id_fkey", +ADD CONSTRAINT "flagged_item_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."forum_anonymousanswer" +DROP CONSTRAINT "forum_anonymousanswer_author_id_fkey", +ADD CONSTRAINT "forum_anonymousanswer_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."forum_anonymousquestion" +DROP CONSTRAINT "forum_anonymousquestion_author_id_fkey", +ADD CONSTRAINT "forum_anonymousquestion_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."forum_authkeyuserassociation" +DROP CONSTRAINT "forum_authkeyuserassociation_user_id_fkey", +ADD CONSTRAINT "forum_authkeyuserassociation_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."forum_markedtag" +DROP CONSTRAINT "forum_markedtag_user_id_fkey", +ADD CONSTRAINT "forum_markedtag_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."forum_questionsubscription" +DROP CONSTRAINT "forum_questionsubscription_user_id_fkey", +ADD CONSTRAINT "forum_questionsubscription_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."forum_subscriptionsettings" +DROP CONSTRAINT "forum_subscriptionsettings_user_id_fkey", +ADD CONSTRAINT "forum_subscriptionsettings_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."forum_validationhash" +DROP CONSTRAINT "forum_validationhash_user_id_fkey", +ADD CONSTRAINT "forum_validationhash_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."question" +DROP CONSTRAINT "question_author_id_fkey", +ADD CONSTRAINT "question_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED, +DROP CONSTRAINT "question_closed_by_id_fkey", +ADD CONSTRAINT "question_closed_by_id_fkey" FOREIGN KEY ("closed_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED, +DROP CONSTRAINT "question_deleted_by_id_fkey", +ADD CONSTRAINT "question_deleted_by_id_fkey" FOREIGN KEY ("deleted_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED, +DROP CONSTRAINT "question_last_activity_by_id_fkey", +ADD CONSTRAINT "question_last_activity_by_id_fkey" FOREIGN KEY ("last_activity_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED, +DROP CONSTRAINT "question_last_edited_by_id_fkey", +ADD CONSTRAINT "question_last_edited_by_id_fkey" FOREIGN KEY ("last_edited_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED, +DROP CONSTRAINT "question_locked_by_id_fkey", +ADD CONSTRAINT "question_locked_by_id_fkey" FOREIGN KEY ("locked_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."question_followed_by" +DROP CONSTRAINT "question_followed_by_user_id_fkey", +ADD CONSTRAINT "question_followed_by_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."question_revision" +DROP CONSTRAINT "question_revision_author_id_fkey", +ADD CONSTRAINT "question_revision_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."repute" +DROP CONSTRAINT "repute_user_id_fkey", +ADD CONSTRAINT "repute_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."tag" +DROP CONSTRAINT "tag_created_by_id_fkey", +ADD CONSTRAINT "tag_created_by_id_fkey" FOREIGN KEY ("created_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED, +DROP CONSTRAINT "tag_deleted_by_id_fkey", +ADD CONSTRAINT "tag_deleted_by_id_fkey" FOREIGN KEY ("deleted_by_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +ALTER TABLE "public"."vote" +DROP CONSTRAINT "vote_user_id_fkey", +ADD CONSTRAINT "vote_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."forum_user" (user_ptr_id) ON DELETE NO ACTION ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; + +""" + +MYSQL_MIGRATION_QUERY = """ +CREATE TABLE `forum_user` ( + `user_ptr_id` int(11) NOT NULL, + `is_approved` tinyint(1) NOT NULL, + `email_isvalid` tinyint(1) NOT NULL, + `email_key` varchar(32) DEFAULT NULL, + `reputation` int(10) unsigned NOT NULL, + `gravatar` varchar(32) NOT NULL, + `gold` smallint(6) NOT NULL, + `silver` smallint(6) NOT NULL, + `bronze` smallint(6) NOT NULL, + `questions_per_page` smallint(6) NOT NULL, + `last_seen` datetime NOT NULL, + `real_name` varchar(100) NOT NULL, + `website` varchar(200) NOT NULL, + `location` varchar(100) NOT NULL, + `date_of_birth` date DEFAULT NULL, + `about` longtext NOT NULL, + `hide_ignored_questions` tinyint(1) NOT NULL, + `tag_filter_setting` varchar(16) NOT NULL, + PRIMARY KEY (`user_ptr_id`), + CONSTRAINT `user_ptr_id_refs_id_71071d7` FOREIGN KEY (`user_ptr_id`) REFERENCES `auth_user` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +SELECT id AS user_ptr_id, is_approved, email_isvalid, email_key, reputation, gravatar, gold, silver, bronze, questions_per_page, + last_seen, real_name, website, location, date_of_birth, about, hide_ignored_questions, tag_filter_setting FROM auth_user; + +ALTER TABLE `auth_user` +DROP COLUMN `is_approved`, +DROP COLUMN `email_isvalid`, +DROP COLUMN `email_key`, +DROP COLUMN `reputation`, +DROP COLUMN `gravatar`, +DROP COLUMN `gold`, +DROP COLUMN `silver`, +DROP COLUMN `bronze`, +DROP COLUMN `questions_per_page`, +DROP COLUMN `last_seen`, +DROP COLUMN `real_name`, +DROP COLUMN `website`, +DROP COLUMN `location`, +DROP COLUMN `date_of_birth`, +DROP COLUMN `about`, +DROP COLUMN `hide_ignored_questions`, +DROP COLUMN `tag_filter_setting`; + +""" + +MYSQL_FKEYS_QUERY = """ + +ALTER TABLE `activity` DROP FOREIGN KEY `user_id_refs_id_47c8583f`; +ALTER TABLE `activity` ADD CONSTRAINT `user_id_refs_user_ptr_id_62ae9785` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `answer` DROP FOREIGN KEY `author_id_refs_id_192b0170`; +ALTER TABLE `answer` ADD CONSTRAINT `author_id_refs_user_ptr_id_9681994` FOREIGN KEY (`author_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `answer` DROP FOREIGN KEY `deleted_by_id_refs_id_192b0170`; +ALTER TABLE `answer` ADD CONSTRAINT `deleted_by_id_refs_user_ptr_id_9681994` FOREIGN KEY (`deleted_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `answer` DROP FOREIGN KEY `last_edited_by_id_refs_id_192b0170`; +ALTER TABLE `answer` ADD CONSTRAINT `last_edited_by_id_refs_user_ptr_id_9681994` FOREIGN KEY (`last_edited_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `answer` DROP FOREIGN KEY `locked_by_id_refs_id_192b0170`; +ALTER TABLE `answer` ADD CONSTRAINT `locked_by_id_refs_user_ptr_id_9681994` FOREIGN KEY (`locked_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `answer_revision` DROP FOREIGN KEY `author_id_refs_id_3ccc055f`; +ALTER TABLE `answer_revision` ADD CONSTRAINT `author_id_refs_user_ptr_id_331f0123` FOREIGN KEY (`author_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `award` DROP FOREIGN KEY `user_id_refs_id_2d83e9b6`; +ALTER TABLE `award` ADD CONSTRAINT `user_id_refs_user_ptr_id_1b2d0192` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `comment` DROP FOREIGN KEY `user_id_refs_id_6be725e8`; +ALTER TABLE `comment` ADD CONSTRAINT `user_id_refs_user_ptr_id_1ac2320c` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `favorite_question` DROP FOREIGN KEY `user_id_refs_id_52853822`; +ALTER TABLE `favorite_question` ADD CONSTRAINT `user_id_refs_user_ptr_id_3f419c1a` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `flagged_item` DROP FOREIGN KEY `user_id_refs_id_35e3c608`; +ALTER TABLE `flagged_item` ADD CONSTRAINT `user_id_refs_user_ptr_id_1ce834d4` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `forum_anonymousanswer` DROP FOREIGN KEY `author_id_refs_id_13fb542e`; +ALTER TABLE `forum_anonymousanswer` ADD CONSTRAINT `author_id_refs_user_ptr_id_6b5b476a` FOREIGN KEY (`author_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `forum_anonymousquestion` DROP FOREIGN KEY `author_id_refs_id_7511a98a`; +ALTER TABLE `forum_anonymousquestion` ADD CONSTRAINT `author_id_refs_user_ptr_id_104edd52` FOREIGN KEY (`author_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `forum_authkeyuserassociation` DROP FOREIGN KEY `user_id_refs_id_2c2a6b01`; +ALTER TABLE `forum_authkeyuserassociation` ADD CONSTRAINT `user_id_refs_user_ptr_id_3f0ec0c3` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `forum_markedtag` DROP FOREIGN KEY `user_id_refs_id_23b833bd`; +ALTER TABLE `forum_markedtag` ADD CONSTRAINT `user_id_refs_user_ptr_id_5a13f081` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `forum_questionsubscription` DROP FOREIGN KEY `user_id_refs_id_18e1489`; +ALTER TABLE `forum_questionsubscription` ADD CONSTRAINT `user_id_refs_user_ptr_id_521b19ad` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `forum_subscriptionsettings` DROP FOREIGN KEY `user_id_refs_id_35edacb4`; +ALTER TABLE `forum_subscriptionsettings` ADD CONSTRAINT `user_id_refs_user_ptr_id_1bc4fc70` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `forum_validationhash` DROP FOREIGN KEY `user_id_refs_id_2c2d214b`; +ALTER TABLE `forum_validationhash` ADD CONSTRAINT `user_id_refs_user_ptr_id_4e5b2d6f` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `question` DROP FOREIGN KEY `author_id_refs_id_56e9d00c`; +ALTER TABLE `question` ADD CONSTRAINT `author_id_refs_user_ptr_id_60d41818` FOREIGN KEY (`author_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `question` DROP FOREIGN KEY `closed_by_id_refs_id_56e9d00c`; +ALTER TABLE `question` ADD CONSTRAINT `closed_by_id_refs_user_ptr_id_60d41818` FOREIGN KEY (`closed_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `question` DROP FOREIGN KEY `deleted_by_id_refs_id_56e9d00c`; +ALTER TABLE `question` ADD CONSTRAINT `deleted_by_id_refs_user_ptr_id_60d41818` FOREIGN KEY (`deleted_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `question` DROP FOREIGN KEY `last_activity_by_id_refs_id_56e9d00c`; +ALTER TABLE `question` ADD CONSTRAINT `last_activity_by_id_refs_user_ptr_id_60d41818` FOREIGN KEY (`last_activity_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `question` DROP FOREIGN KEY `last_edited_by_id_refs_id_56e9d00c`; +ALTER TABLE `question` ADD CONSTRAINT `last_edited_by_id_refs_user_ptr_id_60d41818` FOREIGN KEY (`last_edited_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `question` DROP FOREIGN KEY `locked_by_id_refs_id_56e9d00c`; +ALTER TABLE `question` ADD CONSTRAINT `locked_by_id_refs_user_ptr_id_60d41818` FOREIGN KEY (`locked_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `question_followed_by` DROP FOREIGN KEY `user_id_refs_id_6d30712d`; +ALTER TABLE `question_followed_by` ADD CONSTRAINT `user_id_refs_user_ptr_id_615e65af` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `question_revision` DROP FOREIGN KEY `author_id_refs_id_4f88024f`; +ALTER TABLE `question_revision` ADD CONSTRAINT `author_id_refs_user_ptr_id_42e3d48d` FOREIGN KEY (`author_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `repute` DROP FOREIGN KEY `user_id_refs_id_5a426cd`; +ALTER TABLE `repute` ADD CONSTRAINT `user_id_refs_user_ptr_id_5ea9540f` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `tag` DROP FOREIGN KEY `created_by_id_refs_id_47205d6d`; +ALTER TABLE `tag` ADD CONSTRAINT `created_by_id_refs_user_ptr_id_417f3449` FOREIGN KEY (`created_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `tag` DROP FOREIGN KEY `deleted_by_id_refs_id_47205d6d`; +ALTER TABLE `tag` ADD CONSTRAINT `deleted_by_id_refs_user_ptr_id_417f3449` FOREIGN KEY (`deleted_by_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +ALTER TABLE `vote` DROP FOREIGN KEY `user_id_refs_id_760a4df0`; +ALTER TABLE `vote` ADD CONSTRAINT `user_id_refs_user_ptr_id_18723e34` FOREIGN KEY (`user_id`) REFERENCES `forum_user` (`user_ptr_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; + +""" + +from django.core.management.base import NoArgsCommand +from django.db import connection, transaction +from django.conf import settings + +class Command(NoArgsCommand): + def handle_noargs(self, **options): + if settings.DATABASE_ENGINE in ('postgresql_psycopg2', 'postgresql', ): + migration_query = PG_MIGRATION_QUERY + fkeys_query = PG_FKEYS_QUERY + elif settings.DATABASE_ENGINE == 'mysql': + migration_query = MYSQL_MIGRATION_QUERY + fkeys_query = MYSQL_FKEYS_QUERY + else: + raise Exception("Database backend not suported by this migration command") + + cursor = connection.cursor() + cursor.execute(migration_query) + cursor.execute(fkeys_query) + transaction.commit_unless_managed() \ No newline at end of file diff --git a/forum/management/commands/create_subscriptions.py b/forum/management/commands/create_subscriptions.py new file mode 100644 index 0000000..b97c970 --- /dev/null +++ b/forum/management/commands/create_subscriptions.py @@ -0,0 +1,15 @@ +from forum.models import User, SubscriptionSettings, QuestionSubscription +from django.core.management.base import NoArgsCommand + +class Command(NoArgsCommand): + def handle_noargs(self, **options): + users = User.objects.all() + for u in users: + s = SubscriptionSettings(user=u) + s.save() + + user_questions = u.questions.all() + + for q in user_questions: + sub = QuestionSubscription(user=u, question=q) + sub.save() \ No newline at end of file diff --git a/forum/management/commands/message_to_everyone.py b/forum/management/commands/message_to_everyone.py new file mode 100644 index 0000000..ea7b41a --- /dev/null +++ b/forum/management/commands/message_to_everyone.py @@ -0,0 +1,12 @@ +from django.core.management.base import NoArgsCommand +from forum.models import User +import sys + +class Command(NoArgsCommand): + def handle_noargs(self, **options): + msg = None + if msg == None: + print 'to run this command, please first edit the file %s' % __file__ + sys.exit(1) + for u in User.objects.all(): + u.message_set.create(message = msg % u.username) diff --git a/forum/management/commands/sample_command.py b/forum/management/commands/sample_command.py new file mode 100644 index 0000000..55e6723 --- /dev/null +++ b/forum/management/commands/sample_command.py @@ -0,0 +1,7 @@ +from django.core.management.base import NoArgsCommand +from forum.models import Comment + +class Command(NoArgsCommand): + def handle_noargs(self, **options): + objs = Comment.objects.all() + print objs \ No newline at end of file diff --git a/forum/management/commands/send_email_alerts.py b/forum/management/commands/send_email_alerts.py new file mode 100644 index 0000000..ba1d943 --- /dev/null +++ b/forum/management/commands/send_email_alerts.py @@ -0,0 +1,171 @@ +from datetime import datetime, timedelta +from django.core.management.base import NoArgsCommand +from django.utils.translation import ugettext as _ +from django.template import loader, Context, Template +from django.core.mail import EmailMultiAlternatives +from django.conf import settings +from forum.models import KeyValue, Activity, User, QuestionSubscription +from forum.utils.mail import send_email +from forum import const + +class QuestionRecord: + def __init__(self, question): + self.question = question + self.records = [] + + def log_activity(self, activity): + self.records.append(activity) + + def get_activity_since(self, since): + activity = [r for r in self.records if r.active_at > since] + answers = [a for a in activity if a.activity_type == const.TYPE_ACTIVITY_ANSWER] + comments = [a for a in activity if a.activity_type in (const.TYPE_ACTIVITY_COMMENT_QUESTION, const.TYPE_ACTIVITY_COMMENT_ANSWER)] + + accepted = [a for a in activity if a.activity_type == const.TYPE_ACTIVITY_MARK_ANSWER] + + if len(accepted): + accepted = accepted[-1:][0] + else: + accepted = None + + return { + 'answers': answers, + 'comments': comments, + 'accepted': accepted, + } + + +class Command(NoArgsCommand): + def handle_noargs(self, **options): + digest_control = self.get_digest_control() + + self.send_digest('daily', 'd', digest_control.value['LAST_DAILY']) + digest_control.value['LAST_DAILY'] = datetime.now() + + if digest_control.value['LAST_WEEKLY'] + timedelta(days=7) <= datetime.now(): + self.send_digest('weekly', 'w', digest_control.value['LAST_WEEKLY']) + digest_control.value['LAST_WEEKLY'] = datetime.now() + + digest_control.save() + + + def send_digest(self, name, char_in_db, control_date): + new_questions, question_records = self.prepare_activity(control_date) + new_users = User.objects.filter(date_joined__gt=control_date) + + digest_subject = settings.EMAIL_SUBJECT_PREFIX + _('Daily digest') + + users = User.objects.filter(subscription_settings__enable_notifications=True) + + msgs = [] + + for u in users: + context = { + 'user': u, + 'digest_type': name, + } + + if u.subscription_settings.member_joins == char_in_db: + context['new_users'] = new_users + else: + context['new_users'] = False + + if u.subscription_settings.subscribed_questions == char_in_db: + activity_in_subscriptions = [] + + for id, r in question_records.items(): + try: + subscription = QuestionSubscription.objects.get(question=r.question, user=u) + + record = r.get_activity_since(subscription.last_view) + + if not u.subscription_settings.notify_answers: + del record['answers'] + + if not u.subscription_settings.notify_comments: + if u.subscription_settings.notify_comments_own_post: + record.comments = [a for a in record.comments if a.content_object.content_object.author == u] + record['own_comments_only'] = True + else: + del record['comments'] + + if not u.subscription_settings.notify_accepted: + del record['accepted'] + + if record.get('answers', False) or record.get('comments', False) or record.get('accepted', False): + activity_in_subscriptions.append({'question': r.question, 'activity': record}) + except: + pass + + context['activity_in_subscriptions'] = activity_in_subscriptions + else: + context['activity_in_subscriptions'] = False + + + if u.subscription_settings.new_question == char_in_db: + context['new_questions'] = new_questions + context['watched_tags_only'] = False + elif u.subscription_settings.new_question_watched_tags == char_in_db: + context['new_questions'] = [q for q in new_questions if + q.tags.filter(id__in=u.marked_tags.filter(user_selections__reason='good')).count() > 0] + context['watched_tags_only'] = True + else: + context['new_questions'] = False + + if context['new_users'] or context['activity_in_subscriptions'] or context['new_questions']: + send_email(digest_subject, (u.username, u.email), "notifications/digest.html", context, threaded=False) + + + def get_digest_control(self): + try: + digest_control = KeyValue.objects.get(key='DIGEST_CONTROL') + except: + digest_control = KeyValue(key='DIGEST_CONTROL', value={ + 'LAST_DAILY': datetime.now() - timedelta(days=1), + 'LAST_WEEKLY': datetime.now() - timedelta(days=1), + }) + + return digest_control + + def prepare_activity(self, since): + all_activity = Activity.objects.filter(active_at__gt=since, activity_type__in=( + const.TYPE_ACTIVITY_ASK_QUESTION, const.TYPE_ACTIVITY_ANSWER, + const.TYPE_ACTIVITY_COMMENT_QUESTION, const.TYPE_ACTIVITY_COMMENT_ANSWER, + const.TYPE_ACTIVITY_MARK_ANSWER + )).order_by('active_at') + + question_records = {} + new_questions = [] + + + for activity in all_activity: + try: + question = self.get_question_for_activity(activity) + + if not question.id in question_records: + question_records[question.id] = QuestionRecord(question) + + question_records[question.id].log_activity(activity) + + if activity.activity_type == const.TYPE_ACTIVITY_ASK_QUESTION: + new_questions.append(question) + except: + pass + + return new_questions, question_records + + def get_question_for_activity(self, activity): + if activity.activity_type == const.TYPE_ACTIVITY_ASK_QUESTION: + question = activity.content_object + elif activity.activity_type == const.TYPE_ACTIVITY_ANSWER: + question = activity.content_object.question + elif activity.activity_type == const.TYPE_ACTIVITY_COMMENT_QUESTION: + question = activity.content_object.content_object + elif activity.activity_type == const.TYPE_ACTIVITY_COMMENT_ANSWER: + question = activity.content_object.content_object.question + elif activity.activity_type == const.TYPE_ACTIVITY_MARK_ANSWER: + question = activity.content_object.question + else: + raise Exception + + return question diff --git a/forum/middleware/__init__.py b/forum/middleware/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/forum/middleware/anon_user.py b/forum/middleware/anon_user.py new file mode 100644 index 0000000..866734d --- /dev/null +++ b/forum/middleware/anon_user.py @@ -0,0 +1,35 @@ +from django.http import HttpResponseRedirect +from forum.utils.forms import get_next_url +from django.utils.translation import ugettext as _ +from forum.user_messages import create_message, get_and_delete_messages +from django.conf import settings +from django.core.urlresolvers import reverse +import logging + +class AnonymousMessageManager(object): + def __init__(self,request): + self.request = request + def create(self,message=''): + create_message(self.request,message) + def get_and_delete(self): + messages = get_and_delete_messages(self.request) + return messages + +def dummy_deepcopy(*arg): + """this is necessary to prevent deepcopy() on anonymous user object + that now contains reference to request, which cannot be deepcopied + """ + return None + +class ConnectToSessionMessagesMiddleware(object): + def process_request(self, request): + if not request.user.is_authenticated(): + request.user.__deepcopy__ = dummy_deepcopy #plug on deepcopy which may be called by django db "driver" + request.user.message_set = AnonymousMessageManager(request) #here request is linked to anon user + request.user.get_and_delete_messages = request.user.message_set.get_and_delete + + #also set the first greeting one time per session only + if 'greeting_set' not in request.session: + request.session['greeting_set'] = True + msg = _('First time here? Check out the FAQ!') % reverse('faq') + request.user.message_set.create(message=msg) diff --git a/forum/middleware/cancel.py b/forum/middleware/cancel.py new file mode 100644 index 0000000..15a4371 --- /dev/null +++ b/forum/middleware/cancel.py @@ -0,0 +1,15 @@ +from django.http import HttpResponseRedirect +from forum.utils.forms import get_next_url +import logging +class CancelActionMiddleware(object): + def process_view(self, request, view_func, view_args, view_kwargs): + if 'cancel' in request.REQUEST: + #todo use session messages for the anonymous users + try: + msg = getattr(view_func,'CANCEL_MESSAGE') + except AttributeError: + msg = 'action canceled' + request.user.message_set.create(message=msg) + return HttpResponseRedirect(get_next_url(request)) + else: + return None diff --git a/forum/middleware/extended_user.py b/forum/middleware/extended_user.py new file mode 100644 index 0000000..e54c9b4 --- /dev/null +++ b/forum/middleware/extended_user.py @@ -0,0 +1,15 @@ +from django.contrib.auth.middleware import AuthenticationMiddleware +from forum.models.user import AnonymousUser + +class ExtendedUser(AuthenticationMiddleware): + def process_request(self, request): + super(ExtendedUser, self).process_request(request) + if request.user.is_authenticated(): + try: + request.user = request.user.user + return None + except: + pass + + request.user = AnonymousUser() + return None \ No newline at end of file diff --git a/forum/middleware/request_utils.py b/forum/middleware/request_utils.py new file mode 100644 index 0000000..a96f372 --- /dev/null +++ b/forum/middleware/request_utils.py @@ -0,0 +1,28 @@ + +class RequestUtils(object): + def __init__(self): + self.request = None + + def set_sort_method(self, sort): + self.request.session['questions_sort_method'] = sort + + def sort_method(self, default): + sort = self.request.REQUEST.get('sort', None) + if sort is None: + return self.request.session.get('questions_sort_method', default) + else: + self.set_sort_method(sort) + return sort + + def page_size(self, default): + pagesize = self.request.REQUEST.get('pagesize', None) + if pagesize is None: + return int(self.request.session.get('questions_pagesize', default)) + else: + self.request.session['questions_pagesize'] = pagesize + return int(pagesize) + + def process_request(self, request): + self.request = request + request.utils = self + return None \ No newline at end of file diff --git a/forum/migrations/0001_initial.py b/forum/migrations/0001_initial.py new file mode 100644 index 0000000..5dbd4a2 --- /dev/null +++ b/forum/migrations/0001_initial.py @@ -0,0 +1,764 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'User' + db.create_table('forum_user', ( + ('website', self.gf('django.db.models.fields.URLField')(max_length=200, blank=True)), + ('user_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True, primary_key=True)), + ('hide_ignored_questions', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('is_approved', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('email_isvalid', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('real_name', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)), + ('about', self.gf('django.db.models.fields.TextField')(blank=True)), + ('silver', self.gf('django.db.models.fields.SmallIntegerField')(default=0)), + ('date_of_birth', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('reputation', self.gf('django.db.models.fields.PositiveIntegerField')(default=1)), + ('gravatar', self.gf('django.db.models.fields.CharField')(max_length=32)), + ('location', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)), + ('tag_filter_setting', self.gf('django.db.models.fields.CharField')(default='ignored', max_length=16)), + ('gold', self.gf('django.db.models.fields.SmallIntegerField')(default=0)), + ('last_seen', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('email_key', self.gf('django.db.models.fields.CharField')(max_length=32, null=True)), + ('bronze', self.gf('django.db.models.fields.SmallIntegerField')(default=0)), + ('questions_per_page', self.gf('django.db.models.fields.SmallIntegerField')(default=10)), + )) + db.send_create_signal('forum', ['User']) + + # Adding model 'Activity' + db.create_table(u'activity', ( + ('is_auditted', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.User'])), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), + ('active_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('activity_type', self.gf('django.db.models.fields.SmallIntegerField')()), + )) + db.send_create_signal('forum', ['Activity']) + + # Adding model 'SubscriptionSettings' + db.create_table('forum_subscriptionsettings', ( + ('questions_asked', self.gf('django.db.models.fields.BooleanField')(default=True, blank=True)), + ('questions_viewed', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('notify_comments', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('new_question', self.gf('django.db.models.fields.CharField')(default='d', max_length=1)), + ('all_questions', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('new_question_watched_tags', self.gf('django.db.models.fields.CharField')(default='i', max_length=1)), + ('questions_answered', self.gf('django.db.models.fields.BooleanField')(default=True, blank=True)), + ('notify_comments_own_post', self.gf('django.db.models.fields.BooleanField')(default=True, blank=True)), + ('questions_commented', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('subscribed_questions', self.gf('django.db.models.fields.CharField')(default='i', max_length=1)), + ('notify_reply_to_comments', self.gf('django.db.models.fields.BooleanField')(default=True, blank=True)), + ('member_joins', self.gf('django.db.models.fields.CharField')(default='n', max_length=1)), + ('user', self.gf('django.db.models.fields.related.OneToOneField')(related_name='subscription_settings', unique=True, to=orm['forum.User'])), + ('notify_answers', self.gf('django.db.models.fields.BooleanField')(default=True, blank=True)), + ('enable_notifications', self.gf('django.db.models.fields.BooleanField')(default=True, blank=True)), + ('all_questions_watched_tags', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('notify_accepted', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + )) + db.send_create_signal('forum', ['SubscriptionSettings']) + + # Adding model 'ValidationHash' + db.create_table('forum_validationhash', ( + ('hash_code', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + ('seed', self.gf('django.db.models.fields.CharField')(max_length=12)), + ('expiration', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2010, 4, 7, 10, 36, 23, 812000))), + ('type', self.gf('django.db.models.fields.CharField')(max_length=12)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.User'])), + )) + db.send_create_signal('forum', ['ValidationHash']) + + # Adding unique constraint on 'ValidationHash', fields ['user', 'type'] + db.create_unique('forum_validationhash', ['user_id', 'type']) + + # Adding model 'AuthKeyUserAssociation' + db.create_table('forum_authkeyuserassociation', ( + ('added_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='auth_keys', to=orm['forum.User'])), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('key', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + ('provider', self.gf('django.db.models.fields.CharField')(max_length=64)), + )) + db.send_create_signal('forum', ['AuthKeyUserAssociation']) + + # Adding model 'Vote' + db.create_table(u'vote', ( + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('voted_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='votes', to=orm['forum.User'])), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), + ('vote', self.gf('django.db.models.fields.SmallIntegerField')()), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal('forum', ['Vote']) + + # Adding unique constraint on 'Vote', fields ['content_type', 'object_id', 'user'] + db.create_unique(u'vote', ['content_type_id', 'object_id', 'user_id']) + + # Adding model 'FlaggedItem' + db.create_table(u'flagged_item', ( + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('flagged_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='flaggeditems', to=orm['forum.User'])), + )) + db.send_create_signal('forum', ['FlaggedItem']) + + # Adding unique constraint on 'FlaggedItem', fields ['content_type', 'object_id', 'user'] + db.create_unique(u'flagged_item', ['content_type_id', 'object_id', 'user_id']) + + # Adding model 'Comment' + db.create_table(u'comment', ( + ('comment', self.gf('django.db.models.fields.CharField')(max_length=300)), + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('added_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='comments', to=orm['forum.User'])), + )) + db.send_create_signal('forum', ['Comment']) + + # Adding model 'Tag' + db.create_table(u'tag', ( + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + ('deleted', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='created_tags', to=orm['forum.User'])), + ('deleted_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='deleted_tags', null=True, to=orm['forum.User'])), + ('used_count', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('deleted_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal('forum', ['Tag']) + + # Adding model 'MarkedTag' + db.create_table('forum_markedtag', ( + ('reason', self.gf('django.db.models.fields.CharField')(max_length=16)), + ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='user_selections', to=orm['forum.Tag'])), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='tag_selections', to=orm['forum.User'])), + )) + db.send_create_signal('forum', ['MarkedTag']) + + # Adding model 'Question' + db.create_table(u'question', ( + ('wiki', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('vote_up_count', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('answer_accepted', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('offensive_flag_count', self.gf('django.db.models.fields.SmallIntegerField')(default=0)), + ('closed_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('deleted_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('last_activity_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='last_active_in_questions', to=orm['forum.User'])), + ('view_count', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('locked_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('score', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('author', self.gf('django.db.models.fields.related.ForeignKey')(related_name='questions', to=orm['forum.User'])), + ('comment_count', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('html', self.gf('django.db.models.fields.TextField')()), + ('vote_down_count', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('closed', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('last_edited_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='last_edited_questions', null=True, to=orm['forum.User'])), + ('favourite_count', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('deleted', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('summary', self.gf('django.db.models.fields.CharField')(max_length=180)), + ('answer_count', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('last_activity_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('closed_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='closed_questions', null=True, to=orm['forum.User'])), + ('close_reason', self.gf('django.db.models.fields.SmallIntegerField')(null=True, blank=True)), + ('locked', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('tagnames', self.gf('django.db.models.fields.CharField')(max_length=125)), + ('locked_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='locked_questions', null=True, to=orm['forum.User'])), + ('added_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('deleted_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='deleted_questions', null=True, to=orm['forum.User'])), + ('wikified_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=300)), + ('last_edited_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + )) + db.send_create_signal('forum', ['Question']) + + # Adding M2M table for field followed_by on 'Question' + db.create_table(u'question_followed_by', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('question', models.ForeignKey(orm['forum.question'], null=False)), + ('user', models.ForeignKey(orm['forum.user'], null=False)) + )) + db.create_unique(u'question_followed_by', ['question_id', 'user_id']) + + # Adding M2M table for field tags on 'Question' + db.create_table(u'question_tags', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('question', models.ForeignKey(orm['forum.question'], null=False)), + ('tag', models.ForeignKey(orm['forum.tag'], null=False)) + )) + db.create_unique(u'question_tags', ['question_id', 'tag_id']) + + # Adding model 'QuestionSubscription' + db.create_table('forum_questionsubscription', ( + ('last_view', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2010, 4, 6, 10, 36, 23, 725000))), + ('auto_subscription', self.gf('django.db.models.fields.BooleanField')(default=True, blank=True)), + ('question', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.Question'])), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.User'])), + )) + db.send_create_signal('forum', ['QuestionSubscription']) + + # Adding model 'FavoriteQuestion' + db.create_table(u'favorite_question', ( + ('question', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.Question'])), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('added_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='user_favorite_questions', to=orm['forum.User'])), + )) + db.send_create_signal('forum', ['FavoriteQuestion']) + + # Adding model 'QuestionRevision' + db.create_table(u'question_revision', ( + ('author', self.gf('django.db.models.fields.related.ForeignKey')(related_name='questionrevisions', to=orm['forum.User'])), + ('tagnames', self.gf('django.db.models.fields.CharField')(max_length=125)), + ('text', self.gf('django.db.models.fields.TextField')()), + ('title', self.gf('django.db.models.fields.CharField')(max_length=300)), + ('question', self.gf('django.db.models.fields.related.ForeignKey')(related_name='revisions', to=orm['forum.Question'])), + ('revised_at', self.gf('django.db.models.fields.DateTimeField')()), + ('summary', self.gf('django.db.models.fields.CharField')(max_length=300, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('revision', self.gf('django.db.models.fields.PositiveIntegerField')()), + )) + db.send_create_signal('forum', ['QuestionRevision']) + + # Adding model 'AnonymousQuestion' + db.create_table('forum_anonymousquestion', ( + ('wiki', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('ip_addr', self.gf('django.db.models.fields.IPAddressField')(max_length=15)), + ('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.User'], null=True)), + ('tagnames', self.gf('django.db.models.fields.CharField')(max_length=125)), + ('text', self.gf('django.db.models.fields.TextField')()), + ('title', self.gf('django.db.models.fields.CharField')(max_length=300)), + ('added_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('summary', self.gf('django.db.models.fields.CharField')(max_length=180)), + ('session_key', self.gf('django.db.models.fields.CharField')(max_length=40)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal('forum', ['AnonymousQuestion']) + + # Adding model 'Answer' + db.create_table(u'answer', ( + ('wiki', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('vote_up_count', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('offensive_flag_count', self.gf('django.db.models.fields.SmallIntegerField')(default=0)), + ('deleted_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('locked_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('score', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('author', self.gf('django.db.models.fields.related.ForeignKey')(related_name='answers', to=orm['forum.User'])), + ('question', self.gf('django.db.models.fields.related.ForeignKey')(related_name='answers', to=orm['forum.Question'])), + ('comment_count', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('html', self.gf('django.db.models.fields.TextField')()), + ('vote_down_count', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('last_edited_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='last_edited_answers', null=True, to=orm['forum.User'])), + ('accepted_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('deleted', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('accepted', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('locked', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('locked_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='locked_answers', null=True, to=orm['forum.User'])), + ('added_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('deleted_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='deleted_answers', null=True, to=orm['forum.User'])), + ('wikified_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('last_edited_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + )) + db.send_create_signal('forum', ['Answer']) + + # Adding model 'AnswerRevision' + db.create_table(u'answer_revision', ( + ('author', self.gf('django.db.models.fields.related.ForeignKey')(related_name='answerrevisions', to=orm['forum.User'])), + ('text', self.gf('django.db.models.fields.TextField')()), + ('revised_at', self.gf('django.db.models.fields.DateTimeField')()), + ('summary', self.gf('django.db.models.fields.CharField')(max_length=300, blank=True)), + ('answer', self.gf('django.db.models.fields.related.ForeignKey')(related_name='revisions', to=orm['forum.Answer'])), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('revision', self.gf('django.db.models.fields.PositiveIntegerField')()), + )) + db.send_create_signal('forum', ['AnswerRevision']) + + # Adding model 'AnonymousAnswer' + db.create_table('forum_anonymousanswer', ( + ('wiki', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('ip_addr', self.gf('django.db.models.fields.IPAddressField')(max_length=15)), + ('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.User'], null=True)), + ('text', self.gf('django.db.models.fields.TextField')()), + ('question', self.gf('django.db.models.fields.related.ForeignKey')(related_name='anonymous_answers', to=orm['forum.Question'])), + ('added_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('summary', self.gf('django.db.models.fields.CharField')(max_length=180)), + ('session_key', self.gf('django.db.models.fields.CharField')(max_length=40)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal('forum', ['AnonymousAnswer']) + + # Adding model 'Badge' + db.create_table(u'badge', ( + ('multiple', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('description', self.gf('django.db.models.fields.CharField')(max_length=300)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('awarded_count', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('type', self.gf('django.db.models.fields.SmallIntegerField')()), + ('slug', self.gf('django.db.models.fields.SlugField')(db_index=True, max_length=50, blank=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=50)), + )) + db.send_create_signal('forum', ['Badge']) + + # Adding unique constraint on 'Badge', fields ['name', 'type'] + db.create_unique(u'badge', ['name', 'type']) + + # Adding model 'Award' + db.create_table(u'award', ( + ('awarded_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('notified', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='awards', to=orm['forum.User'])), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), + ('badge', self.gf('django.db.models.fields.related.ForeignKey')(related_name='award_badge', to=orm['forum.Badge'])), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal('forum', ['Award']) + + # Adding unique constraint on 'Award', fields ['content_type', 'object_id', 'user', 'badge'] + db.create_unique(u'award', ['content_type_id', 'object_id', 'user_id', 'badge_id']) + + # Adding model 'Repute' + db.create_table(u'repute', ( + ('positive', self.gf('django.db.models.fields.SmallIntegerField')(default=0)), + ('question', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.Question'])), + ('negative', self.gf('django.db.models.fields.SmallIntegerField')(default=0)), + ('reputation_type', self.gf('django.db.models.fields.SmallIntegerField')()), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.User'])), + ('reputed_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('reputation', self.gf('django.db.models.fields.IntegerField')(default=1)), + )) + db.send_create_signal('forum', ['Repute']) + + # Adding model 'KeyValue' + db.create_table('forum_keyvalue', ( + ('value', self.gf('forum.models.utils.PickledObjectField')()), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('key', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + )) + db.send_create_signal('forum', ['KeyValue']) + + + def backwards(self, orm): + + # Deleting model 'User' + db.delete_table('forum_user') + + # Deleting model 'Activity' + db.delete_table(u'activity') + + # Deleting model 'SubscriptionSettings' + db.delete_table('forum_subscriptionsettings') + + # Deleting model 'ValidationHash' + db.delete_table('forum_validationhash') + + # Removing unique constraint on 'ValidationHash', fields ['user', 'type'] + db.delete_unique('forum_validationhash', ['user_id', 'type']) + + # Deleting model 'AuthKeyUserAssociation' + db.delete_table('forum_authkeyuserassociation') + + # Deleting model 'Vote' + db.delete_table(u'vote') + + # Removing unique constraint on 'Vote', fields ['content_type', 'object_id', 'user'] + db.delete_unique(u'vote', ['content_type_id', 'object_id', 'user_id']) + + # Deleting model 'FlaggedItem' + db.delete_table(u'flagged_item') + + # Removing unique constraint on 'FlaggedItem', fields ['content_type', 'object_id', 'user'] + db.delete_unique(u'flagged_item', ['content_type_id', 'object_id', 'user_id']) + + # Deleting model 'Comment' + db.delete_table(u'comment') + + # Deleting model 'Tag' + db.delete_table(u'tag') + + # Deleting model 'MarkedTag' + db.delete_table('forum_markedtag') + + # Deleting model 'Question' + db.delete_table(u'question') + + # Removing M2M table for field followed_by on 'Question' + db.delete_table('question_followed_by') + + # Removing M2M table for field tags on 'Question' + db.delete_table('question_tags') + + # Deleting model 'QuestionSubscription' + db.delete_table('forum_questionsubscription') + + # Deleting model 'FavoriteQuestion' + db.delete_table(u'favorite_question') + + # Deleting model 'QuestionRevision' + db.delete_table(u'question_revision') + + # Deleting model 'AnonymousQuestion' + db.delete_table('forum_anonymousquestion') + + # Deleting model 'Answer' + db.delete_table(u'answer') + + # Deleting model 'AnswerRevision' + db.delete_table(u'answer_revision') + + # Deleting model 'AnonymousAnswer' + db.delete_table('forum_anonymousanswer') + + # Deleting model 'Badge' + db.delete_table(u'badge') + + # Removing unique constraint on 'Badge', fields ['name', 'type'] + db.delete_unique(u'badge', ['name', 'type']) + + # Deleting model 'Award' + db.delete_table(u'award') + + # Removing unique constraint on 'Award', fields ['content_type', 'object_id', 'user', 'badge'] + db.delete_unique(u'award', ['content_type_id', 'object_id', 'user_id', 'badge_id']) + + # Deleting model 'Repute' + db.delete_table(u'repute') + + # Deleting model 'KeyValue' + db.delete_table('forum_keyvalue') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'forum.activity': { + 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"}, + 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.anonymousanswer': { + 'Meta': {'object_name': 'AnonymousAnswer'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['forum.Question']"}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.anonymousquestion': { + 'Meta': {'object_name': 'AnonymousQuestion'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.answer': { + 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"}, + 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.Question']"}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.answerrevision': { + 'Meta': {'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"}, + 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Answer']"}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'text': ('django.db.models.fields.TextField', [], {}) + }, + 'forum.authkeyuserassociation': { + 'Meta': {'object_name': 'AuthKeyUserAssociation'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_keys'", 'to': "orm['forum.User']"}) + }, + 'forum.award': { + 'Meta': {'unique_together': "(('content_type', 'object_id', 'user', 'badge'),)", 'object_name': 'Award', 'db_table': "u'award'"}, + 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['forum.Badge']"}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'awards'", 'to': "orm['forum.User']"}) + }, + 'forum.badge': { + 'Meta': {'unique_together': "(('name', 'type'),)", 'object_name': 'Badge', 'db_table': "u'badge'"}, + 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'through': "'Award'", 'to': "orm['forum.User']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'multiple': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}), + 'type': ('django.db.models.fields.SmallIntegerField', [], {}) + }, + 'forum.comment': { + 'Meta': {'object_name': 'Comment', 'db_table': "u'comment'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'comment': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['forum.User']"}) + }, + 'forum.favoritequestion': { + 'Meta': {'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['forum.User']"}) + }, + 'forum.flaggeditem': { + 'Meta': {'unique_together': "(('content_type', 'object_id', 'user'),)", 'object_name': 'FlaggedItem', 'db_table': "u'flagged_item'"}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'flagged_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'flaggeditems'", 'to': "orm['forum.User']"}) + }, + 'forum.keyvalue': { + 'Meta': {'object_name': 'KeyValue'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'value': ('forum.models.utils.PickledObjectField', [], {}) + }, + 'forum.markedtag': { + 'Meta': {'object_name': 'MarkedTag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['forum.Tag']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['forum.User']"}) + }, + 'forum.question': { + 'Meta': {'object_name': 'Question', 'db_table': "u'question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['forum.User']"}), + 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'through': "'FavoriteQuestion'", 'to': "orm['forum.User']"}), + 'favourite_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['forum.User']"}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'subscriptions'", 'through': "'QuestionSubscription'", 'to': "orm['forum.User']"}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'to': "orm['forum.Tag']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'view_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.questionrevision': { + 'Meta': {'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Question']"}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}) + }, + 'forum.questionsubscription': { + 'Meta': {'object_name': 'QuestionSubscription'}, + 'auto_subscription': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_view': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 6, 10, 36, 23, 725000)'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.repute': { + 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'negative': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'positive': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'reputation': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.subscriptionsettings': { + 'Meta': {'object_name': 'SubscriptionSettings'}, + 'all_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'all_questions_watched_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'enable_notifications': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'member_joins': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}), + 'new_question': ('django.db.models.fields.CharField', [], {'default': "'d'", 'max_length': '1'}), + 'new_question_watched_tags': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'notify_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_answers': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_comments': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_comments_own_post': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_reply_to_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_answered': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_asked': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_commented': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'questions_viewed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'subscribed_questions': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'subscription_settings'", 'unique': 'True', 'to': "orm['forum.User']"}) + }, + 'forum.tag': { + 'Meta': {'object_name': 'Tag', 'db_table': "u'tag'"}, + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['forum.User']"}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'marked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'marked_tags'", 'through': "'MarkedTag'", 'to': "orm['forum.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + 'forum.user': { + 'Meta': {'object_name': 'User', '_ormbases': ['auth.User']}, + 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'hide_ignored_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}), + 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'tag_filter_setting': ('django.db.models.fields.CharField', [], {'default': "'ignored'", 'max_length': '16'}), + 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'forum.validationhash': { + 'Meta': {'unique_together': "(('user', 'type'),)", 'object_name': 'ValidationHash'}, + 'expiration': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 7, 10, 36, 23, 863000)'}), + 'hash_code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'seed': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.vote': { + 'Meta': {'unique_together': "(('content_type', 'object_id', 'user'),)", 'object_name': 'Vote', 'db_table': "u'vote'"}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['forum.User']"}), + 'vote': ('django.db.models.fields.SmallIntegerField', [], {}), + 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}) + } + } + + complete_apps = ['forum'] diff --git a/forum/migrations/0002_auto__add_likedcomment__del_field_repute_positive__del_field_repute_ne.py b/forum/migrations/0002_auto__add_likedcomment__del_field_repute_positive__del_field_repute_ne.py new file mode 100644 index 0000000..36ff8e2 --- /dev/null +++ b/forum/migrations/0002_auto__add_likedcomment__del_field_repute_positive__del_field_repute_ne.py @@ -0,0 +1,481 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'LikedComment' + db.create_table('forum_likedcomment', ( + ('comment', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.Comment'])), + ('canceled', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('added_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.User'])), + )) + db.send_create_signal('forum', ['LikedComment']) + + # Adding field 'Repute.value' + db.add_column(u'repute', 'value', self.gf('django.db.models.fields.SmallIntegerField')(default=0), keep_default=False) + + # Adding field 'Repute.user_previous_rep' + db.add_column(u'repute', 'user_previous_rep', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False) + + # Adding field 'Vote.canceled' + db.add_column(u'vote', 'canceled', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True), keep_default=False) + + # Removing unique constraint on 'Vote', fields ['object_id', 'content_type', 'user'] + db.delete_unique(u'vote', ['object_id', 'content_type_id', 'user_id']) + + # Adding field 'Comment.deleted' + db.add_column(u'comment', 'deleted', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True), keep_default=False) + + # Adding field 'Comment.deleted_by' + db.add_column(u'comment', 'deleted_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='deleted_comments', null=True, to=orm['forum.User']), keep_default=False) + + # Adding field 'Comment.score' + db.add_column(u'comment', 'score', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False) + + # Adding field 'Comment.deleted_at' + db.add_column(u'comment', 'deleted_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False) + + # Deleting field 'Answer.locked_at' + db.delete_column(u'answer', 'locked_at') + + # Deleting field 'Answer.locked' + db.delete_column(u'answer', 'locked') + + # Deleting field 'Answer.locked_by' + db.delete_column(u'answer', 'locked_by_id') + + # Adding field 'Answer.accepted_by' + db.add_column(u'answer', 'accepted_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['forum.User'], null=True), keep_default=False) + + # Adding field 'FlaggedItem.canceled' + db.add_column(u'flagged_item', 'canceled', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True), keep_default=False) + + # Adding field 'FlaggedItem.reason' + db.add_column(u'flagged_item', 'reason', self.gf('django.db.models.fields.CharField')(max_length=300, null=True), keep_default=False) + + # Removing unique constraint on 'FlaggedItem', fields ['object_id', 'content_type', 'user'] + db.delete_unique(u'flagged_item', ['object_id', 'content_type_id', 'user_id']) + + # Adding unique constraint on 'FavoriteQuestion', fields ['question', 'user'] + db.create_unique(u'favorite_question', ['question_id', 'user_id']) + + # Deleting field 'User.gravatar' + db.delete_column('forum_user', 'gravatar') + + # Deleting field 'User.tag_filter_setting' + db.delete_column('forum_user', 'tag_filter_setting') + + # Deleting field 'Question.locked_at' + db.delete_column(u'question', 'locked_at') + + # Deleting field 'Question.locked' + db.delete_column(u'question', 'locked') + + # Deleting field 'Question.locked_by' + db.delete_column(u'question', 'locked_by_id') + + + def backwards(self, orm): + + # Deleting model 'LikedComment' + db.delete_table('forum_likedcomment') + + # Deleting field 'Repute.value' + db.delete_column(u'repute', 'value') + + # Deleting field 'Repute.user_previous_rep' + db.delete_column(u'repute', 'user_previous_rep') + + # Deleting field 'Vote.canceled' + db.delete_column(u'vote', 'canceled') + + # Adding unique constraint on 'Vote', fields ['object_id', 'content_type', 'user'] + db.create_unique(u'vote', ['object_id', 'content_type_id', 'user_id']) + + # Deleting field 'Comment.deleted' + db.delete_column(u'comment', 'deleted') + + # Deleting field 'Comment.deleted_by' + db.delete_column(u'comment', 'deleted_by_id') + + # Deleting field 'Comment.score' + db.delete_column(u'comment', 'score') + + # Deleting field 'Comment.deleted_at' + db.delete_column(u'comment', 'deleted_at') + + # Adding field 'Answer.locked_at' + db.add_column(u'answer', 'locked_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False) + + # Adding field 'Answer.locked' + db.add_column(u'answer', 'locked', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True), keep_default=False) + + # Adding field 'Answer.locked_by' + db.add_column(u'answer', 'locked_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='locked_answers', null=True, to=orm['forum.User'], blank=True), keep_default=False) + + # Deleting field 'Answer.accepted_by' + db.delete_column(u'answer', 'accepted_by_id') + + # Deleting field 'FlaggedItem.canceled' + db.delete_column(u'flagged_item', 'canceled') + + # Deleting field 'FlaggedItem.reason' + db.delete_column(u'flagged_item', 'reason') + + # Adding unique constraint on 'FlaggedItem', fields ['object_id', 'content_type', 'user'] + db.create_unique(u'flagged_item', ['object_id', 'content_type_id', 'user_id']) + + # Removing unique constraint on 'FavoriteQuestion', fields ['question', 'user'] + db.delete_unique(u'favorite_question', ['question_id', 'user_id']) + + # Adding field 'User.gravatar' + db.add_column('forum_user', 'gravatar', self.gf('django.db.models.fields.CharField')(default='', max_length=32), keep_default=False) + + # Adding field 'User.tag_filter_setting' + db.add_column('forum_user', 'tag_filter_setting', self.gf('django.db.models.fields.CharField')(default='ignored', max_length=16), keep_default=False) + + # Adding field 'Question.locked_at' + db.add_column(u'question', 'locked_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False) + + # Adding field 'Question.locked' + db.add_column(u'question', 'locked', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True), keep_default=False) + + # Adding field 'Question.locked_by' + db.add_column(u'question', 'locked_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='locked_questions', null=True, to=orm['forum.User'], blank=True), keep_default=False) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'forum.activity': { + 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"}, + 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.anonymousanswer': { + 'Meta': {'object_name': 'AnonymousAnswer'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['forum.Question']"}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.anonymousquestion': { + 'Meta': {'object_name': 'AnonymousQuestion'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.answer': { + 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"}, + 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'accepted_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.Question']"}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.answerrevision': { + 'Meta': {'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"}, + 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Answer']"}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'text': ('django.db.models.fields.TextField', [], {}) + }, + 'forum.authkeyuserassociation': { + 'Meta': {'object_name': 'AuthKeyUserAssociation'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_keys'", 'to': "orm['forum.User']"}) + }, + 'forum.award': { + 'Meta': {'unique_together': "(('content_type', 'object_id', 'user', 'badge'),)", 'object_name': 'Award', 'db_table': "u'award'"}, + 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['forum.Badge']"}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'awards'", 'to': "orm['forum.User']"}) + }, + 'forum.badge': { + 'Meta': {'unique_together': "(('name', 'type'),)", 'object_name': 'Badge', 'db_table': "u'badge'"}, + 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'through': "'Award'", 'to': "orm['forum.User']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'multiple': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}), + 'type': ('django.db.models.fields.SmallIntegerField', [], {}) + }, + 'forum.comment': { + 'Meta': {'object_name': 'Comment', 'db_table': "u'comment'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'comment': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_comments'", 'null': 'True', 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'liked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'comments_liked'", 'through': "'LikedComment'", 'to': "orm['forum.User']"}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['forum.User']"}) + }, + 'forum.favoritequestion': { + 'Meta': {'unique_together': "(('question', 'user'),)", 'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['forum.User']"}) + }, + 'forum.flaggeditem': { + 'Meta': {'object_name': 'FlaggedItem', 'db_table': "u'flagged_item'"}, + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'flagged_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'reason': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'flaggeditems'", 'to': "orm['forum.User']"}) + }, + 'forum.keyvalue': { + 'Meta': {'object_name': 'KeyValue'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'value': ('forum.models.utils.PickledObjectField', [], {}) + }, + 'forum.likedcomment': { + 'Meta': {'object_name': 'LikedComment'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'comment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Comment']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.markedtag': { + 'Meta': {'object_name': 'MarkedTag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['forum.Tag']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['forum.User']"}) + }, + 'forum.question': { + 'Meta': {'object_name': 'Question', 'db_table': "u'question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['forum.User']"}), + 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'through': "'FavoriteQuestion'", 'to': "orm['forum.User']"}), + 'favourite_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['forum.User']"}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'subscriptions'", 'through': "'QuestionSubscription'", 'to': "orm['forum.User']"}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'to': "orm['forum.Tag']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'view_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.questionrevision': { + 'Meta': {'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Question']"}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}) + }, + 'forum.questionsubscription': { + 'Meta': {'object_name': 'QuestionSubscription'}, + 'auto_subscription': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_view': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 6, 11, 11, 44, 616000)'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.repute': { + 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'negative': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'positive': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'reputation': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'reputes'", 'to': "orm['forum.User']"}), + 'user_previous_rep': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'value': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}) + }, + 'forum.subscriptionsettings': { + 'Meta': {'object_name': 'SubscriptionSettings'}, + 'all_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'all_questions_watched_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'enable_notifications': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'member_joins': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}), + 'new_question': ('django.db.models.fields.CharField', [], {'default': "'d'", 'max_length': '1'}), + 'new_question_watched_tags': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'notify_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_answers': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_comments': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_comments_own_post': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_reply_to_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_answered': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_asked': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_commented': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'questions_viewed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'subscribed_questions': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'subscription_settings'", 'unique': 'True', 'to': "orm['forum.User']"}) + }, + 'forum.tag': { + 'Meta': {'object_name': 'Tag', 'db_table': "u'tag'"}, + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['forum.User']"}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'marked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'marked_tags'", 'through': "'MarkedTag'", 'to': "orm['forum.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + 'forum.user': { + 'Meta': {'object_name': 'User', '_ormbases': ['auth.User']}, + 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'hide_ignored_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}), + 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'forum.validationhash': { + 'Meta': {'unique_together': "(('user', 'type'),)", 'object_name': 'ValidationHash'}, + 'expiration': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 7, 11, 11, 52, 402000)'}), + 'hash_code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'seed': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.vote': { + 'Meta': {'object_name': 'Vote', 'db_table': "u'vote'"}, + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['forum.User']"}), + 'vote': ('django.db.models.fields.SmallIntegerField', [], {}), + 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}) + } + } + + complete_apps = ['forum'] diff --git a/forum/migrations/0003_repute_changes.py b/forum/migrations/0003_repute_changes.py new file mode 100644 index 0000000..cdcbd22 --- /dev/null +++ b/forum/migrations/0003_repute_changes.py @@ -0,0 +1,355 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + for r in orm.Repute.objects.all(): + r.value = r.positive + r.negative + r.user_previous_rep = r.reputation - r.value + r.save() + + + def backwards(self, orm): + for r in orm.Repute.objects.all(): + if r.value > 0: + r.positive = r.value + r.negative = 0 + else: + r.positive = 0 + r.negative = r.value + + r.reputation = r.user_previous_rep + r.value + r.save() + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'forum.activity': { + 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"}, + 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.anonymousanswer': { + 'Meta': {'object_name': 'AnonymousAnswer'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['forum.Question']"}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.anonymousquestion': { + 'Meta': {'object_name': 'AnonymousQuestion'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.answer': { + 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"}, + 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'accepted_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.Question']"}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.answerrevision': { + 'Meta': {'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"}, + 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Answer']"}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'text': ('django.db.models.fields.TextField', [], {}) + }, + 'forum.authkeyuserassociation': { + 'Meta': {'object_name': 'AuthKeyUserAssociation'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_keys'", 'to': "orm['forum.User']"}) + }, + 'forum.award': { + 'Meta': {'unique_together': "(('content_type', 'object_id', 'user', 'badge'),)", 'object_name': 'Award', 'db_table': "u'award'"}, + 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['forum.Badge']"}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'awards'", 'to': "orm['forum.User']"}) + }, + 'forum.badge': { + 'Meta': {'unique_together': "(('name', 'type'),)", 'object_name': 'Badge', 'db_table': "u'badge'"}, + 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'through': "'Award'", 'to': "orm['forum.User']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'multiple': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}), + 'type': ('django.db.models.fields.SmallIntegerField', [], {}) + }, + 'forum.comment': { + 'Meta': {'object_name': 'Comment', 'db_table': "u'comment'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'comment': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_comments'", 'null': 'True', 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'liked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'comments_liked'", 'through': "'LikedComment'", 'to': "orm['forum.User']"}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['forum.User']"}) + }, + 'forum.favoritequestion': { + 'Meta': {'unique_together': "(('question', 'user'),)", 'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['forum.User']"}) + }, + 'forum.flaggeditem': { + 'Meta': {'object_name': 'FlaggedItem', 'db_table': "u'flagged_item'"}, + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'flagged_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'reason': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'flaggeditems'", 'to': "orm['forum.User']"}) + }, + 'forum.keyvalue': { + 'Meta': {'object_name': 'KeyValue'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'value': ('forum.models.utils.PickledObjectField', [], {}) + }, + 'forum.likedcomment': { + 'Meta': {'object_name': 'LikedComment'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'comment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Comment']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.markedtag': { + 'Meta': {'object_name': 'MarkedTag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['forum.Tag']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['forum.User']"}) + }, + 'forum.question': { + 'Meta': {'object_name': 'Question', 'db_table': "u'question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['forum.User']"}), + 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'through': "'FavoriteQuestion'", 'to': "orm['forum.User']"}), + 'favourite_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['forum.User']"}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'subscriptions'", 'through': "'QuestionSubscription'", 'to': "orm['forum.User']"}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'to': "orm['forum.Tag']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'view_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.questionrevision': { + 'Meta': {'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Question']"}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}) + }, + 'forum.questionsubscription': { + 'Meta': {'object_name': 'QuestionSubscription'}, + 'auto_subscription': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_view': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 6, 11, 30, 3, 497000)'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.repute': { + 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'negative': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'positive': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'reputation': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'reputes'", 'to': "orm['forum.User']"}), + 'user_previous_rep': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'value': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}) + }, + 'forum.subscriptionsettings': { + 'Meta': {'object_name': 'SubscriptionSettings'}, + 'all_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'all_questions_watched_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'enable_notifications': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'member_joins': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}), + 'new_question': ('django.db.models.fields.CharField', [], {'default': "'d'", 'max_length': '1'}), + 'new_question_watched_tags': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'notify_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_answers': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_comments': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_comments_own_post': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_reply_to_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_answered': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_asked': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_commented': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'questions_viewed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'subscribed_questions': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'subscription_settings'", 'unique': 'True', 'to': "orm['forum.User']"}) + }, + 'forum.tag': { + 'Meta': {'object_name': 'Tag', 'db_table': "u'tag'"}, + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['forum.User']"}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'marked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'marked_tags'", 'through': "'MarkedTag'", 'to': "orm['forum.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + 'forum.user': { + 'Meta': {'object_name': 'User', '_ormbases': ['auth.User']}, + 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'hide_ignored_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}), + 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'forum.validationhash': { + 'Meta': {'unique_together': "(('user', 'type'),)", 'object_name': 'ValidationHash'}, + 'expiration': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 7, 11, 30, 3, 573000)'}), + 'hash_code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'seed': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.vote': { + 'Meta': {'object_name': 'Vote', 'db_table': "u'vote'"}, + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['forum.User']"}), + 'vote': ('django.db.models.fields.SmallIntegerField', [], {}), + 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}) + } + } + + complete_apps = ['forum'] diff --git a/forum/migrations/0004_auto__del_field_repute_negative__del_field_repute_positive__del_field_.py b/forum/migrations/0004_auto__del_field_repute_negative__del_field_repute_positive__del_field_.py new file mode 100644 index 0000000..5faa7b0 --- /dev/null +++ b/forum/migrations/0004_auto__del_field_repute_negative__del_field_repute_positive__del_field_.py @@ -0,0 +1,357 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Deleting field 'Repute.negative' + db.delete_column(u'repute', 'negative') + + # Deleting field 'Repute.positive' + db.delete_column(u'repute', 'positive') + + # Deleting field 'Repute.reputation' + db.delete_column(u'repute', 'reputation') + + + def backwards(self, orm): + + # Adding field 'Repute.negative' + db.add_column(u'repute', 'negative', self.gf('django.db.models.fields.SmallIntegerField')(default=0), keep_default=False) + + # Adding field 'Repute.positive' + db.add_column(u'repute', 'positive', self.gf('django.db.models.fields.SmallIntegerField')(default=0), keep_default=False) + + # Adding field 'Repute.reputation' + db.add_column(u'repute', 'reputation', self.gf('django.db.models.fields.IntegerField')(default=1), keep_default=False) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'forum.activity': { + 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"}, + 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.anonymousanswer': { + 'Meta': {'object_name': 'AnonymousAnswer'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['forum.Question']"}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.anonymousquestion': { + 'Meta': {'object_name': 'AnonymousQuestion'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.answer': { + 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"}, + 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'accepted_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.Question']"}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.answerrevision': { + 'Meta': {'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"}, + 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Answer']"}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'text': ('django.db.models.fields.TextField', [], {}) + }, + 'forum.authkeyuserassociation': { + 'Meta': {'object_name': 'AuthKeyUserAssociation'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_keys'", 'to': "orm['forum.User']"}) + }, + 'forum.award': { + 'Meta': {'unique_together': "(('content_type', 'object_id', 'user', 'badge'),)", 'object_name': 'Award', 'db_table': "u'award'"}, + 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['forum.Badge']"}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'awards'", 'to': "orm['forum.User']"}) + }, + 'forum.badge': { + 'Meta': {'unique_together': "(('name', 'type'),)", 'object_name': 'Badge', 'db_table': "u'badge'"}, + 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'through': "'Award'", 'to': "orm['forum.User']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'multiple': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}), + 'type': ('django.db.models.fields.SmallIntegerField', [], {}) + }, + 'forum.comment': { + 'Meta': {'object_name': 'Comment', 'db_table': "u'comment'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'comment': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_comments'", 'null': 'True', 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'liked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'comments_liked'", 'through': "'LikedComment'", 'to': "orm['forum.User']"}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['forum.User']"}) + }, + 'forum.favoritequestion': { + 'Meta': {'unique_together': "(('question', 'user'),)", 'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['forum.User']"}) + }, + 'forum.flaggeditem': { + 'Meta': {'object_name': 'FlaggedItem', 'db_table': "u'flagged_item'"}, + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'flagged_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'reason': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'flaggeditems'", 'to': "orm['forum.User']"}) + }, + 'forum.keyvalue': { + 'Meta': {'object_name': 'KeyValue'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'value': ('forum.models.utils.PickledObjectField', [], {}) + }, + 'forum.likedcomment': { + 'Meta': {'object_name': 'LikedComment'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'comment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Comment']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.markedtag': { + 'Meta': {'object_name': 'MarkedTag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['forum.Tag']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['forum.User']"}) + }, + 'forum.question': { + 'Meta': {'object_name': 'Question', 'db_table': "u'question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['forum.User']"}), + 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'through': "'FavoriteQuestion'", 'to': "orm['forum.User']"}), + 'favourite_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['forum.User']"}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'subscriptions'", 'through': "'QuestionSubscription'", 'to': "orm['forum.User']"}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'to': "orm['forum.Tag']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'view_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.questionrevision': { + 'Meta': {'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Question']"}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}) + }, + 'forum.questionsubscription': { + 'Meta': {'object_name': 'QuestionSubscription'}, + 'auto_subscription': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_view': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 6, 11, 40, 26, 816000)'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.repute': { + 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'reputes'", 'to': "orm['forum.User']"}), + 'user_previous_rep': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'value': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}) + }, + 'forum.subscriptionsettings': { + 'Meta': {'object_name': 'SubscriptionSettings'}, + 'all_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'all_questions_watched_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'enable_notifications': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'member_joins': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}), + 'new_question': ('django.db.models.fields.CharField', [], {'default': "'d'", 'max_length': '1'}), + 'new_question_watched_tags': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'notify_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_answers': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_comments': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_comments_own_post': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_reply_to_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_answered': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_asked': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_commented': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'questions_viewed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'subscribed_questions': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'subscription_settings'", 'unique': 'True', 'to': "orm['forum.User']"}) + }, + 'forum.tag': { + 'Meta': {'object_name': 'Tag', 'db_table': "u'tag'"}, + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['forum.User']"}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'marked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'marked_tags'", 'through': "'MarkedTag'", 'to': "orm['forum.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + 'forum.user': { + 'Meta': {'object_name': 'User', '_ormbases': ['auth.User']}, + 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'hide_ignored_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}), + 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'forum.validationhash': { + 'Meta': {'unique_together': "(('user', 'type'),)", 'object_name': 'ValidationHash'}, + 'expiration': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 7, 11, 40, 27, 72000)'}), + 'hash_code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'seed': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.vote': { + 'Meta': {'object_name': 'Vote', 'db_table': "u'vote'"}, + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['forum.User']"}), + 'vote': ('django.db.models.fields.SmallIntegerField', [], {}), + 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}) + } + } + + complete_apps = ['forum'] diff --git a/forum/migrations/0005_fill_accepted_by_field.py b/forum/migrations/0005_fill_accepted_by_field.py new file mode 100644 index 0000000..cc7d0b0 --- /dev/null +++ b/forum/migrations/0005_fill_accepted_by_field.py @@ -0,0 +1,341 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + for a in orm.Answer.objects.filter(accepted=True): + a.accepted_by = a.question.author + a.save() + + def backwards(self, orm): + "Write your backwards methods here." + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'forum.activity': { + 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"}, + 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.anonymousanswer': { + 'Meta': {'object_name': 'AnonymousAnswer'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['forum.Question']"}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.anonymousquestion': { + 'Meta': {'object_name': 'AnonymousQuestion'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}), + 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) + }, + 'forum.answer': { + 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"}, + 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'accepted_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}), + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['forum.Question']"}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.answerrevision': { + 'Meta': {'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"}, + 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Answer']"}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'text': ('django.db.models.fields.TextField', [], {}) + }, + 'forum.authkeyuserassociation': { + 'Meta': {'object_name': 'AuthKeyUserAssociation'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_keys'", 'to': "orm['forum.User']"}) + }, + 'forum.award': { + 'Meta': {'unique_together': "(('content_type', 'object_id', 'user', 'badge'),)", 'object_name': 'Award', 'db_table': "u'award'"}, + 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['forum.Badge']"}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'awards'", 'to': "orm['forum.User']"}) + }, + 'forum.badge': { + 'Meta': {'unique_together': "(('name', 'type'),)", 'object_name': 'Badge', 'db_table': "u'badge'"}, + 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'through': "'Award'", 'to': "orm['forum.User']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'multiple': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}), + 'type': ('django.db.models.fields.SmallIntegerField', [], {}) + }, + 'forum.comment': { + 'Meta': {'object_name': 'Comment', 'db_table': "u'comment'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'comment': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_comments'", 'null': 'True', 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'liked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'comments_liked'", 'through': "'LikedComment'", 'to': "orm['forum.User']"}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['forum.User']"}) + }, + 'forum.favoritequestion': { + 'Meta': {'unique_together': "(('question', 'user'),)", 'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['forum.User']"}) + }, + 'forum.flaggeditem': { + 'Meta': {'object_name': 'FlaggedItem', 'db_table': "u'flagged_item'"}, + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'flagged_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'reason': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'flaggeditems'", 'to': "orm['forum.User']"}) + }, + 'forum.keyvalue': { + 'Meta': {'object_name': 'KeyValue'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'value': ('forum.models.utils.PickledObjectField', [], {}) + }, + 'forum.likedcomment': { + 'Meta': {'object_name': 'LikedComment'}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'comment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Comment']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.markedtag': { + 'Meta': {'object_name': 'MarkedTag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['forum.Tag']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['forum.User']"}) + }, + 'forum.question': { + 'Meta': {'object_name': 'Question', 'db_table': "u'question'"}, + 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['forum.User']"}), + 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'through': "'FavoriteQuestion'", 'to': "orm['forum.User']"}), + 'favourite_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'to': "orm['forum.User']"}), + 'html': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['forum.User']"}), + 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['forum.User']"}), + 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'subscriptions'", 'through': "'QuestionSubscription'", 'to': "orm['forum.User']"}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'to': "orm['forum.Tag']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}), + 'view_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'forum.questionrevision': { + 'Meta': {'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Question']"}), + 'revised_at': ('django.db.models.fields.DateTimeField', [], {}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}), + 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}) + }, + 'forum.questionsubscription': { + 'Meta': {'object_name': 'QuestionSubscription'}, + 'auto_subscription': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_view': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 6, 11, 46, 14, 452000)'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.repute': { + 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}), + 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}), + 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'reputes'", 'to': "orm['forum.User']"}), + 'user_previous_rep': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'value': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}) + }, + 'forum.subscriptionsettings': { + 'Meta': {'object_name': 'SubscriptionSettings'}, + 'all_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'all_questions_watched_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'enable_notifications': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'member_joins': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}), + 'new_question': ('django.db.models.fields.CharField', [], {'default': "'d'", 'max_length': '1'}), + 'new_question_watched_tags': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'notify_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_answers': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_comments': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'notify_comments_own_post': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'notify_reply_to_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_answered': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_asked': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'questions_commented': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'questions_viewed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'subscribed_questions': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'subscription_settings'", 'unique': 'True', 'to': "orm['forum.User']"}) + }, + 'forum.tag': { + 'Meta': {'object_name': 'Tag', 'db_table': "u'tag'"}, + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['forum.User']"}), + 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['forum.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'marked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'marked_tags'", 'through': "'MarkedTag'", 'to': "orm['forum.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + 'forum.user': { + 'Meta': {'object_name': 'User', '_ormbases': ['auth.User']}, + 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'hide_ignored_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}), + 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}), + 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'forum.validationhash': { + 'Meta': {'unique_together': "(('user', 'type'),)", 'object_name': 'ValidationHash'}, + 'expiration': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 7, 11, 46, 14, 538000)'}), + 'hash_code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'seed': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '12'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"}) + }, + 'forum.vote': { + 'Meta': {'object_name': 'Vote', 'db_table': "u'vote'"}, + 'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['forum.User']"}), + 'vote': ('django.db.models.fields.SmallIntegerField', [], {}), + 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}) + } + } + + complete_apps = ['forum'] diff --git a/forum/migrations/__init__.py b/forum/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/forum/models/__init__.py b/forum/models/__init__.py new file mode 100644 index 0000000..ef1e84b --- /dev/null +++ b/forum/models/__init__.py @@ -0,0 +1,38 @@ +from question import Question ,QuestionRevision, AnonymousQuestion, FavoriteQuestion, QuestionSubscription +from answer import Answer, AnonymousAnswer, AnswerRevision +from tag import Tag, MarkedTag +from meta import Vote, Comment, FlaggedItem, LikedComment +from user import User, Activity, ValidationHash, AuthKeyUserAssociation, SubscriptionSettings +from repute import Badge, Award, Repute +from utils import KeyValue + +try: + from south.modelsinspector import add_introspection_rules + add_introspection_rules([], [r"^forum\.models\.utils\.\w+"]) +except: + pass + +from base import * + +def is_new(sender, instance, **kwargs): + try: + instance._is_new = not bool(instance.id) + except: + pass + +pre_save.connect(is_new) + +__all__ = [ + 'Question', 'QuestionRevision', 'FavoriteQuestion', 'AnonymousQuestion', 'QuestionSubscription', + 'Answer', 'AnswerRevision', 'AnonymousAnswer', + 'Tag', 'Comment', 'Vote', 'FlaggedItem', 'MarkedTag', 'LikedComment', 'Badge', 'Award', 'Repute', + 'Activity', 'ValidationHash', 'AuthKeyUserAssociation', 'SubscriptionSettings', 'KeyValue', 'User', + ] + + +from forum.modules import get_modules_script_classes + +for k, v in get_modules_script_classes('models', models.Model).items(): + if not k in __all__: + __all__.append(k) + exec "%s = v" % k diff --git a/forum/models/answer.py b/forum/models/answer.py new file mode 100644 index 0000000..85d671a --- /dev/null +++ b/forum/models/answer.py @@ -0,0 +1,132 @@ +from base import * + +from question import Question + +class AnswerManager(CachedManager): + def create_new(self, question=None, author=None, added_at=None, wiki=False, text='', email_notify=False): + answer = Answer( + question = question, + author = author, + added_at = added_at, + wiki = wiki, + html = text + ) + if answer.wiki: + answer.last_edited_by = answer.author + answer.last_edited_at = added_at + answer.wikified_at = added_at + + answer.save() + + #update question data + question.last_activity_at = added_at + question.last_activity_by = author + question.save() + + AnswerRevision.objects.create( + answer = answer, + revision = 1, + author = author, + revised_at = added_at, + summary = CONST['default_version'], + text = text + ) + + +class Answer(Content): + question = models.ForeignKey('Question', related_name='answers') + accepted = models.BooleanField(default=False) + accepted_at = models.DateTimeField(null=True, blank=True) + accepted_by = models.ForeignKey(User, null=True) + + + objects = AnswerManager() + + class Meta(Content.Meta): + db_table = u'answer' + + def mark_accepted(self, user): + if not self.accepted and not self.question.answer_accepted: + self.accepted = True + self.accepted_at = datetime.datetime.now() + self.accepted_by = user + self.save() + self.question.answer_accepted = True + self.question.save() + return True + + return False + + def unmark_accepted(self): + if self.accepted: + self.accepted = False + self.save() + self.question.answer_accepted = False + self.question.save() + return True + + return False + + def _update_question_answer_count(self, diff): + self.question.answer_count = self.question.answer_count + diff + self.question.save() + + def mark_deleted(self, user): + if super(Answer, self).mark_deleted(user): + self._update_question_answer_count(-1) + + def unmark_deleted(self): + if super(Answer, self).unmark_deleted(): + self._update_question_answer_count(1) + + def get_latest_revision(self): + return self.revisions.all()[0] + + def get_question_title(self): + return self.question.title + + def get_absolute_url(self): + return '%s#%s' % (self.question.get_absolute_url(), self.id) + + def save(self, *args, **kwargs): + super(Answer, self).save(*args, **kwargs) + + if self._is_new: + self._update_question_answer_count(1) + + def __unicode__(self): + return self.html + + +class AnswerRevision(ContentRevision): + """A revision of an Answer.""" + answer = models.ForeignKey('Answer', related_name='revisions') + + def get_absolute_url(self): + return reverse('answer_revisions', kwargs={'id':self.answer.id}) + + def get_question_title(self): + return self.answer.question.title + + class Meta(ContentRevision.Meta): + db_table = u'answer_revision' + ordering = ('-revision',) + + def save(self, *args, **kwargs): + """Looks up the next available revision number if not set.""" + if not self.revision: + self.revision = AnswerRevision.objects.filter( + answer=self.answer).values_list('revision', + flat=True)[0] + 1 + super(AnswerRevision, self).save(*args, **kwargs) + +class AnonymousAnswer(AnonymousContent): + question = models.ForeignKey('Question', related_name='anonymous_answers') + + def publish(self,user): + added_at = datetime.datetime.now() + #print user.id + Answer.objects.create_new(question=self.question,wiki=self.wiki, + added_at=added_at,text=self.text, + author=user) + self.delete() diff --git a/forum/models/base.py b/forum/models/base.py new file mode 100644 index 0000000..63ab1eb --- /dev/null +++ b/forum/models/base.py @@ -0,0 +1,234 @@ +import datetime +import hashlib +from urllib import quote_plus, urlencode +from django.db import models, IntegrityError, connection, transaction +from django.utils.http import urlquote as django_urlquote +from django.utils.html import strip_tags +from django.core.urlresolvers import reverse +from django.contrib.contenttypes import generic +from django.contrib.contenttypes.models import ContentType +from django.core.cache import cache +from django.template.defaultfilters import slugify +from django.db.models.signals import post_delete, post_save, pre_save, pre_delete +from django.utils.translation import ugettext as _ +from django.utils.safestring import mark_safe +from django.contrib.sitemaps import ping_google +import django.dispatch +from django.conf import settings +from forum import const +import logging + +from forum.const import * + +class CachedManager(models.Manager): + use_for_related_fields = True + + def get(self, *args, **kwargs): + try: + pk = [v for (k,v) in kwargs.items() if k in ('pk', 'pk__exact', 'id', 'id__exact') or k.endswith('_ptr__pk')][0] + except: + pk = None + + if pk is not None: + key = self.model.cache_key(pk) + obj = cache.get(key) + + if obj is None: + obj = super(CachedManager, self).get(*args, **kwargs) + cache.set(key, obj, 60 * 60) + + return obj + + return super(CachedManager, self).get(*args, **kwargs) + + def get_or_create(self, *args, **kwargs): + try: + return self.get(*args, **kwargs) + except: + return super(CachedManager, self).get_or_create(*args, **kwargs) + + +class BaseModel(models.Model): + objects = CachedManager() + + class Meta: + abstract = True + app_label = 'forum' + + def __init__(self, *args, **kwargs): + super(BaseModel, self).__init__(*args, **kwargs) + self._original_state = dict([(k, v) for k,v in self.__dict__.items() if not k in kwargs]) + + @classmethod + def cache_key(cls, pk): + return '%s.%s:%s' % (settings.APP_URL, cls.__name__, pk) + + def get_dirty_fields(self): + missing = object() + return dict([(k, self._original_state.get(k, None)) for k,v in self.__dict__.items() + if self._original_state.get(k, missing) == missing or self._original_state[k] != v]) + + def save(self, *args, **kwargs): + super(BaseModel, self).save(*args, **kwargs) + self._original_state = dict(self.__dict__) + cache.set(self.cache_key(self.pk), self, 86400) + + def delete(self): + cache.delete(self.cache_key(self.pk)) + super(BaseModel, self).delete() + + +class ActiveObjectManager(models.Manager): + def get_query_set(self): + return super(ActiveObjectManager, self).get_query_set().filter(canceled=False) + +class UndeletedObjectManager(models.Manager): + def get_query_set(self): + return super(UndeletedObjectManager, self).get_query_set().filter(deleted=False) + +class MetaContent(BaseModel): + """ + Base class for Vote, Comment and FlaggedItem + """ + content_type = models.ForeignKey(ContentType) + object_id = models.PositiveIntegerField() + content_object = generic.GenericForeignKey('content_type', 'object_id') + + class Meta: + abstract = True + app_label = 'forum' + +from user import User + +class UserContent(models.Model): + user = models.ForeignKey(User, related_name='%(class)ss') + + class Meta: + abstract = True + app_label = 'forum' + + +marked_deleted = django.dispatch.Signal(providing_args=["instance", "deleted_by"]) + +class DeletableContent(models.Model): + deleted = models.BooleanField(default=False) + deleted_at = models.DateTimeField(null=True, blank=True) + deleted_by = models.ForeignKey(User, null=True, blank=True, related_name='deleted_%(class)ss') + + active = UndeletedObjectManager() + + class Meta: + abstract = True + app_label = 'forum' + + def mark_deleted(self, user): + if not self.deleted: + self.deleted = True + self.deleted_at = datetime.datetime.now() + self.deleted_by = user + self.save() + marked_deleted.send(sender=self.__class__, instance=self, deleted_by=user) + return True + else: + return False + + def unmark_deleted(self): + if self.deleted: + self.deleted = False + self.save() + return True + else: + return False + + +class ContentRevision(models.Model): + """ + Base class for QuestionRevision and AnswerRevision + """ + revision = models.PositiveIntegerField() + author = models.ForeignKey(User, related_name='%(class)ss') + revised_at = models.DateTimeField() + summary = models.CharField(max_length=300, blank=True) + text = models.TextField() + + class Meta: + abstract = True + app_label = 'forum' + + +class AnonymousContent(models.Model): + """ + Base class for AnonymousQuestion and AnonymousAnswer + """ + session_key = models.CharField(max_length=40) #session id for anonymous questions + wiki = models.BooleanField(default=False) + added_at = models.DateTimeField(default=datetime.datetime.now) + ip_addr = models.IPAddressField(max_length=21) #allow high port numbers + author = models.ForeignKey(User,null=True) + text = models.TextField() + summary = models.CharField(max_length=180) + + class Meta: + abstract = True + app_label = 'forum' + + +from meta import Comment, Vote, FlaggedItem +from user import activity_record + +class Content(BaseModel, DeletableContent): + """ + Base class for Question and Answer + """ + author = models.ForeignKey(User, related_name='%(class)ss') + added_at = models.DateTimeField(default=datetime.datetime.now) + + wiki = models.BooleanField(default=False) + wikified_at = models.DateTimeField(null=True, blank=True) + + #locked = models.BooleanField(default=False) + #locked_by = models.ForeignKey(User, null=True, blank=True, related_name='locked_%(class)ss') + #locked_at = models.DateTimeField(null=True, blank=True) + + score = models.IntegerField(default=0) + vote_up_count = models.IntegerField(default=0) + vote_down_count = models.IntegerField(default=0) + + comment_count = models.PositiveIntegerField(default=0) + offensive_flag_count = models.SmallIntegerField(default=0) + + last_edited_at = models.DateTimeField(null=True, blank=True) + last_edited_by = models.ForeignKey(User, null=True, blank=True, related_name='last_edited_%(class)ss') + + html = models.TextField() + comments = generic.GenericRelation(Comment) + votes = generic.GenericRelation(Vote) + flagged_items = generic.GenericRelation(FlaggedItem) + + class Meta: + abstract = True + app_label = 'forum' + + def save(self, *args, **kwargs): + self.__dict__['score'] = self.__dict__['vote_up_count'] - self.__dict__['vote_down_count'] + super(Content,self).save(*args, **kwargs) + + try: + ping_google() + except Exception: + logging.debug('problem pinging google did you register you sitemap with google?') + + + def post_get_last_update_info(self): + when = self.added_at + who = self.author + if self.last_edited_at and self.last_edited_at > when: + when = self.last_edited_at + who = self.last_edited_by + comments = self.comments.all() + if len(comments) > 0: + for c in comments: + if c.added_at > when: + when = c.added_at + who = c.user + return when, who \ No newline at end of file diff --git a/forum/models/meta.py b/forum/models/meta.py new file mode 100644 index 0000000..baf9a0e --- /dev/null +++ b/forum/models/meta.py @@ -0,0 +1,152 @@ +from base import * +import re + +class Vote(MetaContent, UserContent): + VOTE_UP = +1 + VOTE_DOWN = -1 + VOTE_CHOICES = ( + (VOTE_UP, u'Up'), + (VOTE_DOWN, u'Down'), + ) + + vote = models.SmallIntegerField(choices=VOTE_CHOICES) + voted_at = models.DateTimeField(default=datetime.datetime.now) + canceled = models.BooleanField(default=False) + + active = ActiveObjectManager() + + class Meta(MetaContent.Meta): + db_table = u'vote' + + def __unicode__(self): + return '[%s] voted at %s: %s' %(self.user, self.voted_at, self.vote) + + def _update_post_vote_count(self, diff): + post = self.content_object + field = self.vote == 1 and 'vote_up_count' or 'vote_down_count' + post.__dict__[field] = post.__dict__[field] + diff + post.save() + + def save(self, *args, **kwargs): + super(Vote, self).save(*args, **kwargs) + if self._is_new: + self._update_post_vote_count(1) + + def cancel(self): + if not self.canceled: + self.canceled = True + self.save() + self._update_post_vote_count(-1) + vote_canceled.send(sender=Vote, instance=self) + + def is_upvote(self): + return self.vote == self.VOTE_UP + + def is_downvote(self): + return self.vote == self.VOTE_DOWN + +vote_canceled = django.dispatch.Signal(providing_args=['instance']) + +class FlaggedItem(MetaContent, UserContent): + """A flag on a Question or Answer indicating offensive content.""" + flagged_at = models.DateTimeField(default=datetime.datetime.now) + reason = models.CharField(max_length=300, null=True) + canceled = models.BooleanField(default=False) + + active = ActiveObjectManager() + + class Meta(MetaContent.Meta): + db_table = u'flagged_item' + + def __unicode__(self): + return '[%s] flagged at %s' %(self.user, self.flagged_at) + + def _update_post_flag_count(self, diff): + post = self.content_object + post.offensive_flag_count = post.offensive_flag_count + diff + post.save() + + def save(self, *args, **kwargs): + super(FlaggedItem, self).save(*args, **kwargs) + if self._is_new: + self._update_post_flag_count(1) + + def cancel(self): + if not self.canceled: + self.canceled = True + self.save() + self._update_post_flag_count(-1) + + +class Comment(MetaContent, UserContent, DeletableContent): + comment = models.CharField(max_length=300) + added_at = models.DateTimeField(default=datetime.datetime.now) + score = models.IntegerField(default=0) + liked_by = models.ManyToManyField(User, through='LikedComment', related_name='comments_liked') + + class Meta(MetaContent.Meta): + ordering = ('-added_at',) + db_table = u'comment' + + def _update_post_comment_count(self, diff): + post = self.content_object + post.comment_count = post.comment_count + diff + post.save() + + def save(self, *args, **kwargs): + super(Comment,self).save(*args, **kwargs) + + if self._is_new: + self._update_post_comment_count(1) + + try: + ping_google() + except Exception: + logging.debug('problem pinging google did you register you sitemap with google?') + + def mark_deleted(self, user): + if super(Comment, self).mark_deleted(user): + self._update_post_comment_count(-1) + + def unmark_deleted(self): + if super(Comment, self).unmark_deleted(): + self._update_post_comment_count(1) + + def is_reply_to(self, user): + inreply = re.search('@\w+', self.comment) + if inreply is not None: + return user.username.startswith(inreply[1:]) + + return False + + def __unicode__(self): + return self.comment + + +class LikedComment(models.Model): + comment = models.ForeignKey(Comment) + user = models.ForeignKey(User) + added_at = models.DateTimeField(default=datetime.datetime.now) + canceled = models.BooleanField(default=False) + + active = ActiveObjectManager() + + class Meta: + app_label = 'forum' + + def _update_comment_score(self, diff): + self.comment.score = self.comment.score + diff + self.comment.save() + + def save(self, *args, **kwargs): + super(LikedComment, self).save(*args, **kwargs) + if self._is_new: + self._update_comment_score(1) + + def cancel(self): + if not self.canceled: + self.canceled = True + self.save() + self._update_comment_score(-1) + + diff --git a/forum/models/question.py b/forum/models/question.py new file mode 100644 index 0000000..90bbdff --- /dev/null +++ b/forum/models/question.py @@ -0,0 +1,260 @@ +from base import * +from tag import Tag + +class QuestionManager(CachedManager): + def create_new(self, title=None,author=None,added_at=None, wiki=False,tagnames=None,summary=None, text=None): + + question = Question( + title = title, + author = author, + added_at = added_at, + last_activity_at = added_at, + last_activity_by = author, + wiki = wiki, + tagnames = tagnames, + html = text, + summary = summary + ) + if question.wiki: + question.last_edited_by = question.author + question.last_edited_at = added_at + question.wikified_at = added_at + + question.save() + + # create the first revision + QuestionRevision.objects.create( + question = question, + revision = 1, + title = question.title, + author = author, + revised_at = added_at, + tagnames = question.tagnames, + summary = CONST['default_version'], + text = text + ) + return question + +question_view = django.dispatch.Signal(providing_args=['instance', 'user']) + +class Question(Content): + title = models.CharField(max_length=300) + tags = models.ManyToManyField(Tag, related_name='questions') + answer_accepted = models.BooleanField(default=False) + closed = models.BooleanField(default=False) + closed_by = models.ForeignKey(User, null=True, blank=True, related_name='closed_questions') + closed_at = models.DateTimeField(null=True, blank=True) + close_reason = models.SmallIntegerField(choices=CLOSE_REASONS, null=True, blank=True) + followed_by = models.ManyToManyField(User, related_name='followed_questions') + subscribers = models.ManyToManyField(User, related_name='subscriptions', through='QuestionSubscription') + + # Denormalised data + answer_count = models.PositiveIntegerField(default=0) + view_count = models.IntegerField(default=0) + favourite_count = models.IntegerField(default=0) + last_activity_at = models.DateTimeField(default=datetime.datetime.now) + last_activity_by = models.ForeignKey(User, related_name='last_active_in_questions') + tagnames = models.CharField(max_length=125) + summary = models.CharField(max_length=180) + + favorited_by = models.ManyToManyField(User, through='FavoriteQuestion', related_name='favorite_questions') + + objects = QuestionManager() + + class Meta(Content.Meta): + db_table = u'question' + + def delete(self): + super(Question, self).delete() + try: + ping_google() + except Exception: + logging.debug('problem pinging google did you register you sitemap with google?') + + def get_tag_list_if_changed(self): + dirty = self.get_dirty_fields() + + if 'tagnames' in dirty: + new_tags = self.tagname_list() + + old_tags = dirty['tagnames'] + if old_tags is None: + old_tags = [] + else: + old_tags = [name for name in dirty['tagnames'].split(u' ')] + + tag_list = [] + + for name in new_tags: + try: + tag = Tag.objects.get(name=name) + except: + tag = Tag.objects.create(name=name, created_by=self.last_edited_by or self.author) + + tag_list.append(tag) + + if not name in old_tags: + tag.used_count = tag.used_count + 1 + if tag.deleted: + tag.unmark_deleted() + tag.save() + + for name in [n for n in old_tags if not n in new_tags]: + tag = Tag.objects.get(name=name) + tag.used_count = tag.used_count - 1 + if tag.used_count == 0: + tag.mark_deleted(self.last_edited_by or self.author) + tag.save() + + return tag_list + + return None + + def save(self, *args, **kwargs): + tags = self.get_tag_list_if_changed() + super(Question, self).save(*args, **kwargs) + if not tags is None: self.tags = tags + + def tagname_list(self): + """Creates a list of Tag names from the ``tagnames`` attribute.""" + return [name for name in self.tagnames.split(u' ')] + + def tagname_meta_generator(self): + return u','.join([unicode(tag) for tag in self.tagname_list()]) + + @models.permalink + def get_absolute_url(self): + return ('question', (), {'id': self.id, 'slug': django_urlquote(slugify(self.title))}) + + def get_answer_count_by_user(self, user_id): + from answer import Answer + query_set = Answer.objects.filter(author__id=user_id) + return query_set.filter(question=self).count() + + def get_question_title(self): + if self.closed: + attr = CONST['closed'] + elif self.deleted: + attr = CONST['deleted'] + else: + attr = None + if attr is not None: + return u'%s %s' % (self.title, attr) + else: + return self.title + + def get_revision_url(self): + return reverse('question_revisions', args=[self.id]) + + def get_latest_revision(self): + return self.revisions.all()[0] + + def get_last_update_info(self): + when, who = self.post_get_last_update_info() + + answers = self.answers.all() + if len(answers) > 0: + for a in answers: + a_when, a_who = a.post_get_last_update_info() + if a_when > when: + when = a_when + who = a_who + + return when, who + + def get_related_questions(self, count=10): + cache_key = '%s.related_questions:%d:%d' % (settings.APP_URL, count, self.id) + related_list = cache.get(cache_key) + + if related_list is None: + related_list = Question.objects.values('id').filter(tags__id__in=[t.id for t in self.tags.all()] + ).exclude(id=self.id).exclude(deleted=True).annotate(frequency=models.Count('id')).order_by('-frequency')[:count] + cache.set(cache_key, related_list, 60 * 60) + + return [Question.objects.get(id=r['id']) for r in related_list] + + def __unicode__(self): + return self.title + +def question_viewed(instance, **kwargs): + instance.view_count += 1 + instance.save() + +question_view.connect(question_viewed) + +class FavoriteQuestion(models.Model): + """A favorite Question of a User.""" + question = models.ForeignKey('Question') + user = models.ForeignKey(User, related_name='user_favorite_questions') + added_at = models.DateTimeField(default=datetime.datetime.now) + + class Meta: + unique_together = ('question', 'user') + app_label = 'forum' + db_table = u'favorite_question' + + def __unicode__(self): + return '[%s] favorited at %s' %(self.user, self.added_at) + + def _update_question_fav_count(self, diff): + self.question.favourite_count = self.question.favourite_count + diff + self.question.save() + + def save(self, *args, **kwargs): + super(FavoriteQuestion, self).save(*args, **kwargs) + if self._is_new: + self._update_question_fav_count(1) + + def delete(self): + self._update_question_fav_count(-1) + super(FavoriteQuestion, self).delete() + +class QuestionSubscription(models.Model): + user = models.ForeignKey(User) + question = models.ForeignKey(Question) + auto_subscription = models.BooleanField(default=True) + last_view = models.DateTimeField(default=datetime.datetime.now()) + + class Meta: + app_label = 'forum' + +class QuestionRevision(ContentRevision): + """A revision of a Question.""" + question = models.ForeignKey(Question, related_name='revisions') + title = models.CharField(max_length=300) + tagnames = models.CharField(max_length=125) + + class Meta(ContentRevision.Meta): + db_table = u'question_revision' + ordering = ('-revision',) + + def get_question_title(self): + return self.question.title + + def get_absolute_url(self): + #print 'in QuestionRevision.get_absolute_url()' + return reverse('question_revisions', args=[self.question.id]) + + def save(self, *args, **kwargs): + """Looks up the next available revision number.""" + if not self.revision: + self.revision = QuestionRevision.objects.filter( + question=self.question).values_list('revision', + flat=True)[0] + 1 + super(QuestionRevision, self).save(*args, **kwargs) + + def __unicode__(self): + return u'revision %s of %s' % (self.revision, self.title) + +class AnonymousQuestion(AnonymousContent): + title = models.CharField(max_length=300) + tagnames = models.CharField(max_length=125) + + def publish(self,user): + added_at = datetime.datetime.now() + Question.objects.create_new(title=self.title, author=user, added_at=added_at, + wiki=self.wiki, tagnames=self.tagnames, + summary=self.summary, text=self.text) + self.delete() + +from answer import Answer, AnswerManager diff --git a/forum/models/repute.py b/forum/models/repute.py new file mode 100644 index 0000000..6d023ad --- /dev/null +++ b/forum/models/repute.py @@ -0,0 +1,123 @@ +from base import * +from django.contrib.contenttypes.models import ContentType +from forum.models import User + +from django.utils.translation import ugettext as _ + +class Badge(BaseModel): + """Awarded for notable actions performed on the site by Users.""" + GOLD = 1 + SILVER = 2 + BRONZE = 3 + TYPE_CHOICES = ( + (GOLD, _('gold')), + (SILVER, _('silver')), + (BRONZE, _('bronze')), + ) + + name = models.CharField(max_length=50) + type = models.SmallIntegerField(choices=TYPE_CHOICES) + slug = models.SlugField(max_length=50, blank=True) + description = models.CharField(max_length=300) + multiple = models.BooleanField(default=False) + # Denormalised data + awarded_count = models.PositiveIntegerField(default=0) + awarded_to = models.ManyToManyField(User, through='Award', related_name='badges') + + class Meta: + app_label = 'forum' + db_table = u'badge' + ordering = ('name',) + unique_together = ('name', 'type') + + def __unicode__(self): + return u'%s: %s' % (self.get_type_display(), self.name) + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = self.name#slugify(self.name) + super(Badge, self).save(*args, **kwargs) + + def get_absolute_url(self): + return '%s%s/' % (reverse('badge', args=[self.id]), self.slug) + + +class AwardManager(models.Manager): + def get_recent_awards(self): + awards = super(AwardManager, self).extra( + select={'badge_id': 'badge.id', 'badge_name':'badge.name', + 'badge_description': 'badge.description', 'badge_type': 'badge.type', + 'user_id': 'auth_user.id', 'user_name': 'auth_user.username' + }, + tables=['award', 'badge', 'auth_user'], + order_by=['-awarded_at'], + where=['auth_user.id=award.user_id AND badge_id=badge.id'], + ).values('badge_id', 'badge_name', 'badge_description', 'badge_type', 'user_id', 'user_name') + return awards + +class Award(MetaContent, UserContent): + """The awarding of a Badge to a User.""" + badge = models.ForeignKey('Badge', related_name='award_badge') + awarded_at = models.DateTimeField(default=datetime.datetime.now) + notified = models.BooleanField(default=False) + + objects = AwardManager() + + def __unicode__(self): + return u'[%s] is awarded a badge [%s] at %s' % (self.user.username, self.badge.name, self.awarded_at) + + def save(self, *args, **kwargs): + super(Award, self).save(*args, **kwargs) + + if self._is_new: + self.badge.awarded_count += 1 + self.badge.save() + + if self.badge.type == Badge.GOLD: + self.user.gold += 1 + if self.badge.type == Badge.SILVER: + self.user.silver += 1 + if self.badge.type == Badge.BRONZE: + self.user.bronze += 1 + self.user.save() + + class Meta: + unique_together = ('content_type', 'object_id', 'user', 'badge') + app_label = 'forum' + db_table = u'award' + + +class Repute(UserContent): + """The reputation histories for user""" + value = models.SmallIntegerField(default=0) + question = models.ForeignKey('Question') + reputed_at = models.DateTimeField(default=datetime.datetime.now) + reputation_type = models.SmallIntegerField(choices=TYPE_REPUTATION) + user_previous_rep = models.IntegerField(default=0) + + def __unicode__(self): + return u'[%s]\' reputation changed at %s' % (self.user.username, self.reputed_at) + + @property + def positive(self): + if self.value > 0: return self.value + return 0 + + @property + def negative(self): + if self.value < 0: return self.value + return 0 + + @property + def reputation(self): + return self.user_previous_rep + self.value + + def save(self, *args, **kwargs): + self.user_previous_rep = self.user.reputation + self.user.reputation = self.user.reputation + self.value + self.user.save() + super(Repute, self).save(*args, **kwargs) + + class Meta: + app_label = 'forum' + db_table = u'repute' diff --git a/forum/models/tag.py b/forum/models/tag.py new file mode 100644 index 0000000..cda2779 --- /dev/null +++ b/forum/models/tag.py @@ -0,0 +1,36 @@ +from base import * + +from django.utils.translation import ugettext as _ +import django.dispatch + +class ActiveTagManager(UndeletedObjectManager): + def get_query_set(self): + return super(UndeletedObjectManager, self).get_query_set().exclude(used_count=0) + + +class Tag(DeletableContent): + name = models.CharField(max_length=255, unique=True) + created_by = models.ForeignKey(User, related_name='created_tags') + marked_by = models.ManyToManyField(User, related_name="marked_tags", through="MarkedTag") + # Denormalised data + used_count = models.PositiveIntegerField(default=0) + + objects = models.Manager() + active = ActiveTagManager() + + class Meta(DeletableContent.Meta): + db_table = u'tag' + ordering = ('-used_count', 'name') + + def __unicode__(self): + return self.name + +class MarkedTag(models.Model): + TAG_MARK_REASONS = (('good',_('interesting')),('bad',_('ignored'))) + tag = models.ForeignKey(Tag, related_name='user_selections') + user = models.ForeignKey(User, related_name='tag_selections') + reason = models.CharField(max_length=16, choices=TAG_MARK_REASONS) + + class Meta: + app_label = 'forum' + diff --git a/forum/models/user.py b/forum/models/user.py new file mode 100644 index 0000000..655e17e --- /dev/null +++ b/forum/models/user.py @@ -0,0 +1,376 @@ +from base import * +from forum import const +from django.contrib.contenttypes.models import ContentType +from django.contrib.auth.models import User as DjangoUser, AnonymousUser as DjangoAnonymousUser +from django.db.models import Q +from hashlib import md5 +import string +from random import Random + +from django.utils.translation import ugettext as _ +import django.dispatch + + +QUESTIONS_PER_PAGE_CHOICES = ( + (10, u'10'), + (30, u'30'), + (50, u'50'), +) + +class UserManager(CachedManager): + def get_site_owner(self): + return self.all().order_by('date_joined')[0] + +class AnonymousUser(DjangoAnonymousUser): + def get_visible_answers(self, question): + return question.answers.filter(deleted=False) + + def can_view_deleted_post(self, post): + return False + + def can_vote_up(self): + return False + + def can_vote_down(self): + return False + + def can_flag_offensive(self, post=None): + return False + + def can_view_offensive_flags(self, post=None): + return False + + def can_comment(self, post): + return False + + def can_like_comment(self, comment): + return False + + def can_edit_comment(self, comment): + return False + + def can_delete_comment(self, comment): + return False + + def can_accept_answer(self, answer): + return False + + def can_edit_post(self, post): + return False + + def can_retag_questions(self): + return False + + def can_close_question(self, question): + return False + + def can_reopen_question(self, question): + return False + + def can_delete_post(self, post): + return False + + def can_upload_files(self): + return False + +class User(BaseModel, DjangoUser): + is_approved = models.BooleanField(default=False) + email_isvalid = models.BooleanField(default=False) + email_key = models.CharField(max_length=32, null=True) + reputation = models.PositiveIntegerField(default=1) + + gold = models.SmallIntegerField(default=0) + silver = models.SmallIntegerField(default=0) + bronze = models.SmallIntegerField(default=0) + + questions_per_page = models.SmallIntegerField(choices=QUESTIONS_PER_PAGE_CHOICES, default=10) + hide_ignored_questions = models.BooleanField(default=False) + + last_seen = models.DateTimeField(default=datetime.datetime.now) + real_name = models.CharField(max_length=100, blank=True) + website = models.URLField(max_length=200, blank=True) + location = models.CharField(max_length=100, blank=True) + date_of_birth = models.DateField(null=True, blank=True) + about = models.TextField(blank=True) + + objects = UserManager() + + @property + def gravatar(self): + return hashlib.md5(self.email).hexdigest() + + def save(self, *args, **kwargs): + if self.reputation < 0: + self.reputation = 1 + + super(User, self).save(*args, **kwargs) + + def get_absolute_url(self): + return self.get_profile_url() + + def get_messages(self): + messages = [] + for m in self.message_set.all(): + messages.append(m.message) + return messages + + def delete_messages(self): + self.message_set.all().delete() + + def get_profile_url(self): + """Returns the URL for this User's profile.""" + return "/%s%d/%s" % (_('users/'), self.id, slugify(self.username)) + + def get_profile_link(self): + profile_link = u'%s' % (self.get_profile_url(),self.username) + logging.debug('in get profile link %s' % profile_link) + return mark_safe(profile_link) + + def get_vote_count_today(self): + today = datetime.date.today() + return self.votes.filter(voted_at__range=(today - datetime.timedelta(days=1), today)).count() + + def get_up_vote_count(self): + return self.votes.filter(vote=1).count() + + def get_down_vote_count(self): + return self.votes.filter(vote=-1).count() + + def get_reputation_by_upvoted_today(self): + today = datetime.datetime.now() + sum = self.reputes.filter( + models.Q(reputation_type=TYPE_REPUTATION_GAIN_BY_UPVOTED) | + models.Q(reputation_type=TYPE_REPUTATION_LOST_BY_UPVOTE_CANCELED), + reputed_at__range=(today - datetime.timedelta(days=1), today)).aggregate(models.Sum('value')) + + if sum.get('value__sum', None) is not None: return sum['value__sum'] + return 0 + + def get_flagged_items_count_today(self): + today = datetime.date.today() + return self.flaggeditems.filter(flagged_at__range=(today - datetime.timedelta(days=1), today)).count() + + def get_visible_answers(self, question): + if self.is_superuser: + return question.answers + else: + return question.answers.filter(models.Q(deleted=False) | models.Q(deleted_by=self)) + + def can_view_deleted_post(self, post): + return self.is_superuser or post.author == self + + def can_vote_up(self): + return self.reputation >= int(settings.REP_TO_VOTE_UP) or self.is_superuser + + def can_vote_down(self): + return self.reputation >= int(settings.REP_TO_VOTE_DOWN) or self.is_superuser + + def can_flag_offensive(self, post=None): + if post is not None and post.author == self: + return False + return self.is_superuser or self.reputation >= int(settings.REP_TO_FLAG) + + def can_view_offensive_flags(self, post=None): + if post is not None and post.author == self: + return True + return self.is_superuser or self.reputation >= int(settings.REP_TO_VIEW_FLAGS) + + def can_comment(self, post): + return self == post.author or self.reputation >= int(settings.REP_TO_COMMENT + ) or self.is_superuser or (post.__class__.__name__ == "Answer" and self == post.question.author) + + def can_like_comment(self, comment): + return self != comment.user and (self.reputation >= int(settings.REP_TO_LIKE_COMMENT) or self.is_superuser) + + def can_edit_comment(self, comment): + return (comment.user == self and comment.added_at >= datetime.datetime.now() - datetime.timedelta(minutes=60) + ) or self.is_superuser + + def can_delete_comment(self, comment): + return self == comment.user or self.reputation >= int(settings.REP_TO_DELETE_COMMENTS) or self.is_superuser + + def can_accept_answer(self, answer): + return self.is_superuser or self == answer.question.author + + def can_edit_post(self, post): + return self.is_superuser or self == post.author or self.reputation >= int(settings.REP_TO_EDIT_OTHERS + ) or (post.wiki and self.reputation >= int(settings.REP_TO_EDIT_WIKI)) + + def can_retag_questions(self): + return self.reputation >= int(settings.REP_TO_RETAG) + + def can_close_question(self, question): + return self.is_superuser or (self == question.author and self.reputation >= int(settings.REP_TO_CLOSE_OWN) + ) or self.reputation >= int(settings.REP_TO_CLOSE_OTHERS) + + def can_reopen_question(self, question): + return self.is_superuser or (self == question.author and self.reputation >= settings.REP_TO_REOPEN_OWN) + + def can_delete_post(self, post): + return self.is_superuser or (self == post.author and (post.__class__.__name__ == "Answer" or + not post.answers.filter(~Q(author=self)).count())) + + def can_upload_files(self): + return self.is_superuser or self.reputation >= int(settings.REP_TO_UPLOAD) + + class Meta: + app_label = 'forum' + +class Activity(MetaContent): + """ + We keep some history data for user activities + """ + user = models.ForeignKey(User) + activity_type = models.SmallIntegerField(choices=TYPE_ACTIVITY) + active_at = models.DateTimeField(default=datetime.datetime.now) + is_auditted = models.BooleanField(default=False) + + class Meta: + app_label = 'forum' + db_table = u'activity' + + def __unicode__(self): + return u'[%s] was active at %s' % (self.user.username, self.active_at) + + def save(self, *args, **kwargs): + super(Activity, self).save(*args, **kwargs) + if self._is_new: + activity_record.send(sender=self.activity_type, instance=self) + + @property + def question(self): + if self.activity_type == const.TYPE_ACTIVITY_ASK_QUESTION: + return self.content_object + elif self.activity_type in (const.TYPE_ACTIVITY_ANSWER, + const.TYPE_ACTIVITY_MARK_ANSWER, const.TYPE_ACTIVITY_UPDATE_QUESTION): + return self.content_object.question + elif self.activity_type == const.TYPE_ACTIVITY_COMMENT_QUESTION: + return self.content_object.content_object + elif self.activity_type == const.TYPE_ACTIVITY_COMMENT_ANSWER: + return self.content_object.content_object.question + elif self.activity_type == const.TYPE_ACTIVITY_UPDATE_ANSWER: + return self.content_object.content_object.answer.question + else: + raise NotImplementedError() + + @property + def type_as_string(self): + if self.activity_type == const.TYPE_ACTIVITY_ASK_QUESTION: + return _("asked") + elif self.activity_type == const.TYPE_ACTIVITY_ANSWER: + return _("answered") + elif self.activity_type == const.TYPE_ACTIVITY_MARK_ANSWER: + return _("marked an answer") + elif self.activity_type == const.TYPE_ACTIVITY_UPDATE_QUESTION: + return _("edited") + elif self.activity_type == const.TYPE_ACTIVITY_COMMENT_QUESTION: + return _("commented") + elif self.activity_type == const.TYPE_ACTIVITY_COMMENT_ANSWER: + return _("commented an answer") + elif self.activity_type == const.TYPE_ACTIVITY_UPDATE_ANSWER: + return _("edited an answer") + else: + raise NotImplementedError() + + +activity_record = django.dispatch.Signal(providing_args=['instance']) + +class SubscriptionSettings(models.Model): + user = models.OneToOneField(User, related_name='subscription_settings') + + enable_notifications = models.BooleanField(default=True) + + #notify if + member_joins = models.CharField(max_length=1, default='n', choices=const.NOTIFICATION_CHOICES) + new_question = models.CharField(max_length=1, default='d', choices=const.NOTIFICATION_CHOICES) + new_question_watched_tags = models.CharField(max_length=1, default='i', choices=const.NOTIFICATION_CHOICES) + subscribed_questions = models.CharField(max_length=1, default='i', choices=const.NOTIFICATION_CHOICES) + + #auto_subscribe_to + all_questions = models.BooleanField(default=False) + all_questions_watched_tags = models.BooleanField(default=False) + questions_asked = models.BooleanField(default=True) + questions_answered = models.BooleanField(default=True) + questions_commented = models.BooleanField(default=False) + questions_viewed = models.BooleanField(default=False) + + #notify activity on subscribed + notify_answers = models.BooleanField(default=True) + notify_reply_to_comments = models.BooleanField(default=True) + notify_comments_own_post = models.BooleanField(default=True) + notify_comments = models.BooleanField(default=False) + notify_accepted = models.BooleanField(default=False) + + class Meta: + app_label = 'forum' + +from forum.utils.time import one_day_from_now + +class ValidationHashManager(models.Manager): + def _generate_md5_hash(self, user, type, hash_data, seed): + return md5("%s%s%s%s" % (seed, "".join(map(str, hash_data)), user.id, type)).hexdigest() + + def create_new(self, user, type, hash_data=[], expiration=None): + seed = ''.join(Random().sample(string.letters+string.digits, 12)) + hash = self._generate_md5_hash(user, type, hash_data, seed) + + obj = ValidationHash(hash_code=hash, seed=seed, user=user, type=type) + + if expiration is not None: + obj.expiration = expiration + + try: + obj.save() + except: + return None + + return obj + + def validate(self, hash, user, type, hash_data=[]): + try: + obj = self.get(hash_code=hash) + except: + return False + + if obj.type != type: + return False + + if obj.user != user: + return False + + valid = (obj.hash_code == self._generate_md5_hash(obj.user, type, hash_data, obj.seed)) + + if valid: + if obj.expiration < datetime.datetime.now(): + obj.delete() + return False + else: + obj.delete() + return True + + return False + +class ValidationHash(models.Model): + hash_code = models.CharField(max_length=255,unique=True) + seed = models.CharField(max_length=12) + expiration = models.DateTimeField(default=one_day_from_now) + type = models.CharField(max_length=12) + user = models.ForeignKey(User) + + objects = ValidationHashManager() + + class Meta: + unique_together = ('user', 'type') + app_label = 'forum' + + def __str__(self): + return self.hash_code + +class AuthKeyUserAssociation(models.Model): + key = models.CharField(max_length=255,null=False,unique=True) + provider = models.CharField(max_length=64) + user = models.ForeignKey(User, related_name="auth_keys") + added_at = models.DateTimeField(default=datetime.datetime.now) + + class Meta: + app_label = 'forum' diff --git a/forum/models/utils.py b/forum/models/utils.py new file mode 100644 index 0000000..984a55c --- /dev/null +++ b/forum/models/utils.py @@ -0,0 +1,77 @@ +from django.db import models +from django.core.cache import cache +from django.conf import settings +#try: +# import cPickle as pickle +#except ImportError: +import pickle +import django.dispatch + +class PickledObject(str): + pass + +class PickledObjectField(models.Field): + __metaclass__ = models.SubfieldBase + + def to_python(self, value): + if isinstance (value, PickledObject): + return value + + try: + return pickle.loads(value.encode('utf-8')) + except: + return value + + def get_db_prep_save(self, value): + if value is not None: + if isinstance(value, PickledObject): + return str(value) + else: + value = pickle.dumps(value) + + return value + + def get_internal_type(self): + return 'TextField' + + +class KeyValueManager(models.Manager): + + def create_cache_key(self, key): + return "%s:key_value:%s" % (settings.APP_URL, key) + + def save_to_cache(self, instance): + cache.set(self.create_cache_key(instance.key), instance, 2592000) + + def remove_from_cache(self, instance): + cache.delete(self.create_cache_key(instance.key)) + + def get(self, **kwargs): + if 'key' in kwargs: + instance = cache.get(self.create_cache_key(kwargs['key'])) + + if instance is None: + instance = super(KeyValueManager, self).get(**kwargs) + self.save_to_cache(instance) + + return instance + + else: + return super(KeyValueManager, self).get(**kwargs) + +class KeyValue(models.Model): + key = models.CharField(max_length=255, unique=True) + value = PickledObjectField() + + objects = KeyValueManager() + + class Meta: + app_label = 'forum' + + def save(self, *args, **kwargs): + super(KeyValue, self).save(*args, **kwargs) + KeyValue.objects.save_to_cache(self) + + def delete(self): + KeyValue.objects.remove_from_cache(self) + super(KeyValue, self).delete() diff --git a/forum/modules.py b/forum/modules.py new file mode 100644 index 0000000..10bbf65 --- /dev/null +++ b/forum/modules.py @@ -0,0 +1,103 @@ +import os +import types +import re + +from django.template import Template, TemplateDoesNotExist +from django.conf import settings + +MODULES_PACKAGE = 'forum_modules' + +MODULES_FOLDER = os.path.join(os.path.dirname(__file__), '../' + MODULES_PACKAGE) + +DISABLED_MODULES = getattr(settings, 'DISABLED_MODULES', []) + +MODULE_LIST = filter(lambda m: getattr(m, 'CAN_USE', True), [ + __import__('forum_modules.%s' % f, globals(), locals(), ['forum_modules']) + for f in os.listdir(MODULES_FOLDER) + if os.path.isdir(os.path.join(MODULES_FOLDER, f)) and + os.path.exists(os.path.join(MODULES_FOLDER, "%s/__init__.py" % f)) and + not f in DISABLED_MODULES +]) + +def get_modules_script(script_name): + all = [] + + for m in MODULE_LIST: + try: + all.append(__import__('%s.%s' % (m.__name__, script_name), globals(), locals(), [m.__name__])) + except Exception, e: + #print m.__name__ + ":" + str(e) + pass + + return all + +def get_modules_scipt_implementations(script_name, impl_class): + scripts = get_modules_script(script_name) + all_impls = {} + + for script in scripts: + all_impls.update(dict([ + (n, i) for (n, i) in [(n, getattr(script, n)) for n in dir(script)] + if isinstance(i, impl_class) + ])) + + return all_impls + +def get_modules_script_classes(script_name, base_class): + scripts = get_modules_script(script_name) + all_classes = {} + + for script in scripts: + all_classes.update(dict([ + (n, c) for (n, c) in [(n, getattr(script, n)) for n in dir(script)] + if isinstance(c, (type, types.ClassType)) and issubclass(c, base_class) + ])) + + return all_classes + +def get_all_handlers(name): + handler_files = get_modules_script('handlers') + + return [ + h for h in [ + getattr(f, name) for f in handler_files + if hasattr(f, name) + ] + + if callable(h) + ] + +def call_all_handlers(name, *args, **kwargs): + all = get_all_handlers(name) + + ret = [] + + for handler in all: + ret.append(handler(*args, **kwargs)) + + return ret + +def get_handler(name, default): + all = get_all_handlers(name) + return len(all) and all[0] or default + +module_template_re = re.compile('^modules\/(\w+)\/(.*)$') + +def module_templates_loader(name, dirs=None): + result = module_template_re.search(name) + + if result is not None: + file_name = os.path.join(MODULES_FOLDER, result.group(1), 'templates', result.group(2)) + + if os.path.exists(file_name): + try: + f = open(file_name, 'r') + source = f.read() + f.close() + return (source, file_name) + except: + pass + + raise TemplateDoesNotExist, name + +module_templates_loader.is_usable = True diff --git a/forum/reputation.py b/forum/reputation.py new file mode 100644 index 0000000..7bca665 --- /dev/null +++ b/forum/reputation.py @@ -0,0 +1,92 @@ +from django.db.models.signals import post_save +from forum.models.meta import vote_canceled + +from forum.models import * +from forum.const import * +import settings + +def on_flagged_item(instance, created, **kwargs): + if not created: + return + + post = instance.content_object + question = (post.__class__ == Question) and post or post.question + + user.reputes.create(value=-int(settings.REP_LOST_BY_FLAGGED), question=question, + reputation_type=TYPE_REPUTATION_LOST_BY_FLAGGED) + + + if post.offensive_flag_count == settings.FLAG_COUNT_TO_HIDE_POST: + post.author.reputes.create(value=-int(settings.REP_LOST_BY_FLAGGED_3_TIMES), + question=question, reputation_type=TYPE_REPUTATION_LOST_BY_FLAGGED_3_TIMES) + + if post.offensive_flag_count == settings.FLAG_COUNT_TO_DELETE_POST: + post.author.reputes.create(value=-int(settings.REP_LOST_BY_FLAGGED_5_TIMES), + question=question, reputation_type=TYPE_REPUTATION_LOST_BY_FLAGGED_5_TIMES) + + post.mark_deleted(User.objects.get_site_owner()) + +post_save.connect(on_flagged_item, sender=FlaggedItem) + + +def on_answer_accepted_switch(instance, created, **kwargs): + if not created and 'accepted' in instance.get_dirty_fields() and ( + not instance.accepted_by == instance.question.author): + repute_type, repute_value = instance.accepted and ( + TYPE_REPUTATION_GAIN_BY_ANSWER_ACCEPTED, int(settings.REP_GAIN_BY_ACCEPTED)) or ( + TYPE_REPUTATION_LOST_BY_ACCEPTED_ANSWER_CANCELED, -int(settings.REP_LOST_BY_ACCEPTED_CANCELED)) + + instance.author.reputes.create(value=repute_value, question=instance.question, reputation_type=repute_type) + + if instance.accepted_by == instance.question.author: + repute_type, repute_value = instance.accepted and ( + TYPE_REPUTATION_GAIN_BY_ACCEPTING_ANSWER, int(settings.REP_GAIN_BY_ACCEPTING)) or ( + TYPE_REPUTATION_LOST_BY_CANCELLING_ACCEPTED_ANSWER, -int(settings.REP_LOST_BY_CANCELING_ACCEPTED)) + + instance.question.author.reputes.create(value=repute_value, question=instance.question, reputation_type=repute_type) + +post_save.connect(on_answer_accepted_switch, sender=Answer) + + +def on_vote(instance, created, **kwargs): + if created and not instance.content_object.wiki: + post = instance.content_object + question = (post.__class__ == Question) and post or post.question + + if instance.vote == -1: + instance.user.reputes.create(value=-int(settings.REP_LOST_BY_DOWNVOTING), + question=question, reputation_type=TYPE_REPUTATION_LOST_BY_DOWNVOTING) + + if instance.vote == 1 and post.author.get_reputation_by_upvoted_today() >= int(settings.MAX_REP_BY_UPVOTE_DAY): + return + + repute_type, repute_value = (instance.vote == 1) and ( + TYPE_REPUTATION_GAIN_BY_UPVOTED, int(settings.REP_GAIN_BY_UPVOTED)) or ( + TYPE_REPUTATION_LOST_BY_DOWNVOTED, -int(settings.REP_LOST_BY_DOWNVOTED)) + + post.author.reputes.create(value=repute_value, question=question, reputation_type=repute_type) + +post_save.connect(on_vote, sender=Vote) + + +def on_vote_canceled(instance, **kwargs): + if not instance.content_object.wiki: + post = instance.content_object + question = (post.__class__ == Question) and post or post.question + + if instance.vote == -1: + instance.user.reputes.create(value=int(settings.REP_GAIN_BY_CANCELING_DOWNVOTE), + question=question, reputation_type=TYPE_REPUTATION_GAIN_BY_CANCELING_DOWNVOTE) + + repute_type, repute_value = (instance.vote == 1) and ( + TYPE_REPUTATION_LOST_BY_UPVOTE_CANCELED, -int(settings.REP_LOST_BY_UPVOTE_CANCELED)) or ( + TYPE_REPUTATION_GAIN_BY_DOWNVOTE_CANCELED, int(settings.REP_GAIN_BY_DOWNVOTE_CANCELED)) + + post.author.reputes.create(value=repute_value, question=question, reputation_type=repute_type) + +vote_canceled.connect(on_vote_canceled) + + + + + diff --git a/forum/settings/__init__.py b/forum/settings/__init__.py new file mode 100644 index 0000000..e7f3e39 --- /dev/null +++ b/forum/settings/__init__.py @@ -0,0 +1,23 @@ +import os.path +from base import Setting, SettingSet +from forms import ImageFormWidget + +from django.forms.widgets import Textarea +from django.utils.translation import ugettext_lazy as _ + +INTERNAL_VERSION = Setting('INTERNAL_VERSION', "201003270") +SETTINGS_PACK = Setting('SETTINGS_PACK', "default") + +from basic import * +from email import * +from extkeys import * +from minrep import * +from repgain import * +from voting import * +from upload import * +from pages import * + +BADGES_SET = SettingSet('badges', _('Badges config'), _("Configure badges on your OSQA site."), 500) + +#__all__ = locals().keys() + diff --git a/forum/settings/base.py b/forum/settings/base.py new file mode 100644 index 0000000..4987bc0 --- /dev/null +++ b/forum/settings/base.py @@ -0,0 +1,139 @@ +import django.dispatch +from django.utils.encoding import force_unicode + +class SettingSet(list): + def __init__(self, name, title, description, weight=1000): + self.name = name + self.title = title + self.description = description + self.weight = weight + +class BaseSetting(object): + def __init__(self, name, default, field_context): + self.name = name + self.default = default + self.field_context = field_context + + @property + def value(self): + from forum.models import KeyValue + + try: + kv = KeyValue.objects.get(key=self.name) + except: + kv = KeyValue(key=self.name, value=self._parse(self.default)) + kv.save() + + return kv.value + + def set_value(self, new_value): + new_value = self._parse(new_value) + from forum.models import KeyValue + + try: + kv = KeyValue.objects.get(key=self.name) + old_value = kv.value + except: + kv = KeyValue(key=self.name) + old_value = self.default + + kv.value = new_value + kv.save() + + setting_update.send(sender=self, old_value=old_value, new_value=new_value) + + def to_default(self): + self.set_value(self.default) + + def _parse(self, value): + return value + + def __str__(self): + return str(self.value) + + def __unicode__(self): + return unicode(self.value) + + def __nonzero__(self): + return bool(self.value) + + +class StringSetting(BaseSetting): + def _parse(self, value): + if isinstance(value, unicode): + return value.encode('utf8') + else: + return str(value) + + def __unicode__(self): + return unicode(self.value.decode('utf8')) + + def __add__(self, other): + return "%s%s" % (unicode(self), other) + + def __cmp__(self, other): + return cmp(str(self), str(other)) + +class IntegerSetting(BaseSetting): + def _parse(self, value): + return int(value) + + def __int__(self): + return int(self.value) + + def __add__(self, other): + return int(self) + int(other) + + def __sub__(self, other): + return int(self) - int(other) + + def __cmp__(self, other): + return int(self) - int(other) + +class FloatSetting(BaseSetting): + def _parse(self, value): + return float(value) + + def __int__(self): + return int(self.value) + + def __float__(self): + return float(self.value) + + def __add__(self, other): + return float(self) + float(other) + + def __sub__(self, other): + return float(self) - float(other) + + def __cmp__(self, other): + return float(self) - float(other) + +class BoolSetting(BaseSetting): + def _parse(self, value): + return bool(value) + +class Setting(object): + sets = {} + + def __new__(cls, name, default, set=None, field_context={}): + if isinstance(default, bool): + instance = BoolSetting(name, default, field_context) + elif isinstance(default, str): + instance = StringSetting(name, default, field_context) + elif isinstance(default, float): + instance = FloatSetting(name, default, field_context) + elif isinstance(default, int): + instance = IntegerSetting(name, default, field_context) + else: + instance = BaseSetting(name, default, field_context) + + if set is not None: + if not set.name in cls.sets: + cls.sets[set.name] = set + + cls.sets[set.name].append(instance) + + return instance + +setting_update = django.dispatch.Signal(providing_args=['old_value', 'new_value']) diff --git a/forum/settings/basic.py b/forum/settings/basic.py new file mode 100644 index 0000000..cbfdbbd --- /dev/null +++ b/forum/settings/basic.py @@ -0,0 +1,61 @@ +import os.path + +from base import Setting, SettingSet +from forms import ImageFormWidget + +from django.utils.translation import ugettext_lazy as _ +from django.forms.widgets import Textarea + +BASIC_SET = SettingSet('basic', _('Basic Settings'), _("The basic settings for your application"), 1) + +APP_LOGO = Setting('APP_LOGO', '/m/default/media/images/logo.png', BASIC_SET, dict( +label = _("Application logo"), +help_text = _(""" +Your site main logo. +"""), +widget=ImageFormWidget)) + +APP_FAVICON = Setting('APP_FAVICON', '/m/default/media/images/favicon.ico', BASIC_SET, dict( +label = _("Favicon"), +help_text = _(""" +Your site favicon. +"""), +widget=ImageFormWidget)) + +APP_TITLE = Setting('APP_TITLE', 'OSQA: Open Source Q&A Forum', BASIC_SET, dict( +label = _("Application title"), +help_text = _(""" +The title of your application that will show in the browsers title bar +"""))) + +APP_SHORT_NAME = Setting('APP_SHORT_NAME', 'OSQA', BASIC_SET, dict( +label = _("Application short name"), +help_text = """ +The short name for your application that will show up in many places. +""")) + +APP_KEYWORDS = Setting('APP_KEYWORDS', 'OSQA,CNPROG,forum,community', BASIC_SET, dict( +label = _("Application keywords"), +help_text = _(""" +The meta keywords that will be available through the HTML meta tags. +"""))) + +APP_DESCRIPTION = Setting('APP_DESCRIPTION', 'Ask and answer questions.', BASIC_SET, dict( +label = _("Application description"), +help_text = _(""" +The description of your application +"""), +widget=Textarea)) + +APP_INTRO = Setting('APP_INTRO', '

Ask and answer questions, make the world better!

', BASIC_SET, dict( +label = _("Application intro"), +help_text = _(""" +The introductory page that is visible in the sidebar for anonymous users. +"""), +widget=Textarea)) + +APP_COPYRIGHT = Setting('APP_COPYRIGHT', 'Copyright OSQA, 2009. Some rights reserved under creative commons license.', BASIC_SET, dict( +label = _("Copyright notice"), +help_text = _(""" +The copyright notice visible at the footer of your page. +"""))) \ No newline at end of file diff --git a/forum/settings/email.py b/forum/settings/email.py new file mode 100644 index 0000000..43baeb5 --- /dev/null +++ b/forum/settings/email.py @@ -0,0 +1,53 @@ +from base import Setting, SettingSet +from django.utils.translation import ugettext_lazy as _ + +EMAIL_SET = SettingSet('email', _('Email Settings'), _("Email server and other email related settings."), 50) + +EMAIL_HOST = Setting('EMAIL_HOST', '', EMAIL_SET, dict( +label = _("Email Server"), +help_text = _(""" +The SMTP server through which your application will be sending emails. +"""), +required=False)) + +EMAIL_PORT = Setting('EMAIL_PORT', 25, EMAIL_SET, dict( +label = _("Email Port"), +help_text = _(""" +The port on which your SMTP server is listening to. Usually this is 25, but can be something else. +"""), +required=False)) + +EMAIL_HOST_USER = Setting('EMAIL_HOST_USER', '', EMAIL_SET, dict( +label = _("Email User"), +help_text = _(""" +The username for your SMTP connection. +"""), +required=False)) + +EMAIL_HOST_PASSWORD = Setting('EMAIL_HOST_PASSWORD', '', EMAIL_SET, dict( +label = _("Email Password"), +help_text = _(""" +The password for your SMTP connection. +"""), +required=False)) + +EMAIL_USE_TLS = Setting('EMAIL_USE_TLS', False, EMAIL_SET, dict( +label = _("Use TLS"), +help_text = _(""" +Does your SMTP server uses TLS for authentication. +"""), +required=False)) + +DEFAULT_FROM_EMAIL = Setting('DEFAULT_FROM_EMAIL', '', EMAIL_SET, dict( +label = _("Site email address"), +help_text = _(""" +The address that will show up on the 'from' field on emails sent by your website. +"""), +required=False)) + +EMAIL_SUBJECT_PREFIX = Setting('EMAIL_SUBJECT_PREFIX', '', EMAIL_SET, dict( +label = _("Email subject prefix"), +help_text = _(""" +Every email sent through your website will have the subject prefixed by this string. It's usually a good idea to have such a prefix so your users can easilly set up a filter on theyr email clients. +"""), +required=False)) \ No newline at end of file diff --git a/forum/settings/extkeys.py b/forum/settings/extkeys.py new file mode 100644 index 0000000..b571472 --- /dev/null +++ b/forum/settings/extkeys.py @@ -0,0 +1,18 @@ +from base import Setting, SettingSet +from django.utils.translation import ugettext_lazy as _ + +EXT_KEYS_SET = SettingSet('extkeys', _('External Keys'), _("Keys for various external providers that your application may optionally use."), 100) + +GOOGLE_SITEMAP_CODE = Setting('GOOGLE_SITEMAP_CODE', '', EXT_KEYS_SET, dict( +label = _("Google sitemap code"), +help_text = """ +This is the code you get when you register your site at Google webmaster central. +""", +required=False)) + +GOOGLE_ANALYTICS_KEY = Setting('GOOGLE_ANALYTICS_KEY', '', EXT_KEYS_SET, dict( +label = _("Google analytics key"), +help_text = """ +Your Google analytics key. You can get one at the Google analytics official website +""", +required=False)) \ No newline at end of file diff --git a/forum/settings/forms.py b/forum/settings/forms.py new file mode 100644 index 0000000..337dea1 --- /dev/null +++ b/forum/settings/forms.py @@ -0,0 +1,63 @@ +import os +from django import forms +from base import Setting, StringSetting, IntegerSetting, BoolSetting, FloatSetting +from django.utils.translation import ugettext as _ +from django.core.files.storage import FileSystemStorage + +class SettingsSetForm(forms.Form): + def __init__(self, set, data=None, *args, **kwargs): + if data is None: + data = dict([(setting.name, setting.value) for setting in set]) + + super(SettingsSetForm, self).__init__(data, *args, **kwargs) + + for setting in set: + if isinstance(setting, StringSetting): + field = forms.CharField(**setting.field_context) + elif isinstance(setting, FloatSetting): + field = forms.FloatField(**setting.field_context) + elif isinstance(setting, IntegerSetting): + field = forms.IntegerField(**setting.field_context) + elif isinstance(setting, BoolSetting): + field = forms.BooleanField(**setting.field_context) + else: + field = forms.CharField(**setting.field_context) + + self.fields[setting.name] = field + + self.set = set + + def save(self): + for setting in self.set: + setting.set_value(self.cleaned_data[setting.name]) + +class ImageFormWidget(forms.Widget): + def render(self, name, value, attrs=None): + return """ +
+ %(change)s: + + """ % {'name': name, 'value': value, 'change': _('Change this:')} + + def value_from_datadict(self, data, files, name): + if name in files: + f = files[name] + + # check file type + file_name_suffix = os.path.splitext(f.name)[1].lower() + + if not file_name_suffix in ('.jpg', '.jpeg', '.gif', '.png', '.bmp', '.tiff', '.ico'): + raise Exception('File type not allowed') + + from forum.settings import UPFILES_FOLDER, UPFILES_ALIAS + + storage = FileSystemStorage(str(UPFILES_FOLDER), str(UPFILES_ALIAS)) + new_file_name = storage.save(f.name, f) + return str(UPFILES_ALIAS) + new_file_name + else: + if "%s_old" % name in data: + return data["%s_old" % name] + elif name in data: + return data[name] + + diff --git a/forum/settings/minrep.py b/forum/settings/minrep.py new file mode 100644 index 0000000..b392ee9 --- /dev/null +++ b/forum/settings/minrep.py @@ -0,0 +1,94 @@ +from base import Setting, SettingSet +from django.utils.translation import ugettext_lazy as _ + +MIN_REP_SET = SettingSet('minrep', _('Minimum reputation config'), _("Configure the minimum reputation required to perform certain actions on your site."), 300) + +REP_TO_VOTE_UP = Setting('REP_TO_VOTE_UP', 15, MIN_REP_SET, dict( +label = _("Minimum reputation to vote up"), +help_text = _(""" +The minimum reputation an user must have to be allowed to vote up. +"""))) + +REP_TO_VOTE_DOWN = Setting('REP_TO_VOTE_DOWN', 100, MIN_REP_SET, dict( +label = _("Minimum reputation to vote down"), +help_text = _(""" +The minimum reputation an user must have to be allowed to vote down. +"""))) + +REP_TO_FLAG = Setting('REP_TO_FLAG', 15, MIN_REP_SET, dict( +label = _("Minimum reputation to flag a post"), +help_text = _(""" +The minimum reputation an user must have to be allowed to flag a post. +"""))) + +REP_TO_COMMENT = Setting('REP_TO_COMMENT', 50, MIN_REP_SET, dict( +label = _("Minimum reputation to comment"), +help_text = _(""" +The minimum reputation an user must have to be allowed to comment a post. +"""))) + +REP_TO_LIKE_COMMENT = Setting('REP_TO_LIKE_COMMENT', 15, MIN_REP_SET, dict( +label = _("Minimum reputation to like a comment"), +help_text = _(""" +The minimum reputation an user must have to be allowed to "like" a comment. +"""))) + +REP_TO_UPLOAD = Setting('REP_TO_UPLOAD', 60, MIN_REP_SET, dict( +label = _("Minimum reputation to upload"), +help_text = _(""" +The minimum reputation an user must have to be allowed to upload a file. +"""))) + +REP_TO_CLOSE_OWN = Setting('REP_TO_CLOSE_OWN', 250, MIN_REP_SET, dict( +label = _("Minimum reputation to close own question"), +help_text = _(""" +The minimum reputation an user must have to be allowed to close his own question. +"""))) + +REP_TO_REOPEN_OWN = Setting('REP_TO_REOPEN_OWN', 500, MIN_REP_SET, dict( +label = _("Minimum reputation to reopen own question"), +help_text = _(""" +The minimum reputation an user must have to be allowed to reopen his own question. +"""))) + +REP_TO_RETAG = Setting('REP_TO_RETAG', 500, MIN_REP_SET, dict( +label = _("Minimum reputation to retag others questions"), +help_text = _(""" +The minimum reputation an user must have to be allowed to retag others questions. +"""))) + +REP_TO_EDIT_WIKI = Setting('REP_TO_EDIT_WIKI', 750, MIN_REP_SET, dict( +label = _("Minimum reputation to edit wiki posts"), +help_text = _(""" +The minimum reputation an user must have to be allowed to edit community wiki posts. +"""))) + +REP_TO_EDIT_OTHERS = Setting('REP_TO_EDIT_OTHERS', 2000, MIN_REP_SET, dict( +label = _("Minimum reputation to edit others posts"), +help_text = _(""" +The minimum reputation an user must have to be allowed to edit others posts. +"""))) + +REP_TO_CLOSE_OTHERS = Setting('REP_TO_CLOSE_OTHERS', 3000, MIN_REP_SET, dict( +label = _("Minimum reputation to close others posts"), +help_text = _(""" +The minimum reputation an user must have to be allowed to close others posts. +"""))) + +REP_TO_DELETE_COMMENTS = Setting('REP_TO_DELETE_COMMENTS', 2000, MIN_REP_SET, dict( +label = _("Minimum reputation to delete comments"), +help_text = _(""" +The minimum reputation an user must have to be allowed to delete comments. +"""))) + +REP_TO_VIEW_FLAGS = Setting('REP_TO_VIEW_FLAGS', 2000, MIN_REP_SET, dict( +label = _("Minimum reputation to view offensive flags"), +help_text = _(""" +The minimum reputation an user must have to view offensive flags. +"""))) + +#REP_TO_DISABLE_NOFOLLOW = Setting('REP_TO_DISABLE_NOFOLLOW', 2000, MIN_REP_SET, dict( +#label = _("Minimum reputation to disable nofollow"), +#help_text = _(""" +#The minimum reputation an user must have to be allowed to disable the nofollow attribute of a post link. +#"""))) \ No newline at end of file diff --git a/forum/settings/pages.py b/forum/settings/pages.py new file mode 100644 index 0000000..0dc4745 --- /dev/null +++ b/forum/settings/pages.py @@ -0,0 +1,28 @@ +from base import Setting, SettingSet +from django.forms.widgets import Textarea + +PAGES_SET = SettingSet('pages', 'About page', "Define the text in the about page. You can use markdown and some basic html tags.", 2000) + +ABOUT_PAGE_TEXT = Setting('ABOUT_PAGE_TEXT', +""" +**Please customize this text in the administration area** + +Here you can **ask** and **answer** questions, **comment** +and **vote<** for the questions of others and their answers. Both questions and answers +**can be revised** and improved. Questions can be **tagged** with +the relevant keywords to simplify future access and organize the accumulated material. + +This Q&A site is moderated by its members, hopefully - including yourself! +Moderation rights are gradually assigned to the site users based on the accumulated **"reputation"** +points. These points are added to the users account when others vote for his/her questions or answers. +These points (very) roughly reflect the level of trust of the community. + +No points are necessary to ask or answer the questions - so please - join us! + +If you would like to find out more about this site - please see the **frequently asked questions** page. +""", PAGES_SET, dict( +label = "About page text", +help_text = """ +The about page. +""", +widget=Textarea(attrs={'rows': '20'}))) \ No newline at end of file diff --git a/forum/settings/repgain.py b/forum/settings/repgain.py new file mode 100644 index 0000000..4f5ba9d --- /dev/null +++ b/forum/settings/repgain.py @@ -0,0 +1,94 @@ +from base import Setting, SettingSet +from django.utils.translation import ugettext_lazy as _ + +REP_GAIN_SET = SettingSet('repgain', _('Reputation gains and losses config'), _("Configure the reputation points a user may gain or lose upon certain actions."), 200) + +INITIAL_REP = Setting('INITIAL_REP', 1, REP_GAIN_SET, dict( +label = _("Initial reputation"), +help_text = _(""" +The initial reputation an user gets when he first signs in. +"""))) + +MAX_REP_BY_UPVOTE_DAY = Setting('MAX_REP_BY_UPVOTE_DAY', 200, REP_GAIN_SET, dict( +label = "Max rep by up votes / day", +help_text = _(""" +Maximum reputation a user can gain in one day for being upvoted. +"""))) + +REP_GAIN_BY_UPVOTED = Setting('REP_GAIN_BY_UPVOTED', 10, REP_GAIN_SET, dict( +label = _("Rep gain by upvoted"), +help_text = _(""" +Reputation a user gains for having one of his posts up voted. +"""))) + +REP_LOST_BY_UPVOTE_CANCELED = Setting('REP_LOST_BY_UPVOTE_CANCELED', 10, REP_GAIN_SET, dict( +label = _("Rep lost bu upvote canceled"), +help_text = _(""" +Reputation a user loses for having one of the upvotes on his posts canceled. +"""))) + +REP_LOST_BY_DOWNVOTED = Setting('REP_LOST_BY_DOWNVOTED', 2, REP_GAIN_SET, dict( +label = _("Rep lost by downvoted"), +help_text = _(""" +Reputation a user loses for having one of his posts down voted. +"""))) + +REP_LOST_BY_DOWNVOTING = Setting('REP_LOST_BY_DOWNVOTING', 1, REP_GAIN_SET, dict( +label = _("Rep lost by downvoting"), +help_text = _(""" +Reputation a user loses for down voting a post. +"""))) + +REP_GAIN_BY_DOWNVOTE_CANCELED = Setting('REP_GAIN_BY_DOWNVOTE_CANCELED', 2, REP_GAIN_SET, dict( +label = _("Rep gain by downvote canceled"), +help_text = _(""" +Reputation a user gains for having one of the downvotes on his posts canceled. +"""))) + +REP_GAIN_BY_CANCELING_DOWNVOTE = Setting('REP_GAIN_BY_CANCELING_DOWNVOTE', 1, REP_GAIN_SET, dict( +label = _("Rep gain by canceling downvote"), +help_text = _(""" +Reputation a user gains for canceling a downvote. +"""))) + +REP_GAIN_BY_ACCEPTED = Setting('REP_GAIN_BY_ACCEPTED', 15, REP_GAIN_SET, dict( +label = _("Rep gain by accepted answer"), +help_text = _(""" +Reputation a user gains for having one of his answers accepted. +"""))) + +REP_LOST_BY_ACCEPTED_CANCELED = Setting('REP_LOST_BY_ACCEPTED_CANCELED', 15, REP_GAIN_SET, dict( +label = _("Rep lost by accepted canceled"), +help_text = _(""" +Reputation a user loses for having one of his accepted answers canceled. +"""))) + +REP_GAIN_BY_ACCEPTING = Setting('REP_GAIN_BY_ACCEPTING', 2, REP_GAIN_SET, dict( +label = _("Rep gain by accepting answer"), +help_text = _(""" +Reputation a user gains for accepting an answer to one of his questions. +"""))) + +REP_LOST_BY_CANCELING_ACCEPTED = Setting('REP_LOST_BY_CANCELING_ACCEPTED', 2, REP_GAIN_SET, dict( +label = _("Rep lost by canceling accepted"), +help_text = _(""" +Reputation a user loses by canceling an accepted answer. +"""))) + +REP_LOST_BY_FLAGGED = Setting('REP_LOST_BY_FLAGGED', 2, REP_GAIN_SET, dict( +label = _("Rep lost by post flagged"), +help_text = _(""" +Reputation a user loses by having one of his posts flagged. +"""))) + +REP_LOST_BY_FLAGGED_3_TIMES = Setting('REP_LOST_BY_FLAGGED_3_TIMES', 30, REP_GAIN_SET, dict( +label = _("Rep lost by post flagged and hidden"), +help_text = _(""" +Reputation a user loses by having the last revision of one of his posts flagged the enough number of times to hide the post. +"""))) + +REP_LOST_BY_FLAGGED_5_TIMES = Setting('REP_LOST_BY_FLAGGED_5_TIMES', 100, REP_GAIN_SET, dict( +label = _("Rep lost by post flagged and deleted"), +help_text = _(""" +Reputation a user loses by having the last revision of one of his posts flagged the enough number of times to delete the post. +"""))) \ No newline at end of file diff --git a/forum/settings/settings.py b/forum/settings/settings.py new file mode 100644 index 0000000..e69de29 diff --git a/forum/settings/upload.py b/forum/settings/upload.py new file mode 100644 index 0000000..95a3ca1 --- /dev/null +++ b/forum/settings/upload.py @@ -0,0 +1,25 @@ +import os.path +from base import Setting, SettingSet +from django.utils.translation import ugettext_lazy as _ + +UPLOAD_SET = SettingSet('paths', _('File upload settings'), _(""" +File uploads related settings. +"""), 600) + +UPFILES_FOLDER = Setting('UPFILES_FOLDER', os.path.join(os.path.dirname(os.path.dirname(__file__)),'upfiles'), UPLOAD_SET, dict( +label = _("Uploaded files folder"), +help_text = _(""" +The filesystem path where uploaded files will be stored. Please note that this folder must exist. +"""))) + +UPFILES_ALIAS = Setting('UPFILES_ALIAS', '/upfiles/', UPLOAD_SET, dict( +label = _("Uploaded files alias"), +help_text = _(""" +The url alias for uploaded files. Notice that if you change this setting, you'll need to restart your site. +"""))) + +ALLOW_MAX_FILE_SIZE = Setting('ALLOW_MAX_FILE_SIZE', 2.5, UPLOAD_SET, dict( +label = _("Max file size"), +help_text = _(""" +The maximum allowed file size for uploads in mb. +"""))) \ No newline at end of file diff --git a/forum/settings/voting.py b/forum/settings/voting.py new file mode 100644 index 0000000..8a2854c --- /dev/null +++ b/forum/settings/voting.py @@ -0,0 +1,40 @@ +from base import Setting, SettingSet +from django.utils.translation import ugettext_lazy as _ + +VOTE_RULES_SET = SettingSet('voting', _('Voting rules'), _("Configure the voting rules on your site."), 400) + +MAX_VOTES_PER_DAY = Setting('MAX_VOTES_PER_DAY', 30, VOTE_RULES_SET, dict( +label = _("Maximum votes per day"), +help_text = _(""" +The maximum number of votes an user can cast per day. +"""))) + +START_WARN_VOTES_LEFT = Setting('START_WARN_VOTES_LEFT', 10, VOTE_RULES_SET, dict( +label = _("Start warning about votes left"), +help_text = _(""" +From how many votes left should an user start to be warned about it. +"""))) + +MAX_FLAGS_PER_DAY = Setting('MAX_FLAGS_PER_DAY', 5, VOTE_RULES_SET, dict( +label = _("Maximum flags per day"), +help_text = _(""" +The maximum number of times an can flag a post per day. +"""))) + +FLAG_COUNT_TO_HIDE_POST = Setting('FLAG_COUNT_TO_HIDE_POST', 3, VOTE_RULES_SET, dict( +label = _("Flag count to hide post"), +help_text = _(""" +How many times a post needs to be flagged to be hidden from the main page. +"""))) + +FLAG_COUNT_TO_DELETE_POST = Setting('FLAG_COUNT_TO_DELETE_POST', 5, VOTE_RULES_SET, dict( +label = _("Flag count to delete post"), +help_text = _(""" +How many times a post needs to be flagged to be deleted. +"""))) + +DENY_UNVOTE_DAYS = Setting('DENY_UNVOTE_DAYS', 1, VOTE_RULES_SET, dict( +label = _("Days to cancel a vote"), +help_text = _(""" +How many days an user can cancel a vote after he originaly casted it. +"""))) \ No newline at end of file diff --git a/forum/sitemap.py b/forum/sitemap.py new file mode 100644 index 0000000..c0c60b5 --- /dev/null +++ b/forum/sitemap.py @@ -0,0 +1,14 @@ +from django.contrib.sitemaps import Sitemap +from forum.models import Question + +class QuestionsSitemap(Sitemap): + changefreq = 'daily' + priority = 0.5 + def items(self): + return Question.objects.exclude(deleted=True) + + def lastmod(self, obj): + return obj.last_activity_at + + def location(self, obj): + return obj.get_absolute_url() diff --git a/forum/skins/README b/forum/skins/README new file mode 100644 index 0000000..5565fa8 --- /dev/null +++ b/forum/skins/README @@ -0,0 +1,22 @@ +this directory contains available skins + +1) default - default skin with templates +2) common - this directory is to media directory common to all or many templates + +to create a new skin just create another directory under skins/ +and start populating it with the directory structure as in +default/templates - templates must be named the same way + +NO NEED TO CREATE ALL TEMPLATES/MEDIA FILES AT ONCE + +templates are resolved in the following way: +* check in skin named as in settings.OSQA_DEFAULT_SKIN +* then skin named 'default' + +media is resolved with one extra option +* settings.OSQA_DEFAULT_SKIN +* 'default' +* 'common' + +media does not have to be composed of files named the same way as in default skin +whatever media you link to from your templates - will be in operation diff --git a/forum/skins/__init__.py b/forum/skins/__init__.py new file mode 100644 index 0000000..be6bd4f --- /dev/null +++ b/forum/skins/__init__.py @@ -0,0 +1,57 @@ +from django.conf import settings +from django.template import loader +from django.template.loaders import filesystem +from django.http import HttpResponse +import os.path +import logging + +#module for skinning osqa +#at this point skin can be changed only in settings file +#via OSQA_DEFAULT_SKIN variable + +#note - Django template loaders use method django.utils._os.safe_join +#to work on unicode file paths +#here it is ignored because it is assumed that we won't use unicode paths + +def load_template_source(name, dirs=None): + try: + tname = os.path.join(settings.OSQA_DEFAULT_SKIN,'templates',name) + return filesystem.load_template_source(tname,dirs) + except: + tname = os.path.join('default','templates',name) + return filesystem.load_template_source(tname,dirs) +load_template_source.is_usable = True + +def find_media_source(url): + """returns url prefixed with the skin name + of the first skin that contains the file + directories are searched in this order: + settings.OSQA_DEFAULT_SKIN, then 'default', then 'commmon' + if file is not found - returns None + and logs an error message + """ + while url[0] == '/': url = url[1:] + d = os.path.dirname + n = os.path.normpath + j = os.path.join + f = os.path.isfile + skins = n(j(d(d(__file__)),'skins')) + try: + media = os.path.join(skins, settings.OSQA_DEFAULT_SKIN, url) + assert(f(media)) + use_skin = settings.OSQA_DEFAULT_SKIN + except: + try: + media = j(skins, 'default', url) + assert(f(media)) + use_skin = 'default' + except: + media = j(skins, 'common', url) + try: + assert(f(media)) + use_skin = 'common' + except: + logging.error('could not find media for %s' % url) + use_skin = '' + return None + return use_skin + '/' + url diff --git a/forum/skins/common/media/README b/forum/skins/common/media/README new file mode 100644 index 0000000..3376e75 --- /dev/null +++ b/forum/skins/common/media/README @@ -0,0 +1 @@ +directory for media common to all or many templates diff --git a/forum/skins/css3/media/images/img_tag.jpg b/forum/skins/css3/media/images/img_tag.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da9e409dc4b4eb3e1fa07a1978d80058c875c575 GIT binary patch literal 676 zcmex=iF;o{=v;^GnD0RsUZK7IjyJ|1CV5fNcw z8EI*08F@HhWM^mR<>8eO5Ri}(6%>_%OAyQWe}F-dgMptxftgW|fk}{&S&;Gn5r!%T z1}0{pBN2d^jfIti5d;uoKt(L9%mNHdOiYZ-EX*(&MkZz!K~@GsVKzm_i9&%&MvDX) z7@3(FS-9XvG64ky6@?4~6Bn|6aBQ5o@#4deEFwlh%KvXM@Bj^B5@Z%+uxGe%Wt*M< zwsksTQBxAqO4$6Kd}5ZKVi|ZV@YVABGassaGIbZs+V@vyt;M6>7m?Pti{oBAcHK0c z?cKA>|AKaSz5LX$|JUPR$KogMPu-)}enV_W!?*j#PUgox`}%eE=~=JeXO>==7V%^o z&nD&7$-m@xy0Krjv^m>7b4#&J>NMSDQNMLHD~nGGOC(Qz-8=hk+||!n-T+}5nBpZZ7gyj6^k zeN<8KY)jQSdo@LegW-d-Ci8@jCpT^7uDpy|Zj$7q;@bV_+T!cwtmbc@e&b}+3~+wu zGfk$3WBQcvC*lG9)j##*57Z~UlQ-e|_0~0a!R*4Sy?2kSTEzFE%giOHK(Sk;XY%#+ j3`ZsArl@I}Uv5_W000Sga6xAP000aC000aC&ZRPb000CW zNkls`UhJ)XGebcvR|5WXzRx}H`cmVRA=-?9dy>j&5B5{)=F!G z@#X?_Pz#kRaRKfv?Qy@zhQ{#La<3J{UL{}XU=3P6kjH^_nMINNL2^h!I%HN1KJnC# zoUPB66Po8HYis$-5^*gM8EKTrks9i#qMyWyV>Uy^&1}?H!f{ z@TAalQQr^hNoBX(3GzkdL+KL;js(lhCMivK>P2Ql{81q?#aJmyDG91(D#H*nHKN=) z2#^2hzoI3BZIb1@*a8<5nl=tRfW-G>UkNRS?8RyAju@~w)N3LJ^q+K_IT8H7_!UC~ zol=@RFl&*59HSAt`Am`|MsPfmLF2cjX=Z>yGbpx^cUJzaz3 z^4P5*p5DhSM!=l-#7Uzwpf%XDV)!6LPai#1Q6Y4)>J)9zX1a1;Xb>m~ z+zSd2VzGQcS`CfX)&pJ{IwE_mBb#Aq!OW&e71CymUl!(t*hojMMFo3t$U`{~ver#G zZFhh#dic2RgrwhMOKoMa=#7*!_6!i4rQ5hbQCBIN=mycHNR0hVV6^x8yc>ZRO+%_C`3JQ}^z(?Xa+D@|N%m&{ftq zX5>#0@^$$e(ePilIFSAFZ7~5Fuimfmjfd7_uKUB4VBMftBpEIxHHEon!?WDMTLA&h z(T_F_eGcOWB23FyaBFURveyS~i@Jw~20HDP2lF}=8t+lT32ljw9%UKi5G2b#@mDc(z{T4$5&7vJPdcas>6a<5?C_Cl2eHJ)V zQ*y%hKvVw11>OKujJbTHryicaJkn^m&5E#3N9|HG>a%4>WO~^8AKM$~V}R`w+x2;R zp;;GyE)WPfjcsDJ{-&|k-24BE&X8wMM;gFo9mvzF;OfqM=HS~fG|m5O@UoF>E3>x9 z`HgqXm(3LZ+IHe!e6YAtNXFx10000YdQ@0+Q*UN;cVTj6004N}D=#nC%goCzPEIUH d)ypqR2LLwM23QbN%3J^d002ovPDHLkV1ma$H +{% load extra_tags %} +{% load i18n %} +{% load user_tags %} +
+ + +
+ diff --git a/forum/skins/css3/templates/search.html b/forum/skins/css3/templates/search.html new file mode 100644 index 0000000..1d9c416 --- /dev/null +++ b/forum/skins/css3/templates/search.html @@ -0,0 +1,25 @@ +{% extends "base.html" %} + +{% load i18n %} + +{% block content %} +
+ {% blocktrans with settings.APP_SHORT_NAME as app_name %} + Search in {{ app_name }} + {% endblocktrans %} +
+
+
+
+ + +
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/forum/skins/default/media/images/blue-up-arrow-h18px.png b/forum/skins/default/media/images/blue-up-arrow-h18px.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f29e86334ce72d2d28989a133571d7bf53a94e GIT binary patch literal 593 zcmV-X0{6iqad+$V|KR(Q{q;Ok;ua!jjQtuI1z7)O( zySE1i5k-TnUMhU^!Fth&L`=(4hnCB&mew0>atrF^~@9muPo$nmJ5BNLwb>CS+ z;4aaxR`*WD1Hfmk^?b25_^vW#;gMP0a=;-lw8uKYF+TucXlk2wNsBS@}pFD ztaavBN$@-;DyO5Dqi0!d9a~=U7;O0Ayiuq>#Jyi<@Hb@35~1ra$v5dmgDzqB>^+=uOM7b5+>fY}+kwy1R`cV__*wFuQ!Bi@#VE~BJd f7UnWh{5Sjn&bP0xmAf5500000NkvXXu0mjfU!M$- literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/box-arrow.gif b/forum/skins/default/media/images/box-arrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..89dcf5b3dd40fac0e6afb0b1a7ff899a059f923f GIT binary patch literal 69 zcmZ?wbhEHbWM@!dXkcJ?_wL=lfBzJJvM@6+Ff!;c00Bsbfk~#Pf92`7{EJz*0#eqW WoE7iinDij`X5pe+YFj-S8LR>Nkr%B1 literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/bullet_green.gif b/forum/skins/default/media/images/bullet_green.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa530910f9dc11fadaa2314f72bd98f29df39daf GIT binary patch literal 64 zcmZ?wbhEHbKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000VaNklJyRN8J52lge3Dk<@*>AXrMmGP=H z$s9P2&*V2vPMX-1L}oIXPMP_nlH^n>#fZ%$`c@)Y4M0h*N)5H*Dy5UhPr>W;VqjnZ zld(w!&=SoOtX;bn<{y|*_V7bUrc~hhgft*Y9vryzSY}M06iG7y={dwn-rQt#5xb>+`RC^f6v^z4(Q|d8B-!MDTk(XP{Q8r-@ZB!XmXA&5bSa9P_XS zTCEm>AV9CzqqMXX0MOIZgGeL-kH>?Fi3wI$un4HD--X4uEk+`dKs=E^A`wR-kx-fp zO5tksDt`IIQ;5Z45Cj2ErxSX;UeVb|B!b%7T6jDjXfztMI$CGF)V0_(RPU_$!r;hu zn9lZ|rQW`C)aUP`!JwZmydNaNB2aqrl2)swmX;QZMx!*Bbai!+R;y+0iVQ_`zOR=C zgM;K7?4#bkbL8zkOJ~GxdiQVd(CO||bmE=kWH1;A09mb81)hvE^BFSsTgU&bNJWOC ztT-;GleTW!d{a21qod^O>my%ZAB~QV=7j@*cmPnPZLnIUf?B22T%*y5Kp=qT=4NQM z+BwaG)oMjJ9A;B#Bs79{#}S1s=b1+$c_V(GAE8hPf*_!N_wIR3kkx91AP5)f1LhU0p{MZ^CXrv4!x zo%i*U_q?RV@4WXHG89YN8xDu_#t(4No=U&Jo}T#mV+4R& zT3YDP!9xUqj=uF)UN~}pe0_Zq-ks~{XWMO5zpIW`EYs79WqNWsojGx`Xt1Qkj%OUq z-gb3$&8xN9M61=p>-Dm>jzf;LFP+w4F6~qEJVKX3FqurVY@E$zV_I&r*%W1Zy&fi$ zNwKnrLK03{Ss5PLxDjJxV>r{@jTOuE`0wO3Y}U!qMyXh{a+E1ug;r z%7vfc5AII1wI9abrbYmOyR$1Njx4Ng@pzP#D|w7a2#pJ(xpq`?(9P7 z(xtp`WNCd?Qn=s$@fCLONB7?k0Eoq6`1s0|oH&eNS)06GFC(YAx|&rIMG+Q@1!l7u zX0sV~yFF)FM@NUkUdmeRJ?qWTUJe{TP4H(Sciwdu+S(6ebaWK;yXsK#z1#8j(W5AP za099~Z(%lcF41T-aJgK#O|t|qzx;C6I-h)UeNGH%qrq|DISvB@1Com+2#gp}6k#@- z6^%qugeZ!ruC9i~VwqKT;lc%Ub#*Z;x7&?@fdOd;m?l;tmt%fqw#7`=T&vYOt2|qq znfGF`7|wKeqpkfgte0#kdvF5)px@_1zt4xl!a{J1)N|r2Qmav4SBKjcFJ|}peLj|7 zreBt`KN%V&|pt!ggq9`H~i6}ZI575lK?1PG;2!p|(*jdfQ`Nd<8qjleYth#+Asy1)I zhnFL$sH{X=`(adV+m;v3*w`3anwqh7(`K~p+mF_L`_a_U007v%XHU-lCm%bWIiI-6)J@3jZHeAiPP48 z7`7cdaOL0s!au`dxSUSxZE8eCWhLwf_M>FY>UnW&J9fafV}~@*ot^0F?8Nm?u46;l zL)cQaHD`YmCgSsyb?eu`P;7w5^H-xjdsS!VZ-~n8|ENOLdaWM?V#dG2)HJFr9tW0|%YqQ(!#>B(~ zg25n`FJBJ3-OkG7ZE|K==5(HpkFp;{CmLHCq0wmIcDrG*SXi6PC|e{FfyH7$M@I)V z8Vz<<@0|5AdwyG=6=&D(I=ueo8#jfsdd+H7R92#*vJ!^k;=FKJu*W|x zk_klrGl7HlgUpvS8jUa-jnHbf5Jiy<`g}o}Yq4u+JLq6Rn$Hu51$+93`cY6&0DF@i zo?{+pwOT}@QH5vVa=BPA$7C|0xw)AQfXn4#bu-HVVEOXph(sc|?}zu{h_fBnr=}2} zL9iS*P9;<$H0nVR0kLsr+|JUhsq9(&;-H5o|Zng_MaPR;g z-0%RV;!~K4$B~G~5l_q@I7^9PX4ba;*Y)WDdvcoO zj3Xnq$kMHKWW*MC0MyXjK>pzY3SJD*qd$FA5m5^S0t2x}BJ@2C6#Q+Tk{q)lBUdp@e%wwXN`OJIs z;mp@QAFOP37K$-TgJr3Cx*Ap6s@PGF=0 zojBKXZow~eGp1oalQ0+lLI*8hj5!IG<=)bJv7u}O?pS>XzM;{iKb@L3Fhqo_u^5I1 zhj9Aj=>-$}S!wXi+Ti)tginp&ujD2+8btKz>$5D*Z6fPgSCFq)s4ARr)MU|_7VtMKsfouZtnuBfQ3r*Lp^p{JlwP*A0- zq@1Cfpr)U+x3i3qjFXs>m70`}la833m$0y~v9++Cqn)6jpqHGMz`(%8$i=R+t&Nh5 zq^hHon3I;9m5!5*kCcwBvaFPulefCIqo|^rpqjY6xQ2>_tFEfP!M(q~zmb-Z!NkF^ zwXdY8ql%A-qNbsRiG-}Lte>Bs;NakWfqamakWo`mhl_^E%*n~k$!@r-RpNfu(v9z$Sv#yYkkeQyCudlC)kBZUM(1?tO zq^G09#>2L{waw7X)7H|dtf|k^&Z@1dwYap%%g3Rnpm}|HoS>VDj);<%k)^1lkd%*< znUoe67OAhPkB^U=pqrYWnXa;~tgx)LxwV*_my3^z@9*!Vs-!|hLJJEE8XFqAy}820 z!LYNi*4fs!xwVOnh@YgMczkyP0|LLozM`n1$;-&Gx3G12b)27@&e6@Ks-%;clc1!Z zl9iELU0PIERKmr=g^Gl;xU$R6%ErmX(9_Soz`eA&vvhZJw79gjyR?6Tex|CWKte!! ze|o5^sL;^RDk~`}EGmwYjcRUc3=9mnytX_&Jifucp{1cyRZ^m+qKAxzv9+<2my*1| zySTi!USM6Wv8@CI1gx&B#K*);PD|9+)XdM!frWsAg@J;Ef}NwCwYjvIo0pN4k*ct% zkd=>?nw0?o0Y*qh4h{~2hk=ffjhdaB($&(6jfskliU$Y>VrF8;%Ewe!Q_RoHvbC|Y zx3QF$lY@wYo1U6AHZ_uzl9rj3L`6i<)6kimm}F>Vnw^=Ko0g)bp~T3;Y;J7I%*u?A zi_X!`p`)OSkc!gP(Qa{V)Yj9fuBnickDZ{LGc+@`xV4UvjvpW&CnzUB|c9N&VVzJZykO{A@7ep{vsL1vFKYgqeXubk1PL(42z&9igG8PKEBsFPIbL zzuPQqj4CqrEMY-TigvwMdElbc@~G}?X^61YtXXhr(%*jbi-!-Jue-W#b9KF5yD6eD zG(SjF64G7tA(Ghdlk_}`JVPm!JQBK@x7?q+>*R5;X>8YkBG!65q%bTk1~iJr2WW=JJ~jRjbon3xmwrNDO*a zj8qu;_Rc+*E`y`Yo;3ev)#}vR9aBP(_;`r}kZjp=;#qK<=jP3C*uK?uX;3q;pvPI9 zfqm`VvjJda^Fw`W#GE*aSdf@^{sBhL;jbH-(rWWdmQch)^7j?@j>9PVXg+opnq?<$ zEB*U?*A_OWtovol6lT zk{gZzmk$IR0h<8$b?RJydzC)N#DxPSfrKCd?xt?Cku|+AVihEG6-7Upu?vBKBf$Cu zhrwm5!fP=j1=+9M2bUr7S=dntD*$k zBIB_rQk#DTXz~UC*U81i#hzSTXaQUffIxw70&o!(96pZ0_PpRzc?`yu*-L}+fPRpx z$4E|w)*YmXYFXy2v5~I|H2aWvTgm>B09zIx#^D0y#h~+1G?8bn96<=Clh#zQq3_~? z(ikgw8p*gm$AYvao&D-r&E%LRNc1YXa-738Jk2 zgDjl@emcqSE0v0AqEYKv-zpnfBN4j2HasE2AdIx$F&GZy z)l8%aPwjyua;BpyiV6i6DrDnH0Z9Ke)lQ^BUk4_hlmRHx`M?e%`LmSk^hmTio+U&2 z$k)xyZ8$@a{i%TcQR1~oD)CpW%|rS~C=~i08|KF0*u``t>8lCP!SCZjqWlHYe#aCHq+7okbzZ<)Gb1){Qx_Tj|xVU(lHGjqzmFVb&=VEhn z65E0GTai~TiOk;xxGNv*6zP;~$ zL=pRI=o}0zK|=?`(YY`y#vshVBMqwZlP@K6uJqQv$DA@VwuNcj!QOze1Hx?ViXp=^ zM(qw5GE49{VI~IDqX;;t;^6i>%F@`WJ_EYme@8^MqmJhE400000NkvXXu0mjf D3>(Ui literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/close-small-dark.png b/forum/skins/default/media/images/close-small-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..280c1fc74e47c0e7d1c68d6f356eb22eeba7a2de GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~1_3@Hu3NY7ShRS_jG43c?mKYe z;M6!dxb8-^+kP+MX_sAsp9}6ArM>V3CjzZ7^A^)I5Q~ t!yzC*Q0L$Zl?Eqn$0Lca5`Jx9W=NmTc;}pLNdZtBgQu&X%Q~loCIHsxKFr1QCT0q{1{MYeDE)e-c@Ne1ia=5ZCX&{{Hy&_tW!N_ZKfc zpObUM#pTWAs~3xk4w#ty`t$F>lBGXhy}DLgdpr1Q#zqRd1{MYe;g^zIfZEtgJbhi+Z*Z~+S_nO6;N1-r z;wE)e-c@Ne1ia=5Z4(qXDwR1Wb5`Fd-okU zaq{%lYd1c8`uyw9U!Xizkhgxu4WI-^NswRge+Xc>*St3pD5mS_;uunKD_NtRfsJRE z&YnFcvL4forc1XpAK{H{IrvG{>z#&4h|Ds+W&FE$GCZx(SSr0JY6i#_Pgg&ebxsLQ E08gA+X#fBK literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/comment-delete-hover.png b/forum/skins/default/media/images/comment-delete-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c69f4489359d8a958cd13ad325efa5ddd4e6b3 GIT binary patch literal 1113 zcmV-f1g86mP)7+zVGiVHJN21v0xBP~(;O~`&W~|Xatz0>6Yb}LQQgclT39cy#T|~eZa=W6aTmd0)+~4o?;{2`y>TT!EXJ>oP z^F7~lp63zFTT@fj)upBE*Sm~P%_6DkUaRS5?2?vk=I&w z>**YpqZ;hofitOF>`sVT`W?u~Wr-PGV8-_?In@j1>EQX{F(86yQb9biz;jbR*fKLq zR=YsW1RuFH31;-*$GyEt6>36lRB7dR>-=XNmct_J33AGq;7PRx)Ty!4!7U(KZZQ)Y z!1jqd&$AdrXS6Q{5ZMvUkq?1w+v;EPJs^%I-|v)QRs<)9+d*AcLGz2Subi^5j^)su zWBpML4l2b5Jg;7y>Y2C>p+#+fHrXKJ)x41nPOxX@UMUEGs+}AhcYu66{@BvP5ZZ8T zs&NIVcg99X@_-1jLcDJ2#mEDePK71tdUsYaNF=aW#EEA?{e3m#@{bU@x$U#2-ykCP z;k!zn103R{NQRjcKRov3qhQKQc>yhC6ZwE3kz@cADqLi)o%4!D+e88etuz7-@u2(` zL~!9>u|EUjW`j`%To88o5s2v6iCf!2IOT3J4b0G@8g&OC{wuleqs=$UTQS4{aE)ok zL7qtNyz_0ay|J=-Z6p{C9q<3t1EIp>&LgY9?#kM>#s$)ydLg|YaB!a}0!#+!o!>T{ zn=QdMuhmDzm;~qt`E>m9q~F2b>K^rM1k>*Squ&R{dEY8;J(v&p8oZNWv<=*LW)s+U z=3XgqfGkPqTe1rSc3IC00YBYCvKN3<<}q=r5sFq14zmx$a_N_)K#Uj>_k!v+J~t+ZYA`vA zuPjC9KUi#^`=w3onDpZ#TXh>-49c?rh|{A@ydbv&A!d&@8-)~8tdhHrNJO5L3!r00000NkvXXu0mjf=646d literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/comment-delete.png b/forum/skins/default/media/images/comment-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..e1c2d8afaaf6feb74da3217157b5b56f577db839 GIT binary patch literal 1092 zcmV-K1iSl*P)@#F6r-zys9?ocQc3WW$(JcTZx+n292 zJ|ECH`?JQuHyWiMb;rdg=UmpH{Gf4vUgO*EHSR<;-u)td9{2n!3>YwMoQr#LFYbpv ziE%M5#-$O86e;q7TW-0Fc3E$8s>Zqe`>;Vv?wh~ivp?6RA;IaZmMspZ>j+c7A#pE#&aA;6}qZOvKuVgJ* zOIDC$a!iiFz}CRlz!vmg^z*r-1|s z65y(GRk^C*Zs%_2ZU@qGT29MAnlx#^fdfZnY~%&K!jJp<98HiVOBO5vOTZEUcix?M z=OGi%#4~Y7nv>?F8IplyAQ^ykBArMl!0mJU+&-`xtwyU6xZ;YdN?poCMMoEW|AsPU z%KIDAsdOrxf+Oq*JHn9lWIb6A#3S)YJObrlIam%t*<1FOy>N7VbbNFSnZ`_GrV;G* z_Ii6gNGT~LrJ$0xqVr_aynKffC(eyisU(%8QuBh^rFN-Zpf0IP>Js3=gXggs&<7u} zCf39nh?t0p7$^qCpcpbMq)3r^tq;g=6IFh{-|zQV1XB*Kx#s%MXKGO`s>RkxEuf{H zcG_td-|9jwI{(rR$TysD!inNg3u-|v{P9xDvoxZwHvP%|j{T>P{_o}e4~UzLk=evS z8UO$QB6?I2D?NY%?PN(TTo*alb-Q_5Tb0000< KMNUMnLSTZ}-Sof! literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/comment-edit-hover.png b/forum/skins/default/media/images/comment-edit-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..8291c565240496111de86671b84aed84ed5925d1 GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamSQK*5Dp-y;YjHK@;M7UB8!3a z3=n2qbfO8wkSuYHC<)F_D=AMbN@XZ7FW1Y=%Pvk%EJ)SMFG`>N&PIxXfzj5}#W6%< zV(TS)@90F40}s`&AF+t&>{<}7z`Bwn=^%&RFWFsJJ=>LHUnNb^fM`-mmHh z{`Q#N7D!YyJ)6?#~AUmr`#?L}`ir;DDt?e#Mv^P_70 z53+?XW9M&gu!I$_OtcBHFB!n$Jj3fhBkwztDnm{r-UW|U~;@S literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/comment-edit.png b/forum/skins/default/media/images/comment-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..bad5c47c57ac45f024889af405c365d90ecf71e2 GIT binary patch literal 433 zcmV;i0Z#sjP)tarjoK{3r( z8Ult>_-(ZW%0Z2M$m!9xSLyy;PjlIuga!*0RpDQ!5PVroG@;6^dFQbb4|qGSw};)CX5q zh>g+(v7T)*3yVdfg*ad90)1EohBwD`+;)>rJrZ~0+5Q`U-tBF1*Fxl+jCVReg6v+F z>o3gmk_U{aY)*c2;Vz?ry8$cMBRcduNoxtFZjGx5#-d^1JesZHtT-| zKEsu#^`*cug7O@D1Np%oDz4@p%sq-QQ=<+M6fuu{u(yV9U;WgRC%OcR*77g|62Nl#i{16zGVv?B$+MrGEgv{6M z_r^DXohSbtD1|!-Ztcx_pjMhmQE*z-kHt=KHmXr^0L-zyew8?fX1TvfbfM!_dampP z-KIa`0=W4q(@y|h&A)Uh|IeGK+uTFYpEg$C*AIj9Vt?o#hS5HM#z;8~+wS4mE^tC> zw^)U64*O?B7edDVs{2K=nCz@jijN7!Q}lDZkFP7m6pBD!ly8X%pg)qYid)}+(&JO( zECj>W!K^08+-f)9TLT%_?G?G*pgNHD60~zi9cK}#v35$t$0Ae4ci1uNyq&RPv002$ z$G`3%edMRiKfT&13?IY$YFNJ!`6FDb64lpV0e2i9#jk;ykFBNxjp8K^g6tJdau}SK z)z6$7WOBoXa43^=UDH>f1LOioD8` zty`|-9+_;sbbUkg#NgsiKF zt=PJSL?mzp0F8%6kwh-ZJgLs8LUl1(;dXnE#^;>-!tYb%{^-d=eo9X~cK*hP;+qYQ z%&{H>V1PbrBj|i}BTxall|Pw7AaXDm0CF)9@IMv=paB<6F0e#AF_r6sItw0000YdQ@0+Q*UN;cVTj6004N}b4%X8O-xS>N=;0u Z1OP9b1=Ow#sZ9U?002ovPDHLkV1kQI?}q>Y literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/comment-like.png b/forum/skins/default/media/images/comment-like.png new file mode 100644 index 0000000000000000000000000000000000000000..87a19b9fdd401f4a48eff72e1bc50395ed9396fd GIT binary patch literal 1530 zcmW;Mc{J2(7zgm*3`1EbOJofpipG{Tjj=P<>|Fa&wya}c%e8c4Y&C`s8EK|)NeN>a z%}A7e7?~DDgu-Mkb-Tam`JDItp65BwdH;M19qldoc_erM0N}T_GIIt~fPLUx;O#KS zDg%Qv%*4(F0RDZU3oBX$d#*rROS9j9>Zr&58*p+o#>z7uOshY~VmQK>J;cPAgn{|z zJ)q5-wGRL=OKUR|7rmF}6>lBNlcWa6H}{Q7LiX-HMw*-~h9N|w?(bOSU&=k*eHp(4 zC5Y>mX%xK9J9kQ5X|2Y$3RhJ4l8$DDzzO7-=e*FIfm|n6E?Pm{+fpHi+w8HL^I^}g zJ~ASDMOII_Ha^ayd@@-3MCTCdEDcrLTw%B*(4~+NGr4EZ6pQlP78~E<8}H1l=L)am zS}KflQXdI;lo%=P&Ap|T&ift;i|+jJyyo)p(R%$|g40#HyMf$$5mVdg|5@Y}^@x83>f%B2n^TwW0`}4h+%^N3~!tdEy zvtma-;s-sfGf6iRkXL>-G`v5O3<7wuyLsuip~GjDs>zu-O7OhuzS{r4H-bzSnc)- z@}BDzSFh}}7Z;XfpkGkr33bj!CL85P+#%?ggC80c?B}SQ=&Zb1c10_yaa2T1E70QA zf+2$#LD%8wo1D8GsqH_WzihfKM-j#3{S|Q1kX@1o;0&Ku+z2}=_e5g1Jp;l*8o>nt9>;9xfy16xT66Dl99b(VY(oG+vI{SlK=g*E&g`gCwj_M1 zymi8NK64W8JTAxN#-^f6Ry7{hS%f!OoHaTA2n(x*d17IZj+;?IOkg=IbNTmstRPFy zn3Jd&Ug!l)X0Jo``Pq;>RuC0HzB=+z=}kV(7p+F5wZxhA2aLYj5YzL)i`$anm0tJU zSPFwpI8m*i58gIsy3R6T#Ex~`Zu@DdPHO=#CPkzz$A z($OEb9&k*y;t8lUV4Vf-!qhIuW|}6gs=uua zs~T}>L>+F4`#aVlAruM)35UZ^qmIa3Z<_fcM5d{$)tCyzVS{8=Z7_=DGD`nB+%1oj z^Yni3f0a*l@kqFIH8de9AT9&|lIP>m!wxpCTd(ZU4*WKDXc8xIt_DVL;Un3B+kmyX Ky;%#&Klgu4&%)dQ literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/dash.gif b/forum/skins/default/media/images/dash.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1ddc507fe00bd654fce38ac8552793aa18c9966 GIT binary patch literal 44 wcmZ?wbhEHbWMN=rXkcLY|NsBAY10&cvM{hS{AbW%00NK<0~50k11p0y023w&(*OVf literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/djangomade124x25_grey.gif b/forum/skins/default/media/images/djangomade124x25_grey.gif new file mode 100644 index 0000000000000000000000000000000000000000..d34bb311615b1378a672a828c7a7916490cd882b GIT binary patch literal 2035 zcmcJOSyz(>0zk8Y5oHk(5d(s_FbFhAqNt4L16&YNCyID%iyA#v9i~-V)T#$7C{?Rq zJuXmNkX;Zk3t36XzAs-E$W8(YK|~TDELE}gFw-9~_w_#9r@MFGo{ViLN+D5@_t6k? zub_>}Y9`ZKyBS?Q+zuw^CB28p=9m6l=^h>P&(87W>M^fRs?m>(j#(W;9ErkUvGq!o zR>z=aV9@3qVhSZRzIguQM;cEA4PH>{`)!UPyVLdOr%&oW6O}KX^iRvR21>7B_K!bg zpuy#NEl_HdeI}XK;2M6dGg;OB7NH7sx`ycjiOOJXqcVp_-!Mh8P9}%M;d7*l9dn^o^Yc8JiXo6#2L{zfi^DzK#p>;|ITX6Se!BxS zS=nOw+`D&V4qvF$^jqyzo~TDG>y;|lVi{d1<;qn?yF=A))|stRQ2&y_<|)*2U7tjw zV~V8YUSW?!VYCi#Byx?(%9SZ)x_-xyo5JBc-5#D?H9GEn-bvP4>_a1?Mw^2xQ-LN+ zBe7ec(5U;2FS?oT(KkAyXb zH`<+SiGsov4vvg6M6xClb-?9rrO;i&BX+lk$mV$`rZ`gN>v8YfiAm6G<101ow4OKP zUbVqQ?BTjSuXPq%Yd5pISJ261cQQEjo#Yk@y{?1ASAq*s-`cubDGW-lki_O|%{D4etT9^j7JEC5N#je{GL^~hpbMnVVNY!b z@p%VHZ?SpC-cHTTm>h#mB$`;Qbq9D5VJ`EU_H44c4@Fu%*g{g$2m} zjre&46atBcB>!Fb`w0kg0fIg2-$QN?-a;-U9a~C|Sx_l#$$ zbyds`pGKe0LOZIh;hTXQH~7?2Jo0 zAKTtHp2*){xDdLxDX)5Bq$d9S)rRYTt~R1BZu8%arq9oL7S0X{cVZ83Md|CWuc5Ww zgHJrm4n{311;Egli>`(nMilUQIqb4)5Q?cl#}=HzL03S&F5J5ZvF3I&1iAmphxib7 z=~(%y)r?(&s;zbaOiB%VcyqB)a3LW*6`!N2T5$*vtPDAu4Lr&i{1t{hUIbJv$v&)4 zc!CfB!4I<5zFha<24-Hg2z@rDMTRf&8K%(xp|Jl;8yyb7(z29dO~7 z0?>d2d_u(#9&?g)BczhRg5UXUk{R}HU+hrKk846$t{)2uvfo5}`X_+FT_r3*q@K(Q zIFy3^Nem&SdwmdC?f@$3a69--AQ=DME>cj0|A&0oy86<nZyuyLVuwr{IGXQux+DRXY@2U6(<)cxduLt8LR@#Wa`O=WAre>^=26DJK^^h~Zenh_Qpc_eE|a>K3SC}>hGS%%baA>Rzm6~eB6s0c`oTN0US zfK?FULsI-Xr|IOSn-WhZ6RhFiUYWj6SlS#V&y{WdZMyPn->wo=`JS}ytYDdcZ9-8+ z#g^jc^%g~Q?0bcL=f~+^%9ggo{bjwMjFH13QK!~qEei?la)%F0L$*X*t*SoddGxEM zWy4mba{slN#|^%bl*nZdHaOy*)Xwd`S5&UbXN;^SSGFdf*{A-}K2y!otWP}=A9U0{ sv!XO(598i6?6_>^sSNjGbB$7Sdi(Nfq+XETwht`+l3E>&L_&7_7sn(m+5i9m literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/dot-g.gif b/forum/skins/default/media/images/dot-g.gif new file mode 100644 index 0000000000000000000000000000000000000000..5d6bb28e56377b0eeb80899222aa3290ec2a3a95 GIT binary patch literal 61 zcmZ?wbhEHb1;oomohA-cw8MruKF$f7>W?=Zo!hivofRLHNli}wd9fr@0yBS{oImf`r!T=CJ zObo<=KYvmfSa>QJq}1IQ{xNkh{QGMS5(Wq$!Uiw`?fv_wh=H9yhCxi_BLl18R|YAy zzYGlQ%?$tlTLT0TVFP~usbb(1@&ju6$nf>=e}=c;7#aR?|7H-C1iI?46+i&7;IWyL z;n$xU20l?+1~CPo=06M!Uw{_>X8zCc{xt`~yO&=Xm{>Lg1Q0F*xPh8m83e@j8ARki zGJO8U!0_!K1H&(%gWtd9WO)AQ6T^RoY6eEe8vp@>#en~UKxelz2uZ60@n?olzZn_6 z{|9LXI{!5n!^+`mIW?f>FASf4GBSJvI{OzR z1H&<(HAFtjse0v3qvG*Lj!k<6yW@2D$#+OV00*L7y zBZtO!W_$i{sO4^#Rs-O?>`EBV-VT&i$$;vm@)9CGk^eM*?-}6i0Jdne+|V2 zxHvw3_{Z?+(@RDM_T7w3%nJ!=1_6KoVp+N8l7OGV`-jpW1oz1C@m=Tm^ZxZW7V#J0 oz$F3z1Q6r@|Nj{%0RRC80Nya-9-e3d82|tP07*qoM6N<$g1t^w0{{R3 literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/expander-arrow-hide.gif b/forum/skins/default/media/images/expander-arrow-hide.gif new file mode 100644 index 0000000000000000000000000000000000000000..feb6a6187c2742ea8e516244f139e7946ed757fb GIT binary patch literal 126 zcmZ?wbhEHb6k!l$Xl7tYOG_&#C^&ZP*n$NM9zTBE+}u2E+O#ug&iw!Xp8*?C{K>-1 zz`((v1Cj)p!N8&|aME-2UW?afcmGe&$YV~Jr(qS6`f6R+>scREmz$PdzB_la&4mZ% LT2lR!I2fz}g2F4- literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/expander-arrow-show.gif b/forum/skins/default/media/images/expander-arrow-show.gif new file mode 100644 index 0000000000000000000000000000000000000000..6825c56ee42f0184d66c0fe954d7fc4b6f05e850 GIT binary patch literal 135 zcmZ?wbhEHb6k!l$Xl7tYOG|5RZr;3k^RZ*c9zTA(V8Mcdf`WVZ?*0G&p8*?C{K>-1 zz`((v1Cj)p!N6i7aME-2(x+KmpRPH4k6ma{w6t6)bw%IW-N%f4X5Wr&{_cHgU%a-) Votr)GNqpOrH0{qn(_mt-1^|9hF$Dks literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/favicon.gif b/forum/skins/default/media/images/favicon.gif new file mode 100644 index 0000000000000000000000000000000000000000..910c26660ca2088729309bd9286403237c68f020 GIT binary patch literal 3918 zcmbW4c~Fyg9>#yUNJtP)x!weWgv&qzDu*Ooazu*Ax**6A?m#F| z#FlF#9t(;HE^Pr(qXI z-2eFF`O(pZt5?67np&Qp|52}h`SRuD^+4uZpoiarROc-Y=tt|i%;*;JiL9^h)J(kR8={VcqXm=O|2+G557evqSo zC4;<`@96Hl*};|V5xz6wP*t|`sZ7kDo#_C6CNPGd^ZHHY|5cc7fBzl`f@||hZ0x0^ zq^k!G+{nutFD#rWD!L5UW^iy}bX0%k%3ojA=GR|;U9&DQvs}c4(mRc#qV7Cv4Z&c* zLCQBL-U$F7X`)1K0JpokLg4DdXA@68)phSMQSGddBvPcJ^xm9crN!xkZh;NgNGu+#nbC<&x=VP|rFS9;3_ zj;-zMGTYnt`1ze%VIGQ$8&N1${Qxsx(r7;I=$JcyUOzgzxWc@&VurPW;jggHAA#ib zCc+Bs*L0XxV|qFSrF{v*3L0%}C{@#+YGGJx1(c|3FHuSDswLr9-VxEcK|N*I>z)cO z5sazQn%M)V$Jw8Jw}{xraNg?5Wo;)L%N>l#{$v8j5kaU=WDDbRNXPv>B`HTb8k!uM zTPQWPObul{<}N3v9&hhe=D$QnUS0{njl#mQ`ub^Dc!$B?EZCu z4a_BaGPn@|mQL6PEVF?7-Fsk?-(_`+^0r3&6ezVv}k(MJ!MWwCeo=RvKZjqEsSHTfUyPN0&ic1z}Lo+w~7;T zoB1tKO0!nYdohjglPjuY)b8Bwn6mYtJLvQtAD>m|H_bg!SU6c@If1BD?&y`=} z1C!d_y}R#tz10A2mAj!(4eIJ_E97@~MKw*?|3Vm3*c1Yy7(q};s3d2x{2;8Sw=}J( zyt1fTO)V@AFJ&^c`|B!m4+Cs37L~mobr*-TDs}%#qz(3d73sV6^>dw_4_>ML?ez2y z4tB-p#c{o5kUiZq3pxKm`BGLR!LqyxX)KqC5S{hR$emBeWXR2 zelv>Y40<@AJmB``mU&i9E3HARXVvPq_h&!JYN$X|KA%6BU*Ih*re^14g3_Z|XK@o!bKSBX#B-fQSk*>~vBytZx*{waAbaK}QWzpA z1z~4{KXWdOv6f?szK0bR) zJHu`k$&GQG_Fc4O1qo-;uRQ$Vm&);b&t}yX4n3j0W_=zLMK``s6k9znbmw^{;^OR? zL>8NA;uP`dTHMb)Z$uQg2#^BM*;%qtM|1_TTxCA}8- zltyy~9#q4_k48ton40=w!>|V4JpG_yKzG+5?|6uBu`kp-y%NGjT}xc(yLsJ?WMye) zCkgUk9OFOg{kdTL@ZbW@DbqLiwDeoZ7F`Y|Ox*y>JYXE1lNL(L8acl70ZBq|B%1+D znMmv%j1N3oj3VN)%ngt`b8?U7mBlAyxG1yAS^L+7ZL_v+v$5%3X<9@3_KmEroca0V z1qIzO>Ch0oZ_dNJ*UZc+?7I8r>aKz*)NiK4TW7V$`6i3@6m56r_pAy#idy>e{n)H8 zQR+BuNu2|O8P;>`v9T1LfDX8pyhJl9wU$SenE)Ni#kJJRifnX0tmr9?EKDEh@Bx^j z?Pg>#WbB=H1Z9d%gF%f-@XD;boFYeGM6y$ATCuC2bZ;y(#vyubU>dF6*0#sr|F=f{ z#+uz-TRS%}@a4seaKBo-eEHc*b~ozgqwr}F0-qNBp@|{BwRGIXk3%k;&$jusbkCjT ziP7(spldHejJLLu7bVc!eN_TrBp+m;0MT43VN@BNrUwSl-LMteF|sWr2;pBQY2f2M za&lo!6IYDOOHIpB<_WeT_A%s%`Hr!nKpN#JV@d1-!ySXyUN~DfZGs1K_xA0upWi$z zt`!u(cNaXGZnm|}oICfs-D?98#uUhz(WE4t>Kc?3(%OA{ghB>+w%oZO=CIu5-Z^f0 z5Gc#Fx4{pW{lvvJ15INx$fk#?)lc=^{E;UjX3h~AZU~cW%Ib}1#Lu1%8eW9^Q9RjT zV74MDYk#hn6JjqTHr{+YXJ@#CzpH`aFAfkhsT=>6uXA*I$0q9APGs15AnsE45@AR#B=Sy~Sf!dr{@s%Rq3LRWB z5#$C2*|_(+7+&yMm3cg(rrnmRs%zw+@F}uW7NhLQw7=_1`@^l^&dZLCPg7*MJ0T(& ivS@P;4zyG37NllSyo7GPE?fc6&zb4C#R)zfz5fG3#T7&V literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/favicon.ico b/forum/skins/default/media/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..35c9e149fb8755e7c2ff33433a9022c146b20bde GIT binary patch literal 1150 zcmb7EO-LI-7@a~z!M}h|4_*RZisHeavkD5HJo$T55Tr!$pdxtiq6a}eiKthh*raJl zA#Kn!r8ZI1q)i&NmP81ch9*rksfkHUjLGZHq`U5>UivMwGxO$s!+dYvE+LP&MOyt(E7ns|SJ!)N zZk`GJ_V#z!*tpMMT>OUCRs(XmoWQZ$!zd|vfvc-DbUGi3indW%sS?`t^{v3|>G{ac zE&zWAH8mQT%|T?dImqQ&m`p*8kJ~UY@mWGuD6CK@Y!WOQy+v{HHqOqX3}0G0MQ^VO zGMNf4S03XNj*cQIFIPgN@v<5skre2eXx)5VUZz+*ot;J=lJrJn0QL1cl$I({R;I+z z&>^c`Od1|OgjV}Q3`xf6^c^gg5Imlk1gDd5I0c*S5@OxNq^&Ivs;bnetJAT&Yil#W z=Swik&dyJ+?w9P2Y5jY9zr?9b*NO@i+n+9EGFgm`+0fFWXL`8ZQ6!Uj|IE!fnK#87 zjEqEV3pt12SW@a1$MhAU;CQuI*2KC^p61beZEn_s`ebU#&h%0$&lxWe yNV2_FR=#6)_A9*JxFnxWs7KXmFUy^uKL*uI9Q1pjbuTO&gZhh)!vDel&i?@0pIDgy literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/feed-icon-small.png b/forum/skins/default/media/images/feed-icon-small.png new file mode 100644 index 0000000000000000000000000000000000000000..b3c949d2244f2c0c81d65e74719af2a1b56d06a3 GIT binary patch literal 689 zcmV;i0#5yjP)(tky!*UETcH-TCU7SrqEjJM#?B`_A)!p7(kFf9-P@=@15kkTkGK zgFusyy#KECqZzRdBLb=P?$(kUP;>kYTDeG&{|a+iOiRbI6nbQ)j#7bOf>iF=C+|_py<&Fo1F5cC*iEM?zZGC{ejNg4LWYp=S$L6Qaby6y zp$+F`250{%tU{Lg$5*ROH}y!1UKJS4*xqd7P(Y3JQF?lrnf?yerr%&6yGXLG1ur*B z{$&R1@Oj)yl@%rY5rh?j(j10Yz_DBs`AKFU_QnB;)(aqQmGi&ieOS|21^NP9UMpa< zU&p!f6RZ6Owp^X!EXA=0SbN&h?CrQK%Q3(=YBqqHD^9ZUM0Hxt-6-KT;>lf@j?Z+v zHm(}`>85I&E<7e}oz?6UwjAogowzGO8kSN7+2`b^$Az9L{K5*ko87EV45LT-`_##3 z>d3AGh@>=mbg34|6}+-gT9N+6Dr@44VEl44O&{&|w=qpbzC#iWMKa?5)>tI+KLQK@ Xq0QFqn(9Yl00000NkvXXu0mjfZ8tBj>^LJ3~~S>i&IO88=qln{V-q zOM40!3-puuch|@DVB6cUq=Rp^(V|(yIunMk|nMY zCBgY=CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5X*aCb)TzBu@{r~^}iVZzqfg(&L zL4Lvi8J=!8@B;EgJY5_^DsCku9AK6xWM-3k!OUU6z#qV1KKathOF(%BPgg&ebxsLQ E0Ke)mAOHXW literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/indicator.gif b/forum/skins/default/media/images/indicator.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c72ebb554be018511ae972c3f2361dff02dce02 GIT binary patch literal 2545 zcma*pX;2es8VB%~zPr=ibVMCx-JQ^BhLDAsK)^**h(ZDp9YGuzZ%~j!}+w%FI;|aC7){7CdVvG)P{bng1y9Te*f}~*`1kQl$jwb z$tlW~rRS!X?#xfm_&6tTdp_`cjgYwbRFLNdoJCN$S-yhg`ZnC-yvedRSmOh%;Y`Gl6bY$Z-}#C=#F4%9!I1b zWQ~f+9P?;vhCxWwlwl=lrWG|7IYo;{jjmzJ5R9?f>n%-d@>kLINUc z4wM5dAO;kq<$}Dk{2-u0$I6@2N}&cUx9nmV1dYc8jfC}%=F9WCg^OQK9C6poh#2!A z3^EU*UFZvS^)?bu3T?J;@Ahb~%I?+@4!l5!*TjC}GIslNan-RCrrd~PdHYnNLJk+m&`$Y+NV(e>CCu%R#_8GqY4cv#j`#uRWdsg9DxWy(?oOvgCU}&@jy%c!H&-Q zqXJxajAtmQRoRa9V-RFXXh-bK*;Fum{BjpkYQGX~i@OZ^Dx0n&H}kvGKqQ?w(6iGXu_g08T|_hp#ZvFzIwKF*a=oMJ~3UGAjZ?g}GOxm44td zXoyYrU*I=y*vHv89hkYH(v5R#wc)BC3dZJKb3K)f>zaM3%JP(mpecViP0eKKYf3zy z->jx_mc?mCtPEvCQ?uppk?eLJt}_IR7giW%Jr)RyI!+E-voIs*lXI*z`GQc_&D#X( z{6G};HPYj6O|$lXxBJeDaweqa{4L=tOZCjTI^&UOxXg})LRG_cr^B9Rqt(i5ORbQX zq`_xCRsH>xEYY%&*Nyi#{S_JZNlTm#K56`RI%7^amom;*h90Si&g1CfaFV3D|a!`3Y-GKKbL*KSbl z>I96`TR@CqPJl(>QqB~RvK~-U)`e`l4LIqj+IU^~yyIe*|BRVB>4Bup%j{tLdKz4j zY^<8P8m~GRGz*yv0&-RJE+-keJ+%m3wNeopzsltWd->eWmBVwUr)pX` zK~CD<;~Z*Uy3W`3+MrEYxm5qYQ!z%YI;y7DTG`UVH0;@{M{!B&id_}3DBQ?zsotuR zEGLdRx25nLm%-wjlnEi;-aN_1S7???rO~WgA67jjr&(vRa3y$u#kqJbeKnw z{!T!1li9>M+sJ6AUe+*9d}2uGjhzd z|L1Rtp8uTGYyZoQ*`DS^m2dw-X{a)l+3m?ncvn^+O>)hdd3(hMtlhkRGns{<8c0I! zDDjpmwtj?@!6kA|iu3q+Ai;@JR+ zfk+ln&YFC{4bhK6IxVgLs4W%^8Lk`qzWU*L>yq0A3;l}{!wKZ!ue)C)SKI)9dl1hl zhIRLV@8E}rwvE{gX(}$f6x*k)_`*Ijt1=EU-Ls6-(phomeQBgtUs z5Xz~Cd*nE)Ac!0i4ep}Z1AugMB(&F?)#CU{Qc{Sp^vKsdL}vRB30H+Bbzrn`M##H3 z{W8dc_mDroEE+p8_}mnJtzZ4!RNe)zhB)Ds;S57nYSJxtek>^~&(7B+N5MPf2+2xx z5Dl&4X|c@f{Kd|z1r+N|$DmsoVp*3yOdxT^J^-VAk)Z@$4^XrPrFP-Co+MXZ+KJ(W z{JNYvraLLWA;&tRhIKOvhW|HC|L-dLvAUF(MG0(Nl?4tB{RzN7I(}Cb%hwN{crFC8 zji#aJElKvDFV+&VI1V?oUMA>*kto0^;3W8FQBSZ|{ z$v~TqE=(8DZa^i$^oht&h};P1N&wMXorKh*Z68gPV&ouy>%f36Oqkwemyeas$Qbz# zV?7Jy%o7KY6^I=P@eCji%W`o5sf(5hySYo9$l4e2`(hIV_?=H-#R6}0$WVA|*(K@3 z=5?@RlcLh(meW%A4)hGzcvEpm(_w?>zhL*i&s9$2>r zAtk{8Cia|+Y+V!uX9BtpXoF%lswuRKsM!pSs!?yhlCy!269K0|b M?FSZn2B>%I-}ej|s{jB1 literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/logo.gif b/forum/skins/default/media/images/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab690de2a1c9679f225d80560cf5e06f3ed3cab0 GIT binary patch literal 2114 zcmb7<`#;kQ1INFc?}kmzHeo{yGuL*6N$J$gW^>CWm!Vv8cjzehrOw<6kC^+A;}XMS z9hWqvT#jUODI~OxD7lnMhwgPeub%(l`TX$y?frVaKMZ?2s{=tJfE6$U{MhR1YFJoU z4je8LiFS5&h(zLFDJkW6ypodA(yd#)QBgD+O_H5mT3RZVNZ!4BCvQ8_ z_=gUO#bT*c8W$IbL?S&rJmy@t@grT|{Qq zh0K_oTq=kM3b=(hHB}l|Sa{x!2he3@YU}FjC zB2wPg7;jqo?5x@bucWDJKv=WFQdv1#(Jmiiu3QehM=d1M%>Y4%J=mrPWvvHdlx41Y zW{_!hs0(#@wV*PUiDa7^E4ZQ3{n41+MvK%~K&xm6t$i^2870Ve4Dr-LN8G>8!a$)k z#3;u#TMRXp#cJ*{wMpP_nt9h$(PgvvlCQ>%z1`Gcc+knd#Ox>?ik#ISUP7 z#GoF#j`(()T+*;pki7QOd2ZU0?Y^JHaexWK{?0W{_Z}wUF4j{TvesPlwUA3#aZB+{ z7)YI}-H*93NW2`4MCuAPrZFhsV^1KID+PK(qmxx9HT5C{j_CnlC~n(<81SRAjmOZ zuX!fW#(kJC!;9E#B$#R1gk4Z3$`g2l&BG|F95wx6RDusfYIzZrf6-9!GW!ob- z5RpcTnp9Vz>-kOzC5~=XgNdh_RbUiRA=>DONAs;-F0M!f=HIj;uSn5mhkNdLM+7b5 zttN!evt6#TvEIC`GlR*a77ZMsw_@D)ox!xX7K_MBKlj;Xn&yVn*X$4(SGL98H(cy5 zf&^ht)zxu~uYy^YePFgdeCt_N^KETM`kCuam-B|;BBo=y&wza0g25i{{z1s9;c@Wp ze&a9Xi9#Ln)oD&b(J~Q9+94y}IMmm!fo9$8Q7O&LW-g-snULrAq*>Yf|&p0Y!q^tJn8k z?tt)jCuQEOXsK&=#eAh|voSsiUN2D@OH%{qg&)3si-LPzC+cf{8u&i1dX~zyBg*eu z-bm{Ad)$|uB+vu0aLRKWOl$|hrg5OXRto?t> zPs;`j#YI+Ta_ntCcl=0Gh^xqT($7(jnEs-ezc#2&^Ib?Ke5DdG))S zm~`)wK)`^@k;ex?RTinBr$R8jl4C5Hx|F5vo~7Fvlqbk2V~kOpuBSdP8*NKXa5^7XcD8 z4QWsdI1r7C`5UFWdm`=0ARYoS9W+*=jQTz@E6d4j+#8f)PaQ1c(kmPH2B$~@riysB z$$I-rbHGrePNSaPD|@pR$87%nr|^CQ@#pJ3qd^@(#WO=IiuPXGuTau6W^wK!GvRWYySSZdh?2JAdxm} z4@L^i%LZu%cDL5Y!_|r^6v_Ot5!AE>=`9+=W)GB#c ztC+B+x0S*yDC=ru#=O9JeRGiAsbOSn}iGDZgXt#=z(6UXyd@4U( z9p+K1+}PylDVYqeCpV~jZunedKO8Wcsk6P?$beXTjnyac40o+ME*)eE_+<1U&jvr7 z+Dy~YW2K+-em&vy#b^9N_x0_KjWC80YkmdO^^qoUe<5Hc8J!dr=&hPb4JX4f7B{LM z>bdE^oQoKI)chgd_$2z3TiqSyiUj&8t0wh@7R^~vNn3ykwMuQi;n{m$UugJo7o*wY z%44O6^@w_RU$I_(C>NM#?PUynb#!n{pa@KQ2Ee)H7 io>#?{QxAKS722~IPR}q^pN0&Mw&!{uAI1ZK^?v~_GK-J^ literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/logo.png b/forum/skins/default/media/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6a250e35b34cbe9113e3a62d17eba05d05c83888 GIT binary patch literal 2081 zcmV++2;TRJP)00003b3#c}2nYz< z;ZNWI003-IOjJbx008gr?~jjw(EZ*psMAVX6$2C~zj0000MbVXQnLvm$dbZKvHAXI5>WdJcU zFEThUFgb%jHT(bo2Lee%K~!jg?OBPEqc{vThnq756B@|1A-n(ok1N~qO=!}S%xrb7 zs%AnXOV+av%Z4;Rgvg&Z;8pZLkpCJj0h!K4QJkm6@$+FUc8A-OQi6Xt%-^$d69qud zrxd9=oqguv19|t$ZM&498}Rn8vU-6$Am@8()7>#@-rKCLQb-rhd811lAoD5p>156A zaQ9oKkShLu{5?SC&%mNI{nR#%&ima)DWqNC#`giy7FByl+f(J+Bwkd-4HEuxPp6Gi zNSIuQ-vI>Yx~sL`VdQ_vKPShM-9{;-TM&@1CIbW`XK$8LCHH9fpT7JU80bnNT~y5d zO1ejDObukN7M4ufREgP(aGf_uIm3K-Pf>JD*4P@zxDXI3a7Hu0+wgWPQaf+h<(JZZ zU}PH*nX~?uEn`~*l+2O4o36`JlaaE9%_4i2x67|7C)fJeQQ#g!GhCw+_UcT9a+6)uG_ly+sOBy=u@=MQ8&dWkv+`CBBPl`GVBERwcyH z5Xd_~gxk}F0jV{)g`}F+q-I+RQ(ZlT>26s`7`lMzH+|#+c~FF(0%CWE)oruXT}M>4 znC`+{Sm=^_q2_NojwA1y?keBdp|y;|3$5@p;b*~4cZeSvNGLVgQU^5}_r)OH!Prc$ zGq;=ng4Ik08RR(W@ZnX-jx>+ByG=?etf*&OYHu`8i|G!ww(_ZiM=F0}WHMwvSAN4* zNT!9`SYV$xs%>UnYEFIf(_LC`J;vY=#f0?8p8j)>c@g9?{nHjgR9e^F9mXLO5&DipB* za$E!=3NWj48ecQqEF z^h|5j;;(@KlzpWQI{Pejwko_X<5n1y_QC6hMmtm?INrLqj`j8$SL(gng>9DnVBWWP@tLX2)6p(*jrgM=V0C^$Z#*eV-zMJ0l4e`w%+CuuVA44fw zXac%NR~MS1l?uP2j;ih{GBZ4-%8&+v`)D2l88UTG_K%^1LPqY^4E^m}D)j#XZ?0ibzk}2RDE|wMJc%MKJ>CmGMiea@KrJR%nT+qU74< zTzQ$d!t_qwImOWPM6{DU$%H>+`6pFolsWG@fWiNDIUQpDE-x3=HGL1iB92OuF=d2M zRq{{+HC^0xWl#9E9L^bm2@%e_4n*EtUP;e{6I$%kSOz>M+cwFhBvV(MjMRK)ew)Sy zp$Ps_(nFWd-}Q^?07Zg_rJ4<@9h9na@Kj4mfZgZ3dt}a>y}nvq19F53@)CYZaSxMY zJDL#Ai%P~CWa3bxJdc>a^BI&e(V!{`AL zgpYOR)bp+a5k};sPZF_6E#CQ|f!q>g;!r8vG7t|@L>=pg zmi0WuKtKY4u>&0}b+EK8y>fK}xMN^2NCsUm(j8SbO~%W?Q1aJD(stgQn}IYm)Az5s z@QXr_!NN+WQCMOT7?}K21M8e15b@4Y7xTln*hlzrHUleb5mhqilq&97xv2oqBe=+& za}|h3RByXb3?oEZ(tzpwjk|J59iA%@4GGC&{t2xU!@Uhk4vd&gerq0o&aFT~T5Mmw zMYLww>UJIV7ZBzp8k^$oP8y>jTswDJD}baok0pFnmG00000 LNkvXXu0mjfmiX8& literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/logo1.png b/forum/skins/default/media/images/logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..d79a627174b08ee90776540abad2e76f28909652 GIT binary patch literal 2752 zcmcguX* z1E?4wgA2<ibF5B?oZ9u^18n1*~xFBuz3-<%yx3)#_ftUE+Qo`d)qPK67?2S(r z0zbj_1R*mtDSopsN*FIl+1W1i27nS38t4}z)g^qLp7y;lhYt7a0jSl3L8?S)fQbgp z9GIgd0|RA`d?7_d00faod_JKJpnwt1uSD7Z2a|-B1yhe(GKu=epgmLHL<<`k8h-xr z#Rdb>9oZ&!^VeQMo#r!{pg-pxO=%%wiP-5se;)6v3??meND?n)RA!O@$<(3FLWQ+$ zOH6FdOV()2Oid#y4ULJnFZpl4eYEx}KeR}+M$Gk5S zqnm}0W#xsXD4uMIn&y?8n~Sx|d}IA$=JVCuRjV$XJ}sknP^i=`V|K{Uo}IS~d2w;U zw>#2*{<@gaLWBV!hwNSpj+t{B4+|*Cyj*>2K%9^omNa`xrFm7gG6I0)*hvDZW~2n9%+MzzWk{Tzj9=GEY?tX{kpHp1&$#)S9m54a>eAI8%Q-XV);&;*9apqP&PXYp>>%+b;E;=0xznd$s;o zNiW9QI{j^mKNAYvs+E&f1KTijaz9V7?^FoLb3{g=Tb7$1e){vBP^z+Zns=jU$thc( zw2kd%$grJDyMNT!)Sct9dhWuKlacvPp`- z8Y8&LnwaoBc`{&GJVY{O#mCp`P@%=Q3Yaf}s2B6C79AD5YR#P~V>m6)bOTOOJli=W zPNp*HEQD667cH}?Hg{}+gdgp}93YjUmp*9c`gj8_aBZ0sW8avY zX6NiSFgF7CK79K0^heY)4c1V_P-sdc?>r6RHTL$J{dk^GMMm!9(tmz0dWka-lQA#W zXdf`;=ExOJv+V3vx`;W^wrWq(KyLp>!+{ofPxJF9|Ku2~4KPy`&%r!MfevTFv?hRH zP^Pv`=qS9h326iT7wKo$i=g2*B^lbLre~#DL(I(n28>2Gg^v4`z>bmBWVf432BE}! z=%dyMYS3f}wFCnuO`6FNZ&g-=WBwi8-KIYYS~6hF|43W|sCKWJaqiix73<%aT>M#5 z?iKC8)_XL&u;F5WRi;7`VW01Uz?7QJJz;?DfTU)e2~pZhZ!ORA0JzhpA(Hd7nVDJl ztq(E=8|M-c?lGfz@4u1lb$BMrC2Om_dxO4-tz2^b_1KuqlAiJtXpSQ6`8qPSH$8nC zMZpy}rL*@|27`gFMY^W63My8YCbaRwy~}3>~>!x8!nLwhyfOZXVGBycPfMA^MtwF)p}uJ zB~ORB*G&5!yTZ<$OqwMMHLF_PJ&jGd-SXLoYICY?CVF(&Vw#m#{b%s+m#mJxx&FG3 z8EpzW20O+=4wK)eCMQ3=(LXxwIZs6*uopv5ROAkrE?rPBaxA;pgO}{nULCe zHva>TDb#W^s+&*5L4WaxR#7-B1|!KkpC9{0e>FF=@ssguLF9d|wA!E~;qk9j!Nb{V z724{=IXkjH?b#LE~)Ia~*I(j^ z&q7!0`jgh#H!;;L(ylgBpXh9_2S(;HM+P(Zgj)SipDbK@^n^bC=|1xLztn?+(cTs; zL9LTzC`o)-7zuSAeKT~#fv@{a-vaYz1u)j9(QBzS8#fk8^g^SuEFbTf!OCZm@e1Hz zk~G1k6;|w?^B68VecJwAmXgBAYOPakiL>pz(w!`at=gC8Z#gHN?r?plOG7Gru6NLxkY;S=fF2z|YbO3%qJzr|R*`t+_ElUU&&^^{glpQP5mHpLzxP@1#e01HOQOj08Vo z)cfHL0^U{i&=SYTLGdn3&Ju3SY#4p@t=L7hVjDBl94p&Pms&GXe$dl$W59QduVdfz zK_DwVt5H0(psqg{TB3EPB_MT+v zLYBDN^U+I)`GZ+Th^mq2lakVw_C)=`4cD`4R&i(Ib*)VL&w?yA@5bAw@19`~{B3xY kse_>K@2>xA`@bf7AU)z?-rE%2I=lr1p}dH|I)5bN->?*N_5c6? literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/logo2.png b/forum/skins/default/media/images/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd3cccd9f47793f86864cd068621ab07198b5ff0 GIT binary patch literal 2124 zcmcIm`&Uy}7Cw1j9(f?ogb*T6 zR7xF)f`B{(Do|8Luizj$s9*~MRt2>X1!+Z~1*!Hr|H7>K;heqp+UuPCt?ygs+owPh z9z-=}83O>QA;AHWSUia>UkH!w{6lRrED-njZSe!3sdpXe0oyJ}doah{1$l3>n$0jEa145Xm{l=`0 z1LOGW4g>)b$0!*Rr7zHbv%EOo9Z|$Fo71*7zJWCy1avV4C^u25yk)w+l|hG~+NP%M z5{YQYU@)jZ|6}ppWJ?dj(b2ICDyt7~YcEeqbnFp!&dzSWetl`j4p9%R#_ovkDqA); zH&^*-g-KjDYY(ZuwsyF`U!+y!<>j?5(BX=hvuhN^Uk??}&Q{n9Y4Zjg#C7RoPy$Wi z{*X1KD~4_Y4Z$7tC2Omw9FAC!5Acv66G_Q!o6uY7#pImab!WWHb~w?Z0Yl``%a$|q z+>?+r?Ts74s#CZ+-0m|}TfQ#NUh)?>(Z$J0GLxDv2Bn)2Z1H?F;I?WNsG~%EmS7Pjk|D)ZWt7A)huHmXOer^gBJH%1K9jp$`#$4x zb~w%Q?@pblQ{_46k=OZ}+xH(tNCYC#!ac#N_JOZWKf7U{DDkgy2`d$SnL*NS*Lyk0 z%meWH?Wzzz0i!T%m4v~F`SGnry4R#TIUJ1vJ3A0IipV;YRq&)YZGt}EW(eud{ zE;wK6z~y^1FP?Bu(p|Q0-uZ9VP{;H9U`&*-j-@vuhP{16BhsxE$`{EVKiAp{q~8uq zr@u2SsG*&O$?=ivqQiihvx^*$fSkYwVxu7!GvA=hX{$Q^|2i*Q5IBWivcFZ#_XbQb<4Md2}~BtK?7vNsOe@; z8A7rc8k5Y~=#YTZ36{>eteYjoWt1`AYnuXw~+sOqb zwxMU@^F4f%7!EBh=q1a|wAiZ_D+JOhUX!JJa2*$iS7#3pi1YLFdk4gKV7j*>o*xr) z>u|a52rtb9z` zL5qYJFB}IWKha&}+a4CAY57e4)62=pAG~t$p>#RjdtqsQ+_oJzW`~!f=cC-qY`D zk$bnEefjm5qa|4Mzj(KDJvR>pqy+7to)KGbH~EW!4A`pNaZ zoo-AVwbdl!!x09)Z|CpRy=ESskd{ID`jXDLfL?hW9X-=U$GpHyAgw3%zFZB{#O zNiG-P)g6G3eOSK97L?xGE4MfIYy#f`>zXaygC;%Ei~H&H6ZB;yzeOe+$gdv&7;t@C zrZ*)T@!lqtLa&6cr>4Y#2wypjY&gET2c|!nXb&Nw67mG0^=3cjK+>=HMrGJ-oxxOB?TeD9oE*q;kn@I-k&}bV{vSuh^`1%k6r<;IMd1E+ZG{w0g~MyWjA*d`_?1 z@A$la&+q&HfPsR8goTEOh-(y!jE#0PICFAzz_X{% zpFo2O9ZIyQ(W6L{DqYI7sne%Wqe>k@wW`&tShH%~%C)Q4uV7~+8cVjU*|TU7DOk(4 zt=qS7(BTJr4xw7TUm@^~T z%(=7Y&!9t#9!C>oFt6t5zwd>cgV;`7JySDAyxO3~?&AYen-@tu`Sa-0t6$H)z5Dm@NG7S| zk}d||0+o_zM{=bwNED(Iku7HVjkApih7e}UBq literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/medala_on.gif b/forum/skins/default/media/images/medala_on.gif new file mode 100644 index 0000000000000000000000000000000000000000..a18f9e8562941254941a446efad3e6edcb651d9c GIT binary patch literal 957 zcmV;u148^qNk%w1VJrb40K@E)v5}!; z41e42_PDkdcy;l$Dm3n3(BTJqC>oFt6n{%wd>cgW6KueptkMXxO3~?&AYen-@t5f($n3;DZoGDB*+&RA}La7-p#9h8%Y2;fElG zDB_4DmT2OMD5j|5iU_pm;)^iGDC3MY)@b96IOeG1jy(400+o_zM{=bwNED(Iku7Ha6Bh$gD&q69SR=%bKED(R$@R%+>`m}aW!rkr-_ z>8GHED(a{Mlxpg!sHUpws;su^>Z`EED(kGY)@tjmxaO+st^xGw>#x8DE9|hu7HjOW z$R?}ovdlK??6c5DEA6xbRBP=zwb*8>?Y7)@>+QGThAZy4+ZYo f#w+i<^ww+dz4+#<@4o!@>+in+2Q2WwApih7u&Gpl literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/new.gif b/forum/skins/default/media/images/new.gif new file mode 100644 index 0000000000000000000000000000000000000000..8a220b531225397b6a304918e4d96f6196ef40a8 GIT binary patch literal 635 zcmZ?wbhEHblwuHIc*el+@5|9!VKPrU6JO0wzv{&J_sfTWzkfci3%c&b^ZDfVC#}&> zyOaNZ`}}-T?z6u1zh6H-?MZpollt+%s=r@9J?->=+L`dQ-S^kCd)M4KzTZCopv3i7 zg#7c#dEf6|d^NB3$Neksx6gmOcH+A&vz~S(UH9g@mudETVb^R-1c%-`NuBSmGx$*^t}v|N3{XpZ=QLxvghB=@852m{z+->`t|DZla{DoFCJX;;C#~TaW_r#|NsA29T^4|DE?#tJ3t3Sg5rdM{YC?W zNN`JQTYE>a2m^CyU;l)Olls+yCQqLcG;PM53A6e*r27K<7?(+e+V$BkQ0bc=>K)=6 z>S?AMvXf0cM9U_`CsbZ({cMkrfKVO*0bx^n7M2ip!4S?%Tu1x7I766NnV3TOd0ax> zT^02BokLcHZqTpCs*6-yL$WVW?v z$*r&`a5&o0$QRlWP#C1jBFZZwJ5}J(3P%A63#oz=VNXx?YB3g7+`6(-c+I>yOH7zf SWil{ucTQ5<#GoL+U=08@?DshU literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/nophoto.png b/forum/skins/default/media/images/nophoto.png new file mode 100644 index 0000000000000000000000000000000000000000..2daf0ffd4333c90aafd71479510144bcdcb16c79 GIT binary patch literal 696 zcmV;p0!RIcP)FMR=<>BGs+}zyR+1b_A)zQ(>&CSip$;tWo`Nqb^+obycyPRT{LUB1#`*2@<8tPF=iD3b$&izilao_AJ$Uu| z?T7EI;9G2Ni9S*S|C71nPeS~@YXtLGZ#Xme_@@>8G%0p2sX6212og-Y1w$?e z!WtwvbPJl0Aa)A^G6(_^hxshQF(4>p2|9paHcPMx2&P29rJ}2$!H> zp6f%wU$+bD9?CDf;J*mCI1D_PzD=;|;mna;B%E*;B%w%FK=_dsy!3SVseTRsf;O0PA5l@7S3xZ$It;!i#Ky zUwupv47dxD@P=FMLIa$I+=l%s0_x#ZiV;DS09Qn^j9pByOm?A=ICBWn)?Lr=Eg7SN z03L<9;aJ866<{Oli{Qt&ARUsBlRXUURcV2;m^$aahm^dfY4!Hqk3O{)q1D z1TF3(2qBkcAppN3{)S!D3NGw#J)8~}C44zdYXvndi+CRUT0sljYWS7$P%CI+|Ayli em8wo4&)6FRqy5_K=O4cS0000${>eZ`v@813YY~Q2faPbmo5s9gt%|d4ho>o57Mp#$&^RgUuZ5eg+dZJYZnp<>ZnO zn8@79#>ir^py2~!6AQbMoJWI#lOrpaM#=_*i%myaxx_eX7A$CT;APg}>iKX$rJbGI pjAPFPVa3)-5*81xR0c3Hu?omAG~5VaYGz`Q2)lD?YqkS}H2_zIYl#2= literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/aol.gif b/forum/skins/default/media/images/openid/aol.gif new file mode 100644 index 0000000000000000000000000000000000000000..decc4f12362124c74e1e0b78ad4e5d132621ab23 GIT binary patch literal 2205 zcmV;O2x9j~Nk%w1VNn1b0QUd@0a~U0{{97Cr-7}~`~3at@%IK^rUhN5{r>*;`TQ|@ zxAXV<(c$m-`uz9${QUj?tjXaAU#9_Cqyt>0`uzP6Wve@Yx&8hA@b&ra^Y|liumW18 z16!pEV5rI5>-6~hXr0Mflf!YN%x>+Qkd8p6#`TXYZ_T}#Ooxt1~X|1!)YIhOpD5#NM*a<0W#j0a&CWZm>^{ zzyn;Rz}D!)*y=NTw$$VApTXTqiN5vt`#gcU#o6jVg1UmP(x}JZzt!kmmBs1t_qNaF zEOxXxf4M<~yV&LMwa?_c(&n4K+mpH2M25T;XRHups^01ID|NGbsn3_Y+VS@KWSYp* z;_ryE)EsK9fUMC>i@&bQ;tOD?Mu)vGc(qZE!4hSw$lL2DbFy2M#IVcb=I-{7w%6?P z_}%F8#@g%I=JCVW>A~0O1zM$Emc;;Aq|e~)=kN9^bhB5I!`tZcY@o~4Dwe zHhs4lW~<`t^hk)l_4)e+UZ(8x_}b_3h_Ter;O(~1GFN6(4WBES(L=`_W7sA;8&5u>hkx|;qKw=^yu*R z4rHnaUZ-7_#k9}l^!NJ*UZyBu2wvd-h_@b-M1#8yVW@Sa&Gh*C zz}DxCwAK`8te?W&k+|6D@b~`z|2%=Z24AP1z}wd3@G*F`*5vQL)#tg==7q1*{{H`_ z#^61Iy8r+GA^8LV00000EC2ui08s!P000R80RIUbNU)&6g9sBUT*$DY!-o+6Jy`H% zQ^boHGYUk|VhNoVyflg&nXrK{5cMRHfHRGxOOgqmlo8oERHm?$HPJbz#x1Z zpeoL(7W@hZxJ5+J9eE5BP*LH>O&${ zj5jX`S&`8IL!Cx*Fz7_k)nS8ApeE%1x(B4-jBvRPK#9X9Oc*K+HhF5Leg{%TGv{D8K;`L_xwpaHxaF z0b^+Mfl?X7amfU05OYC(Eiz<;2RbaUiytGQ0x5J^bziwedW^uQh}2wH>_T<*uvM9pjgf(kHL(TyFV3}K8NEHsip6(+=y z&mT8*M^FIdM4?9wB6I;j1ZWKZ^G^UCv;lw?B2a+P3?fKiKopBK>LNoIcyNRiBZxr* z3skJY1QoA5aVRDuT=9ep_zX!<2JM_N0V+YPFa`jiSn&@6Y-j*L7D^;UixL1NBE%5F zIz+$0D>L=cJ;YWUy}E(fIl&_o8nn81SpJFsxj2TRoOLkeItpmjn7WRMLXFdR_93ql-= z1sX|!ae@q8)L_8?$rNzmK!~tV!vO{eV8H9GyWWQlALOvc;zfv35CtA!F~I>nUE0WC6>_LJDwEf?Ad!6)ETg5hf{+1h8Trx)^{dte^urh{6Tzy$WAVijduPI(q;0nNaEbGS@D4BQ7Jci(whr)Rj z2q%0XEZ+#_Ct;QoHXnrD7mcRRG|JxzlR06vA#8Vq`IeoTkwqW`2*{qEdy|l0s_pcpGac^C{l1+0Klhw_ z&&T`@fCw(|_68p%Za@V6lF2M~`8?nwT2qqAT-dS*v`8aE#9vMiv)K%5uiT>`Cu)M8Smh5Zv%QKMzFEtB5sZL;q!re*wb?jBb3)yUxCP$DlBcT zL~7f2Xc#phq4g__Pfa4yRFB|+YGk+9pkrbfljbS-=}#g^UkO?BX(*bj5Y=)P6(&8R zO&8EjIa=wQK6IBb$~`nSj@zR~h?^=9$j(D&k8U|fv8T{Z@q#Iibl^PYK8+B{A42a? zn&ISkg6Y&SAlPq3IwwFtymf2cujzUWIlJo?t9T&*_MRU`vwqzc+-Li7Ie}Z~G zw--mnb2~J18Ml|a^Y~h=%%9s4;%rO&*gS5p3SVHc(|ZoU<~DkwMeO*)pdrB+_7<^=v$j_Y602 z`C%7w+v^bCUxP0O8_{GQ#m)y;vDe(lIiw=?CYvtf$V4M<5;OZIN3pf@5@38@&kv2aagW&h{ct;C2I}#);Rf;YA$}%~j}S*U5O+@yBM+JNXeK_&iEC2g zVcl>ivG!|}cK^irokINm*mxIr#*BEg_ZQ@KT);bqU!m-;Md5=V(Ka!J&7D8s_+S%f zwxX{Zm2{3EVkhehN@9O3O&g~f%MTkGaEszaP>gr!-qHPa(2tuSAtncKmY?DrX8gCX zw~BMRcDRG{ov~M8tU)~Wgk$}8ag_SW2Q;^IUBX+vH&E1l6;o7K6S3YvHIh(0Buyvb zPq7*ES+A(4dj?Z{#(CB^!dlL7#>=UHD5w@T&X-e-SU-uNe5_A=N#7-g&KplPQnh`H zPpS5~)B`tB4GvL#c2V7C$7}`uQ3W`%9{-rZU1zsNPt=!gocjbl$bG*$0T$*uM_#og zqCg|Oj)j|ToOkqD9r=oShaixip)P)7lk0PiqG(xWk-CUfrb~sQT(xGwfh@bnZt)8{ zOS#N-`c;zh{GQn97)jX{(Yl`-r8``9*&;k6ch&`=V2(|Hv9Q?Y!17y%ns+Deleo>c zXxB?L3fq2>yTn;9_Ox^x=H#ziXLYde*Z6o(?-#8oR9PIR^3 z@paatZ5n(3g?_+M-|dv&)6MY$9@Z~3eSe{3dw@NFY^CLT4(AuNdxNbG`TGi;zmHH_ zSiDu1l`l%qOH$kZ{2ccSrA6|bw77#IFRiuQojuoJeX89Ogm8^qV@=JLQbqwetb-Qw+Rg0ZKx z&@oVwYk{zTlDlPmt@`@>gqOWSUYhOj^{u(ngOha>|?_PGQs<+b3)a1g<-&k^{S8%1h$J}*`wztCBw7}OfP?3F+ zx}UAgE>4j0^Z00huWN#^P-~*o+2@|D%bKdmk)p&^Z>3FWpl*hPmxpaxO{r>*^{r&3g^y}{QvcA^&`utmTsG+aT<>~RIv(NVT z`dxOZnyJau+UV8W=vs5AIaif$g|m8&xL|mzI9Ha?*XCe(t6FoXft9>`kh$96>;C@# z=j!sh#oF=n_nfQBkD$XkS(mT8)w90W`T6@dRg{;f$iKG0|8^T^QRhnm2|&EM7A>5!qsI$4%mbf-I5mPlls z$SB4TVtT7ycB#|a=rU51xWw9-sL89i z(n)2W=j-y--09cc>DS%rdyu)Cs><{B`Ju4Qjh@49g|hDO^}EK~dXKnYc&bxvqfcs~ zPimqoOpejm=F-~dch+4I98VJ@Ad5N^-O1=?C$GIVlOYcaH&31>#Gvky1T6k8 ziI9>}$}k#&1aaV#k&~HkVjA>Ni}1-ALH^X7g3wDVMhx42p^-3zFGdr>{P}}0nBh() zQ+&Yj_sGEtC{9v4!QeCs7}ZYbLV2PZ!;@{5(yUo^Ep-=xT4<+!GBhd%)x@V1(7dY$ zli|e;x|GU}&KlATNQC)RW{;a~Qea~L*oW%bl|LfzM8I*SAGLi>0OXdiYZ)0oD=NA0;?e(m_y^K!7e(_>)B@sen*VB(K|;J z;Q||($kIn4;0ypl4t>-S3JpnY<3$=NxKl(oq>Qq{7C!8dNgbK+K*j(AkU>Kvb=0s! zARZvXTnJ~JVgmss;IYv`U6h~*6>vQuM?3-$A`TU3R6z&;&1B&ZBQIn@$Qv#gGKMd9 zNHPWw)!<@i^F zkW_BOA%Q=nA4{0yNA2%5#gj6X79!bLy&P%(i8R0KhQ33|Ze zj|Ok}Gsr!L_`}03U?j9t6w0L1E*sk@0ZAVnNaLnII^>|)C;T=d!X^G#Ax8_0R3V8E zl#H>)GOFyNnF1*IGr|%kTu}@aihL;wA`4(5gFkFQBJu~CRj>duDkBsH2JHIN$u@|5 zfkhT}5Tcn5^JsPl5SsM=&8eIT7^H}xB?~M@+bUFBMfc8pJwdwjAuwgf&OR%CSahM z26#XX{?G+}HV}YBB!VF4+r9Wh!XGIp1P)5^3=c%-A5dWe2?B5h9F#y4 zD_{U7W^fAzFdzebFo6j2V1^USVFmb*0z1fH251Z+3}D$dVm%x8e+Ke`=wY_TR8Nr~50fe7M}lw@Sx z)|sz}w0Z6jHaQ_AqDOitt<&SSea)PHxo<4{I(gaj_r1;9XTGktbGBaB{saBT0srj_ z{;~R31Lym74}$(bu>NSIe?gpv&bzYY@H?IKd literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/google.gif b/forum/skins/default/media/images/openid/google.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b6cd07bd8b9f27175e0a03be3b5849e0f5479c7 GIT binary patch literal 1596 zcmc(e`#aNn0DwQcU}GKMxn#>^B<6OWQKZt-cb3xBiE^HYQf=ZKSu)*APi@FdDnu7l zbE$~JN>R#|+lE{hiz(BRl~d+uOl9Xe=bt$55AUzjP!`6aB*XlLd;L`$MA0-=oh;_@%=DSKzTW5!kkg02oxN<-;QgzZXZ6@(M)5 zb-u1@<^vWqN`U%R3CtOJuojJt|Ec%yo>_yZ%MV%ajx`i>ysy4d0^mKeNIQ#t@2y*KMj}jE8i*m zl#eQZ7!1Pfn72wr)$QwY6gabm(O6$Lylw3Pd(s%KbU5crNh3{eeZxI4(dJKB1MUAN>n;QZCCkQs_tGtJY-^iC3ja3x9v_uTP?vFVW;}s># zx;OS=;!{FWer7!3y~sj6t|9~xWcTkC-QJ+z*` z{$kU`Oy-`7hp(oZDFCEubef~t-M)K#*_S^K7T>g7T^A0(oK7oIN_s0RehD8}s1*i- z0sK!m=+Xa`J^uB-PXLSoRAEU$)j~-M#?mcPT3yt{hn6u4gKCOf&J$L|DbuOJmz+s9 z2lJ2J?sjAok}A_-F35;rl&1P$i@IJDD5Bmxks6yO#s#L4K20(2&;kgjBXbWq$Y}&> zCc!g3Y<~;U$CQlDX2nU|3Dx218gg&b%2GehXilrp4#P1y;weqVUjQptQlB1c;VO7e z@*D^wqyiQ&MP@@Eiijj!C6&AUPa6q7&lm^MToqj2ny^P9>WX^Ttd-e`;&k}6HltTz=X|A>@zzv6@ z)2r$ZZK19Hq1s>pg(Wg*yF5bqcpgSu2*Z=3Y48rhsMseSGm6D#RWnKSz*rI2&e%)U zhJ)uMj-*j*Cq6a|SR^kuis=outMPl7vPf8@-OF`fK(;t_tEV6%zOcxe#-=20Mq7|L zi=0@wEQshFjSRBhL&)v46Z=EWNGr^Y7(cjs9|q}uirjP>UklMq_Cn}BpIZ=OxlIZN zrqgmZ9Daq-5mP(tkggoG%l1Mp5`!YX9P+{9a@vc{UA@ux9w!5<$J7Qsxz)kjp9U>O zdMGwqZ?ce!P4?kRO}wMe2<(jAw{y`J9zkIp$bd;9jpjy5e7h8h$r8hU6K*}g{&bHR zc4&^sGRyCwh1g@leXv&EK^8KfI43fLjtGZ4%_yBJq-Q6Ii74-1r$U?ItVA?Z^o7I@ z6Gx_VGVMkkya7VbaJCw^O!RGWg$&GOOC(&Bu>?}_7>IP{%ivHGBI}%WA6YI2+3M9H z%iJLj*4d~I--NgTJ(9t@qodNU?AaV`YHlKR%UVir5C+OujBse~Mp}pFlaUEl5;MVK zxnv+FK^_1to@fbJn^<{1g0s+?k E17=sO82|tP literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/livejournal.ico b/forum/skins/default/media/images/openid/livejournal.ico new file mode 100644 index 0000000000000000000000000000000000000000..f3d21ec5e8f629b77c77615982cef929802fbde4 GIT binary patch literal 5222 zcmdT{3s6+o89vBPQIq*$1QbbvAP7Q0Tpmk!l@)pHf>>S> z1vbL6JXf&Eq~nt$W+Y}?NhYbg%X2}TX`y3UlPS(H)68fPIsMMP%d)ZvOQtiO{(Js= z?m7Sef9JdZJ&(JD*bxy~wQ3b%;$cU~E2vFPBC#hV6@5-lg8iE%gba#Un|TxR-jjq} zb3h#KnTHdU;W5$jSK%T=Pj@H?K_Lo-P~nPOqSb0qGXv!dp_JW0@nc==!i$LGD~{u9 zt~8U?B2Fd~qvpC~M^KA`gqqWJF*i|=E@%ujnuad%Of!pb5`P(QC7kR#SP2OTzQ<#W zlv%8aIKD~feX!6nCX`OuQ922|4;{CsbQG#}pj5FEW=E(mRL;B7LWEq0KANYW^3Y=B z_y|vmH;?ldeDaRw*8J(~hC!qOw?4H%Oa?Y1JnqbNZuG{_4-W8zh5g(k>k33gQDw%FD{ne3XB@ z!rC7_g|Gdhw<&R;HMK*r`+|J;KQGI_{V?zIn&?P3mLE&uo!9m>GUrS3pvy(U5A^kP z_$(c0u8#D!b_R{U=43cu$bYTlSjYsNjhYF)s`QQZ*3Ky}xtxmjy4jX?u^{kLVeo`r zO$S;h4E5!2dRRN72QywCwpkgq;m=hECwm&HvGsd>T}g=BENAdX&yl^G;15ZD@oDXe za5~)ny+KtH;%e1SDcr|-+q7@ZKZGT0tS19Bm$;2T93LRj8^{4y675bB zwk%H%+bJ)|KhfTK`uexou|aVjGo#E;Z%!+~BizWLXGzMgwI!$9Yp#x{^ivH+c7UV2 ztG$yM@p8QPk{Hi9qZjA|_iy0IrBz^V2FDGCt7!c=X2YVB&%j+s%GRZq6}$VIQ&2P#@0_gE zNAUFwKQH_3h_#F3ZUXmN_F>UpAnQ~Ky-mq~NZp*1ER$dEt(TrWr;qctLx_#Sm^+j7oj?A#I7DC$ zaD!T6s6Sj3{L6HyM1HcisHVO0oT2v1d(D5PMI|R99BoZLz$4vBrg+7t)3*@)h!oupL+wwg_YH%9vj*4aIjHXba4{8xkuc);A<= z{dZS2HK=KK!_1Gt{0T^;r%|h@D@A zwEWI*^|gxqvzS+eyR}HSKjd>V18&q9+tQP_E(>?D2|U7;$hbAy$_UJGbI$ekhw(yN zQ(t@t+Lp`(@GUljJClQ+q->vynK|C(jk-g{A&xDnJEp9_2N%N}naK~`m>>4s;pgp< z9QJ=jEdleAH`nptjkB2FdOtgL+Y^|;w&WZ>d7<84e)0JS>Jtat2~yqPk^=D3P?xq0 z@f7|6Jern%&D$w>p*GAGyl#LeY+CZk`Lq2)w{GZkg^@2rdyw`F-&0YZ?HMmk^)y+7 zCvI74%WRnjCpgYpE3*5H!##ZipIx~q^<9GpuZi7A2hXs1Zk~!pO}{2J>4l}(OBYOw zFj0B(Bt6hCeb>`pT-SE@^z{x5U2Ln3-?S|8w?F!!Jf|8`_0G@Mi{w$ z=X|SDy7MOoto~1%!)>|A@LPpZ)J;^~NDC9o;+|ify5q^Z+~}r~bWFtv8#b;5N6F%T zh9Q2R{a&r|U)2@;IgyF6UTmI3tzX1!nST@^QP$V_qZVtm#9wTzwZCbi{LlWU{0Anp BEK2|Y literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/myopenid.ico b/forum/skins/default/media/images/openid/myopenid.ico new file mode 100644 index 0000000000000000000000000000000000000000..ceb06e6a3f0d88fb97cf10475a3062fb0edab33e GIT binary patch literal 2862 zcmeHJJxc>Y5S@6ZrZbS)owhjA&;jnXfl*X745tmMB3MrBW$)n`RP3b417qd6J6bL?UM{+)q(3xlv0Ik%T7j-l59$8$m>#ard~jq(8yIciUu?j(!>?&WKIe?G5c$>` zV+r!H1WS-ha)=*H^!uZEl>O1BP8%xc=fconk~~4DvKCYWn4`b_pUnoZ788}%mc>uh z9HV;s)r}P~NWtqf_p5&HGjTJoZI|S8n)uf0l05g}rdhqaIBpnv^myAWbI*7E=&N3x z95xI+0zR;x-|08c&;6Ul#XdjZARV+no-wSN`};1(+>)AIisPc*P@H*_1Kd%ys#()H z>NUmL)tL6ccj9UxPF`{LG^Rc9JypwV>?^N0yvK~LBc9f{#^OA9dQUv#8Tz7oxfa(K u#=%<%_2}PpAb{bmUKcqz}))c5uC(7v?)v4a2P)ZNa- z@$&T2)z|&~{r~^}A^8LV00000EC2ui01yBW000GQ;3tk`X`bk)Wk@<6#nZYULKH{p zEx|?+kif!I0vIL|#ZMubBmjWH2OtmxIFVa~6JQ7!1CK!f5W#StOTv&C3=E8h2vI1s n+#cd5;2fT3B_0kF0v!+!GARoV78n&7dMN`JIW(4+BOw4gP{MS* literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/openid.gif b/forum/skins/default/media/images/openid/openid.gif new file mode 100644 index 0000000000000000000000000000000000000000..c718b0e6f37012db6c9c10d9d21c4dea0d0c01bc GIT binary patch literal 740 zcmZ?wbhEHb^k$G`xXQrrKS$vIw-5i{JotZf!T-qt{~ulWe{RG7ST3!;kh({9A)7tlU&$%5*g$f^Ar># z6BXsynVh) zJ?osJf(s)D10z?npvQi179P(djPk7Va&pI%NfVlv<{V@&c*Q1S?C^%corz71;ll+1P9`Sd{~>qE3OQZcJ(5}z4)|O#`p@vJ zr9;Fsp~HjOs*vv^`}=;ISs7Cf1bMkUpV%Pi{6*$qgF{F5!;-XxTBi=%eG5gPtV^!wdin~r1kkVO&vN=8Ce+Xv z$*|MCqlY(ACp$%vPrNeV;U*4lo)c<`?yngdvl5)QWEV6rHbi?!)@MOEE;CkPT#L!!@77y7u K{UjJ!7_0#i2pVPp literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/technorati.ico b/forum/skins/default/media/images/openid/technorati.ico new file mode 100644 index 0000000000000000000000000000000000000000..fa1083c116527de7cdbf5897976aae8807fce878 GIT binary patch literal 2294 zcmeH}ze^lZ5XZl}d+sirdNzWcsg4x+2g0RLIAWPjuoD!tN}VeB7eq*vB1MXHX)Xi{ zAytZyMi86WScxK7SO|(gE|<@|cRuzut2sy&xMBC*%tj+A zE!c_l2H#`zaX;dYlru_mk^31KdcB@L9&W3#wIFp`YJOeP`OSr1{CK6O-`2Es@?E#T zy1MFK>-Ep~I=Vd7%e_s#J@}-Zvwh`X=4ClX_h=7BXW;)k1Ifb@+v7M5AZI7aYkiNm z$KjX;Qm=X2(~a>=Zn(6-IG8mv>sbkaBEroVrCFBdHr=3XM61uF&u!`5GI1u;Qf<+zMxU!sr1q{f@m!ic#&7x4 zjcDZqv{&NU85cGO2UiL7I^;$4kVpqJ@-E;pjlK(>l3v2Y;e5IS@q=)?(5+CX;*7LwCwnlxopJBahPURBFV+~&J eFF>coTp;}_7zqbJAQuX63TM^f{)_Klzq8-HK65Pq literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/twitter.png b/forum/skins/default/media/images/openid/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6552d18444ac98fdc776e6c58b794dd4452772 GIT binary patch literal 3130 zcmV-A48`+_P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf3(rYJK~!i%?V5XR z*3}uupOzLVw_czvr6Mg(q+BfJBAtnwnhhP85N5_MMqy6CWenXVS+k6ocCk@F`KpDYy&d* zrm^YBv+>x~<$2W6{i0#u<@P%U?%dX8R`^eZPDlH^|N1tw`C|q~s7fsGo@%qZGR)p# z@6K|w%`IjReqdHM*la)X?#L{&k!gwYR5Y8-1N=Ed%no#$)yy=@X3apiz!Fd45|{Nx zA2A4F&JUazd(M~@p}h0#ExjFP?>(Jn6BxUgVm6GiV{!8MRJiwCbnQiGMnQWFCESP> zfS5wuK?YO!QAYG_Akua&mJ?yq;cVK;hPi-p8mr>Jpz*VpOkt4D3q8q=@QSB5s?JC# z3;(`GDwa9wRQ(i08kP+Qk-CCppyYyudI^uT4cS_ zS$csec`_L}fQwZUmo}g3>2EffRWR0{b}c1aHlY1us@abV&0e1p<*tkzR-iv<{DC{- z=)$t~2OJl{`g5eK(j=TW3oHC1!Txgx%pM_A`@W>sY%xLn_kgJ;SE@d3b~a=+ey46u z@Ndm|pA3o6#hl_`yPK2ZW@egwdm=H>C54MZz?q;PX%5kNVY`|1V_`aNcQr+}5<8C* zXVvxISBsD{8gUo(2G_%D684h(qZpk)HY^JDV&2EnpFSF0{-Yyga7vKXhZ0424w?mf z0j4f-?qy05&3(ts2_MD4cOxO%kQol*{epAZ3kcU4GO=(B)Do{x(Meg!+HV@omSG$V z$o})`dVh^EDLz@-iubLcj1sNZJV3u6W7>q5`WBQpwOGdOlo?ZTEg6VUGQF5`kTk$; zgJ5TwS@BM@9IUnl$+wpRI3SmTM?aZXOz)lVwiXWky9}CwYHwy4j== zW{;wbP3>mS;?iHa$?R(gy#?X3P?`Xl4NWHRa&z@b?6vA(B{o#nH7W?q??`mv~n)3J%ITg@uPkn>}}HZx{vOLx4O)N_6I?B~p+KYCC6BOKSBB z);?aup2~nMP6eDUfa>ITwn`$H)G9N$)&y|ppvz(|oi6kDt%1@d4c=L-%~VN(o5<~7 zMXN>dU4?b4r75vFYZQ;I(EOGI{edv^M#St1==L&}h0?tN4RLg@JGwt{+gU~N{#Skr zK*jT?@B(?)82HNoh$1$I-{a{UPMWWG-B+lE`~pW70wbpd$uB20}Gm< zY2sW81GhoDmfKOMiwVyHsCZ@|OAw;@p&PN{u#98~e1^KiC4hJaqK|W$r^e$h<9hlx zd4F+&*>axez53$-?6J9?x4><}&7tGH$xjDh$l7_xbz>;vUGD;1R*(q@mqPsG z=`^K7YhfKpMDg_u?`6181-G)DCAd3AAy8zk0_x8wN9{G9`S90rg{WrwIl2;QJM@p` zMdelN1)|2<6oUZq%Ye0<80Gs4-j~wVk|gA0`1Ls!wlpY_Eg-2I`$=p-BK6Fo-|Z=@Oy4ujCn zFr&8+M=0gVYCZ*kpT!b}GT!axL?=>p(dqE_VsQ^+X>XIX6bCh)3-6!cw)3h0c(>US zGOY(89bShx{60d=aOY+1fVmnE{8GNz!d&*HFQWSkNslGQohH>G!8W;i=DWsx+Dv=)3})@bv&G5H&ss(C6hi?RdfCp27L00Uzdu@qQS0@rM>K z-~C#5D-3?havXW^JE+l|Fo7$EkdnLkeKaf=iw9CP6G#C5HX_~vbf~f_<9V)J(p~~v zpaj;(KeDt8&=OrPbpC61IK)aOS*c=w2f}Edqkt(l*N2#L++5b~BZ@xE1Ry1|AO}b= zub7}zE16`3;@paZQGT)vWxHK7ssE@Ee{k4r9Dp3=q!rUC$cbg2 z*cCmDyhI-)R56tEfkM_Zh398DyxQFNqsc^cD#OZIdna8qD;$WHP)5Gp7TNM&L?f z+XjOC8fr2R;#roiw_>4nA3J)>>i6R^lE(|@Q2X8S;)Q=zHro}MXO?7|SF%mO%fzioEX>2NsQrkeR zJB!e@23ZZAo$lf~xR+PIXTx9Z7M{-oWHn>T!jeh6q?`lrJH+~z z*iWql8S3~gg#?~;6)O~d!rz@$Kdr&cf7g!YU?L&aWF*}Hu#M}|?5yaR+Ws@q#IPAZ z(583eLeGpRh(l9H{qX&RDYlt-qq)17TTM(Y&vuKQ<$Ylfe;i}KpELJ3Ys2lm2+Ad9 zR-#yyPU3SbDD9pBRmcQ(IJ$}uT?v}sPTWlo)ntFcjo0z%>s^2YCo6!*J%F~7+gMp< z&(3#O5o?KWTQG)scwNXzdJC8gL{Z3P>R{k6;~qr0<5YrleA7qEqtMIj^8re37;Tp= zav{Zz0kC3Z9>S`&OSZlSWy}P4ue31DDGuBOII20tM|I#$&SJxK&Cs2IPT@r5(Us^L zQR*q^#4AG|ERZ?=uZd02G(uAv0ya_d=*a*74~Q!va}DFYVq*L{1=auM*5C907jof# UY}!*r@&Et;07*qoM6N<$f<-Fwq5uE@ literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/verisign.ico b/forum/skins/default/media/images/openid/verisign.ico new file mode 100644 index 0000000000000000000000000000000000000000..3953af931987b0e66c122b338dc352502564eafd GIT binary patch literal 4710 zcmeHJc~n&A75@Q)fTGMB7?4e2SOip*O~H*}8$=cdnTIhNBRWh_BW_>?5imwU5pfq4 zQ4m>QjBTZ+CRIeErNk zREwwe2CX!zp{LmSu(HSiXS0Z~ELfW_hmFlL(pSOSItLB|b75<{0z+Ju!Pzbsp04@u z^IM5gez^!5o)68~JR~M1V)|=3XwNQ8?a>Ya%3;dK~By}6c*$o zzc7z#uYNYpl*u)SjcUZ3@pYK4t;Vd>gP50g5b0^P$e34y71<3~mHQrY z^v!hsAEG!C)5bMuezljdfeI&}&sTTWohhE|ksJA(uJTd-&Q zMO2ly;NXEa9IkGqoEFsAT)_K>+aNTx;izy9$B(q(h|rGX$9{>EKmIk&oIQ<;7cbz` z_Vf7oOgqlCbl~T$U*gkC?YPwb87^PGj4!TTMMqaVuHU?hTbV;iCum zZRbOL{qcZs;#f*}wrlz{`0xBe*(I;Sz zyL{rRJv~s#3{DZZtH%`9aNO9+=O$@yE9B}Ppw5xAUn^OeZyC|qoIL(nKmn&nYY>eL zKrf+{E*!VX7~r9ZuM^b@Gr+V$Li3f}Ym!#NDK|=*KfCmKlHM?d^N_SO`K0ZlR@aaD z`$@HgRh&}Pnx=3wq}{WbyQe^@gROXtjgE@>Qu-jEKP!rl1Z1YS(s35^4X=At_Fe%L7)Z2wJ zI=BcM$Zt(2XjtYnSb8HX6)sr~HNO7Fi=k7(q*OSR;1tv-=GQtZrfwBAkrlHYyo$=k zI88HxY21*dylU_ihyn*o`a+siMM#3?z2La9_bI5tty|5m@_$Kv=M-r`DWnsuDXI|SI(OnaFs5Rj zX)H<$bK-%v#3C6u8ZzR^Dh7HHqo*OR6YUU|4ygcb%!+EsW(iDpCu}sLU`Ao=$b{)2 zqYUx~O12syWYaUKC^j&d+|rIZmK*4)3nD=!V^Y|D)97J|C?PnK9W{j|5sikK_<-~j zB9Ma7re4g!anVfBnN3BRq6!uR)Iqc*BNYKUJ~~i(NLEqh;Ss1(xyk6vj3QL-oI(}E ztJRXtBFNMQ1%(&^QRrgWCG@7zAyK_e%IJBC60Uv0=A*yw|Kz_F$NuLuvWqkMvw2)i zo$zJE=5ZUFK~Q{S_xsb>KZ5B3WHsh5CkCG#~pZKK$?_l$V}GW#u_kRkqUX z`UyTd@da8=wc+%sYiMmfjdN#zfeRNd;rz$faN&FhZrr$v&dv^;YrTU@mu}(8l`dTS zyp!h7d$`$gpJq>*C%Yct?%liirkiHU``!4q`ysx0_@`GhR*Wg zL+$LnVne>U0!F8BBDJgQ#SO&zJnpsR{N}Sv)RGX5ladO5OX7h<2Rs-#nHmcwuE~3rz z2>~NUOyad;2ZtE}qZs8M)E9^dp|1)1sQ>G$Z=aRsiI#u(rfHU-9}N`$^h{weM0ms) zh?4E1IgP=fR~iiIb_PS5COyWGoN9OA+h%v^2+Yx zGJaHiGz3ONU|59!7au1(GXnz`A0HnV&|@H)n}q>L0s$9;ARnmIVdDT(f_z;3d|=N* zDLy_ze4rMf1_3@kMlc035Cr)7nOM2`_ymE1g8cmaK$@2aOo2_OfcXEPfdPgOHZw3Z X0PU5rU|_JTL0}LcBo2~?sfE!1%eOAT literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/wordpress.ico b/forum/skins/default/media/images/openid/wordpress.ico new file mode 100644 index 0000000000000000000000000000000000000000..31b7d2c2b77c039342854190a90a8d8436992b47 GIT binary patch literal 1150 zcmaKqJxT*n6op^J!coBi!TOa}allq&O3PWo1c^ULbO>qe21^@jt1Q7KOpyh+ge)Q1 zK|J4huRH_#zwbc3UEA;R9AO!H&d%roag-+O5 zO!N95T@?S*G}Sgw{mN!=VmhZ5Rzf4>LLtlrZUAWLgGPY+oVrG5xo^yW`xZU-Q@wk~@ zYxS@D)yH#t7kvCm!TtK*mFh-7(+TYB+*i5pa!nc|Jf3SU=XN{`fjrfux$lA7e}n0{ zlfCqFi>Z(M`wVVG>yKK1*9rZ1`iw}=W^iIUOLNU?<8e1$!1FrglCO_u)5YTUvK?eu yI~YIj#-~XLO;hd+o2#A2S^08*UB1qS`QCUE52vFxJ9}scm-~xFcCkL1j=lhFMR`a7 literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/openid/yahoo.gif b/forum/skins/default/media/images/openid/yahoo.gif new file mode 100644 index 0000000000000000000000000000000000000000..0f0eb8efe7eb64bfb49b71bcfed741c1193fae55 GIT binary patch literal 1510 zcmW+!eN5I>6h2Lvn6<^!)Xd5hDlfLZ?*XcrP9QW)@-4ktMwaM%)M8CbQ_0*l24$96 zFCxc~J~6$k=GUBkF2{?49T|aFsb(Ko&Z+fB)4rCSet7>lyXT(mKF@icXKLw`+wYh+ z8-~IXfYE>VhrW~BSNh&w=(_*{5C8)RfPw)q2!_Bg7y+YT0W5+gunbnfDmVa#;0PRp z6L1P1z$179&)@~TLI4N|fgmshfuPafpa@E!3@V^e6Ja9)AuxhOGcER$-0QkIY5^5?}#|%n$=&Pz;G-F(O9Af>;zw zVp*(+RdFB=#gRA`C*o8*h)3}xp2drJl>ib@0!d&AB0)t#6h%ptMMYHmf)Ke8NfPmj zhEWs@s6jQPhSi7~RSRlSEvaR-qE^*`I#fsMSe>X-^`IWrlX_M!>Qw`1Knp*qp;Bn<`OCEbSmdY9b-PCpKTi3^Piz?f8 zy?dyt^GwNvp40E_er`*8*@3T<(}!)EUr^Op+Wlj^>bA2Zu5HOanSSmqx^=>0X=Kzc=shR~H^k^D_Zi zm0opINA;Grd+-0WzzmB`9htoIiPY)gdyAhf=<2`k$K9pb0|sBWeR^%q^M`Ymzy0{v zAGS1YzH-Xo)hi!8cI)gxUElrt`{^%}>1j`mD86O+Bh%J=eAmCXEE%zRZiAWIIC00W zAKEkSsqYxqQb6nD8wb6-Eq;Dd#o_vaK4;Y0sB zlrb|aKY!qiCqsAY>3-`Dw8pcK>`aU~%LVGIDmHY4O%6#(r zGy7)b{WdzUcIZF3+Y{BVyg1;&!k_|&&Wb)U7@G{hd*@p61{K8lY zrQfzUZ=akxn9jU!Wo>@vjsXJ~W_|iavS?$;@p-quF|A^H-qD(SYOemduLbk@yBARv*JGzJSqW zdH4Uj&-?iX&Pnb)_vW6Q-0jh@w{~0$JK-|~h%skR?y5pa2$0O&vznEh|N+RO!h?sK@|HmRv z{h3y(TKyEJ2mNOMtn<{HAAUcKPwGpL&s#5zxz_#Zs$8wV{*2!`hmD)b^4H{i;qK%8 aqJF!3xj$$f?HydV+s)ZpZKm7Z3>&}3(53|d literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/vote-accepted-on.png b/forum/skins/default/media/images/vote-accepted-on.png new file mode 100644 index 0000000000000000000000000000000000000000..2026f3bcc50e2738bdb6c21f32ffb2a82d088e11 GIT binary patch literal 1124 zcmV-q1e^PbP)(98f962%urEyvrobTSI2iWDonJaRXmcCZ2&_7W|s$8;q zX78?p{;d3j=Jt6u zRf1NRn45~bKOeQloe<4k4F*a0^w988Pn>Cnf)+6fhvK8hS8!=&g-Tr5fO=!taU4$~ zOcn}~1dq~+P+Mn_{a3^epPXDNqV_QrDaOtjsGVmiri&cVy-8sMq#8b+xcl4la{1KX zd)90%K-Mw{%5_9>cd}5B8H|=?=ws;;*H`e>Y)`)g+x+z483yu`hh? z)vUt~N$7kH$t{g&Q6XMdNY^x24}P89!Jn~piFLVw3}%z-ZxONXwNtVCms$I=Hpt<1 z;>5`C2ui916R`wY2}KWfU9>D9Dg;Y<_4cY;b#?q^Z}exPXQRCee0Tq%=HACy;vCVa z)oQ5K>nMeJcUM{?j$?G%ZU0GpPJBRg?!=6hb@~7WeF-jmZ%z`A5yxGcdRvZYk@$u9 qnpoR$QRL8vDfll$;(wNZ1Q-D2C|}A%ZKM4F00002jDb`!&=tG_0s>$|K>*|`prJ6sL73(3+qcd@u04=FA87F=kXo2eKmZ_sFf2$; zPWA&zCIel<#Ldmk0CYVA$YsbuiEN3WpdiEV-@jQtefpFN6jJ#4^XDXHW@fmf00M{! z+3>`~M022FsXRP9Oq`sYV1r>6fM^&7@nIMgTp$C5g@r+ma0TLs@87?}%>)P_xCIFb z3Bo|lB^(?aU=1+CkRuHnMz)lXj}Igk4Pmg5nWK zgM9!HKul2A3d156+4UepK$wMv1;uh~hS${8fRioA43Jqsb)q0~fB<5G=1>+`+J?D) z%9JT^&HerTa5l0y4Aj-tf${>ww{PE&GbGq-fB*uAJJ7~2AO*0T3i2vCz-BNA)YjHA z05ccZaO6}4^z~N|8z6v~pcXs;rCV4KfV@~$RYfo!V1|GF`V}PzL1I7)9)r{X1Q0AA zT!9r*AO#=|po~*pU5(RlP?-Pt@dK;cg2@4U%(nbkq83~4GrM%MlNq) zt_Q^*$WcIgHIVxmBnA*bjL2RCmZUYn2r>s2cJMME1VFhHRs;jfeUu1=7iz%L6XYu( z0EK-K5dWAvcP;}!05PGJEj>WnAAr0L$}BL~0gGY=V7brm?%g}EuaFBtSO$Xz??)hR z2I3zuIe-8{v0&c3c_1f%lFyZoA3rjH3O+6_F0kui`2-depv(ty1ju)w_yQXE94J)^ z#Ltn<1PCBTY{dew=mzBvKWLT74YCM?K^B1kDEN?45GX8n0Pzwa{)%kQf&~j000M{+ zU%3+(7sm^vtby1Jh*f}C5Gn;S=spmi2jcxe{2E;^$d?NjE@S`*AVy+~WpV*P05LJp c7ytwq03Nl7Z}J%VEdT%j07*qoM6N<$f`!tbz5oCK literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/vote-arrow-down-on.png b/forum/skins/default/media/images/vote-arrow-down-on.png new file mode 100644 index 0000000000000000000000000000000000000000..048dbb44dcf2aa3669386737e4e34503659cfa70 GIT binary patch literal 905 zcmV;419tq0P)-y5{XDqL?wtw8c7i~ zN0Q6^?9Pnu+qv8Oi^-+Pz_+tI^UZtT@2q2t0Un+PKF$My_TW0l0Sr+3C>}Z+0c92j zQ&9RPZchib4JRZRISTw*?j`s&D(yi!4W!bYK|2l~#3&Yl)q=eKB*_hofA~`;xN^ut zQH^pphu&R)Hdf>y>Qg&-^&xZ21q}p#FHqmiA?Xcc?0sNEuv}tToE&x%yyA;O9n_c& ztgi)$?=eay3oI<;;0F@w=OKY#QG@aB?kYGJj-3UDF8m+(%RAuS)fP`Uv|~x*NmL4j z!2}6hSuY1_FXH@Eno4SYa2fqafZMOBtL=P?a&g3-4|twf6~U}kNf0P6+^mhu1MQ&W zQ|)VwXZi;$cy;)KStHP5wXSdC?sR7rWK_$yj`F9K-3tj+pzGE&CT^qA=z+D=Rv$@J zbvtq)#Yq4@9@OYr{|tt^${b4@Tb$voWYw^jsXJl~1l){yZ6Z~mTapgVXlRrfvI@o5R%kNt_@+gec_sFS>sC)ftV7EML$Cz1 z{=+$y6i-HJNDispz>1H>a&r@96Rxcq37>Q;^OE=LI@u)mx5b(Kd2vsyAI4-kummT= zg6^eUr{s{$(8UZkHS&32F)wd(AU!Q7(Rdg%m8GwFfuZFFfcG!1F;4WvoH_`{s8d}AU+B-V@FC#${&~nKmaj< zELga3A;YgoU<-h@djJ(F zfE2(qfH25qFg7-fEDzJi!NCC%R{)s_G8-U(SfCczf+Ro+KtNAVkHN^u2xqW7e*BnW z&z?PC3($iL1VFy|@#BXrkhujQfWSWZ{rk5XND$^Ce1?O7tgI|UVqzj#J%|QjXJ=fy@M{1qdLp4}jidfk}eE+_`fx3{6f>#t=jHft;KiJOrSj0yY~UfM6D&CG|15)01!ZM3y{4xbLLD8!_w2!F~pGdzzl|Am>fU= z!Gj1S080fK85v~z06FP`06+k-pxX?ygxFk+ZUJ&W0Reyjg8Kl3VH&1PnSx) z)Ie%~{`?8YATeO(f|~^k4S)aw`v6o-fJ#FqCMIw$Jbn5!!8)eg7&Qmi00000xCZ&X`T>s1rrok967{t#$kYGS7Vd|fw?Kji~ z;lV5VHnRYeM`{4BF0c$^a34H4Y$j8XY%{~vP4Ur0f;38Hd%(7f1L*It^x#ox6Y^@F zBDnIA8Ir>UzFOH#7SIa-feR)47XkUfbW{ysEx$_Za+(2mrv@e0$jB+NG1p<%zK%|C zDhyl)$6NrHqq@G{IrJPRPyB_8o%g~qnsOblfcn? zud345g@qRO!2EE%0Z?uLjv-MxAZ&$ojSA9F#F=yV|e*{B8pP@ zPpy`qnVS0ErfIu&a2$lel&veGH2NtLOlegf9(x9-G9&7J^nDl1oLg=Hr16Fr(Oro+ zQbLGVpQ1pj;IRb_B#w0GLze=Va%%)w6bBhuOzm9OdN+s8=o$#_ccLp*OIu$G;h>rLx z;mgpUhOxf69+e^?1Ywq=jh2GNqFYu`xESK?pEsfZhXwuLEj*_r99^_vuKcEHdY&#l z0Wa8SHm?w7E{Z_H{N^6JFTqUk){$jh)SV7SR)<^84Pbk)5p-5xEIhKMBS92|x<@3= zZ)!HBX})$JOk*s=%QA0e+p{3c*vl0e=9sUD))!9#$+3Q`u!ebIIb1s(-e@F=*U1b% z9-vyObQ;pB6zoI_#Ud071$xZ|IC*EJ6cLci_@% literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/vote-arrow-up.png b/forum/skins/default/media/images/vote-arrow-up.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9a51c7df2da30fd2e56359a93f4712077ee62d GIT binary patch literal 843 zcmV-R1GM~!P)Ze18CM!Al?Dub8&GoOqw)_0U&_j1|%mZ z3j?V-AXWlNa&mGq04*cZdym|9R2`JR?`}glckWT;thzab!KYu)chAIdN z2{HWr`xlHsmVhvfpOlou(AU?;;Ns$fQw<0U3k!q96hLNz%mxS`umwN?TMiBmxCT(X zz%UHx=;(lHFE1~+7_vH;K9D6Kvw*ZMNDV*$!7NY%c@N!iY!;y#j4TgxAjmABm>Nh7 zAb^;l8VIHqU?k#|$KnXEnE(OAf-H%y2t6WU0F?aD!Pc!?8Fud6iD4l?05Re7HZlf< zD?Z@u?ajc%#Do!S00G2;&E;unX$-o$x?py0ZZ5;*$&)b*1c~GFC9-({0mOnW3}J@j z3pQ+)=H=yK1UEncF%grAhy|b^LI(f=#DX0Dq!^ZylS5Px0R#}iRD>&trc9ZFHD1uo z0tg@`LIz>;HohQ2&zJxK#DXjV0<5g8D4IZp7&efdosDoMP(O0;g2Z7C0|+1%sG)yA zIS*DU-nemtK|@0WtN>JWV*^vCPQ{suK*a^n%pV{zfB=G7a0gg^Yk+0$lVq#(#)YQ~)1`j9~!(0t4szGKx0I>lA2$l~H18vm+Dfss78yF*}3LYLF zh6M{2fGtH24p`ms^XE@^(165%^kI-ZKmfrk*aj4E1sbd%ARqvC0Z0=pj6Z+=Ot?w| zS`LaokmG=6fn2{0Bn}Wjj4(qI5)wdFCb(AP=H>>wniTNm%NGV#&7yzfB V!E{DAJ$nEE002ovPDHLkV1i?NM1}wW literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/vote-favorite-off.png b/forum/skins/default/media/images/vote-favorite-off.png new file mode 100644 index 0000000000000000000000000000000000000000..c1bef0745ea9acd1c405ac11e0d5555e8b12d7e3 GIT binary patch literal 930 zcmV;T16}-yP)Q zl~7{r#<-|Zx+tX^7v1(nLEMz+FA(Vu=&lr@i%_r>io5Ej3qgvws#2;kN-aKOFk(}p z#$w4mvd&mnLCfqGB`LW%tTQXT~$@pwWz4*(Z$7u`~3X;?Ck6f-uOMADC8`%H49ug9F8Y$ zw_8+IRf)E?w)=F~D6T0AgF(40thghvTO@bbp`oEcsi>%U%r*rBP;F6Pqt;fdRTLK& z>)!xC_VxAkhJ(#!6RoYS59m#UO~C*#0w5d#&H*ynH51s~l9G~3PA->Ap>jP%V%H7; z1$bs+Zcu>R9*^fGmE?+(-EJ4{?d|vr-^j>_mM?&1XlTeop!aHPYwM^Sb=B3?ZURv7 zN9E<^df;4gaBv`wkB@cT+uMthZf$OE#_0YhP1;0PS65oCtgL+9(a~Wg;GAGQS@Lv2 zkN}h`N1!eQU0hu3oSU1o(cP$Wa&nTu!eDWr*}!96BogVHo}P|wZ*Lo!n{BzQY=b5*FE0apfWSv{QAJ{HZLNQP zem;yw6#{1^;uGuZ>*=Yfskc2nJ!4n)Ad9ee={G;^@9!H;&ZqE2X`<2Sx8B~~uQ}N? z!#RA{$lSzt+5M1{!p76PmY3|<5RSAL&84NK2CzIy@&xf8fJSJCngW4N5yyPM&Jfr$uh-k@bUF=s0dG-KZhD`{`3D>TQ-Os; z#w#l;;f;+A00-HDHurrf6dIy?@=((>&<&onoKqxC$uC;-AG8mSL?SV4mQhBw zj*gB7W@ctSFDxuPr@!!0KgLYy`Z|>GFQSP5EPn+U0OR;~TRRy%rT_o{07*qoM6N<$ Ef@zSrumAu6 literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/images/vote-favorite-on.png b/forum/skins/default/media/images/vote-favorite-on.png new file mode 100644 index 0000000000000000000000000000000000000000..1f9c14ab0813a1aec1f66b12c3eebe7232be3d8d GIT binary patch literal 1023 zcmVZd<5{Le6mt|)_<`GX($dlRu2ZJkuE zjf4$Qewch0=TDhyPWI*W3&@@n;Mrh z;ON^;+o1J6x+lSyC4yAc5*r#_RRe6^%F}2A*z}DOqn}Ca7lL#(u})I%7x#^k&|B0; z`f()bM-h)+;pZ4u$ALJ}P;Wvb3dM-H#z&Yj5-&MXQ!CKC#TXEuPEEBSJ=cPnS)ej| z2r5#+g@;jQ$TU_*6Ij=36b6CwjWTT^%5_m~{H>S28)%4W9OsGaYMC6L=yK8ysOFtZ z$a|Cc`qnVdXsKFY-eyhS#>TZMyvv&Gk-Z`#?>^Zjhh+Uaj*dLD2Glrl0XhE%M&6JK zdqZ9sxMdI+<1Dr0Qu()0dB28}pC5!-B*l|clf(rIB=P3C6)a-E6moW+nx^tEqNfk1 zhaN6W(@j2{T4UmW|9SG(9X_!#|lMVmx<&Y38Ta_F{^dJ0jyZ z^KE3Yfqc<E7fl_u~mXc`B_ShF#sjOqSPbOw6(spucpG!yqP5!xrMP zXa--)`><8~qDbZjaUY(43Ik6LqKX$#+j`!7QB^cQueWs7N thq=s2qJz(mO1EpR@jr*ce;$7X7ywPEpB^Im6SDvS002ovPDHLkV1mKF-a7yQ literal 0 HcmV?d00001 diff --git a/forum/skins/default/media/js/compress.bat b/forum/skins/default/media/js/compress.bat new file mode 100644 index 0000000..f6f2a4f --- /dev/null +++ b/forum/skins/default/media/js/compress.bat @@ -0,0 +1 @@ +java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 osqa.main.js -o osqa.main.min.js diff --git a/forum/skins/default/media/js/excanvas.min.js b/forum/skins/default/media/js/excanvas.min.js new file mode 100644 index 0000000..12c74f7 --- /dev/null +++ b/forum/skins/default/media/js/excanvas.min.js @@ -0,0 +1 @@ +if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&").replace(/"/g,""")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" ','","");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AHAL.x){AL.x=Z.x}if(AG.y==null||Z.yAL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('','','');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()}; \ No newline at end of file diff --git a/forum/skins/default/media/js/flot-build.bat b/forum/skins/default/media/js/flot-build.bat new file mode 100644 index 0000000..f9f32cb --- /dev/null +++ b/forum/skins/default/media/js/flot-build.bat @@ -0,0 +1,3 @@ +java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 jquery.flot.js -o jquery.flot.pack.js + +pause diff --git a/forum/skins/default/media/js/jquery-1.2.6.js b/forum/skins/default/media/js/jquery-1.2.6.js new file mode 100644 index 0000000..88e661e --- /dev/null +++ b/forum/skins/default/media/js/jquery-1.2.6.js @@ -0,0 +1,3549 @@ +(function(){ +/* + * jQuery 1.2.6 - New Wave Javascript + * + * Copyright (c) 2008 John Resig (jquery.com) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $ + * $Rev: 5685 $ + */ + +// Map over jQuery in case of overwrite +var _jQuery = window.jQuery, +// Map over the $ in case of overwrite + _$ = window.$; + +var jQuery = window.jQuery = window.$ = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context ); +}; + +// A simple way to check for HTML strings or ID strings +// (both of which we optimize for) +var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/, + +// Is it a simple selector + isSimple = /^.[^:#\[\.]*$/, + +// Will speed up references to undefined, and allows munging its name. + undefined; + +jQuery.fn = jQuery.prototype = { + init: function( selector, context ) { + // Make sure that a selection was provided + selector = selector || document; + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this[0] = selector; + this.length = 1; + return this; + } + // Handle HTML strings + if ( typeof selector == "string" ) { + // Are we dealing with HTML string or an ID? + var match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) + selector = jQuery.clean( [ match[1] ], context ); + + // HANDLE: $("#id") + else { + var elem = document.getElementById( match[3] ); + + // Make sure an element was located + if ( elem ){ + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id != match[3] ) + return jQuery().find( selector ); + + // Otherwise, we inject the element directly into the jQuery object + return jQuery( elem ); + } + selector = []; + } + + // HANDLE: $(expr, [context]) + // (which is just equivalent to: $(content).find(expr) + } else + return jQuery( context ).find( selector ); + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) + return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector ); + + return this.setArray(jQuery.makeArray(selector)); + }, + + // The current version of jQuery being used + jquery: "1.2.6", + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + // The number of elements contained in the matched element set + length: 0, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == undefined ? + + // Return a 'clean' array + jQuery.makeArray( this ) : + + // Return just the object + this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + // Build a new jQuery matched element set + var ret = jQuery( elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Force the current matched set of elements to become + // the specified array of elements (destroying the stack in the process) + // You should use pushStack() in order to do this, but maintain the stack + setArray: function( elems ) { + // Resetting the length to 0, then using the native Array push + // is a super-fast way to populate an object with array-like properties + this.length = 0; + Array.prototype.push.apply( this, elems ); + + return this; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + var ret = -1; + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem && elem.jquery ? elem[0] : elem + , this ); + }, + + attr: function( name, value, type ) { + var options = name; + + // Look for the case where we're accessing a style value + if ( name.constructor == String ) + if ( value === undefined ) + return this[0] && jQuery[ type || "attr" ]( this[0], name ); + + else { + options = {}; + options[ name ] = value; + } + + // Check to see if we're setting style values + return this.each(function(i){ + // Set all the styles + for ( name in options ) + jQuery.attr( + type ? + this.style : + this, + name, jQuery.prop( this, options[ name ], type, i, name ) + ); + }); + }, + + css: function( key, value ) { + // ignore negative width and height values + if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) + value = undefined; + return this.attr( key, value, "curCSS" ); + }, + + text: function( text ) { + if ( typeof text != "object" && text != null ) + return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); + + var ret = ""; + + jQuery.each( text || this, function(){ + jQuery.each( this.childNodes, function(){ + if ( this.nodeType != 8 ) + ret += this.nodeType != 1 ? + this.nodeValue : + jQuery.fn.text( [ this ] ); + }); + }); + + return ret; + }, + + wrapAll: function( html ) { + if ( this[0] ) + // The elements to wrap the target around + jQuery( html, this[0].ownerDocument ) + .clone() + .insertBefore( this[0] ) + .map(function(){ + var elem = this; + + while ( elem.firstChild ) + elem = elem.firstChild; + + return elem; + }) + .append(this); + + return this; + }, + + wrapInner: function( html ) { + return this.each(function(){ + jQuery( this ).contents().wrapAll( html ); + }); + }, + + wrap: function( html ) { + return this.each(function(){ + jQuery( this ).wrapAll( html ); + }); + }, + + append: function() { + return this.domManip(arguments, true, false, function(elem){ + if (this.nodeType == 1) + this.appendChild( elem ); + }); + }, + + prepend: function() { + return this.domManip(arguments, true, true, function(elem){ + if (this.nodeType == 1) + this.insertBefore( elem, this.firstChild ); + }); + }, + + before: function() { + return this.domManip(arguments, false, false, function(elem){ + this.parentNode.insertBefore( elem, this ); + }); + }, + + after: function() { + return this.domManip(arguments, false, true, function(elem){ + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + }, + + end: function() { + return this.prevObject || jQuery( [] ); + }, + + find: function( selector ) { + var elems = jQuery.map(this, function(elem){ + return jQuery.find( selector, elem ); + }); + + return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ? + jQuery.unique( elems ) : + elems ); + }, + + clone: function( events ) { + // Do the clone + var ret = this.map(function(){ + if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) { + // IE copies events bound via attachEvent when + // using cloneNode. Calling detachEvent on the + // clone will also remove the events from the orignal + // In order to get around this, we use innerHTML. + // Unfortunately, this means some modifications to + // attributes in IE that are actually only stored + // as properties will not be copied (such as the + // the name attribute on an input). + var clone = this.cloneNode(true), + container = document.createElement("div"); + container.appendChild(clone); + return jQuery.clean([container.innerHTML])[0]; + } else + return this.cloneNode(true); + }); + + // Need to set the expando to null on the cloned set if it exists + // removeData doesn't work here, IE removes it from the original as well + // this is primarily for IE but the data expando shouldn't be copied over in any browser + var clone = ret.find("*").andSelf().each(function(){ + if ( this[ expando ] != undefined ) + this[ expando ] = null; + }); + + // Copy the events from the original to the clone + if ( events === true ) + this.find("*").andSelf().each(function(i){ + if (this.nodeType == 3) + return; + var events = jQuery.data( this, "events" ); + + for ( var type in events ) + for ( var handler in events[ type ] ) + jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data ); + }); + + // Return the cloned set + return ret; + }, + + filter: function( selector ) { + return this.pushStack( + jQuery.isFunction( selector ) && + jQuery.grep(this, function(elem, i){ + return selector.call( elem, i ); + }) || + + jQuery.multiFilter( selector, this ) ); + }, + + not: function( selector ) { + if ( selector.constructor == String ) + // test special case where just one selector is passed in + if ( isSimple.test( selector ) ) + return this.pushStack( jQuery.multiFilter( selector, this, true ) ); + else + selector = jQuery.multiFilter( selector, this ); + + var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; + return this.filter(function() { + return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; + }); + }, + + add: function( selector ) { + return this.pushStack( jQuery.unique( jQuery.merge( + this.get(), + typeof selector == 'string' ? + jQuery( selector ) : + jQuery.makeArray( selector ) + ))); + }, + + is: function( selector ) { + return !!selector && jQuery.multiFilter( selector, this ).length > 0; + }, + + hasClass: function( selector ) { + return this.is( "." + selector ); + }, + + val: function( value ) { + if ( value == undefined ) { + + if ( this.length ) { + var elem = this[0]; + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type == "select-one"; + + // Nothing was selected + if ( index < 0 ) + return null; + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + if ( option.selected ) { + // Get the specifc value for the option + value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value; + + // We don't need an array for one selects + if ( one ) + return value; + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + + // Everything else, we just grab the value + } else + return (this[0].value || "").replace(/\r/g, ""); + + } + + return undefined; + } + + if( value.constructor == Number ) + value += ''; + + return this.each(function(){ + if ( this.nodeType != 1 ) + return; + + if ( value.constructor == Array && /radio|checkbox/.test( this.type ) ) + this.checked = (jQuery.inArray(this.value, value) >= 0 || + jQuery.inArray(this.name, value) >= 0); + + else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(value); + + jQuery( "option", this ).each(function(){ + this.selected = (jQuery.inArray( this.value, values ) >= 0 || + jQuery.inArray( this.text, values ) >= 0); + }); + + if ( !values.length ) + this.selectedIndex = -1; + + } else + this.value = value; + }); + }, + + html: function( value ) { + return value == undefined ? + (this[0] ? + this[0].innerHTML : + null) : + this.empty().append( value ); + }, + + replaceWith: function( value ) { + return this.after( value ).remove(); + }, + + eq: function( i ) { + return this.slice( i, i + 1 ); + }, + + slice: function() { + return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function(elem, i){ + return callback.call( elem, i, elem ); + })); + }, + + andSelf: function() { + return this.add( this.prevObject ); + }, + + data: function( key, value ){ + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + if ( data === undefined && this.length ) + data = jQuery.data( this[0], key ); + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } else + return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ + jQuery.data( this, key, value ); + }); + }, + + removeData: function( key ){ + return this.each(function(){ + jQuery.removeData( this, key ); + }); + }, + + domManip: function( args, table, reverse, callback ) { + var clone = this.length > 1, elems; + + return this.each(function(){ + if ( !elems ) { + elems = jQuery.clean( args, this.ownerDocument ); + + if ( reverse ) + elems.reverse(); + } + + var obj = this; + + if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) ) + obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") ); + + var scripts = jQuery( [] ); + + jQuery.each(elems, function(){ + var elem = clone ? + jQuery( this ).clone( true )[0] : + this; + + // execute all scripts after the elements have been injected + if ( jQuery.nodeName( elem, "script" ) ) + scripts = scripts.add( elem ); + else { + // Remove any inner scripts for later evaluation + if ( elem.nodeType == 1 ) + scripts = scripts.add( jQuery( "script", elem ).remove() ); + + // Inject the elements into the document + callback.call( obj, elem ); + } + }); + + scripts.each( evalScript ); + }); + } +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +function evalScript( i, elem ) { + if ( elem.src ) + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + + else + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + + if ( elem.parentNode ) + elem.parentNode.removeChild( elem ); +} + +function now(){ + return +new Date; +} + +jQuery.extend = jQuery.fn.extend = function() { + // copy reference to target object + var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; + + // Handle a deep copy situation + if ( target.constructor == Boolean ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target != "object" && typeof target != "function" ) + target = {}; + + // extend jQuery itself if only one argument is passed + if ( length == i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) + // Extend the base object + for ( var name in options ) { + var src = target[ name ], copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) + continue; + + // Recurse if we're merging object values + if ( deep && copy && typeof copy == "object" && !copy.nodeType ) + target[ name ] = jQuery.extend( deep, + // Never move original objects, clone them + src || ( copy.length != null ? [ ] : { } ) + , copy ); + + // Don't bring in undefined values + else if ( copy !== undefined ) + target[ name ] = copy; + + } + + // Return the modified object + return target; +}; + +var expando = "jQuery" + now(), uuid = 0, windowData = {}, + // exclude the following css properties to add px + exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, + // cache defaultView + defaultView = document.defaultView || {}; + +jQuery.extend({ + noConflict: function( deep ) { + window.$ = _$; + + if ( deep ) + window.jQuery = _jQuery; + + return jQuery; + }, + + // See test/unit/core.js for details concerning this function. + isFunction: function( fn ) { + return !!fn && typeof fn != "string" && !fn.nodeName && + fn.constructor != Array && /^[\s[]?function/.test( fn + "" ); + }, + + // check if an element is in a (or is an) XML document + isXMLDoc: function( elem ) { + return elem.documentElement && !elem.body || + elem.tagName && elem.ownerDocument && !elem.ownerDocument.body; + }, + + // Evalulates a script in a global context + globalEval: function( data ) { + data = jQuery.trim( data ); + + if ( data ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + if ( jQuery.browser.msie ) + script.text = data; + else + script.appendChild( document.createTextNode( data ) ); + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); + }, + + cache: {}, + + data: function( elem, name, data ) { + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ]; + + // Compute a unique ID for the element + if ( !id ) + id = elem[ expando ] = ++uuid; + + // Only generate the data cache if we're + // trying to access or manipulate it + if ( name && !jQuery.cache[ id ] ) + jQuery.cache[ id ] = {}; + + // Prevent overriding the named cache with undefined values + if ( data !== undefined ) + jQuery.cache[ id ][ name ] = data; + + // Return the named cache data, or the ID for the element + return name ? + jQuery.cache[ id ][ name ] : + id; + }, + + removeData: function( elem, name ) { + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ]; + + // If we want to remove a specific section of the element's data + if ( name ) { + if ( jQuery.cache[ id ] ) { + // Remove the section of cache data + delete jQuery.cache[ id ][ name ]; + + // If we've removed all the data, remove the element's cache + name = ""; + + for ( name in jQuery.cache[ id ] ) + break; + + if ( !name ) + jQuery.removeData( elem ); + } + + // Otherwise, we want to remove all of the element's data + } else { + // Clean up the element expando + try { + delete elem[ expando ]; + } catch(e){ + // IE has trouble directly removing the expando + // but it's ok with using removeAttribute + if ( elem.removeAttribute ) + elem.removeAttribute( expando ); + } + + // Completely remove the data cache + delete jQuery.cache[ id ]; + } + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, length = object.length; + + if ( args ) { + if ( length == undefined ) { + for ( name in object ) + if ( callback.apply( object[ name ], args ) === false ) + break; + } else + for ( ; i < length; ) + if ( callback.apply( object[ i++ ], args ) === false ) + break; + + // A special, fast, case for the most common use of each + } else { + if ( length == undefined ) { + for ( name in object ) + if ( callback.call( object[ name ], name, object[ name ] ) === false ) + break; + } else + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} + } + + return object; + }, + + prop: function( elem, value, type, i, name ) { + // Handle executable functions + if ( jQuery.isFunction( value ) ) + value = value.call( elem, i ); + + // Handle passing in a number to a CSS property + return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ? + value + "px" : + value; + }, + + className: { + // internal only, use addClass("class") + add: function( elem, classNames ) { + jQuery.each((classNames || "").split(/\s+/), function(i, className){ + if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) + elem.className += (elem.className ? " " : "") + className; + }); + }, + + // internal only, use removeClass("class") + remove: function( elem, classNames ) { + if (elem.nodeType == 1) + elem.className = classNames != undefined ? + jQuery.grep(elem.className.split(/\s+/), function(className){ + return !jQuery.className.has( classNames, className ); + }).join(" ") : + ""; + }, + + // internal only, use hasClass("class") + has: function( elem, className ) { + return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; + } + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var old = {}; + // Remember the old values, and insert the new ones + for ( var name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + callback.call( elem ); + + // Revert the old values + for ( var name in options ) + elem.style[ name ] = old[ name ]; + }, + + css: function( elem, name, force ) { + if ( name == "width" || name == "height" ) { + var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; + + function getWH() { + val = name == "width" ? elem.offsetWidth : elem.offsetHeight; + var padding = 0, border = 0; + jQuery.each( which, function() { + padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; + border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; + }); + val -= Math.round(padding + border); + } + + if ( jQuery(elem).is(":visible") ) + getWH(); + else + jQuery.swap( elem, props, getWH ); + + return Math.max(0, val); + } + + return jQuery.curCSS( elem, name, force ); + }, + + curCSS: function( elem, name, force ) { + var ret, style = elem.style; + + // A helper method for determining if an element's values are broken + function color( elem ) { + if ( !jQuery.browser.safari ) + return false; + + // defaultView is cached + var ret = defaultView.getComputedStyle( elem, null ); + return !ret || ret.getPropertyValue("color") == ""; + } + + // We need to handle opacity special in IE + if ( name == "opacity" && jQuery.browser.msie ) { + ret = jQuery.attr( style, "opacity" ); + + return ret == "" ? + "1" : + ret; + } + // Opera sometimes will give the wrong display answer, this fixes it, see #2037 + if ( jQuery.browser.opera && name == "display" ) { + var save = style.outline; + style.outline = "0 solid black"; + style.outline = save; + } + + // Make sure we're using the right name for getting the float value + if ( name.match( /float/i ) ) + name = styleFloat; + + if ( !force && style && style[ name ] ) + ret = style[ name ]; + + else if ( defaultView.getComputedStyle ) { + + // Only "float" is needed here + if ( name.match( /float/i ) ) + name = "float"; + + name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); + + var computedStyle = defaultView.getComputedStyle( elem, null ); + + if ( computedStyle && !color( elem ) ) + ret = computedStyle.getPropertyValue( name ); + + // If the element isn't reporting its values properly in Safari + // then some display: none elements are involved + else { + var swap = [], stack = [], a = elem, i = 0; + + // Locate all of the parent display: none elements + for ( ; a && color(a); a = a.parentNode ) + stack.unshift(a); + + // Go through and make them visible, but in reverse + // (It would be better if we knew the exact display type that they had) + for ( ; i < stack.length; i++ ) + if ( color( stack[ i ] ) ) { + swap[ i ] = stack[ i ].style.display; + stack[ i ].style.display = "block"; + } + + // Since we flip the display style, we have to handle that + // one special, otherwise get the value + ret = name == "display" && swap[ stack.length - 1 ] != null ? + "none" : + ( computedStyle && computedStyle.getPropertyValue( name ) ) || ""; + + // Finally, revert the display styles back + for ( i = 0; i < swap.length; i++ ) + if ( swap[ i ] != null ) + stack[ i ].style.display = swap[ i ]; + } + + // We should always get a number back from opacity + if ( name == "opacity" && ret == "" ) + ret = "1"; + + } else if ( elem.currentStyle ) { + var camelCase = name.replace(/\-(\w)/g, function(all, letter){ + return letter.toUpperCase(); + }); + + ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { + // Remember the original values + var left = style.left, rsLeft = elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + elem.runtimeStyle.left = elem.currentStyle.left; + style.left = ret || 0; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + elem.runtimeStyle.left = rsLeft; + } + } + + return ret; + }, + + clean: function( elems, context ) { + var ret = []; + context = context || document; + // !context.createElement fails in IE with an error but returns typeof 'object' + if (typeof context.createElement == 'undefined') + context = context.ownerDocument || context[0] && context[0].ownerDocument || document; + + jQuery.each(elems, function(i, elem){ + if ( !elem ) + return; + + if ( elem.constructor == Number ) + elem += ''; + + // Convert html string into DOM nodes + if ( typeof elem == "string" ) { + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ + return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? + all : + front + ">"; + }); + + // Trim whitespace, otherwise indexOf won't work as expected + var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div"); + + var wrap = + // option or optgroup + !tags.indexOf("", "" ] || + + !tags.indexOf("", "" ] || + + tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && + [ 1, "", "
" ] || + + !tags.indexOf("", "" ] || + + // matched above + (!tags.indexOf("", "" ] || + + !tags.indexOf("", "" ] || + + // IE can't serialize and + * + * In CSS, define the following style: + * + * .hilite { background-color: #ff0; } + * + * If Hilite.style_name_suffix is true, then define the follow styles: + * + * .hilite1 { background-color: #ff0; } + * .hilite2 { background-color: #f0f; } + * .hilite3 { background-color: #0ff; } + * .hilite4 ... + * + * @author Scott Yang + * @version 1.5 + */ + +// Configuration: +Hilite = { + /** + * Element ID to be highlighted. If set, then only content inside this DOM + * element will be highlighted, otherwise everything inside document.body + * will be searched. + */ + elementid: 'content', + + /** + * Whether we are matching an exact word. For example, searching for + * "highlight" will only match "highlight" but not "highlighting" if exact + * is set to true. + */ + exact: true, + + /** + * Maximum number of DOM nodes to test, before handing the control back to + * the GUI thread. This prevents locking up the UI when parsing and + * replacing inside a large document. + */ + max_nodes: 1000, + + /** + * Whether to automatically hilite a section of the HTML document, by + * binding the "Hilite.hilite()" to window.onload() event. If this + * attribute is set to false, you can still manually trigger the hilite by + * calling Hilite.hilite() in Javascript after document has been fully + * loaded. + */ + onload: true, + + /** + * Name of the style to be used. Default to 'hilite'. + */ + style_name: 'hilite', + + /** + * Whether to use different style names for different search keywords by + * appending a number starting from 1, i.e. hilite1, hilite2, etc. + */ + style_name_suffix: true, + + /** + * Set it to override the document.referrer string. Used for debugging + * only. + */ + debug_referrer: '' +}; + +Hilite.search_engines = [ + ['google\\.', 'q'], // Google + ['search\\.yahoo\\.', 'p'], // Yahoo + ['search\\.msn\\.', 'q'], // MSN + ['search\\.live\\.', 'query'], // MSN Live + ['search\\.aol\\.', 'userQuery'], // AOL + ['ask\\.com', 'q'], // Ask.com + ['altavista\\.', 'q'], // AltaVista + ['feedster\\.', 'q'], // Feedster + ['search\\.lycos\\.', 'q'], // Lycos + ['alltheweb\\.', 'q'], // AllTheWeb + ['technorati\\.com/search/([^\\?/]+)', 1], // Technorati + ['dogpile\\.com/info\\.dogpl/search/web/([^\\?/]+)', 1, true] // DogPile +]; + +/** + * Decode the referrer string and return a list of search keywords. + */ +Hilite.decodeReferrer = function(referrer) { + var query = null; + var regex = new RegExp(''); + + for (var i = 0; i < Hilite.search_engines.length; i ++) { + var se = Hilite.search_engines[i]; + regex.compile('^http://(www\\.)?' + se[0], 'i'); + var match = referrer.match(regex); + if (match) { + var result; + if (isNaN(se[1])) { + result = Hilite.decodeReferrerQS(referrer, se[1]); + } else { + result = match[se[1] + 1]; + } + if (result) { + result = decodeURIComponent(result); + // XXX: DogPile's URI requires decoding twice. + if (se.length > 2 && se[2]) + result = decodeURIComponent(result); + result = result.replace(/\'|"/g, ''); + result = result.split(/[\s,\+\.]+/); + return result; + } + break; + } + } + return null; +}; + +Hilite.decodeReferrerQS = function(referrer, match) { + var idx = referrer.indexOf('?'); + var idx2; + if (idx >= 0) { + var qs = new String(referrer.substring(idx + 1)); + idx = 0; + idx2 = 0; + while ((idx >= 0) && ((idx2 = qs.indexOf('=', idx)) >= 0)) { + var key, val; + key = qs.substring(idx, idx2); + idx = qs.indexOf('&', idx2) + 1; + if (key == match) { + if (idx <= 0) { + return qs.substring(idx2+1); + } else { + return qs.substring(idx2+1, idx - 1); + } + } + else if (idx <=0) { + return null; + } + } + } + return null; +}; + +/** + * Highlight a DOM element with a list of keywords. + */ +Hilite.hiliteElement = function(elm, query) { + if (!query || elm.childNodes.length == 0) + return; + + var qre = new Array(); + for (var i = 0; i < query.length; i ++) { + query[i] = query[i].toLowerCase(); + if (Hilite.exact) + qre.push('\\b'+query[i]+'\\b'); + else + qre.push(query[i]); + } + + qre = new RegExp(qre.join("|"), "i"); + + var stylemapper = {}; + for (var i = 0; i < query.length; i ++) { + if (Hilite.style_name_suffix) + stylemapper[query[i]] = Hilite.style_name+(i+1); + else + stylemapper[query[i]] = Hilite.style_name; + } + + var textproc = function(node) { + var match = qre.exec(node.data); + if (match) { + var val = match[0]; + var k = ''; + var node2 = node.splitText(match.index); + var node3 = node2.splitText(val.length); + var span = node.ownerDocument.createElement('SPAN'); + node.parentNode.replaceChild(span, node2); + span.className = stylemapper[val.toLowerCase()]; + span.appendChild(node2); + return span; + } else { + return node; + } + }; + Hilite.walkElements(elm.childNodes[0], 1, textproc); +}; + +/** + * Highlight a HTML document using keywords extracted from document.referrer. + * This is the main function to be called to perform search engine highlight + * on a document. + * + * Currently it would check for DOM element 'content', element 'container' and + * then document.body in that order, so it only highlights appropriate section + * on WordPress and Movable Type pages. + */ +Hilite.hilite = function() { + // If 'debug_referrer' then we will use that as our referrer string + // instead. + var q = Hilite.debug_referrer ? Hilite.debug_referrer : document.referrer; + var e = null; + q = Hilite.decodeReferrer(q); + if (q && ((Hilite.elementid && + (e = document.getElementById(Hilite.elementid))) || + (e = document.body))) + { + Hilite.hiliteElement(e, q); + } +}; + +Hilite.walkElements = function(node, depth, textproc) { + var skipre = /^(script|style|textarea)/i; + var count = 0; + while (node && depth > 0) { + count ++; + if (count >= Hilite.max_nodes) { + var handler = function() { + Hilite.walkElements(node, depth, textproc); + }; + setTimeout(handler, 50); + return; + } + + if (node.nodeType == 1) { // ELEMENT_NODE + if (!skipre.test(node.tagName) && node.childNodes.length > 0) { + node = node.childNodes[0]; + depth ++; + continue; + } + } else if (node.nodeType == 3) { // TEXT_NODE + node = textproc(node); + } + + if (node.nextSibling) { + node = node.nextSibling; + } else { + while (depth > 0) { + node = node.parentNode; + depth --; + if (node.nextSibling) { + node = node.nextSibling; + break; + } + } + } + } +}; + +// Trigger the highlight using the onload handler. +if (Hilite.onload) { + if (window.attachEvent) { + window.attachEvent('onload', Hilite.hilite); + } else if (window.addEventListener) { + window.addEventListener('load', Hilite.hilite, false); + } else { + var __onload = window.onload; + window.onload = function() { + Hilite.hilite(); + __onload(); + }; + } +} diff --git a/forum/skins/default/media/js/wmd/images/wmd-buttons.png b/forum/skins/default/media/js/wmd/images/wmd-buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..50b37090363e6757e7bd0ba75cd1e0dfaabd13d2 GIT binary patch literal 7465 zcmV+^9oFKBP)VIL00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBV3yGcYrRCwC# zT?up>)w$MaMjA<$EnD)w#7^SaWVI8Ugg7A!A!H#7G%1A^NCF%(21JT*lhDl(kkK4(Z`rct`RAXvTCFyl z4Sud$x9-(fUrkL-6$+D}Oi@u079o%bhs4)iQ&V%>ZMUJa3l=PZp8}cp9zI)V>&%&W zwr3x`?U_Scc5Ewl-E!Bs$IHf&zj|=h8H0Dv;ge!2-MMpTTU%RXO9W~UeZWZXL4t__ zj~|}S|V zCUaYtrM9WZ>Gs9Za?pwm8#W{-C$CwvX7%dTkg|2_RschcFlqhz^`Q3)7cLB5|Cuvq zK&|z9J)90@5K}z>0ATmgM<11yl?fxk&}Tl=&MsY8a_4V%(_Y1#2`ijF^U{KcRmzNJ zLx)mM+`Dw@bW!rfZ7Z(8gCbJ~Rs7sKK7?(8;#Lwe9T&YxiYGSxMH$AKxrw=Ds+8tgfT$vV&#V zrB%iEu9`lmy1*yE7RT|Q|NQ3$g8|eMegYVtc;bmL=OB&LgQY?MDTZfP#tv z&-?q1O`M!lm{dAGvy#I+zrSz$rn|rJ6S|Wf-3FWgVlQPenW`$v{{Gov0S`ER`gCX~ z)CfopdI`7?NCc}8c16S1^AHeRDkzXmCX+>tQi9ffD28^pjPwvaL(H;0CTj1|X0+dH zqBehc;_siH-BZ(W_}@*J+Im0SU%&BB)qG_?tZvwOpyBgF=TFzRHnsL{-g$EUv;S&t zH=(1S9d5qV8H2(hjR&&`JRztI5HCT>pb2zjXeBaeiG)_9=*_M?R&uJ{w(jP44_?^% z(3X`m#;z^NzuTbiVQEsKVw9wbAr#F9E1w4htQHm)hMIr4NB|);J7#EytX)`u6hGR!n^?H>Y zzklsaNZk5K?fajcdiwtP3VFCT!qLBdQrmE$^GD04B`1-8`}ma6<#oI1bn+z0uX|Gbg9y z-BAAGS^c3)CcVYk+RXe)qtf{=%uQ7mY18F)kDqe6)hcD=bppi0{7=+GF%Mq&XE+$V zwB7Axd2XP~%V@lT02kxuuh*VKj}*sM$YplQv+LjmhUG4`o0>0ntzA6zg(sG4k`-{Y z`eb`or;%f$w2fuCi~7DCt?JoFm%z^rYiGUi`koy%jTxD#e|+yNi^JX1V@Xa@#I)u? zWkB{(qtQe)l!S2TfAHYJU|}E+;*kLAC?>z%O*i#ANL*s}^^$h8Ry8d{KCiy}&GD-~ z(&@6B>JRPuEuNuyq&&Ak674~vU<@D*06>H%ED_oe6Oi%gRZ7<9ZdGrRJSpm7Iqgo# z$dgF!<2XF3b&rn(4-rVho`DZ4p_Pi+k30jzvOuDG%$DvxhsQzv{^=EWt*i(hEzC*gpB>ldyf^g%{p_`)z0;0&rO3u!BJ&y^P_V7@iWHQLs)- zita5IRlR~rb1eyUe4Zgxzs2lFtygcbIw?2pqm?qk<)K55nk=rxb4vNjE}J{y+=cGY z6q1zFKE`TsNIA~y9|T7NgD!vsiSP(CXfpr+lnD_Iz(yqJ7z$wksVGcq>%Q#s)0ETY zcKdBs+kw+RzSwc(i~WWJpVaRDOLNZTareKL{dM0<7xYb$#UT=ltQRggG*N)}qt0J} z&Q<|a>T%&t2jQadsDDle?s7_lqYa~kKw~20YJ^E}S`y<_7@MXfk`%-r{(5lBhsUpw zD=*FX{XbbZkFV^bcg>dKxa*rv)%QL-yXpV-`<#@9l%^<&44qmky3Hu&7vR9L2{b?g z^{WCN09!Gc1CUz1UO#{Sd@;=X?qyZ~IPt+{hb~#_b2wQSWp{H;%bqI6NgeI>bF4(E zmS<(E=l;yN>~~e~J@)Yp*HwiDa^U#FxITC@}P@eH*uiNw>uVqj9tZ(%#yJtbvDmL=E^U%cni-&(@BGGH%AY*07^=nqX4&-;Z3 z76t%Gf=$i8K36kF$-^1Ev^zV%88DV*Mh}4=N^jCoMxdc+l5&8`BI*oY!Dy!LUo%tq z%=g`1xud$l>+_RxVthgT({n&8fKLi=NFtK^Mjf+|^bcb5S=q42Ok|9NWXar0AMJnt z$hj5s=g*mt_Uj#V`)Nm}Moas^0JC6U({#GJk4&fb8Q%Nv?O|o1J!p&>4Y4850NcpK zVb`iVX5S|!C(Y22);;ba!6hf6UnC-*l3$y<@JFn<>WFMy8G!rOogE2%a@N$ zESNY-T8Jj#eZ@MKUAxIK$x+Nqb z2{0riAqg-fBq32{w7diDba`5O+pSzL>mX^?uOKuja`l8U*(xPD+HRTG>m5{nk|Yy) zHsW&e;>GUnz#OOC+}wS)7VC}l4H9Rq+DWC8L6%;qBL7R?P6DVj#gEa zn|bxBe)G*YAAIn^;67}FKf{iOfNoNO1+Zn(8y{EQ@Dr#?XwnKs|{d z6gD?SNTn0jf^a&n%Knd`Rnnw?HJ&9U5= z?34+G>4U24XtkT6^TH^BB`zRM&IVYhNGA=7!*WA%FwRjAl2Lz>uib9nh zE*KJvii)n%3(%7Oxq6s{cg{10U75`xjhMBHtUGLxQVzx9Udza2D0R6!wAtp$&kBU; zZZEAjSo_Q_i_Piv`r$s>DYq1p%$O7%53OAm$Ztk-F$ny;$Jf>8n0{T3Mje>y*U@7G zcaf4L6tyCa2eYW@7nBI`5~Rcc!*KCGgg=4k2npr$t2l{~@|EP>WUw}U*|;Y?d7MT) z!3AJ|7=&O6+yge&?(*?@z@tZxf;S6QdbmzN0$gWIBp_>t;-a7*2%`{DX@ev%0}u20 zrK|+wi2Ccb zSr3NI$jXOB)Um+;iUke1OS$mB_x>DQYb2D_K?S{*j- zgq%=t)@(VhCY894VQIf#7BTk$JRr0%%>N*&B*uw_J$T`t5iMtZ3CFaX&-T zHKtHba11oX=cNG$;F>v!STr;? zHVPmi1{jL^1>!A00^k9nbNI=3qBsZxNV=N5U~#KtN{-{C5N7**-KHZ9*5mXfNjRt9 z$Eng&^2@NEGpDUoUaDFX+2BHXTbcp zkaZss0zFck0SnA@;6T+dB48lu8oQ+!Rx&owT%9LP1tb-z7Iq z$^q>Xj-h>i&RS5Wk>Vs9`0#;*kV%zFS@tx~r)PF9nzAG-H9M^D3q^sU{RUxRh~!CO zdLMOQA@b-zzaVjWoRr5dC*(Ygf)2haG7b7 zwp3jz#&T94i(^U|3!xwx=vl=ioR_00Mx#si7D&E0Rdd%(cZL?PsHgz!1&Iyv01(cF zCQg|$MZB(vv7M-2RhyKdlB)@6^c%>qer13&M0o{l1PSy|Ji`!2pu` zu`y;Clon;Qc3FUR;8IMu7d1xLB}IXi6yT6VB=?Q%u|YdQhAJ$`REvp`kmP4)Ff7~B zV;Pg1ldU07wz8Dbr<9ZZ--ZHB!bk;aZu1zs+&9e#|2!?U2SPw-GhAe8X({pyu#HR{ zb{UsdDkfXxpxX$JK##UD4J+jVs~`3AVW9#UAe+tM(Q1@&*9DbOwYR5b=<3dAuzhy?%z#o6mXu6d9<9gMbpk5KXGGtHW~Z z%oSBskb4O2;01Q1nJ$AcY_&ZB* zh-F!y&sSMlnb5`Wge2a9PDnzoNa9Vmge2sO5N{r&6L%pY2}yW{gd`-yGmMgUSj?t# z`aKTKF@-^E_c}>wi4rR)E1Q*?I_lPe_BjW)4zxTeu@3aeOKr{jEwu+=XMEYhya_YX z^GZf37#hyjTID;k?ya62SO?nk%{tKcZryi4kL${&&ANJ3KeRyp=NeydAGX1tVMjyd zzMC_ZGK^+~&Md+z~m(qyth&nGbT=(oQ7 zz@*7j3aS?MTsDGQ9^3PdF1u*u`e%i}0P3EeUHHlqi-XtSak2JK&#VD>!0Av1G1Y_e zDb=Y^YyS9YPrbHZAg9e{PE$#jR$W;KdUo*&x6iyd|6#d2qp`a~)xQq(bASGjqKeh( z6uy%{Be(qKe%N_r)4#$J-IR6xf4wE}fCV&O_^8NrpxIdKK=V~0M)~3^8y}E_Z`5GV zMj6}frmmj8z&g-MO~#@{LQS%EH<>PXbzOFNyi9K4xGB@h236OtEx(4X-6Ng1_9=6p z0omy4f4;tG?PFoifr!-O(4Syy7k&Tn5B~TwR9?Ju09_1#XIYH=b?3fbyL@J*JZpSL z<@v4?8}Hd}p(K~Bm%h?>Gc?Vzp7a!E!OZfSua3@}yOhrZ0#L#6t^dVapXr7}SI)oFlsMZ~}NGXS6aj#`$GL*W!Zpz%(n=>ZxekSd4I(nO1^@j7! z-DY^$fjiYF<*;en{(rhI$a?6?9#WWQnYDl zLbDT)#)DY|o)Dx85HGnYTMRHnic%fVVjpL|{74`^2@1`)T@3eit8LA^zaMGZ_Sics zrxdKs&-zhM|2oh~YFDz-NG2&=9vhzr{NRnJAc_lBdKYB{B&gJym`Fg@4#h=5KM+PC z_-I4i>p%}B!Wm+86f^F>N&u7MvflP4hG9T!?LCcX9cUcGXH`|O414-)-PzM;Zd@=o z@{{H)!<;%@*Knb8>eR_fC3*Vf8CU;0(7Sf*T)Ao)u(m@rU#?v9ec{?ytbaDYxD3pC zFl+{am?bQtjtvG-EN}>DA6$g^>u)-92y_&+KnM&RcD~zfcbb#bc_kAza$Sec8})6b zRwMZ9w?(0dF;5K4e=wqfI3i%*lQdC-XCW}W@{^mJY7Yeqm(N`#oW_80>Ys*HsV1)J1L}+tNK*lBUuLF%R5FdvgB9MeV10PgED;2XJ-EHGFg;~+~6x1hD*=B(j5ojx%GRi3XAJcoH&lwfhJ{AR`fd1 zVA+8>BOa?#4{{x7a0LYu%Br`&0h$eg#~qKoB9b#e$PU}`xvOL5q=8v5mJeV z@%eoci>ck|e~0Z~2U@GLYtoPCJAax>yhJJ%MHcUDISX4vX}}?@`^9ExAp&q%;;@5Z zDCp-jI1Wgaf#xvruRu$V?b#-Pgcx7|vkHF@ZvjIEJV0~~KUE?q#5aUtUd){NshZ>F%PF!< z#_yMtDvq(%H9yYDkMx-GIJV1W_2*WMyX9$o-wVI#>ANXAV?tz~Z)is_)C+nK7mPrH zM1c1T4=h9;9qxFbhuzLZL(GiC<9 z?&t@h{Z&in@)f;d_RNoW>;e?Y z*aR8?u=N`P4%k|>_VJkAx}cyXW%I?gcx>=FA?@_ceV!IKFSA!{k7X;LSq85XqCo3@k(*9q1S0Uk7>w3G_&D1_*)f zduZLaOn_xw&MP0hXliWE%g;;G@^%NMrll5+Ej-_Fep>l7N#H%^+-27yG3 zl$OsE?$L=21~+930Y>b|=gi@NTM$DSK$11uCDSYZ-F9)>X>`ysDbG64%dxk% zZFupq3!%kVu7A#C&g58|%BRhgTsJ9e??[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|\Z)/gm,function(K,M,L,J,I){M=M.toLowerCase();a[M]=h(L);if(J){return J+I}else{if(I){j[M]=I.replace(/"/g,""")}}return""});return H};var m=function(J){J=J.replace(/\n/g,"\n\n");var I="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del";var H="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math";J=J.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,x);J=J.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm,x);J=J.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,x);J=J.replace(/(\n\n[ ]{0,3}[ \t]*(?=\n{2,}))/g,x);J=J.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,x);J=J.replace(/\n\n/g,"\n");return J};var x=function(H,I){var J=I;J=J.replace(/\n\n/g,"\n");J=J.replace(/^\n/,"");J=J.replace(/\n+$/g,"");J="\n\n~K"+(A.push(J)-1)+"K\n\n";return J};var G=function(I){I=f(I);var H=o("
");I=I.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,H);I=I.replace(/^[ ]{0,2}([ ]?-[ ]?){3,}[ \t]*$/gm,H);I=I.replace(/^[ ]{0,2}([ ]?_[ ]?){3,}[ \t]*$/gm,H);I=E(I);I=b(I);I=u(I);I=m(I);I=g(I);return I};var r=function(H){H=C(H);H=l(H);H=e(H);H=F(H);H=y(H);H=n(H);H=h(H);H=c(H);H=H.replace(/ +\n/g,"
\n");return H};var l=function(I){var H=/(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|)/gi;I=I.replace(H,function(K){var J=K.replace(/(.)<\/?code>(?=.)/g,"$1`");J=w(J,"\\`*_");return J});return I};var y=function(H){H=H.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,D);H=H.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,D);H=H.replace(/(\[([^\[\]]+)\])()()()()()/g,D);return H};var D=function(N,T,S,R,Q,P,M,L){if(L==undefined){L=""}var K=T;var I=S;var J=R.toLowerCase();var H=Q;var O=L;if(H==""){if(J==""){J=I.toLowerCase().replace(/ ?\n/g," ")}H="#"+J;if(a[J]!=undefined){H=a[J];if(j[J]!=undefined){O=j[J]}}else{if(K.search(/\(\s*\)$/m)>-1){H=""}else{return K}}}H=w(H,"*_");var U='";return U};var F=function(H){H=H.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,t);H=H.replace(/(!\[(.*?)\]\s?\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,t);return H};var t=function(N,T,S,R,Q,P,M,L){var K=T;var J=S;var I=R.toLowerCase();var H=Q;var O=L;if(!O){O=""}if(H==""){if(I==""){I=J.toLowerCase().replace(/ ?\n/g," ")}H="#"+I;if(a[I]!=undefined){H=a[I];if(j[I]!=undefined){O=j[I]}}else{return K}}J=J.replace(/"/g,""");H=w(H,"*_");var U=''+J+'"+r(J)+"")});H=H.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm,function(J,I){return o("

"+r(I)+"

")});H=H.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm,function(I,L,K){var J=L.length;return o(""+r(K)+"")});return H};var p;var E=function(I){I+="~0";var H=/^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;if(i){I=I.replace(H,function(K,N,M){var O=N;var L=(M.search(/[*+-]/g)>-1)?"ul":"ol";O=O.replace(/\n{2,}/g,"\n\n\n");var J=p(O);J=J.replace(/\s+$/,"");J="<"+L+">"+J+"\n";return J})}else{H=/(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g;I=I.replace(H,function(L,P,N,K){var O=P;var Q=N;var M=(K.search(/[*+-]/g)>-1)?"ul":"ol";var Q=Q.replace(/\n{2,}/g,"\n\n\n");var J=p(Q);J=O+"<"+M+">\n"+J+"\n";return J})}I=I.replace(/~0/,"");return I};p=function(H){i++;H=H.replace(/\n{2,}$/,"\n");H+="~0";H=H.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm,function(K,M,L,J,I){var O=I;var N=M;var P=L;if(N||(O.search(/\n{2,}/)>-1)){O=G(s(O))}else{O=E(s(O));O=O.replace(/\n$/,"");O=r(O)}return"
  • "+O+"
  • \n"});H=H.replace(/~0/g,"");i--;return H};var b=function(H){H+="~0";H=H.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,function(I,K,J){var L=K;var M=J;L=v(s(L));L=z(L);L=L.replace(/^\n+/g,"");L=L.replace(/\n+$/g,"");L="
    "+L+"\n
    ";return o(L)+M});H=H.replace(/~0/,"");return H};var o=function(H){H=H.replace(/(^\n+|\n+$)/g,"");return"\n\n~K"+(A.push(H)-1)+"K\n\n"};var C=function(H){H=H.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(K,M,L,J,I){var N=J;N=N.replace(/^([ \t]*)/g,"");N=N.replace(/[ \t]*$/g,"");N=v(N);return M+""+N+""});return H};var v=function(H){H=H.replace(/&/g,"&");H=H.replace(//g,">");H=w(H,"*_{}[]\\",false);return H};var c=function(H){H=H.replace(/(\*\*|__)(?=\S)([^\r]*?\S[\*_]*)\1/g,"$2");H=H.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,"$2");return H};var u=function(H){H=H.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,function(I,J){var K=J;K=K.replace(/^[ \t]*>[ \t]?/gm,"~0");K=K.replace(/~0/g,"");K=K.replace(/^[ \t]+$/gm,"");K=G(K);K=K.replace(/(^|\n)/g,"$1 ");K=K.replace(/(\s*
    [^\r]+?<\/pre>)/gm,function(L,M){var N=M;N=N.replace(/^  /mg,"~0");N=N.replace(/~0/g,"");return N});return o("
    \n"+K+"\n
    ")});return H};var g=function(N){N=N.replace(/^\n+/g,"");N=N.replace(/\n+$/g,"");var M=N.split(/\n{2,}/g);var J=new Array();var H=M.length;for(var I=0;I=0){J.push(L)}else{if(L.search(/\S/)>=0){L=r(L);L=L.replace(/^([ \t]*)/g,"

    ");L+="

    ";J.push(L)}}}H=J.length;for(var I=0;I=0){var K=A[RegExp.$1];K=K.replace(/\$/g,"$$$$");J[I]=J[I].replace(/~K\d+K/,K)}}return J.join("\n\n")};var h=function(H){H=H.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&");H=H.replace(/<(?![a-z\/?\$!])/gi,"<");return H};var e=function(H){H=H.replace(/\\(\\)/g,k);H=H.replace(/\\([`*_{}\[\]()>#+-.!])/g,k);return H};var n=function(H){H=H.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,'
    $1');H=H.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,function(I,J){return B(q(J))});return H};var B=function(J){function I(L){var K="0123456789ABCDEF";var M=L.charCodeAt(0);return(K.charAt(M>>4)+K.charAt(M&15))}var H=[function(K){return"&#"+K.charCodeAt(0)+";"},function(K){return"&#x"+I(K)+";"},function(K){return K}];J="mailto:"+J;J=J.replace(/./g,function(K){if(K=="@"){K=H[Math.floor(Math.random()*2)](K)}else{if(K!=":"){var L=Math.random();K=(L>0.9?H[2](K):L>0.45?H[1](K):H[0](K))}}return K});J=''+J+"";J=J.replace(/">.+:/g,'">');return J};var q=function(H){H=H.replace(/~E(\d+)E/g,function(I,K){var J=parseInt(K);return String.fromCharCode(J)});return H};var s=function(H){H=H.replace(/^(\t|[ ]{1,4})/gm,"~0");H=H.replace(/~0/g,"");return H};var z=function(H){H=H.replace(/\t(?=\t)/g," ");H=H.replace(/\t/g,"~A~B");H=H.replace(/~B(.+?)~A/g,function(I,L,K){var N=L;var J=4-N.length%4;for(var M=0;M +// +// Redistributable under a BSD-style open source license. +// See license.txt for more information. +// +// The full source distribution is at: +// +// A A L +// T C A +// T K B +// +// +// + +// +// Wherever possible, Showdown is a straight, line-by-line port +// of the Perl version of Markdown. +// +// This is not a normal parser design; it's basically just a +// series of string substitutions. It's hard to read and +// maintain this way, but keeping Showdown close to the original +// design makes it easier to port new features. +// +// More importantly, Showdown behaves like markdown.pl in most +// edge cases. So web applications can do client-side preview +// in Javascript, and then build identical HTML on the server. +// +// This port needs the new RegExp functionality of ECMA 262, +// 3rd Edition (i.e. Javascript 1.5). Most modern web browsers +// should do fine. Even with the new regular expression features, +// We do a lot of work to emulate Perl's regex functionality. +// The tricky changes in this file mostly have the "attacklab:" +// label. Major or self-explanatory changes don't. +// +// Smart diff tools like Araxis Merge will be able to match up +// this file with markdown.pl in a useful way. A little tweaking +// helps: in a copy of markdown.pl, replace "#" with "//" and +// replace "$text" with "text". Be sure to ignore whitespace +// and line endings. +// + + +// +// Showdown usage: +// +// var text = "Markdown *rocks*."; +// +// var converter = new Attacklab.showdown.converter(); +// var html = converter.makeHtml(text); +// +// alert(html); +// +// Note: move the sample code to the bottom of this +// file before uncommenting it. +// + + +// +// Attacklab namespace +// +var Attacklab = Attacklab || {} + +// +// Showdown namespace +// +Attacklab.showdown = Attacklab.showdown || {} + +// +// converter +// +// Wraps all "globals" so that the only thing +// exposed is makeHtml(). +// +Attacklab.showdown.converter = function() { + +// +// Globals: +// + +// Global hashes, used by various utility routines +var g_urls; +var g_titles; +var g_html_blocks; + +// Used to track when we're inside an ordered or unordered list +// (see _ProcessListItems() for details): +var g_list_level = 0; + + +this.makeHtml = function(text) { +// +// Main function. The order in which other subs are called here is +// essential. Link and image substitutions need to happen before +// _EscapeSpecialCharsWithinTagAttributes(), so that any *'s or _'s in the +// and tags get encoded. +// + + // Clear the global hashes. If we don't clear these, you get conflicts + // from other articles when generating a page which contains more than + // one article (e.g. an index page that shows the N most recent + // articles): + g_urls = new Array(); + g_titles = new Array(); + g_html_blocks = new Array(); + + // attacklab: Replace ~ with ~T + // This lets us use tilde as an escape char to avoid md5 hashes + // The choice of character is arbitray; anything that isn't + // magic in Markdown will work. + text = text.replace(/~/g,"~T"); + + // attacklab: Replace $ with ~D + // RegExp interprets $ as a special character + // when it's in a replacement string + text = text.replace(/\$/g,"~D"); + + // Standardize line endings + text = text.replace(/\r\n/g,"\n"); // DOS to Unix + text = text.replace(/\r/g,"\n"); // Mac to Unix + + // Make sure text begins and ends with a couple of newlines: + text = "\n\n" + text + "\n\n"; + + // Convert all tabs to spaces. + text = _Detab(text); + + // Strip any lines consisting only of spaces and tabs. + // This makes subsequent regexen easier to write, because we can + // match consecutive blank lines with /\n+/ instead of something + // contorted like /[ \t]*\n+/ . + text = text.replace(/^[ \t]+$/mg,""); + + // Turn block-level HTML blocks into hash entries + text = _HashHTMLBlocks(text); + + // Strip link definitions, store in hashes. + text = _StripLinkDefinitions(text); + + text = _RunBlockGamut(text); + + text = _UnescapeSpecialChars(text); + + // attacklab: Restore dollar signs + text = text.replace(/~D/g,"$$"); + + // attacklab: Restore tildes + text = text.replace(/~T/g,"~"); + + return text; +} + +var _StripLinkDefinitions = function(text) { +// +// Strips link definitions from text, stores the URLs and titles in +// hash references. +// + + // Link defs are in the form: ^[id]: url "optional title" + + /* + var text = text.replace(/ + ^[ ]{0,3}\[(.+)\]: // id = $1 attacklab: g_tab_width - 1 + [ \t]* + \n? // maybe *one* newline + [ \t]* + ? // url = $2 + [ \t]* + \n? // maybe one newline + [ \t]* + (?: + (\n*) // any lines skipped = $3 attacklab: lookbehind removed + ["(] + (.+?) // title = $4 + [")] + [ \t]* + )? // title is optional + (?:\n+|$) + /gm, + function(){...}); + */ + var text = text.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|\Z)/gm, + function (wholeMatch,m1,m2,m3,m4) { + m1 = m1.toLowerCase(); + g_urls[m1] = _EncodeAmpsAndAngles(m2); // Link IDs are case-insensitive + if (m3) { + // Oops, found blank lines, so it's not a title. + // Put back the parenthetical statement we stole. + return m3+m4; + } else if (m4) { + g_titles[m1] = m4.replace(/"/g,"""); + } + + // Completely remove the definition from the text + return ""; + } + ); + + return text; +} + +var _HashHTMLBlocks = function(text) { + // attacklab: Double up blank lines to reduce lookaround + text = text.replace(/\n/g,"\n\n"); + + // Hashify HTML blocks: + // We only want to do this for block-level HTML tags, such as headers, + // lists, and tables. That's because we still want to wrap

    s around + // "paragraphs" that are wrapped in non-block-level tags, such as anchors, + // phrase emphasis, and spans. The list of tags we're looking for is + // hard-coded: + var block_tags_a = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del" + var block_tags_b = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math" + + // First, look for nested blocks, e.g.: + //

    + //
    + // tags for inner block must be indented. + //
    + //
    + // + // The outermost tags must start at the left margin for this to match, and + // the inner nested divs must be indented. + // We need to do this before the next, more liberal match, because the next + // match will start at the first `
    ` and stop at the first `
    `. + + // attacklab: This regex can be expensive when it fails. + /* + var text = text.replace(/ + ( // save in $1 + ^ // start of line (with /m) + <($block_tags_a) // start tag = $2 + \b // word break + // attacklab: hack around khtml/pcre bug... + [^\r]*?\n // any number of lines, minimally matching + // the matching end tag + [ \t]* // trailing spaces/tabs + (?=\n+) // followed by a newline + ) // attacklab: there are sentinel newlines at end of document + /gm,function(){...}}; + */ + text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,hashElement); + + // + // Now match more liberally, simply from `\n` to `\n` + // + + /* + var text = text.replace(/ + ( // save in $1 + ^ // start of line (with /m) + <($block_tags_b) // start tag = $2 + \b // word break + // attacklab: hack around khtml/pcre bug... + [^\r]*? // any number of lines, minimally matching + .* // the matching end tag + [ \t]* // trailing spaces/tabs + (?=\n+) // followed by a newline + ) // attacklab: there are sentinel newlines at end of document + /gm,function(){...}}; + */ + text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm,hashElement); + + // Special case just for
    . It was easier to make a special case than + // to make the other regex more complicated. + + /* + text = text.replace(/ + ( // save in $1 + \n\n // Starting after a blank line + [ ]{0,3} + (<(hr) // start tag = $2 + \b // word break + ([^<>])*? // + \/?>) // the matching end tag + [ \t]* + (?=\n{2,}) // followed by a blank line + ) + /g,hashElement); + */ + text = text.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,hashElement); + + // Special case for standalone HTML comments: + + /* + text = text.replace(/ + ( // save in $1 + \n\n // Starting after a blank line + [ ]{0,3} // attacklab: g_tab_width - 1 + + [ \t]* + (?=\n{2,}) // followed by a blank line + ) + /g,hashElement); + */ + text = text.replace(/(\n\n[ ]{0,3}[ \t]*(?=\n{2,}))/g,hashElement); + + // PHP and ASP-style processor instructions ( and <%...%>) + + /* + text = text.replace(/ + (?: + \n\n // Starting after a blank line + ) + ( // save in $1 + [ ]{0,3} // attacklab: g_tab_width - 1 + (?: + <([?%]) // $2 + [^\r]*? + \2> + ) + [ \t]* + (?=\n{2,}) // followed by a blank line + ) + /g,hashElement); + */ + text = text.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,hashElement); + + // attacklab: Undo double lines (see comment at top of this function) + text = text.replace(/\n\n/g,"\n"); + return text; +} + +var hashElement = function(wholeMatch,m1) { + var blockText = m1; + + // Undo double lines + blockText = blockText.replace(/\n\n/g,"\n"); + blockText = blockText.replace(/^\n/,""); + + // strip trailing blank lines + blockText = blockText.replace(/\n+$/g,""); + + // Replace the element text with a marker ("~KxK" where x is its key) + blockText = "\n\n~K" + (g_html_blocks.push(blockText)-1) + "K\n\n"; + + return blockText; +}; + +var _RunBlockGamut = function(text) { +// +// These are all the transformations that form block-level +// tags like paragraphs, headers, and list items. +// + text = _DoHeaders(text); + + // Do Horizontal Rules: + var key = hashBlock("
    "); + text = text.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,key); + text = text.replace(/^[ ]{0,2}([ ]?-[ ]?){3,}[ \t]*$/gm,key); + text = text.replace(/^[ ]{0,2}([ ]?_[ ]?){3,}[ \t]*$/gm,key); + + text = _DoLists(text); + text = _DoCodeBlocks(text); + text = _DoBlockQuotes(text); + + // We already ran _HashHTMLBlocks() before, in Markdown(), but that + // was to escape raw HTML in the original Markdown source. This time, + // we're escaping the markup we've just created, so that we don't wrap + //

    tags around block-level tags. + text = _HashHTMLBlocks(text); + text = _FormParagraphs(text); + + return text; +} + + +var _RunSpanGamut = function(text) { +// +// These are all the transformations that occur *within* block-level +// tags like paragraphs, headers, and list items. +// + + text = _DoCodeSpans(text); + text = _EscapeSpecialCharsWithinTagAttributes(text); + text = _EncodeBackslashEscapes(text); + + // Process anchor and image tags. Images must come first, + // because ![foo][f] looks like an anchor. + text = _DoImages(text); + text = _DoAnchors(text); + + // Make links out of things like `` + // Must come after _DoAnchors(), because you can use < and > + // delimiters in inline links like [this](). + text = _DoAutoLinks(text); + text = _EncodeAmpsAndAngles(text); + text = _DoItalicsAndBold(text); + + // Do hard breaks: + text = text.replace(/ +\n/g,"
    \n"); + + return text; +} + +var _EscapeSpecialCharsWithinTagAttributes = function(text) { +// +// Within tags -- meaning between < and > -- encode [\ ` * _] so they +// don't conflict with their use in Markdown for code, italics and strong. +// + + // Build a regex to find HTML tags and comments. See Friedl's + // "Mastering Regular Expressions", 2nd Ed., pp. 200-201. + var regex = /(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|)/gi; + + text = text.replace(regex, function(wholeMatch) { + var tag = wholeMatch.replace(/(.)<\/?code>(?=.)/g,"$1`"); + tag = escapeCharacters(tag,"\\`*_"); + return tag; + }); + + return text; +} + +var _DoAnchors = function(text) { +// +// Turn Markdown link shortcuts into XHTML
    tags. +// + // + // First, handle reference-style links: [link text] [id] + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + \[ + ( + (?: + \[[^\]]*\] // allow brackets nested one level + | + [^\[] // or anything else + )* + ) + \] + + [ ]? // one optional space + (?:\n[ ]*)? // one optional newline followed by spaces + + \[ + (.*?) // id = $3 + \] + )()()()() // pad remaining backreferences + /g,_DoAnchors_callback); + */ + text = text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,writeAnchorTag); + + // + // Next, inline-style links: [link text](url "optional title") + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + \[ + ( + (?: + \[[^\]]*\] // allow brackets nested one level + | + [^\[\]] // or anything else + ) + ) + \] + \( // literal paren + [ \t]* + () // no id, so leave $3 empty + ? // href = $4 + [ \t]* + ( // $5 + (['"]) // quote char = $6 + (.*?) // Title = $7 + \6 // matching quote + [ \t]* // ignore any spaces/tabs between closing quote and ) + )? // title is optional + \) + ) + /g,writeAnchorTag); + */ + text = text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,writeAnchorTag); + + // + // Last, handle reference-style shortcuts: [link text] + // These must come last in case you've also got [link test][1] + // or [link test](/foo) + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + \[ + ([^\[\]]+) // link text = $2; can't contain '[' or ']' + \] + )()()()()() // pad rest of backreferences + /g, writeAnchorTag); + */ + text = text.replace(/(\[([^\[\]]+)\])()()()()()/g, writeAnchorTag); + + return text; +} + +var writeAnchorTag = function(wholeMatch,m1,m2,m3,m4,m5,m6,m7) { + if (m7 == undefined) m7 = ""; + var whole_match = m1; + var link_text = m2; + var link_id = m3.toLowerCase(); + var url = m4; + var title = m7; + + if (url == "") { + if (link_id == "") { + // lower-case and turn embedded newlines into spaces + link_id = link_text.toLowerCase().replace(/ ?\n/g," "); + } + url = "#"+link_id; + + if (g_urls[link_id] != undefined) { + url = g_urls[link_id]; + if (g_titles[link_id] != undefined) { + title = g_titles[link_id]; + } + } + else { + if (whole_match.search(/\(\s*\)$/m)>-1) { + // Special case for explicit empty url + url = ""; + } else { + return whole_match; + } + } + } + + url = escapeCharacters(url,"*_"); + var result = ""; + + return result; +} + + +var _DoImages = function(text) { +// +// Turn Markdown image shortcuts into tags. +// + + // + // First, handle reference-style labeled images: ![alt text][id] + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + !\[ + (.*?) // alt text = $2 + \] + + [ ]? // one optional space + (?:\n[ ]*)? // one optional newline followed by spaces + + \[ + (.*?) // id = $3 + \] + )()()()() // pad rest of backreferences + /g,writeImageTag); + */ + text = text.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,writeImageTag); + + // + // Next, handle inline images: ![alt text](url "optional title") + // Don't forget: encode * and _ + + /* + text = text.replace(/ + ( // wrap whole match in $1 + !\[ + (.*?) // alt text = $2 + \] + \s? // One optional whitespace character + \( // literal paren + [ \t]* + () // no id, so leave $3 empty + ? // src url = $4 + [ \t]* + ( // $5 + (['"]) // quote char = $6 + (.*?) // title = $7 + \6 // matching quote + [ \t]* + )? // title is optional + \) + ) + /g,writeImageTag); + */ + text = text.replace(/(!\[(.*?)\]\s?\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,writeImageTag); + + return text; +} + +var writeImageTag = function(wholeMatch,m1,m2,m3,m4,m5,m6,m7) { + var whole_match = m1; + var alt_text = m2; + var link_id = m3.toLowerCase(); + var url = m4; + var title = m7; + + if (!title) title = ""; + + if (url == "") { + if (link_id == "") { + // lower-case and turn embedded newlines into spaces + link_id = alt_text.toLowerCase().replace(/ ?\n/g," "); + } + url = "#"+link_id; + + if (g_urls[link_id] != undefined) { + url = g_urls[link_id]; + if (g_titles[link_id] != undefined) { + title = g_titles[link_id]; + } + } + else { + return whole_match; + } + } + + alt_text = alt_text.replace(/"/g,"""); + url = escapeCharacters(url,"*_"); + var result = "\""" + _RunSpanGamut(m1) + "");}); + + text = text.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm, + function(matchFound,m1){return hashBlock("

    " + _RunSpanGamut(m1) + "

    ");}); + + // atx-style headers: + // # Header 1 + // ## Header 2 + // ## Header 2 with closing hashes ## + // ... + // ###### Header 6 + // + + /* + text = text.replace(/ + ^(\#{1,6}) // $1 = string of #'s + [ \t]* + (.+?) // $2 = Header text + [ \t]* + \#* // optional closing #'s (not counted) + \n+ + /gm, function() {...}); + */ + + text = text.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm, + function(wholeMatch,m1,m2) { + var h_level = m1.length; + return hashBlock("" + _RunSpanGamut(m2) + ""); + }); + + return text; +} + +// This declaration keeps Dojo compressor from outputting garbage: +var _ProcessListItems; + +var _DoLists = function(text) { +// +// Form HTML ordered (numbered) and unordered (bulleted) lists. +// + + // attacklab: add sentinel to hack around khtml/safari bug: + // http://bugs.webkit.org/show_bug.cgi?id=11231 + text += "~0"; + + // Re-usable pattern to match any entirel ul or ol list: + + /* + var whole_list = / + ( // $1 = whole list + ( // $2 + [ ]{0,3} // attacklab: g_tab_width - 1 + ([*+-]|\d+[.]) // $3 = first list item marker + [ \t]+ + ) + [^\r]+? + ( // $4 + ~0 // sentinel for workaround; should be $ + | + \n{2,} + (?=\S) + (?! // Negative lookahead for another list item marker + [ \t]* + (?:[*+-]|\d+[.])[ \t]+ + ) + ) + )/g + */ + var whole_list = /^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm; + + if (g_list_level) { + text = text.replace(whole_list,function(wholeMatch,m1,m2) { + var list = m1; + var list_type = (m2.search(/[*+-]/g)>-1) ? "ul" : "ol"; + + // Turn double returns into triple returns, so that we can make a + // paragraph for the last item in a list, if necessary: + list = list.replace(/\n{2,}/g,"\n\n\n");; + var result = _ProcessListItems(list); + + // Trim any trailing whitespace, to put the closing `` + // up on the preceding line, to get it past the current stupid + // HTML block parser. This is a hack to work around the terrible + // hack that is the HTML block parser. + result = result.replace(/\s+$/,""); + result = "<"+list_type+">" + result + "\n"; + return result; + }); + } else { + whole_list = /(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g; + text = text.replace(whole_list,function(wholeMatch,m1,m2,m3) { + var runup = m1; + var list = m2; + + var list_type = (m3.search(/[*+-]/g)>-1) ? "ul" : "ol"; + // Turn double returns into triple returns, so that we can make a + // paragraph for the last item in a list, if necessary: + var list = list.replace(/\n{2,}/g,"\n\n\n");; + var result = _ProcessListItems(list); + result = runup + "<"+list_type+">\n" + result + "\n"; + return result; + }); + } + + // attacklab: strip sentinel + text = text.replace(/~0/,""); + + return text; +} + +_ProcessListItems = function(list_str) { +// +// Process the contents of a single ordered or unordered list, splitting it +// into individual list items. +// + // The $g_list_level global keeps track of when we're inside a list. + // Each time we enter a list, we increment it; when we leave a list, + // we decrement. If it's zero, we're not in a list anymore. + // + // We do this because when we're not inside a list, we want to treat + // something like this: + // + // I recommend upgrading to version + // 8. Oops, now this line is treated + // as a sub-list. + // + // As a single paragraph, despite the fact that the second line starts + // with a digit-period-space sequence. + // + // Whereas when we're inside a list (or sub-list), that line will be + // treated as the start of a sub-list. What a kludge, huh? This is + // an aspect of Markdown's syntax that's hard to parse perfectly + // without resorting to mind-reading. Perhaps the solution is to + // change the syntax rules such that sub-lists must start with a + // starting cardinal number; e.g. "1." or "a.". + + g_list_level++; + + // trim trailing blank lines: + list_str = list_str.replace(/\n{2,}$/,"\n"); + + // attacklab: add sentinel to emulate \z + list_str += "~0"; + + /* + list_str = list_str.replace(/ + (\n)? // leading line = $1 + (^[ \t]*) // leading whitespace = $2 + ([*+-]|\d+[.]) [ \t]+ // list marker = $3 + ([^\r]+? // list item text = $4 + (\n{1,2})) + (?= \n* (~0 | \2 ([*+-]|\d+[.]) [ \t]+)) + /gm, function(){...}); + */ + list_str = list_str.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm, + function(wholeMatch,m1,m2,m3,m4){ + var item = m4; + var leading_line = m1; + var leading_space = m2; + + if (leading_line || (item.search(/\n{2,}/)>-1)) { + item = _RunBlockGamut(_Outdent(item)); + } + else { + // Recursion for sub-lists: + item = _DoLists(_Outdent(item)); + item = item.replace(/\n$/,""); // chomp(item) + item = _RunSpanGamut(item); + } + + return "
  • " + item + "
  • \n"; + } + ); + + // attacklab: strip sentinel + list_str = list_str.replace(/~0/g,""); + + g_list_level--; + return list_str; +} + + +var _DoCodeBlocks = function(text) { +// +// Process Markdown `
    ` blocks.
    +//  
    +
    +	/*
    +		text = text.replace(text,
    +			/(?:\n\n|^)
    +			(								// $1 = the code block -- one or more lines, starting with a space/tab
    +				(?:
    +					(?:[ ]{4}|\t)			// Lines must start with a tab or a tab-width of spaces - attacklab: g_tab_width
    +					.*\n+
    +				)+
    +			)
    +			(\n*[ ]{0,3}[^ \t\n]|(?=~0))	// attacklab: g_tab_width
    +		/g,function(){...});
    +	*/
    +
    +	// attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
    +	text += "~0";
    +	
    +	text = text.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,
    +		function(wholeMatch,m1,m2) {
    +			var codeblock = m1;
    +			var nextChar = m2;
    +		
    +			codeblock = _EncodeCode( _Outdent(codeblock));
    +			codeblock = _Detab(codeblock);
    +			codeblock = codeblock.replace(/^\n+/g,""); // trim leading newlines
    +			codeblock = codeblock.replace(/\n+$/g,""); // trim trailing whitespace
    +
    +			codeblock = "
    " + codeblock + "\n
    "; + + return hashBlock(codeblock) + nextChar; + } + ); + + // attacklab: strip sentinel + text = text.replace(/~0/,""); + + return text; +} + +var hashBlock = function(text) { + text = text.replace(/(^\n+|\n+$)/g,""); + return "\n\n~K" + (g_html_blocks.push(text)-1) + "K\n\n"; +} + + +var _DoCodeSpans = function(text) { +// +// * Backtick quotes are used for spans. +// +// * You can use multiple backticks as the delimiters if you want to +// include literal backticks in the code span. So, this input: +// +// Just type ``foo `bar` baz`` at the prompt. +// +// Will translate to: +// +//

    Just type foo `bar` baz at the prompt.

    +// +// There's no arbitrary limit to the number of backticks you +// can use as delimters. If you need three consecutive backticks +// in your code, use four for delimiters, etc. +// +// * You can use spaces to get literal backticks at the edges: +// +// ... type `` `bar` `` ... +// +// Turns to: +// +// ... type `bar` ... +// + + /* + text = text.replace(/ + (^|[^\\]) // Character before opening ` can't be a backslash + (`+) // $2 = Opening run of ` + ( // $3 = The code block + [^\r]*? + [^`] // attacklab: work around lack of lookbehind + ) + \2 // Matching closer + (?!`) + /gm, function(){...}); + */ + + text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm, + function(wholeMatch,m1,m2,m3,m4) { + var c = m3; + c = c.replace(/^([ \t]*)/g,""); // leading whitespace + c = c.replace(/[ \t]*$/g,""); // trailing whitespace + c = _EncodeCode(c); + return m1+""+c+""; + }); + + return text; +} + + +var _EncodeCode = function(text) { +// +// Encode/escape certain characters inside Markdown code runs. +// The point is that in code, these characters are literals, +// and lose their special Markdown meanings. +// + // Encode all ampersands; HTML entities are not + // entities within a Markdown code span. + text = text.replace(/&/g,"&"); + + // Do the angle bracket song and dance: + text = text.replace(//g,">"); + + // Now, escape characters that are magic in Markdown: + text = escapeCharacters(text,"\*_{}[]\\",false); + +// jj the line above breaks this: +//--- + +//* Item + +// 1. Subitem + +// special char: * +//--- + + return text; +} + + +var _DoItalicsAndBold = function(text) { + + // must go first: + text = text.replace(/(\*\*|__)(?=\S)([^\r]*?\S[\*_]*)\1/g, + "$2"); + + text = text.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g, + "$2"); + + return text; +} + + +var _DoBlockQuotes = function(text) { + + /* + text = text.replace(/ + ( // Wrap whole match in $1 + ( + ^[ \t]*>[ \t]? // '>' at the start of a line + .+\n // rest of the first line + (.+\n)* // subsequent consecutive lines + \n* // blanks + )+ + ) + /gm, function(){...}); + */ + + text = text.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm, + function(wholeMatch,m1) { + var bq = m1; + + // attacklab: hack around Konqueror 3.5.4 bug: + // "----------bug".replace(/^-/g,"") == "bug" + + bq = bq.replace(/^[ \t]*>[ \t]?/gm,"~0"); // trim one level of quoting + + // attacklab: clean up hack + bq = bq.replace(/~0/g,""); + + bq = bq.replace(/^[ \t]+$/gm,""); // trim whitespace-only lines + bq = _RunBlockGamut(bq); // recurse + + bq = bq.replace(/(^|\n)/g,"$1 "); + // These leading spaces screw with
     content, so we need to fix that:
    +			bq = bq.replace(
    +					/(\s*
    [^\r]+?<\/pre>)/gm,
    +				function(wholeMatch,m1) {
    +					var pre = m1;
    +					// attacklab: hack around Konqueror 3.5.4 bug:
    +					pre = pre.replace(/^  /mg,"~0");
    +					pre = pre.replace(/~0/g,"");
    +					return pre;
    +				});
    +			
    +			return hashBlock("
    \n" + bq + "\n
    "); + }); + return text; +} + + +var _FormParagraphs = function(text) { +// +// Params: +// $text - string to process with html

    tags +// + + // Strip leading and trailing lines: + text = text.replace(/^\n+/g,""); + text = text.replace(/\n+$/g,""); + + var grafs = text.split(/\n{2,}/g); + var grafsOut = new Array(); + + // + // Wrap

    tags. + // + var end = grafs.length; + for (var i=0; i= 0) { + grafsOut.push(str); + } + else if (str.search(/\S/) >= 0) { + str = _RunSpanGamut(str); + str = str.replace(/^([ \t]*)/g,"

    "); + str += "

    " + grafsOut.push(str); + } + + } + + // + // Unhashify HTML blocks + // + end = grafsOut.length; + for (var i=0; i= 0) { + var blockText = g_html_blocks[RegExp.$1]; + blockText = blockText.replace(/\$/g,"$$$$"); // Escape any dollar signs + grafsOut[i] = grafsOut[i].replace(/~K\d+K/,blockText); + } + } + + return grafsOut.join("\n\n"); +} + + +var _EncodeAmpsAndAngles = function(text) { +// Smart processing for ampersands and angle brackets that need to be encoded. + + // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin: + // http://bumppo.net/projects/amputator/ + text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&"); + + // Encode naked <'s + text = text.replace(/<(?![a-z\/?\$!])/gi,"<"); + + return text; +} + + +var _EncodeBackslashEscapes = function(text) { +// +// Parameter: String. +// Returns: The string, with after processing the following backslash +// escape sequences. +// + + // attacklab: The polite way to do this is with the new + // escapeCharacters() function: + // + // text = escapeCharacters(text,"\\",true); + // text = escapeCharacters(text,"`*_{}[]()>#+-.!",true); + // + // ...but we're sidestepping its use of the (slow) RegExp constructor + // as an optimization for Firefox. This function gets called a LOT. + + text = text.replace(/\\(\\)/g,escapeCharacters_callback); + text = text.replace(/\\([`*_{}\[\]()>#+-.!])/g,escapeCharacters_callback); + return text; +} + + +var _DoAutoLinks = function(text) { + + text = text.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,"
    $1"); + + // Email addresses: + + /* + text = text.replace(/ + < + (?:mailto:)? + ( + [-.\w]+ + \@ + [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+ + ) + > + /gi, _DoAutoLinks_callback()); + */ + text = text.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi, + function(wholeMatch,m1) { + return _EncodeEmailAddress( _UnescapeSpecialChars(m1) ); + } + ); + + return text; +} + + +var _EncodeEmailAddress = function(addr) { +// +// Input: an email address, e.g. "foo@example.com" +// +// Output: the email address as a mailto link, with each character +// of the address encoded as either a decimal or hex entity, in +// the hopes of foiling most address harvesting spam bots. E.g.: +// +// foo +// @example.com +// +// Based on a filter by Matthew Wickline, posted to the BBEdit-Talk +// mailing list: +// + + // attacklab: why can't javascript speak hex? + function char2hex(ch) { + var hexDigits = '0123456789ABCDEF'; + var dec = ch.charCodeAt(0); + return(hexDigits.charAt(dec>>4) + hexDigits.charAt(dec&15)); + } + + var encode = [ + function(ch){return "&#"+ch.charCodeAt(0)+";";}, + function(ch){return "&#x"+char2hex(ch)+";";}, + function(ch){return ch;} + ]; + + addr = "mailto:" + addr; + + addr = addr.replace(/./g, function(ch) { + if (ch == "@") { + // this *must* be encoded. I insist. + ch = encode[Math.floor(Math.random()*2)](ch); + } else if (ch !=":") { + // leave ':' alone (to spot mailto: later) + var r = Math.random(); + // roughly 10% raw, 45% hex, 45% dec + ch = ( + r > .9 ? encode[2](ch) : + r > .45 ? encode[1](ch) : + encode[0](ch) + ); + } + return ch; + }); + + addr = "" + addr + ""; + addr = addr.replace(/">.+:/g,"\">"); // strip the mailto: from the visible part + + return addr; +} + + +var _UnescapeSpecialChars = function(text) { +// +// Swap back in all the special characters we've hidden. +// + text = text.replace(/~E(\d+)E/g, + function(wholeMatch,m1) { + var charCodeToReplace = parseInt(m1); + return String.fromCharCode(charCodeToReplace); + } + ); + return text; +} + + +var _Outdent = function(text) { +// +// Remove one level of line-leading tabs or spaces +// + + // attacklab: hack around Konqueror 3.5.4 bug: + // "----------bug".replace(/^-/g,"") == "bug" + + text = text.replace(/^(\t|[ ]{1,4})/gm,"~0"); // attacklab: g_tab_width + + // attacklab: clean up hack + text = text.replace(/~0/g,"") + + return text; +} + +var _Detab = function(text) { +// attacklab: Detab's completely rewritten for speed. +// In perl we could fix it by anchoring the regexp with \G. +// In javascript we're less fortunate. + + // expand first n-1 tabs + text = text.replace(/\t(?=\t)/g," "); // attacklab: g_tab_width + + // replace the nth with two sentinels + text = text.replace(/\t/g,"~A~B"); + + // use the sentinel to anchor our regex so it doesn't explode + text = text.replace(/~B(.+?)~A/g, + function(wholeMatch,m1,m2) { + var leadingText = m1; + var numSpaces = 4 - leadingText.length % 4; // attacklab: g_tab_width + + // there *must* be a better way to do this: + for (var i=0; i";var D="

    输入Web地址

    示例:
    http://www.cnprog.com/ \"我的网站\"

    ";var n='
    或者上传本地图片:

    ';var b="http://";var g="http://";var o="images/";var A=500;var x=100;var k="http://wmd-editor.com/";var r="WMD website";var w="_blank";y.PanelCollection=function(){this.buttonBar=E.getElementById("wmd-button-bar");this.preview=E.getElementById("previewer");this.output=E.getElementById("wmd-output");this.input=E.getElementById("editor")};y.panels=undefined;y.ieCachedRange=null;y.ieRetardedClick=false;a.isVisible=function(F){if(window.getComputedStyle){return window.getComputedStyle(F,null).getPropertyValue("display")!=="none"}else{if(F.currentStyle){return F.currentStyle.display!=="none"}}};a.addEvent=function(G,F,H){if(G.attachEvent){G.attachEvent("on"+F,H)}else{G.addEventListener(F,H,false)}};a.removeEvent=function(G,F,H){if(G.detachEvent){G.detachEvent("on"+F,H)}else{G.removeEventListener(F,H,false)}};a.fixEolChars=function(F){F=F.replace(/\r\n/g,"\n");F=F.replace(/\r/g,"\n");return F};a.extendRegExp=function(H,J,G){if(J===null||J===undefined){J=""}if(G===null||G===undefined){G=""}var I=H.toString();var F;I=I.replace(/\/([gim]*)$/,"");F=s.$1;I=I.replace(/(^\/|\/$)/g,"");I=J+I+G;return new s(I,F)};a.createImage=function(F){var H=o+F;var G=E.createElement("img");G.className="wmd-button";G.src=H;return G};a.prompt=function(M,P,H){var I;var F;var K;var J=0;if(arguments.length==4){J=arguments[3]}if(P===undefined){P=""}var L=function(Q){var R=(Q.charCode||Q.keyCode);if(R===27){N(true)}};var N=function(Q){a.removeEvent(E.body,"keydown",L);var R=K.value;if(Q){R=null}else{R=R.replace("http://http://","http://");R=R.replace("http://https://","https://");R=R.replace("http://ftp://","ftp://");if(R.indexOf("http://")===-1&&R.indexOf("ftp://")===-1){R="http://"+R}}I.parentNode.removeChild(I);F.parentNode.removeChild(F);H(R);return false};var G=function(){F=E.createElement("div");F.className="wmd-prompt-background";style=F.style;style.position="absolute";style.top="0";style.zIndex="1000";if(v.isKonqueror){style.backgroundColor="transparent"}else{if(v.isIE){style.filter="alpha(opacity=50)"}else{style.opacity="0.5"}}var Q=C.getPageSize();style.height=Q[1]+"px";if(v.isIE){style.left=E.documentElement.scrollLeft;style.width=E.documentElement.clientWidth}else{style.left="0";style.width="100%"}E.body.appendChild(F)};var O=function(){I=E.createElement("div");I.className="wmd-prompt-dialog";I.style.padding="10px;";I.style.position="fixed";I.style.width="400px";I.style.zIndex="1001";var Q=E.createElement("div");Q.innerHTML=M;Q.style.padding="5px";I.appendChild(Q);var S=E.createElement("form");S.onsubmit=function(){return N(false)};style=S.style;style.padding="0";style.margin="0";style.cssFloat="left";style.width="100%";style.textAlign="center";style.position="relative";I.appendChild(S);K=E.createElement("input");if(J==1){K.id="image-url"}K.type="text";K.value=P;style=K.style;style.display="block";style.width="80%";style.marginLeft=style.marginRight="auto";S.appendChild(K);if(J==1){var R=E.createElement("div");R.innerHTML=n;R.style.padding="5px";S.appendChild(R)}var U=E.createElement("input");U.type="button";U.onclick=function(){return N(false)};U.value="OK";style=U.style;style.margin="10px";style.display="inline";style.width="7em";var T=E.createElement("input");T.type="button";T.onclick=function(){return N(true)};T.value="Cancel";style=T.style;style.margin="10px";style.display="inline";style.width="7em";if(/mac/.test(l.platform.toLowerCase())){S.appendChild(T);S.appendChild(U)}else{S.appendChild(U);S.appendChild(T)}a.addEvent(E.body,"keydown",L);I.style.top="50%";I.style.left="50%";I.style.display="block";if(v.isIE_5or6){I.style.position="absolute";I.style.top=E.documentElement.scrollTop+200+"px";I.style.left="50%"}E.body.appendChild(I);I.style.marginTop=-(C.getHeight(I)/2)+"px";I.style.marginLeft=-(C.getWidth(I)/2)+"px"};G();top.setTimeout(function(){O();var R=P.length;if(K.selectionStart!==undefined){K.selectionStart=0;K.selectionEnd=R}else{if(K.createTextRange){var Q=K.createTextRange();Q.collapse(false);Q.moveStart("character",-R);Q.moveEnd("character",R);Q.select()}}K.focus()},0)};C.getTop=function(H,G){var F=H.offsetTop;if(!G){while(H=H.offsetParent){F+=H.offsetTop}}return F};C.getHeight=function(F){return F.offsetHeight||F.scrollHeight};C.getWidth=function(F){return F.offsetWidth||F.scrollWidth};C.getPageSize=function(){var G,H;var F,K;if(self.innerHeight&&self.scrollMaxY){G=E.body.scrollWidth;H=self.innerHeight+self.scrollMaxY}else{if(E.body.scrollHeight>E.body.offsetHeight){G=E.body.scrollWidth;H=E.body.scrollHeight}else{G=E.body.offsetWidth;H=E.body.offsetHeight}}if(self.innerHeight){F=self.innerWidth;K=self.innerHeight}else{if(E.documentElement&&E.documentElement.clientHeight){F=E.documentElement.clientWidth;K=E.documentElement.clientHeight}else{if(E.body){F=E.body.clientWidth;K=E.body.clientHeight}}}var J=Math.max(G,F);var I=Math.max(H,K);return[J,I,F,K]};y.inputPoller=function(O,H){var F=this;var K=y.panels.input;var G;var I;var L;var J;this.tick=function(){if(!a.isVisible(K)){return}if(K.selectionStart||K.selectionStart===0){var Q=K.selectionStart;var P=K.selectionEnd;if(Q!=G||P!=I){G=Q;I=P;if(L!=K.value){L=K.value;return true}}}return false};var N=function(){if(!a.isVisible(K)){return}if(F.tick()){O()}};var M=function(){J=top.setInterval(N,H)};this.destroy=function(){top.clearInterval(J)};M()};y.undoManager=function(Q){var U=this;var O=[];var M=0;var L="none";var G;var R;var H;var K;var F=function(W,V){if(L!=W){L=W;if(!V){I()}}if(!v.isIE||L!="moving"){H=top.setTimeout(N,1)}else{K=null}};var N=function(){K=new y.TextareaState();R.tick();H=undefined};this.setCommandMode=function(){L="command";I();H=top.setTimeout(N,0)};this.canUndo=function(){return M>1};this.canRedo=function(){if(O[M+1]){return true}return false};this.undo=function(){if(U.canUndo()){if(G){G.restore();G=null}else{O[M]=new y.TextareaState();O[--M].restore();if(Q){Q()}}}L="none";y.panels.input.focus();N()};this.redo=function(){if(U.canRedo()){O[++M].restore();if(Q){Q()}}L="none";y.panels.input.focus();N()};var I=function(){var V=K||new y.TextareaState();if(!V){return false}if(L=="moving"){if(!G){G=V}return}if(G){if(O[M-1].text!=G.text){O[M++]=G}G=null}O[M++]=V;O[M+1]=null;if(Q){Q()}};var P=function(V){var X=false;if(V.ctrlKey||V.metaKey){var W=V.charCode||V.keyCode;var Y=String.fromCharCode(W);switch(Y){case"y":U.redo();X=true;break;case"z":if(!V.shiftKey){U.undo()}else{U.redo()}X=true;break}}if(X){if(V.preventDefault){V.preventDefault()}if(top.event){top.event.returnValue=false}return}};var T=function(V){if(!V.ctrlKey&&!V.metaKey){var W=V.keyCode;if((W>=33&&W<=40)||(W>=63232&&W<=63235)){F("moving")}else{if(W==8||W==46||W==127){F("deleting")}else{if(W==13){F("newlines")}else{if(W==27){F("escape")}else{if((W<16||W>20)&&W!=91){F("typing")}}}}}}};var J=function(){a.addEvent(y.panels.input,"keypress",function(W){if((W.ctrlKey||W.metaKey)&&(W.keyCode==89||W.keyCode==90)){W.preventDefault()}});var V=function(){if(v.isIE||(K&&K.text!=y.panels.input.value)){if(H==undefined){L="paste";I();N()}}};R=new y.inputPoller(V,x);a.addEvent(y.panels.input,"keydown",P);a.addEvent(y.panels.input,"keydown",T);a.addEvent(y.panels.input,"mousedown",function(){F("moving")});y.panels.input.onpaste=V;y.panels.input.ondrop=V};var S=function(){J();N();I()};this.destroy=function(){if(R){R.destroy()}};S()};y.editor=function(O){if(!O){O=function(){}}var L=y.panels.input;var I=0;var P=this;var K;var R;var G;var M;var N;var U=function(W){L.focus();if(W.textOp){if(N){N.setCommandMode()}var Y=new y.TextareaState();if(!Y){return}var Z=Y.getChunks();var V=function(){L.focus();if(Z){Y.setChunks(Z)}Y.restore();O()};var X=W.textOp(Z,V);if(!X){V()}}if(W.execute){W.execute(P)}};var S=function(){if(N){F(document.getElementById("wmd-undo-button"),N.canUndo());F(document.getElementById("wmd-redo-button"),N.canRedo())}};var F=function(V,X){var Y="0px";var Z="-20px";var W="-40px";if(X){V.style.backgroundPosition=V.XShift+" "+Y;V.onmouseover=function(){this.style.backgroundPosition=this.XShift+" "+W};V.onmouseout=function(){this.style.backgroundPosition=this.XShift+" "+Y};if(v.isIE){V.onmousedown=function(){y.ieRetardedClick=true;y.ieCachedRange=document.selection.createRange()}}if(!V.isHelp){V.onclick=function(){if(this.onmouseout){this.onmouseout()}U(this);return false}}}else{V.style.backgroundPosition=V.XShift+" "+Z;V.onmouseover=V.onmouseout=V.onclick=function(){}}};var J=function(){var Z=document.getElementById("wmd-button-bar");var W="0px";var Y="-20px";var ae="-40px";var ak=document.createElement("ul");ak.id="wmd-button-row";ak=Z.appendChild(ak);var ad=document.createElement("li");ad.className="wmd-button";ad.id="wmd-bold-button";ad.title=c;ad.XShift="0px";ad.textOp=h.doBold;F(ad,true);ak.appendChild(ad);var ac=document.createElement("li");ac.className="wmd-button";ac.id="wmd-italic-button";ac.title=f;ac.XShift="-20px";ac.textOp=h.doItalic;F(ac,true);ak.appendChild(ac);var ah=document.createElement("li");ah.className="wmd-spacer";ah.id="wmd-spacer1";ak.appendChild(ah);var ai=document.createElement("li");ai.className="wmd-button";ai.id="wmd-link-button";ai.title=z;ai.XShift="-40px";ai.textOp=function(ap,aq){return h.doLinkOrImage(ap,aq,false)};F(ai,true);ak.appendChild(ai);var al=document.createElement("li");al.className="wmd-button";al.id="wmd-quote-button";al.title=u;al.XShift="-60px";al.textOp=h.doBlockquote;F(al,true);ak.appendChild(al);var am=document.createElement("li");am.className="wmd-button";am.id="wmd-code-button";am.title=e;am.XShift="-80px";am.textOp=h.doCode;F(am,true);ak.appendChild(am);var aa=document.createElement("li");aa.className="wmd-button";aa.id="wmd-image-button";aa.title=d;aa.XShift="-100px";aa.textOp=function(ap,aq){return h.doLinkOrImage(ap,aq,true)};F(aa,true);ak.appendChild(aa);var ag=document.createElement("li");ag.className="wmd-spacer";ag.id="wmd-spacer2";ak.appendChild(ag);var ab=document.createElement("li");ab.className="wmd-button";ab.id="wmd-olist-button";ab.title=q;ab.XShift="-120px";ab.textOp=function(ap,aq){h.doList(ap,aq,true)};F(ab,true);ak.appendChild(ab);var ao=document.createElement("li");ao.className="wmd-button";ao.id="wmd-ulist-button";ao.title=t;ao.XShift="-140px";ao.textOp=function(ap,aq){h.doList(ap,aq,false)};F(ao,true);ak.appendChild(ao);var aj=document.createElement("li");aj.className="wmd-button";aj.id="wmd-heading-button";aj.title=i;aj.XShift="-160px";aj.textOp=h.doHeading;F(aj,true);ak.appendChild(aj);var X=document.createElement("li");X.className="wmd-button";X.id="wmd-hr-button";X.title=p;X.XShift="-180px";X.textOp=h.doHorizontalRule;F(X,true);ak.appendChild(X);var af=document.createElement("li");af.className="wmd-spacer";af.id="wmd-spacer3";ak.appendChild(af);var V=document.createElement("li");V.className="wmd-button";V.id="wmd-undo-button";V.title=m;V.XShift="-200px";V.execute=function(ap){ap.undo()};F(V,true);ak.appendChild(V);var an=document.createElement("li");an.className="wmd-button";an.id="wmd-redo-button";an.title=j;if(/win/.test(l.platform.toLowerCase())){an.title=j}else{an.title="重做 - Ctrl+Shift+Z"}an.XShift="-220px";an.execute=function(ap){ap.redo()};F(an,true);ak.appendChild(an);S()};var H=function(){if(/\?noundo/.test(E.location.href)){y.nativeUndo=true}if(!y.nativeUndo){N=new y.undoManager(function(){O();S()})}J();var W="keydown";if(v.isOpera){W="keypress"}a.addEvent(L,W,function(Y){if(Y.ctrlKey||Y.metaKey){var Z=Y.charCode||Y.keyCode;var X=String.fromCharCode(Z).toLowerCase();if(Z===46){X=""}if(Z===190){X="."}switch(X){case"b":U(document.getElementById("wmd-bold-button"));break;case"i":U(document.getElementById("wmd-italic-button"));break;case"l":U(document.getElementById("wmd-link-button"));break;case".":U(document.getElementById("wmd-quote-button"));break;case"k":U(document.getElementById("wmd-code-button"));break;case"g":U(document.getElementById("wmd-image-button"));break;case"o":U(document.getElementById("wmd-olist-button"));break;case"u":U(document.getElementById("wmd-ulist-button"));break;case"h":U(document.getElementById("wmd-heading-button"));break;case"r":U(document.getElementById("wmd-hr-button"));break;case"y":U(document.getElementById("wmd-redo-button"));break;case"z":if(Y.shiftKey){U(document.getElementById("wmd-redo-button"))}else{U(document.getElementById("wmd-undo-button"))}break;default:return}if(Y.preventDefault){Y.preventDefault()}if(top.event){top.event.returnValue=false}}});a.addEvent(L,"keyup",function(X){if(X.shiftKey&&!X.ctrlKey&&!X.metaKey){var Y=X.charCode||X.keyCode;if(Y===13){fakeButton={};fakeButton.textOp=h.doAutoindent;U(fakeButton)}}});if(L.form){var V=L.form.onsubmit;L.form.onsubmit=function(){Q();if(V){return V.apply(this,arguments)}}}};var Q=function(){if(y.showdown){var V=new y.showdown.converter()}var W=L.value;var X=function(){L.value=W};if(!/markdown/.test(y.wmd_env.output.toLowerCase())){if(V){L.value=V.makeHtml(W);top.setTimeout(X,0)}}return true};this.undo=function(){if(N){N.undo()}};this.redo=function(){if(N){N.redo()}};var T=function(){H()};this.destroy=function(){if(N){N.destroy()}if(G.parentNode){G.parentNode.removeChild(G)}if(L){L.style.marginTop=""}top.clearInterval(M)};T()};y.TextareaState=function(){var F=this;var G=y.panels.input;this.init=function(){if(!a.isVisible(G)){return}this.setInputAreaSelectionStartEnd();this.scrollTop=G.scrollTop;if(!this.text&&G.selectionStart||G.selectionStart===0){this.text=G.value}};this.setInputAreaSelection=function(){if(!a.isVisible(G)){return}if(G.selectionStart!==undefined&&!v.isOpera){G.focus();G.selectionStart=F.start;G.selectionEnd=F.end;G.scrollTop=F.scrollTop}else{if(E.selection){if(E.activeElement&&E.activeElement!==G){return}G.focus();var H=G.createTextRange();H.moveStart("character",-G.value.length);H.moveEnd("character",-G.value.length);H.moveEnd("character",F.end);H.moveStart("character",F.start);H.select()}}};this.setInputAreaSelectionStartEnd=function(){if(G.selectionStart||G.selectionStart===0){F.start=G.selectionStart;F.end=G.selectionEnd}else{if(E.selection){F.text=a.fixEolChars(G.value);var K;if(y.ieRetardedClick&&y.ieCachedRange){K=y.ieCachedRange;y.ieRetardedClick=false}else{K=E.selection.createRange()}var L=a.fixEolChars(K.text);var J="\x07";var I=J+L+J;K.text=I;var M=a.fixEolChars(G.value);K.moveStart("character",-I.length);K.text=L;F.start=M.indexOf(J);F.end=M.lastIndexOf(J)-J.length;var H=F.text.length-a.fixEolChars(G.value).length;if(H){K.moveStart("character",-L.length);while(H--){L+="\n";F.end+=1}K.text=L}this.setInputAreaSelection()}}};this.restore=function(){if(F.text!=undefined&&F.text!=G.value){G.value=F.text}this.setInputAreaSelection();G.scrollTop=F.scrollTop};this.getChunks=function(){var H=new y.Chunks();H.before=a.fixEolChars(F.text.substring(0,F.start));H.startTag="";H.selection=a.fixEolChars(F.text.substring(F.start,F.end));H.endTag="";H.after=a.fixEolChars(F.text.substring(F.end));H.scrollTop=F.scrollTop;return H};this.setChunks=function(H){H.before=H.before+H.startTag;H.after=H.endTag+H.after;if(v.isOpera){H.before=H.before.replace(/\n/g,"\r\n");H.selection=H.selection.replace(/\n/g,"\r\n");H.after=H.after.replace(/\n/g,"\r\n")}this.start=H.before.length;this.end=H.before.length+H.selection.length;this.text=H.before+H.selection+H.after;this.scrollTop=H.scrollTop};this.init()};y.Chunks=function(){};y.Chunks.prototype.findTags=function(G,I){var F=this;var H;if(G){H=a.extendRegExp(G,"","$");this.before=this.before.replace(H,function(J){F.startTag=F.startTag+J;return""});H=a.extendRegExp(G,"^","");this.selection=this.selection.replace(H,function(J){F.startTag=F.startTag+J;return""})}if(I){H=a.extendRegExp(I,"","$");this.selection=this.selection.replace(H,function(J){F.endTag=J+F.endTag;return""});H=a.extendRegExp(I,"^","");this.after=this.after.replace(H,function(J){F.endTag=J+F.endTag;return""})}};y.Chunks.prototype.trimWhitespace=function(F){this.selection=this.selection.replace(/^(\s*)/,"");if(!F){this.before+=s.$1}this.selection=this.selection.replace(/(\s*)$/,"");if(!F){this.after=s.$1+this.after}};y.Chunks.prototype.skipLines=function(H,G,F){if(H===undefined){H=1}if(G===undefined){G=1}H++;G++;var I;var J;this.selection=this.selection.replace(/(^\n*)/,"");this.startTag=this.startTag+s.$1;this.selection=this.selection.replace(/(\n*$)/,"");this.endTag=this.endTag+s.$1;this.startTag=this.startTag.replace(/(^\n*)/,"");this.before=this.before+s.$1;this.endTag=this.endTag.replace(/(\n*$)/,"");this.after=this.after+s.$1;if(this.before){I=J="";while(H--){I+="\\n?";J+="\n"}if(F){I="\\n*"}this.before=this.before.replace(new s(I+"$",""),J)}if(this.after){I=J="";while(G--){I+="\\n?";J+="\n"}if(F){I="\\n*"}this.after=this.after.replace(new s(I,""),J)}};h.prefixes="(?:\\s{4,}|\\s*>|\\s*-\\s+|\\s*\\d+\\.|=|\\+|-|_|\\*|#|\\s*\\[[^\n]]+\\]:)";h.unwrap=function(G){var F=new s("([^\\n])\\n(?!(\\n|"+h.prefixes+"))","g");G.selection=G.selection.replace(F,"$1 $2")};h.wrap=function(G,F){h.unwrap(G);var H=new s("(.{1,"+F+"})( +|$\\n?)","gm");G.selection=G.selection.replace(H,function(I,J){if(new s("^"+h.prefixes,"").test(I)){return I}return J+"\n"});G.selection=G.selection.replace(/\s+$/,"")};h.doBold=function(F,G){return h.doBorI(F,G,2,"strong text")};h.doItalic=function(F,G){return h.doBorI(F,G,1,"emphasized text")};h.doBorI=function(L,J,K,F){L.trimWhitespace();L.selection=L.selection.replace(/\n{2,}/g,"\n");L.before.search(/(\**$)/);var I=s.$1;L.after.search(/(^\**)/);var G=s.$1;var M=Math.min(I.length,G.length);if((M>=K)&&(M!=2||K!=1)){L.before=L.before.replace(s("[*]{"+K+"}$",""),"");L.after=L.after.replace(s("^[*]{"+K+"}",""),"")}else{if(!L.selection&&G){L.after=L.after.replace(/^([*_]*)/,"");L.before=L.before.replace(/(\s?)$/,"");var H=s.$1;L.before=L.before+G+H}else{if(!L.selection&&!G){L.selection=F}var N=K<=1?"*":"**";L.before=L.before+N;L.after=N+L.after}}return};h.stripLinkDefs=function(G,F){G=G.replace(/^[ ]{0,3}\[(\d+)\]:[ \t]*\n?[ \t]*?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|$)/gm,function(K,L,H,I,J){F[L]=K.replace(/\s*$/,"");if(I){F[L]=K.replace(/["(](.+?)[")]$/,"");return I+J}return""});return G};h.addLinkDef=function(M,I){var F=0;var H={};M.before=h.stripLinkDefs(M.before,H);M.selection=h.stripLinkDefs(M.selection,H);M.after=h.stripLinkDefs(M.after,H);var G="";var L=/(\[(?:\[[^\]]*\]|[^\[\]])*\][ ]?(?:\n[ ]*)?\[)(\d+)(\])/g;var K=function(O){F++;O=O.replace(/^[ ]{0,3}\[(\d+)\]:/," ["+F+"]:");G+="\n"+O};var J=function(P,Q,R,O){if(H[R]){K(H[R]);return Q+F+O}return P};M.before=M.before.replace(L,J);if(I){K(I)}else{M.selection=M.selection.replace(L,J)}var N=F;M.after=M.after.replace(L,J);if(M.after){M.after=M.after.replace(/\n*$/,"")}if(!M.after){M.selection=M.selection.replace(/\n*$/,"")}M.after+="\n\n"+G;return N};h.doLinkOrImage=function(F,G,I){F.trimWhitespace();F.findTags(/\s*!?\[/,/\][ ]?(?:\n[ ]*)?(\[.*?\])?/);if(F.endTag.length>1){F.startTag=F.startTag.replace(/!?\[/,"");F.endTag="";h.addLinkDef(F,null)}else{if(/\n\n/.test(F.selection)){h.addLinkDef(F,null);return}var H=function(L){if(L!==null){F.startTag=F.endTag="";var K=" [999]: "+L;var J=h.addLinkDef(F,K);F.startTag=I?"![":"[";F.endTag="]["+J+"]";if(!F.selection){if(I){F.selection="alt text"}else{F.selection="link text"}}}G()};if(I){a.prompt(B,b,H,1)}else{a.prompt(D,g,H)}return true}};a.makeAPI=function(){y.wmd={};y.wmd.editor=y.editor;y.wmd.previewManager=y.previewManager};a.startEditor=function(){if(y.wmd_env.autostart===false){a.makeAPI();return}var G;var F;var H=function(){y.panels=new y.PanelCollection();F=new y.previewManager();var I=F.refresh;G=new y.editor(I);F.refresh(true)};a.addEvent(top,"load",H)};y.previewManager=function(){var H=this;var V;var F;var N;var M;var S;var O;var I=3000;var P="delayed";var K=function(X,Y){a.addEvent(X,"input",Y);X.onpaste=Y;X.ondrop=Y;a.addEvent(X,"keypress",Y);a.addEvent(X,"keydown",Y);F=new y.inputPoller(Y,A)};var R=function(){var X=0;if(top.innerHeight){X=top.pageYOffset}else{if(E.documentElement&&E.documentElement.scrollTop){X=E.documentElement.scrollTop}else{if(E.body){X=E.body.scrollTop}}}return X};var L=function(){if(!y.panels.preview&&!y.panels.output){return}var Z=y.panels.input.value;if(Z&&Z==S){return}else{S=Z}var Y=new Date().getTime();if(!V&&y.showdown){V=new y.showdown.converter()}if(V){Z=V.makeHtml(Z)}var X=new Date().getTime();M=X-Y;G(Z);O=Z};var U=function(){if(N){top.clearTimeout(N);N=undefined}if(P!=="manual"){var X=0;if(P==="delayed"){X=M}if(X>I){X=I}N=top.setTimeout(L,X)}};var J=function(X){if(X.scrollHeight<=X.clientHeight){return 1}return X.scrollTop/(X.scrollHeight-X.clientHeight)};var W=function(){if(y.panels.preview){y.panels.preview.scrollTop=(y.panels.preview.scrollHeight-y.panels.preview.clientHeight)*J(y.panels.preview)}if(y.panels.output){y.panels.output.scrollTop=(y.panels.output.scrollHeight-y.panels.output.clientHeight)*J(y.panels.output)}};this.refresh=function(X){if(X){S="";L()}else{U()}};this.processingTime=function(){return M};this.output=function(){return O};this.setUpdateMode=function(X){P=X;H.refresh()};var Q=true;var G=function(aa){var X=C.getTop(y.panels.input)-R();if(y.panels.output){if(y.panels.output.value!==undefined){y.panels.output.value=aa;y.panels.output.readOnly=true}else{var Z=aa.replace(/&/g,"&");Z=Z.replace(/"+Z+"
    "}}if(y.panels.preview){y.panels.preview.innerHTML=aa}W();if(Q){Q=false;return}var Y=C.getTop(y.panels.input)-R();if(v.isIE){top.setTimeout(function(){top.scrollBy(0,Y-X)},0)}else{top.scrollBy(0,Y-X)}};var T=function(){K(y.panels.input,U);L();if(y.panels.preview){y.panels.preview.scrollTop=0}if(y.panels.output){y.panels.output.scrollTop=0}};this.destroy=function(){if(F){F.destroy()}};T()};h.doAutoindent=function(F,G){F.before=F.before.replace(/(\n|^)[ ]{0,3}([*+-]|\d+[.])[ \t]*\n$/,"\n\n");F.before=F.before.replace(/(\n|^)[ ]{0,3}>[ \t]*\n$/,"\n\n");F.before=F.before.replace(/(\n|^)[ \t]+\n$/,"\n\n");if(/(\n|^)[ ]{0,3}([*+-]|\d+[.])[ \t]+.*\n$/.test(F.before)){if(h.doList){h.doList(F)}}if(/(\n|^)[ ]{0,3}>[ \t]+.*\n$/.test(F.before)){if(h.doBlockquote){h.doBlockquote(F)}}if(/(\n|^)(\t|[ ]{4,}).*\n$/.test(F.before)){if(h.doCode){h.doCode(F)}}};h.doBlockquote=function(F,G){F.selection=F.selection.replace(/^(\n*)([^\r]+?)(\n*)$/,function(L,K,J,I){F.before+=K;F.after=I+F.after;return J});F.before=F.before.replace(/(>[ \t]*)$/,function(J,I){F.selection=I+F.selection;return""});F.selection=F.selection.replace(/^(\s|>)+$/,"");F.selection=F.selection||"Blockquote";if(F.before){F.before=F.before.replace(/\n?$/,"\n")}if(F.after){F.after=F.after.replace(/^\n?/,"\n")}F.before=F.before.replace(/(((\n|^)(\n[ \t]*)*>(.+\n)*.*)+(\n[ \t]*)*$)/,function(I){F.startTag=I;return""});F.after=F.after.replace(/^(((\n|^)(\n[ \t]*)*>(.+\n)*.*)+(\n[ \t]*)*)/,function(I){F.endTag=I;return""});var H=function(J){var I=J?"> ":"";if(F.startTag){F.startTag=F.startTag.replace(/\n((>|\s)*)\n$/,function(L,K){return"\n"+K.replace(/^[ ]{0,3}>?[ \t]*$/gm,I)+"\n"})}if(F.endTag){F.endTag=F.endTag.replace(/^\n((>|\s)*)\n/,function(L,K){return"\n"+K.replace(/^[ ]{0,3}>?[ \t]*$/gm,I)+"\n"})}};if(/^(?![ ]{0,3}>)/m.test(F.selection)){h.wrap(F,y.wmd_env.lineLength-2);F.selection=F.selection.replace(/^/gm,"> ");H(true);F.skipLines()}else{F.selection=F.selection.replace(/^[ ]{0,3}> ?/gm,"");h.unwrap(F);H(false);if(!/^(\n|^)[ ]{0,3}>/.test(F.selection)&&F.startTag){F.startTag=F.startTag.replace(/\n{0,2}$/,"\n\n")}if(!/(\n|^)[ ]{0,3}>.*$/.test(F.selection)&&F.endTag){F.endTag=F.endTag.replace(/^\n{0,2}/,"\n\n")}}if(!/\n/.test(F.selection)){F.selection=F.selection.replace(/^(> *)/,function(I,J){F.startTag+=J;return""})}};h.doCode=function(F,G){var I=/\S[ ]*$/.test(F.before);var K=/^[ ]*\S/.test(F.after);if((!K&&!I)||/\n/.test(F.selection)){F.before=F.before.replace(/[ ]{4}$/,function(L){F.selection=L+F.selection;return""});var J=1;var H=1;if(/\n(\t|[ ]{4,}).*\n$/.test(F.before)){J=0}if(/^\n(\t|[ ]{4,})/.test(F.after)){H=0}F.skipLines(J,H);if(!F.selection){F.startTag=" ";F.selection="enter code here"}else{if(/^[ ]{0,3}\S/m.test(F.selection)){F.selection=F.selection.replace(/^/gm," ")}else{F.selection=F.selection.replace(/^[ ]{4}/gm,"")}}}else{F.trimWhitespace();F.findTags(/`/,/`/);if(!F.startTag&&!F.endTag){F.startTag=F.endTag="`";if(!F.selection){F.selection="enter code here"}}else{if(F.endTag&&!F.startTag){F.before+=F.endTag;F.endTag=""}else{F.startTag=F.endTag=""}}}};h.doList=function(Q,J,I){var S=/(\n|^)(([ ]{0,3}([*+-]|\d+[.])[ \t]+.*)(\n.+|\n{2,}([*+-].*|\d+[.])[ \t]+.*|\n{2,}[ \t]+\S.*)*)\n*$/;var R=/^\n*(([ ]{0,3}([*+-]|\d+[.])[ \t]+.*)(\n.+|\n{2,}([*+-].*|\d+[.])[ \t]+.*|\n{2,}[ \t]+\S.*)*)\n*/;var F="-";var N=1;var L=function(){var T;if(I){T=" "+N+". ";N++}else{T=" "+F+" "}return T};var M=function(T){if(I===undefined){I=/^\s*\d/.test(T)}T=T.replace(/^[ ]{0,3}([*+-]|\d+[.])\s/gm,function(U){return L()});return T};Q.findTags(/(\n|^)*[ ]{0,3}([*+-]|\d+[.])\s+/,null);if(Q.before&&!/\n$/.test(Q.before)&&!/^\n/.test(Q.startTag)){Q.before+=Q.startTag;Q.startTag=""}if(Q.startTag){var H=/\d+[.]/.test(Q.startTag);Q.startTag="";Q.selection=Q.selection.replace(/\n[ ]{4}/g,"\n");h.unwrap(Q);Q.skipLines();if(H){Q.after=Q.after.replace(R,M)}if(I==H){return}}var K=1;Q.before=Q.before.replace(S,function(T){if(/^\s*([*+-])/.test(T)){F=s.$1}K=/[^\n]\n\n[^\n]/.test(T)?1:0;return M(T)});if(!Q.selection){Q.selection="List item"}var O=L();var G=1;Q.after=Q.after.replace(R,function(T){G=/[^\n]\n\n[^\n]/.test(T)?1:0;return M(T)});Q.trimWhitespace(true);Q.skipLines(K,G,true);Q.startTag=O;var P=O.replace(/./g," ");h.wrap(Q,y.wmd_env.lineLength-P.length);Q.selection=Q.selection.replace(/\n/g,"\n"+P)};h.doHeading=function(H,I){H.selection=H.selection.replace(/\s+/g," ");H.selection=H.selection.replace(/(^\s+|\s+$)/g,"");if(!H.selection){H.startTag="## ";H.selection="Heading";H.endTag=" ##";return}var J=0;H.findTags(/#+[ ]*/,/[ ]*#+/);if(/#+/.test(H.startTag)){J=s.lastMatch.length}H.startTag=H.endTag="";H.findTags(null,/\s?(-+|=+)/);if(/=+/.test(H.endTag)){J=1}if(/-+/.test(H.endTag)){J=2}H.startTag=H.endTag="";H.skipLines(1,1);var K=J==0?2:J-1;if(K>0){var G=K>=2?"-":"=";var F=H.selection.length;if(F>y.wmd_env.lineLength){F=y.wmd_env.lineLength}H.endTag="\n";while(F--){H.endTag+=G}}};h.doHorizontalRule=function(F,G){F.startTag="----------\n";F.selection="";F.skipLines(2,1,true)}};Attacklab.wmd_env={};Attacklab.account_options={};Attacklab.wmd_defaults={version:1,output:"Markdown",lineLength:40,delayLoad:false};if(!Attacklab.wmd){Attacklab.wmd=function(){Attacklab.loadEnv=function(){var b=function(d){if(!d){return}for(var c in d){Attacklab.wmd_env[c]=d[c]}};b(Attacklab.wmd_defaults);b(Attacklab.account_options);b(top.wmd_options);Attacklab.full=true;var a="bold italic link blockquote code image ol ul heading hr";Attacklab.wmd_env.buttons=Attacklab.wmd_env.buttons||a};Attacklab.loadEnv()};Attacklab.wmd();Attacklab.wmdBase();Attacklab.Util.startEditor()}; \ No newline at end of file diff --git a/forum/skins/default/media/js/wmd/wmd-test.html b/forum/skins/default/media/js/wmd/wmd-test.html new file mode 100644 index 0000000..d748501 --- /dev/null +++ b/forum/skins/default/media/js/wmd/wmd-test.html @@ -0,0 +1,158 @@ + + + + + Test WMD Page + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    + +

    To test that page up/down and arrow keys work, copy this above the WMD + control.

    + + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + Scroll Down!
    + + + + \ No newline at end of file diff --git a/forum/skins/default/media/js/wmd/wmd.css b/forum/skins/default/media/js/wmd/wmd.css new file mode 100644 index 0000000..80c226c --- /dev/null +++ b/forum/skins/default/media/js/wmd/wmd.css @@ -0,0 +1,129 @@ +/*body +{ + background-color: White +} +*/ +.wmd-panel +{ +} + +#wmd-button-bar +{ + background-color: White; +} + +#wmd-input +{ + height: 500px; + background-color: Gainsboro; + border: 1px solid DarkGray; + margin-top: -20px; +} + +#wmd-preview +{ + background-color: LightSkyBlue; +} + +#wmd-output +{ + background-color: Pink; +} + +#wmd-button-row +{ + position: relative; + margin-left: 5px; + margin-right: 5px; + margin-bottom: 5px; + margin-top: 10px; + padding: 0px; + height: 20px; +} + +.wmd-spacer +{ + width: 1px; + height: 20px; + margin-left: 14px; + + position: absolute; + background-color: Silver; + display: inline-block; + list-style: none; +} + +.wmd-button +{ + width: 20px; + height: 20px; + margin-left: 5px; + margin-right: 5px; + + position: absolute; + background-image: url(images/wmd-buttons.png); + background-repeat: no-repeat; + background-position: 0px 0px; + display: inline-block; + list-style: none; +} + +.wmd-button > a +{ + width: 20px; + height: 20px; + margin-left: 5px; + margin-right: 5px; + + position: absolute; + display: inline-block; +} + + +/* sprite button slicing style information */ +#wmd-button-bar #wmd-bold-button {left: 0px; background-position: 0px 0;} +#wmd-button-bar #wmd-italic-button {left: 25px; background-position: -20px 0;} +#wmd-button-bar #wmd-spacer1 {left: 50px;} +#wmd-button-bar #wmd-link-button {left: 75px; background-position: -40px 0;} +#wmd-button-bar #wmd-quote-button {left: 100px; background-position: -60px 0;} +#wmd-button-bar #wmd-code-button {left: 125px; background-position: -80px 0;} +#wmd-button-bar #wmd-image-button {left: 150px; background-position: -100px 0;} +#wmd-button-bar #wmd-spacer2 {left: 175px;} +#wmd-button-bar #wmd-olist-button {left: 200px; background-position: -120px 0;} +#wmd-button-bar #wmd-ulist-button {left: 225px; background-position: -140px 0;} +#wmd-button-bar #wmd-heading-button {left: 250px; background-position: -160px 0;} +#wmd-button-bar #wmd-hr-button {left: 275px; background-position: -180px 0;} +#wmd-button-bar #wmd-spacer3 {left: 300px;} +#wmd-button-bar #wmd-undo-button {left: 325px; background-position: -200px 0;} +#wmd-button-bar #wmd-redo-button {left: 350px; background-position: -220px 0;} +#wmd-button-bar #wmd-help-button {right: 0px; background-position: -240px 0;} + + +.wmd-prompt-background +{ + background-color: Black; +} + +.wmd-prompt-dialog +{ + border: 1px solid #999999; + background-color: #F5F5F5; +} + +.wmd-prompt-dialog > div { + font-size: 1em; + font-family: arial, helvetica, sans-serif; +} + + +.wmd-prompt-dialog > form > input[type="text"] { + border: 1px solid #999999; + color: black; +} + +.wmd-prompt-dialog > form > input[type="button"]{ + border: 1px solid #888888; + font-family: trebuchet MS, helvetica, sans-serif; + font-size: 1em; + font-weight: bold; +} diff --git a/forum/skins/default/media/js/wmd/wmd.js b/forum/skins/default/media/js/wmd/wmd.js new file mode 100644 index 0000000..56ee30a --- /dev/null +++ b/forum/skins/default/media/js/wmd/wmd.js @@ -0,0 +1,2434 @@ +/* +Ajax upload +*/jQuery.extend({createUploadIframe:function(d,b){var a="jUploadFrame"+d;if(window.ActiveXObject){var c=document.createElement('
    + + + +""" % { + 'ApiServer' : server, + 'PublicKey' : public_key, + 'ErrorParam' : error_param, + } + + +def submit (recaptcha_challenge_field, + recaptcha_response_field, + private_key, + remoteip): + """ + Submits a reCAPTCHA request for verification. Returns RecaptchaResponse + for the request + + recaptcha_challenge_field -- The value of recaptcha_challenge_field from the form + recaptcha_response_field -- The value of recaptcha_response_field from the form + private_key -- your reCAPTCHA private key + remoteip -- the user's ip address + """ + + if not (recaptcha_response_field and recaptcha_challenge_field and + len (recaptcha_response_field) and len (recaptcha_challenge_field)): + return RecaptchaResponse (is_valid = False, error_code = 'incorrect-captcha-sol') + + + def encode_if_necessary(s): + if isinstance(s, unicode): + return s.encode('utf-8') + return s + + params = urllib.urlencode ({ + 'privatekey': encode_if_necessary(private_key), + 'remoteip' : encode_if_necessary(remoteip), + 'challenge': encode_if_necessary(recaptcha_challenge_field), + 'response' : encode_if_necessary(recaptcha_response_field), + }) + + request = urllib2.Request ( + url = "http://%s/verify" % VERIFY_SERVER, + data = params, + headers = { + "Content-type": "application/x-www-form-urlencoded", + "User-agent": "reCAPTCHA Python" + } + ) + + httpresp = urllib2.urlopen (request) + + return_values = httpresp.read ().splitlines (); + httpresp.close(); + + return_code = return_values [0] + + if (return_code == "true"): + return RecaptchaResponse (is_valid=True) + else: + return RecaptchaResponse (is_valid=False, error_code = return_values [1]) + + diff --git a/forum_modules/recaptcha/settings.py b/forum_modules/recaptcha/settings.py new file mode 100644 index 0000000..ceeef72 --- /dev/null +++ b/forum_modules/recaptcha/settings.py @@ -0,0 +1,17 @@ +from forum.settings import EXT_KEYS_SET +from forum.settings.base import Setting + +RECAPTCHA_PUB_KEY = Setting('RECAPTCHA_PUB_KEY', '', EXT_KEYS_SET, dict( +label = "Recaptch public key", +help_text = """ +Get this key at reCaptcha to enable +recaptcha anti spam through. +""", +required=False)) + +RECAPTCHA_PRIV_KEY = Setting('RECAPTCHA_PRIV_KEY', '', EXT_KEYS_SET, dict( +label = "Recaptch private key", +help_text = """ +This is the private key you'll get in the same place as the recaptcha public key. +""", +required=False)) diff --git a/forum_modules/robotstxt/__init__.py b/forum_modules/robotstxt/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/forum_modules/robotstxt/settings.py b/forum_modules/robotstxt/settings.py new file mode 100644 index 0000000..2ca3008 --- /dev/null +++ b/forum_modules/robotstxt/settings.py @@ -0,0 +1,16 @@ +from forum.settings.base import Setting, SettingSet +from django.forms.widgets import Textarea + +ROBOTS_SET = SettingSet('robots', 'Robots txt', "Set up the robots.txt file.", 3000) + +ROBOTS_FILE = Setting('ROBOTS_FILE', +""" +User-Agent: * +Disallow: /accounts/ +Disallow: /users/ +""", ROBOTS_SET, dict( +label = "Robots.txt file", +help_text = """ +The robots.txt file search engine spiders will see. +""", +widget=Textarea(attrs={'rows': '20'}))) \ No newline at end of file diff --git a/forum_modules/robotstxt/templates/robots.txt b/forum_modules/robotstxt/templates/robots.txt new file mode 100644 index 0000000..574fc31 --- /dev/null +++ b/forum_modules/robotstxt/templates/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file diff --git a/forum_modules/robotstxt/urls.py b/forum_modules/robotstxt/urls.py new file mode 100644 index 0000000..0706886 --- /dev/null +++ b/forum_modules/robotstxt/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls.defaults import * +from django.http import HttpResponse +import settings + +urlpatterns = patterns('', + (r'^robots.txt$', lambda r: HttpResponse(settings.ROBOTS_FILE.value)), +) diff --git a/forum_modules/sphinxfulltext/README.txt b/forum_modules/sphinxfulltext/README.txt new file mode 100644 index 0000000..7d65653 --- /dev/null +++ b/forum_modules/sphinxfulltext/README.txt @@ -0,0 +1,29 @@ +Full text search (using sphinx search) + +Currently full text search works only with sphinx search engine +And builtin PostgreSQL (postgres only >= 8.3???) + +5.1 Instructions for Sphinx search setup +Sphinx at this time supports only MySQL and PostgreSQL databases +to enable this, install sphinx search engine and djangosphinx + +configure sphinx, sample configuration can be found in +sphinx/sphinx.conf file usually goes somewhere in /etc tree + +build osqa index first time manually + +% indexer --config /path/to/sphinx.conf --index osqa + +setup cron job to rebuild index periodically with command +your crontab entry may be something like + +0 9,15,21 * * * /usr/local/bin/indexer --config /etc/sphinx/sphinx.conf --all --rotate >/dev/null 2>&1 +adjust it as necessary this one will reindex three times a day at 9am 3pm and 9pm + +if your forum grows very big ( good luck with that :) you'll +need to two search indices one diff index and one main +please refer to online sphinx search documentation for the information +on the subject http://sphinxsearch.com/docs/ + +in settings.py look for INSTALLED_APPS +and uncomment #'djangosphinx', \ No newline at end of file diff --git a/forum_modules/sphinxfulltext/__init__.py b/forum_modules/sphinxfulltext/__init__.py new file mode 100644 index 0000000..b7250c8 --- /dev/null +++ b/forum_modules/sphinxfulltext/__init__.py @@ -0,0 +1,5 @@ +try: + import djangosphinx + CAN_USE = True +except: + CAN_USE = False \ No newline at end of file diff --git a/forum_modules/sphinxfulltext/dependencies.py b/forum_modules/sphinxfulltext/dependencies.py new file mode 100644 index 0000000..046ebfc --- /dev/null +++ b/forum_modules/sphinxfulltext/dependencies.py @@ -0,0 +1,2 @@ +DJANGO_APPS = ('djangosphinx', ) + diff --git a/forum_modules/sphinxfulltext/handlers.py b/forum_modules/sphinxfulltext/handlers.py new file mode 100644 index 0000000..226acf7 --- /dev/null +++ b/forum_modules/sphinxfulltext/handlers.py @@ -0,0 +1,4 @@ +from forum.models import Question + +def question_search(keywords, orderby): + return Question.search.query(keywords) \ No newline at end of file diff --git a/forum_modules/sphinxfulltext/models.py b/forum_modules/sphinxfulltext/models.py new file mode 100644 index 0000000..a188728 --- /dev/null +++ b/forum_modules/sphinxfulltext/models.py @@ -0,0 +1,11 @@ +from forum.models import Question +from django.conf import settings +from djangosphinx.manager import SphinxSearch + +from djangosphinx.models import SphinxSearch + +Question.add_to_class('search', SphinxSearch( + index=' '.join(settings.SPHINX_SEARCH_INDICES), + mode='SPH_MATCH_ALL', + ) + ) diff --git a/forum_modules/sphinxfulltext/settings.py b/forum_modules/sphinxfulltext/settings.py new file mode 100644 index 0000000..7c2da12 --- /dev/null +++ b/forum_modules/sphinxfulltext/settings.py @@ -0,0 +1,5 @@ +SPHINX_API_VERSION = 0x113 #refer to djangosphinx documentation +SPHINX_SEARCH_INDICES=('osqa',) #a tuple of index names remember about a comma after the +#last item, especially if you have just one :) +SPHINX_SERVER='localhost' +SPHINX_PORT=3312 diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..385fe3c85dfe612acf7a4fb71f03edd37c3bdb06 GIT binary patch literal 27289 zcmeI43ydUrecy|RF|08d4v4X_sU5hR9hm9eTYTg^H#>W?&s(#v+ughK62rQBx@M-B zp02*G?wuPhj$;SNfx)rQXJIL_BFp3<*$5}bF|vakIT0iZ36Ww!lz<%+M@dMmL`Wzh za-@8|zu*5~RXsDiw;ZP!MQLsAZ|e1b{oap%{o$)${EG>{pXGQ1$A@2>B)310e%(uw}GE~MUwP^<5wn04*UvG@16agBzZ6J zkAQy%_|8`)$@c2L0S^OzA4pTl*MKX) z7rlmOfTw{+fg3<>C4U|GM&Kua4+B3BJPthgT7NzRGW6tqz!dm2Q1AU_xc^z;0nWb) z)N@}49s<7TbxAT0oCm%Qcpa#5eFUg}J`L3Kul#dK^25L%0P6fPpyrVSnOZUevSi8o zftvR-0sbxE4|4t~pq~38a25Df;2GdW7LPxZUj%A=9|wLP@KeCMf&VI8{{~R)zxee@ z(gWTF1ck{HK%w@1K)wHwaQ&Bnn#ae0pf33Xpw{`1fhq9oK$=WmM`xPHVIWJAECDtC zD?q*11M)8!^PlejHK4}vH-TEePXgZp{4($w@TK4H^L!U@ne!nq1%3i3din#UViY>jgs z$fL;#pq{${)cQOL{0ZO(fVQ3x)gtG20d;;6coO(7;6dQ805zU}1f+}POF%vMzkoE6 zye#$k9|G$6t3a*W1gP=6AIMTCPXqPduLDItzYEm-{%L^!7AX4o6QJl{jp_L}0Urb& z1)c&{z;nP)0X3f&^040fZlKyrf$IM#Q2n0(YW$agn%4#pR3*O-goTpN0*?c~1WbW% zV3F?w9s{b~3Mjhy0PyX=j{?=+zW~kw|0D3Nz*oK5pFaltA_qp^G^c*8!(5s{yy*#IywJB-k~v#`+CR6H30r0 z=RXP5{NH^TS_KY)AEW*M0Mt5s=w4(Y=N|>?{LL`?hk*A2UkUsN0e%j+#`%|k2Z1M< zjQY=kzYTl?i}OL?9{{y3?`Ba%UnNk_{|r#$`#4be`F)_;|K~uuPreL10sJH2j{;{P zZqf6Tz#jvC7WiV|o9|DO2Y_=x(Mt~0^$K_w4Lt#T9p@kZVQ>ZfRiMW66(Fcgz6MnP zuZ6fD2ByFt1&)A^^Zq{r>i)4M$LB-9w{V^T&jCLSd^hk5z>fp(qZ85NzX!ey_%)#3 z|5KpG^_|N}vQ4`$2Wr0WgQ)cUGeFVDuLA!9@bkd$0KWA>#sIt*C_4M!z?TBQXT|yV z^}xTu`C;HofS(8cUEmjhqLZgsMB)7#z}Ex+^~ogpH^8p}yDwn9Pr3X*f{^8v!iU{U@&`$py}z0=|U%U$_S3{L6xz|M4S9^3%Zo0z3^IJnC}v zlfYl$xtBfW>-%dU4^mEk1Nd`X|93#)|M7P^9-aaU55EA^^p&HWhb%=!Jmj|0E@F4p&jw0FbX`+J$wL zL%^e5=aWwZS6;w+ulhJY*mJ${3{dp*Y2Y*5|0lrj<@{Z1&c`=_U*!BLASg|Kd>tO+ zxsL(=JLj({TwZ<0d)&Ub2gvPYgX09p&vNK@4+l*r3miYhaghU(w%=dn|0CgVrfWaC zv-$jGKb`s?6eag^j5t82@$Dio{y>%eMCbbb1jl$^C# z{@=-=ALL>BMm(XPaHVx%`t@&~zaUSuA9V5k98YoxFR$Uy??*UZVt+Xwgg*_uES!j6 zpJ?3x-G&=o`aX{PIDUpBIa zFIjYsV~3;U=y1$&oaWGP+kwf%r}+C#9Pj3MJIDJtE^)we_M72<$l88C$p6dX@1p@; z2fmr(!#Y2Z?(;iT4)S!h+}g?q322QOIXQZNU88hEPo7c-p zx|$8rtiPS@RB6_G&!ifsYonaO4OVy3axKlbvZ9|(hP`Z@SKKPM(w%ZLg1m;Ka;@m+ zHzuS0KIFBRU+HWVnRQ&!K%h)f>SSvx8|}bb+XblY=IOAk#w=1fSk2X6+Ar5Z#2$Q4 z_i|fqh557fb(0GGG03)dGsW}T*4>A^hxv58QB*1aSY}_v6cJQq>v_77XFUYhTFJ81 zZGTQBAAiLq!_WH!a*uHqJ&j*0RTMK^d{-WM$RF@*;!E2CT<0 ztE%mC)Js-eqD#0(E=g8cL3&(g8oBz^9E~zWzfcEaVY?V_IB{MY=7V#m=8bB~$yju( z#;RhRr>yocA8lm=R84<}CbvptywP;#1M1M(reCSMKaqnb)~(u-O`soAuV=$ZXI{p@1%{VK~%OrR35)Q`b8~X1wMPH!3pQ&PKhw*GbP7%zXl1=XtN2 zt!}2-7$nBC28kVOJ2~lyGMSK^>=(SC$rbAZNy+iXsGO{CFeH;44BOUVbhB8^t4?wf z^*$LCVG(6ChZTVyYErw{bG-u-jG&S8g6p&J9+}(MVH{0;ZFk7v~)o1x$vb1YTWS$>DW28egm6vpNB7&<6>4mo>CS6WkLwxNesjQE5tBjH)t44;NG@Fb!%2DxNr#{hBK0+33 zA^UG;qasImF!8MtRTLg!u@MBjHO&5c;GI>PG#<(bXEboK8JlI83GT<>dvPH&_@TA{M&mptRq8C)h@#MM) zz{H9Fsnu5d7BV|gYCH6d7uDw~#uJYRyC4adr7fV# z%E&}rV@;Swu(yl6YCl+QK)3J$_H$P2rjdm3XskzV3YcfZem3w{kbGKO84#ikjIUr9 zF;VHowtaWNY#td1cOTl!cW$7IHs@laTtMoM#g609Px}(D#Ptgc>SHk$!gV%XKiwka zUZaF&$75y|R^Q*l{qW~)2N zdZ`7u`;gC0e}@6z##6C{iu22+WYl^ITbd0rMPit)!wrcSX}6ZdN}^4hV$(XQ*%Dzc zY;Ry$?>2{TL*7Ddn3R(m6kw7HkH@FfO9J|DX8l4wS8N|Li%TZ)dc(TCA)MO^vN~~? zjn#IGw#@HJ7=D&Me9wy6Jo82<=*ps6om7>~n{|x2VJAg;W4Ornt?gWwXE<9%*Yz7B z1XqVH2jp#dM2Cf2E&8(jg4C}hK`~Qs?nKdDB>P&cZv;996lR8bojp#l_S&M=_&qZ5 ze*SObCJ&Ti21(>|$6gTl^qg$T-!-?<*1N?L;nn%Qa=0y%-RW^$1dOqE4F+!ORwb~v z<`tGJ5m`1oxrq#&Pm49vX8i)!BC&86w0Yi-^G(+kWD=?Moi ziK3S;lqYVY%KxY)!=alYx|UXBj7a>4))U+KhG>MWSDM_90t+Tu#km^o*t!QPnbh8w zEa%N6I8U;rD6am5w$W+QQNE*0rynp8y}Lfc2GPpd4#xxM)o zlMV2DD@;q1wXA(yy+AN7Taz)WaMP8qd4M|-e8zsszQSiR?3WmlJXCC9V_Ep8Uu@xy zDpq3TrAQaiisiQ-Nn4W-Gu=ghlB-hjA|CS^l3F=5;zA-(v5ngZiS1yzG6Wn=b9LoJ zip8VuNbJHmU)>ns=JwlstH)N$ejopjX}E&ES|T+cj@8*+$MzI!i8$R=q;R> ztXB)y%Ek1+D_3AQ@4%R0S*21+s+geP|uUtI)h=#m${``aeqEn96mk(Sxcj0t1 zse3y|4iGFEv$hM@hzTuP`1~+NXEAs{rpE|t?${&O&Me&DJg2d&<)eku`2C{h#q|De zF+PwSn9A00x;M`fby8*NFpn)S4VU91ONWQc&-vww zhMx1w&Y5N;NjS!QO7y>%EEp3aJm|qqVt1OzRJJ7qVQRl zo(8i}yxgXJk2$5?Vtr=$x`elzJJN80{L`gkc_#8r9lofU0&!d?emb4b%+ldvnJ|}P zoq@gDU7&s{sc+L8(U#pmP1FhfKX(y;K}f1d=tGiB4T(GAc7VcUbBetw-1;qIy47Dx zTynLVxx?-yJ`)CeidY&8>w}xO888dHIJBoiZn8?EjBOGE!PD|Mcy4YXPQher(dM;( zv%6c}lZkT2%CZ{I+J1YDXB)K7E?+8#6~saGt;7T~KZp=S9j0stLu8@Ee3#h^*iA9f z6|CDx83D5)jvFIKuoJFN+HT*?H5b5UVoX`O=4E!$m3~D6Od(3_$iOr)eZZLNJeg$~ z@+lIZEzz>;`Rww;_hehc2Ua5I*y?vu<16Pv8nQ_-q8OG^@D5z2Esl?dT;qbyLO>oJ zj`wN?G&VOA)l4g!UtFm4T;qAp*CHl1waa^{TZ{yR!Hy3}l|+l$Dw(GkAfyb{9id~Q z+BUbCQw(bsqWXhe7QH6|c++sRT_~l5xq=)pn-jOSTPnZVuX2!!+CS+zDw|C0D_mBp z!4`AH3{g*BX>@T$o~39eViE@Y+SDb4E%hxk+{WJJialZhHYLF5kl@i;D@A_EvXIdi z9og_;rLeF}#Z!ZNSubKUS#%Q9xDK^Ur4%)qdL%Z#T|E$E#8tvIGMNLv)opxp`hDDgzD(X(C^F`AfjT_YAaQdZq0 zA>mv4BDSi`^)6Anw1z1y2eKR;n?Vxo%q*Xd(F1>(sHDiXk1@Nl#w9eC5(vq7s%62$DY#gEzY;4J(<*kbC3^N0MP$D7Pn0 zC{LamnN^94jfNeeL&obims9u#sD-bTBO%CPGm(KjDiBt9pEArW$sJUU1Ww38MsioY zZhcU^H%eC#R4ec1B-BYRl9m8T2xrUt?m3TaX(UC0&=T4WeILRsv>xMg$k664q`6DL zv#|52MQWo%FH3PQ!DVl<@!ppSX$7@SNGG=><}aPaJ{s|A*BGw#6ek<9OK+*AFw zmOC(rw;~FTOnL_^*p@tdRNvGJUh`6~T0=F(4VxKp=$Hrhx(58B5rP9^M@?X65mv4y z$W0@0v1_PuxLQ{^$ef6E4Hw&W4PByMs}+U8k+iMGLDrHL8#%Yiu?Qwvtz4ahr>Y)e z6BlDaL-UrE#d&2zw4o&TOp!4Msk>bz4${fNkE_SFPs4Xq{?KkK=!BM@!@Ag2{eXX2 zZJL}mnG})o>_rh^v8pR0+O-gpOL2LcdWawk>t(8|AzW@H*4$%Srl#CZbMg0t`N=Q{ zPjz7E-`?;P5)zSXRKln}ah<3cl^Nu)JYXxOBSouqCu-W~;TfkhzdvJXG_;zZqPIuN zn}hSzE2c11tZoctubvyhJRT`Qh2Y*Owhlv|o%B)C$;40h)IeD0=+)kY0T5gziMKw` zs3r7$GT3R9sRjE-CV>y9lUS7pv&p7QJ>m*qb${!k7ZaDn}%t&)lkd#0`;mwD~lo4TTZP;YzO;G5gI<@2E&*N~#7Ib9VV!ol7>_ z+$D@+Wgm5}eKWn?+UgR@XH_8>)Xdg?4J#@#8!i1I3DkTA zK2&bY1qy<3J`QFxr;rB%r0hmSiKVy=>Tp40qON8QmytC;Oc`mN^f4tMB93=I${^j; zFK|j!CCS>mzN~XTF2WDxoptI6EeQ@Utz0@kXP%iHmEgd60fbH4--&e;(SuX*zg9M+ zltFN9Tvd^Pvu2|6 zDcggzW6Lq6+cwcpwNzL35Jidd{?M}+K7o;t-g~W{xhYDU@g`gGw>ZZ@Fn{LJH%q-! z4Cy(~WQWKU{!G7@z|O%PNv^37ux+MI*$p7XQ@bW9OnN?*XO17eryw^b zk0Xk_p&B!t^h&G*GoGRYPh5qdYCzyfshq$Gcs>+A;zYC--U+FbM!gtb6ZeF5@H}Eu zXwg*frN#ttd|?jmbRaI);RL8n3MyTcsTc$?w@ktZ?dK9fqnDT1OJ#W?A2+gLMY5b? zJ_>?#XYOE{gtd%8>v$d!)>7&*bkq(j#cR^+!8-|-hdZI@7u7he78u5)1ZA8cF>BrC zL8V)J9z1J$yOVg)SDQ$tXuoA#isN#x#~B2H&@G>Ee>8H1S5(aQYA;&2i6X{d){;gv zxY2}YZ7QD{jCHV^mzyAmR$Vs0q-sZ&>Re`xGhA+~!fyo{lgq(ZO=4M#m?RQbm7Fnc zS(R&JY5`PF*;naMh-6r_jap(B*Q(eWcUTl-`hxOIinXyXq(d=4tj338{*(3w=7j7F zWMV#0c}P#_G8QAUvTbk3j6l_}Gz9LHl$GslK?a_~gm6#rg4I%5)M6Uj)V}US4~Q{A z{^TC1(+FjBs2F$2*9t37X;;-5 zsMWiN>3PSh=g0Z5T0HQU)H3bPL8_WrB*fp;`*GhDt0`0)h1nES!SS}Q#oJMtvUTSz zp=iJmZf}Q`HhH89VNEr@Ad-^p%cKaOisVHNQDG;K*0mIY6Sa<3f!Jo?-BP~E{5uE6 z=y}aMO{${F=yxro8TlIfN5hl|P?e*qabnj^@>Mfj07t!09cgw(@K{s$!H3?K52u1Z(dfM2`+%6B#w<-3rW&Bx6*k7B`Btx~Lb% zYMCOcHI!RbN48F+m|&P!)C zIchu;Lun=!6-wrhPz-FcnMa1IvW^z76?X>50XYhvA*;tBJ{T%PwbO;{hNNxWzSEXy zG+CG7KzYL$mW>?9z<4wAWr%#XRwEL;=X{Oer^;wWLxBSV>SSO{yg+}8nUfZ_Bu;-v z>hEy$a=>|kVeH-8;>3M!UKr;#0HPuvjY_UU`dm;Vx1&UOCN;wk&?4% zSvIs@Hj!P;I$`TpG~<(mhqHs@a{Z1aM_&{m??&$r`FUdk-SYbU~5%j zDmL(FRFu&2befq9yM@zpP3Z2ghmZ;`2ZBv_v&ei*F(2L{69!}I6ejq;lDj@_K0sKT z=bTPvSCMS6xU0iVScMHtr$b`Q27;#ySDL{Dxw0(5#)ch&JSWmZ%+X^83M;#%0r{^| z?KmIwPV|E?S;%S7xRz7W$!&X_OqZt8RKAI;Ly%e8hVTm{}$QbsTC|W+Pe#RxEGZ#KkiZflnu7&Za3C zEgbl3btA|9Xi5$a0`qr5fm89sPLr<-oj!rpuc?9)aEtY0}9ucL#dQeM;y{%=F z^n2%}*sv=o5_zMosbr9{sqN)`Y-6WhUMJaL+=`Cc91W$lDgh)W0&7_%f1D-%78C}PbT+c}}Xhyrjx1y3};;OBd4H^g;vw?TzjqKfFQ@>QljKcOB>=ZG3FYjvii?o3uF@||i zc`Ojc3EH8_pnFAsLZ@0Zypo)4p^`*#l(MnwWU=|r_T-+8H_<9XTElR*S3!e_`*+yy z+uoNG=XcTevD7nZ_liPx?>TJc-M3!8tsFV17v8d&i@bM7pn6m$S#dkdsdY4;I__P*ewj+^Sa?WZO zi!81TFOyx@gJg7i@os8b!8A1N#PLRcH`K@&-51}X2o?1nb~(!$C;un($Vs`4d+8#GT+=#?&uZ4%K@!`3t zaDiM9xL9H+ND(=^GFtQj7ZCi(ILz9~p>?fG|%*&ijB{EIDUu~CeK!O+SOIQu-8MIGe3v)mtraMWf7J!}V z6eymk!h6^Rh(!oSPaoZImRZtZJqYJktSMQ znWO7Fny0L~TDL1w7bnJCEG`6HYrY~{XA-oQiDAnrntTn#ZphI1a(f_{MuvK|;-zle z3g0yRV$+Ln>iVr?nJ}V0&Ok(-ZHg+IY?Tev8x?6mJQK=V>g>jp2$+g?2Bc`0BJX-u zN^37VH0kXczSdrW@ih(Rtckc@j@DHq@}`nu-svLZM7rD*Q=`xMU{Am1*xK;8eFQ1k zGVKIdutn;Yz#;)bZNJhu{jTGT(t+A4NXOg6%%katT2rbn4tBqESG#>=7+G{#`U-ej z_CLfTHN~#tIB`LyY@UM&Y_s2%P%}=g>LXFjYH~RU#f9_{WF%gk6(Z=1Ky2EyY~@w$ z@$|_hv9E{}(Cz`37|umD66cGuDbjU&Mnnwz8yWnC7SDUb1M|IKhtf6T-5Xu+O zJot8^iHS^U^4pb_i`A$s^$)hh0V@sSJl89%m=y6!VL{%wV=3r0ccWElgg_;D%M?&A z@UxF8P^G{SU_B3zGsPXvBaM}0m1Px?79QW`(bhmW6cuv*BaUO4$GPE`7gtIo8=zD|IL=r|;IM zPNi7ZcaCg%s%%Z4i5TSzOrkLi+`yB(Rt9m}K8`!pvA!=^4n~@0YO{Y`V=u4Q;(*wD zLkv&8V2PCxl#zukYgJ;kRhDk>REqFtPf)F$>8pTs-Mp{0sjb?!>-dM80+PMbAMBW8 z==Dd_^1bo!_T8CY>&RUm@6=ZH+2wtm+$l42YO}^QeY3zciWb)0Y^|NKjg2q53iuS; z_Mm*nNWoUI8*CX#ipb!W-Li@rgnC`T`;E;quaC3^AZ#dKh=A_Rj8xpfn zoc7yR*OaTjLZ;Jv7_&NpU}^lJrl27@J~f%_R&H@dE$7NwhBl`?tH!?3hXh0EPLv}} z=){7Nv3Nn2x*49uz&~AyP{UM~^(Q7JhUl{(h&(k_H!x>*?OUw*%{MDq&W#S#Qk(@5 zI?x!RAT?@gCb+}kLlgb5SVP^8nH}{<+UR;J36@ww4I*+k622X7@=WNOFe!-E9i8kgEDH)}dg z5ABWs&mBzK3^o-rxGvYi`LLDnl^eZG*ocO-F mv&OS@XN&+NLf8;B8^gLGdYSd}(RjB0G{P?JDwok^$NvGS^?iT< literal 0 HcmV?d00001 diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000..e8cf9ba --- /dev/null +++ b/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,3662 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-01 19:51-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forum/auth.py:484 +msgid "Your question and all of it's answers have been deleted" +msgstr "" + +#: forum/auth.py:486 +msgid "Your question has been deleted" +msgstr "" + +#: forum/auth.py:489 +msgid "The question and all of it's answers have been deleted" +msgstr "" + +#: forum/auth.py:491 +msgid "The question has been deleted" +msgstr "" + +#: forum/const.py:8 +msgid "duplicate question" +msgstr "" + +#: forum/const.py:9 +msgid "question is off-topic or not relevant" +msgstr "" + +#: forum/const.py:10 +msgid "too subjective and argumentative" +msgstr "" + +#: forum/const.py:11 +msgid "is not an answer to the question" +msgstr "" + +#: forum/const.py:12 +msgid "the question is answered, right answer was accepted" +msgstr "" + +#: forum/const.py:13 +msgid "problem is not reproducible or outdated" +msgstr "" + +#: forum/const.py:15 +msgid "question contains offensive inappropriate, or malicious remarks" +msgstr "" + +#: forum/const.py:16 +msgid "spam or advertising" +msgstr "" + +#: forum/const.py:57 +msgid "question" +msgstr "" + +#: forum/const.py:58 forum/skins/default/templates/book.html:110 +msgid "answer" +msgstr "" + +#: forum/const.py:59 +msgid "commented question" +msgstr "" + +#: forum/const.py:60 +msgid "commented answer" +msgstr "" + +#: forum/const.py:61 +msgid "edited question" +msgstr "" + +#: forum/const.py:62 +msgid "edited answer" +msgstr "" + +#: forum/const.py:63 +msgid "received award" +msgstr "received badge" + +#: forum/const.py:64 +msgid "marked best answer" +msgstr "" + +#: forum/const.py:65 +msgid "upvoted" +msgstr "" + +#: forum/const.py:66 +msgid "downvoted" +msgstr "" + +#: forum/const.py:67 +msgid "canceled vote" +msgstr "" + +#: forum/const.py:68 +msgid "deleted question" +msgstr "" + +#: forum/const.py:69 +msgid "deleted answer" +msgstr "" + +#: forum/const.py:70 +msgid "marked offensive" +msgstr "" + +#: forum/const.py:71 +msgid "updated tags" +msgstr "" + +#: forum/const.py:72 +msgid "selected favorite" +msgstr "" + +#: forum/const.py:73 +msgid "completed user profile" +msgstr "" + +#: forum/const.py:74 +msgid "email update sent to user" +msgstr "" + +#: forum/const.py:78 +msgid "question_answered" +msgstr "answer" + +#: forum/const.py:79 +msgid "question_commented" +msgstr "question comment" + +#: forum/const.py:80 +msgid "answer_commented" +msgstr "answer comment" + +#: forum/const.py:81 +msgid "answer_accepted" +msgstr "answer accepted" + +#: forum/const.py:85 +msgid "[closed]" +msgstr "" + +#: forum/const.py:86 +msgid "[deleted]" +msgstr "" + +#: forum/const.py:87 forum/views/readers.py:564 forum/views/readers.py:583 +msgid "initial version" +msgstr "" + +#: forum/const.py:88 +msgid "retagged" +msgstr "" + +#: forum/const.py:92 +msgid "exclude ignored tags" +msgstr "" + +#: forum/const.py:92 +msgid "allow only selected tags" +msgstr "" + +#: forum/feed.py:18 +msgid " - " +msgstr "" + +#: forum/feed.py:18 +msgid "latest questions" +msgstr "" + +#: forum/forms.py:22 forum/skins/default/templates/answer_edit_tips.html:35 +#: forum/skins/default/templates/answer_edit_tips.html:39 +#: forum/skins/default/templates/question_edit_tips.html:32 +#: forum/skins/default/templates/question_edit_tips.html:37 +msgid "title" +msgstr "" + +#: forum/forms.py:23 +msgid "please enter a descriptive title for your question" +msgstr "" + +#: forum/forms.py:28 +msgid "title must be > 10 characters" +msgstr "" + +#: forum/forms.py:37 +msgid "content" +msgstr "" + +#: forum/forms.py:43 +msgid "question content must be > 10 characters" +msgstr "" + +#: forum/forms.py:53 forum/skins/default/templates/header.html:28 +#: forum/skins/default/templates/header.html:56 +msgid "tags" +msgstr "" + +#: forum/forms.py:55 +msgid "" +"Tags are short keywords, with no spaces within. Up to five tags can be used." +msgstr "" + +#: forum/forms.py:62 forum/skins/default/templates/question_retag.html:39 +msgid "tags are required" +msgstr "" + +#: forum/forms.py:68 +msgid "please use 5 tags or less" +msgstr "" + +#: forum/forms.py:71 +msgid "tags must be shorter than 20 characters" +msgstr "" + +#: forum/forms.py:75 +msgid "" +"please use following characters in tags: letters 'a-z', numbers, and " +"characters '.-_#'" +msgstr "" + +#: forum/forms.py:85 +#: forum/skins/default/templates/post_contributor_info.html:7 +#: forum/skins/default/templates/question_summary_list_roll.html:26 +#: forum/skins/default/templates/question_summary_list_roll.html:38 +#: forum/skins/default/templates/questions.html:92 +#: forum/skins/default/templates/questions.html:104 +msgid "community wiki" +msgstr "" + +#: forum/forms.py:86 +msgid "" +"if you choose community wiki option, the question and answer do not generate " +"points and name of author will not be shown" +msgstr "" + +#: forum/forms.py:102 +msgid "update summary:" +msgstr "" + +#: forum/forms.py:103 +msgid "" +"enter a brief summary of your revision (e.g. fixed spelling, grammar, " +"improved style, this field is optional)" +msgstr "" + +#: forum/forms.py:106 +msgid "Automatically accept user's contributions for the email updates" +msgstr "" + +#: forum/forms.py:122 +msgid "Your name:" +msgstr "" + +#: forum/forms.py:123 +msgid "Email (not shared with anyone):" +msgstr "" + +#: forum/forms.py:124 +msgid "Your message:" +msgstr "" + +#: forum/forms.py:206 +msgid "this email does not have to be linked to gravatar" +msgstr "" + +#: forum/forms.py:208 +msgid "Screen name" +msgstr "" + +#: forum/forms.py:209 +msgid "Real name" +msgstr "" + +#: forum/forms.py:210 +msgid "Website" +msgstr "" + +#: forum/forms.py:211 +msgid "Location" +msgstr "" + +#: forum/forms.py:212 +msgid "Date of birth" +msgstr "" + +#: forum/forms.py:212 +msgid "will not be shown, used to calculate age, format: YYYY-MM-DD" +msgstr "" + +#: forum/forms.py:213 forum/skins/default/templates/account_settings.html:21 +#: forum/skins/default/templates/authopenid/settings.html:21 +msgid "Profile" +msgstr "" + +#: forum/forms.py:244 forum/forms.py:245 +msgid "this email has already been registered, please use another one" +msgstr "" + +#: forum/forms.py:251 +msgid "Choose email tag filter" +msgstr "" + +#: forum/forms.py:269 +msgid "Current password" +msgstr "" + +#: forum/forms.py:280 +msgid "" +"Old password is incorrect. Please enter the correct " +"password." +msgstr "" + +#: forum/forms.py:285 forum/forms.py:286 +msgid "weekly" +msgstr "" + +#: forum/forms.py:285 forum/forms.py:286 +msgid "no email" +msgstr "" + +#: forum/forms.py:286 +msgid "daily" +msgstr "" + +#: forum/forms.py:301 +msgid "Asked by me" +msgstr "" + +#: forum/forms.py:304 +msgid "Answered by me" +msgstr "" + +#: forum/forms.py:307 +msgid "Individually selected" +msgstr "" + +#: forum/forms.py:310 +msgid "Entire forum (tag filtered)" +msgstr "" + +#: forum/urls.py:28 +msgid "upfiles/" +msgstr "" + +#: forum/urls.py:33 +msgid "about/" +msgstr "" + +#: forum/urls.py:34 +msgid "faq/" +msgstr "" + +#: forum/urls.py:35 +msgid "privacy/" +msgstr "" + +#: forum/urls.py:36 +msgid "logout/" +msgstr "" + +#: forum/urls.py:37 forum/urls.py:38 forum/urls.py:39 forum/urls.py:56 +msgid "answers/" +msgstr "" + +#: forum/urls.py:37 forum/urls.py:49 forum/urls.py:52 forum/urls.py:56 +msgid "comments/" +msgstr "" + +#: forum/urls.py:38 forum/urls.py:43 forum/urls.py:78 +#: forum/skins/default/templates/user_info.html:45 +msgid "edit/" +msgstr "" + +#: forum/urls.py:39 forum/urls.py:48 +msgid "revisions/" +msgstr "" + +#: forum/urls.py:40 forum/urls.py:41 forum/urls.py:42 forum/urls.py:43 +#: forum/urls.py:44 forum/urls.py:45 forum/urls.py:46 forum/urls.py:47 +#: forum/urls.py:48 forum/urls.py:49 forum/urls.py:52 +msgid "questions/" +msgstr "" + +#: forum/urls.py:41 forum_modules/books/urls.py:8 +msgid "ask/" +msgstr "" + +#: forum/urls.py:42 +msgid "unanswered/" +msgstr "" + +#: forum/urls.py:44 +msgid "close/" +msgstr "" + +#: forum/urls.py:45 +msgid "reopen/" +msgstr "" + +#: forum/urls.py:46 +msgid "answer/" +msgstr "" + +#: forum/urls.py:47 +msgid "vote/" +msgstr "" + +#: forum/urls.py:50 +msgid "command/" +msgstr "" + +#: forum/urls.py:52 forum/urls.py:56 +msgid "delete/" +msgstr "" + +#: forum/urls.py:60 forum/views/readers.py:435 +msgid "question/" +msgstr "" + +#: forum/urls.py:61 forum/urls.py:62 +msgid "tags/" +msgstr "" + +#: forum/urls.py:64 forum/urls.py:68 +msgid "mark-tag/" +msgstr "" + +#: forum/urls.py:64 +msgid "interesting/" +msgstr "" + +#: forum/urls.py:68 +msgid "ignored/" +msgstr "" + +#: forum/urls.py:72 +msgid "unmark-tag/" +msgstr "" + +#: forum/urls.py:76 forum/urls.py:78 forum/urls.py:79 +msgid "users/" +msgstr "" + +#: forum/urls.py:77 +msgid "moderate-user/" +msgstr "" + +#: forum/urls.py:80 forum/urls.py:81 +msgid "badges/" +msgstr "" + +#: forum/urls.py:82 +msgid "messages/" +msgstr "" + +#: forum/urls.py:82 +msgid "markread/" +msgstr "" + +#: forum/urls.py:84 +msgid "nimda/" +msgstr "" + +#: forum/urls.py:86 +msgid "upload/" +msgstr "" + +#: forum/urls.py:87 +msgid "search/" +msgstr "" + +#: forum/urls.py:88 +msgid "feedback/" +msgstr "" + +#: forum/urls.py:93 forum/urls.py:94 forum/urls.py:95 forum/urls.py:96 +#: forum/urls.py:97 forum/urls.py:98 forum/urls.py:100 forum/urls.py:102 +#: forum_modules/localauth/urls.py:7 +msgid "account/" +msgstr "" + +#: forum/urls.py:93 forum/urls.py:95 forum/urls.py:96 +msgid "signin/" +msgstr "" + +#: forum/urls.py:94 +msgid "signout/" +msgstr "" + +#: forum/urls.py:97 +msgid "done/" +msgstr "" + +#: forum/urls.py:98 forum_modules/localauth/urls.py:7 +msgid "register/" +msgstr "" + +#: forum/urls.py:100 +msgid "password/" +msgstr "" + +#: forum/authentication/forms.py:17 +msgid "okay, let's try!" +msgstr "" + +#: forum/authentication/forms.py:18 +msgid "no OSQA community email please, thanks" +msgstr "" + +#: forum/authentication/forms.py:21 +msgid "please choose one of the options above" +msgstr "" + +#: forum/management/commands/send_email_alerts.py:156 +msgid "email update message subject" +msgstr "news from Q&A forum" + +#: forum/management/commands/send_email_alerts.py:158 +#, python-format +msgid "%(name)s, this is an update message header for a question" +msgid_plural "%(name)s, this is an update message header for %(num)d questions" +msgstr[0] "" +"

    Dear %(name)s,

    The following question has been updated on the Q&A " +"forum:

    " +msgstr[1] "" +"

    Dear %(name)s,

    The following %(num)d questions have been updated on " +"the Q&A forum:

    " + +#: forum/management/commands/send_email_alerts.py:169 +msgid "new question" +msgstr "" + +#: forum/management/commands/send_email_alerts.py:179 +#, python-format +msgid "There is also one question which was recently " +msgid_plural "" +"There are also %(num)d more questions which were recently updated " +msgstr[0] "" +msgstr[1] "" + +#: forum/management/commands/send_email_alerts.py:184 +msgid "" +"Perhaps you could look up previously sent forum reminders in your mailbox." +msgstr "" + +#: forum/management/commands/send_email_alerts.py:188 +#, python-format +msgid "" +"go to %(link)s to change frequency of email updates or %(email)s " +"administrator" +msgstr "" +"

    Please remember that you can always adjust " +"frequency of the email updates or turn them off entirely.
    If you believe " +"that this message was sent in an error, please email about it the forum " +"administrator at %(email)s.

    Sincerely,

    Your friendly Q&A forum " +"server.

    " + +#: forum/middleware/anon_user.py:34 +#, python-format +msgid "First time here? Check out the FAQ!" +msgstr "" + +#: forum/models/question.py:247 +#, python-format +msgid "%(author)s modified the question" +msgstr "" + +#: forum/models/question.py:251 +#, python-format +msgid "%(people)s posted %(new_answer_count)s new answers" +msgstr "" + +#: forum/models/question.py:256 +#, python-format +msgid "%(people)s commented the question" +msgstr "" + +#: forum/models/question.py:261 +#, python-format +msgid "%(people)s commented answers" +msgstr "" + +#: forum/models/question.py:263 +#, python-format +msgid "%(people)s commented an answer" +msgstr "" + +#: forum/models/repute.py:13 forum/skins/default/templates/badges.html:53 +msgid "gold" +msgstr "" + +#: forum/models/repute.py:14 forum/skins/default/templates/badges.html:61 +msgid "silver" +msgstr "" + +#: forum/models/repute.py:15 forum/skins/default/templates/badges.html:68 +msgid "bronze" +msgstr "" + +#: forum/models/tag.py:79 +msgid "interesting" +msgstr "" + +#: forum/models/tag.py:79 +msgid "ignored" +msgstr "" + +#: forum/models/user.py:33 +msgid "Entire forum" +msgstr "" + +#: forum/models/user.py:34 +msgid "Questions that I asked" +msgstr "" + +#: forum/models/user.py:35 +msgid "Questions that I answered" +msgstr "" + +#: forum/models/user.py:36 +msgid "Individually selected questions" +msgstr "" + +#: forum/models/user.py:39 +msgid "Weekly" +msgstr "" + +#: forum/models/user.py:40 +msgid "Daily" +msgstr "" + +#: forum/models/user.py:41 +msgid "No email" +msgstr "" + +#: forum/skins/default/templates/404.html:24 +msgid "Sorry, could not find the page you requested." +msgstr "" + +#: forum/skins/default/templates/404.html:26 +msgid "This might have happened for the following reasons:" +msgstr "" + +#: forum/skins/default/templates/404.html:28 +msgid "this question or answer has been deleted;" +msgstr "" + +#: forum/skins/default/templates/404.html:29 +msgid "url has error - please check it;" +msgstr "" + +#: forum/skins/default/templates/404.html:30 +msgid "" +"the page you tried to visit is protected or you don't have sufficient " +"points, see" +msgstr "" + +#: forum/skins/default/templates/404.html:31 +msgid "if you believe this error 404 should not have occured, please" +msgstr "" + +#: forum/skins/default/templates/404.html:32 +msgid "report this problem" +msgstr "" + +#: forum/skins/default/templates/404.html:41 +#: forum/skins/default/templates/500.html:27 +msgid "back to previous page" +msgstr "" + +#: forum/skins/default/templates/404.html:42 +msgid "see all questions" +msgstr "" + +#: forum/skins/default/templates/404.html:43 +msgid "see all tags" +msgstr "" + +#: forum/skins/default/templates/500.html:22 +msgid "sorry, system error" +msgstr "" + +#: forum/skins/default/templates/500.html:24 +msgid "system error log is recorded, error will be fixed as soon as possible" +msgstr "" + +#: forum/skins/default/templates/500.html:25 +msgid "please report the error to the site administrators if you wish" +msgstr "" + +#: forum/skins/default/templates/500.html:28 +msgid "see latest questions" +msgstr "" + +#: forum/skins/default/templates/500.html:29 +msgid "see tags" +msgstr "" + +#: forum/skins/default/templates/about.html:6 +#: forum/skins/default/templates/about.html:11 +msgid "About" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:4 +#: forum/skins/default/templates/authopenid/settings.html:4 +msgid "Account functions" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:29 +#: forum/skins/default/templates/changepw.html:5 +#: forum/skins/default/templates/changepw.html:14 +#: forum/skins/default/templates/authopenid/changepw.html:5 +#: forum/skins/default/templates/authopenid/changepw.html:14 +#: forum/skins/default/templates/authopenid/settings.html:29 +msgid "Change password" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:30 +#: forum/skins/default/templates/authopenid/settings.html:30 +msgid "Give your account a new password." +msgstr "" + +#: forum/skins/default/templates/account_settings.html:32 +#: forum/skins/default/templates/authopenid/settings.html:31 +msgid "Change email " +msgstr "" + +#: forum/skins/default/templates/account_settings.html:33 +#: forum/skins/default/templates/authopenid/settings.html:32 +msgid "Add or update the email address associated with your account." +msgstr "" + +#: forum/skins/default/templates/account_settings.html:35 +#: forum/skins/default/templates/authopenid/changeopenid.html:4 +#: forum/skins/default/templates/authopenid/changeopenid.html:30 +#: forum/skins/default/templates/authopenid/settings.html:34 +msgid "Change OpenID" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:36 +#: forum/skins/default/templates/authopenid/settings.html:35 +msgid "Change openid associated to your account" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:39 +#: forum/skins/default/templates/authopenid/delete.html:4 +#: forum/skins/default/templates/authopenid/settings.html:38 +msgid "Delete account" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:40 +#: forum/skins/default/templates/authopenid/settings.html:39 +msgid "Erase your username and all your data from website" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:5 +#: forum/skins/default/templates/answer_edit.html:48 +msgid "Edit answer" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:25 +#: forum/skins/default/templates/answer_edit.html:28 +#: forum/skins/default/templates/ask.html:26 +#: forum/skins/default/templates/ask.html:29 +#: forum/skins/default/templates/question.html:45 +#: forum/skins/default/templates/question.html:48 +#: forum/skins/default/templates/question_edit.html:25 +#: forum/skins/default/templates/question_edit.html:28 +msgid "hide preview" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:28 +#: forum/skins/default/templates/ask.html:29 +#: forum/skins/default/templates/question.html:48 +#: forum/skins/default/templates/question_edit.html:28 +msgid "show preview" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:48 +#: forum/skins/default/templates/question_edit.html:66 +#: forum/skins/default/templates/question_retag.html:53 +#: forum/skins/default/templates/revisions_answer.html:38 +#: forum/skins/default/templates/revisions_question.html:38 +msgid "back" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:53 +#: forum/skins/default/templates/question_edit.html:71 +#: forum/skins/default/templates/revisions_answer.html:52 +#: forum/skins/default/templates/revisions_question.html:52 +msgid "revision" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:56 +#: forum/skins/default/templates/question_edit.html:75 +msgid "select revision" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:63 +#: forum/skins/default/templates/ask.html:97 +#: forum/skins/default/templates/question.html:432 +#: forum/skins/default/templates/question_edit.html:92 +msgid "Toggle the real time Markdown editor preview" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:63 +#: forum/skins/default/templates/ask.html:97 +#: forum/skins/default/templates/question.html:433 +#: forum/skins/default/templates/question_edit.html:92 +msgid "toggle preview" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:72 +#: forum/skins/default/templates/question_edit.html:118 +#: forum/skins/default/templates/question_retag.html:74 +msgid "Save edit" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:73 +#: forum/skins/default/templates/close.html:29 +#: forum/skins/default/templates/feedback.html:50 +#: forum/skins/default/templates/question_edit.html:119 +#: forum/skins/default/templates/question_retag.html:75 +#: forum/skins/default/templates/reopen.html:30 +#: forum/skins/default/templates/user_edit.html:87 +#: forum/skins/default/templates/authopenid/changeemail.html:40 +msgid "Cancel" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:4 +msgid "answer tips" +msgstr "Tips" + +#: forum/skins/default/templates/answer_edit_tips.html:7 +msgid "please make your answer relevant to this community" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:10 +msgid "try to give an answer, rather than engage into a discussion" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:13 +msgid "please try to provide details" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:16 +#: forum/skins/default/templates/question_edit_tips.html:13 +msgid "be clear and concise" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:20 +#: forum/skins/default/templates/question_edit_tips.html:17 +msgid "see frequently asked questions" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:26 +#: forum/skins/default/templates/question_edit_tips.html:23 +msgid "Markdown tips" +msgstr "Markdown basics" + +#: forum/skins/default/templates/answer_edit_tips.html:29 +#: forum/skins/default/templates/question_edit_tips.html:26 +msgid "*italic* or __italic__" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:32 +#: forum/skins/default/templates/question_edit_tips.html:29 +msgid "**bold** or __bold__" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:35 +#: forum/skins/default/templates/question_edit_tips.html:32 +msgid "link" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:35 +#: forum/skins/default/templates/answer_edit_tips.html:39 +#: forum/skins/default/templates/question_edit_tips.html:32 +#: forum/skins/default/templates/question_edit_tips.html:37 +msgid "text" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:39 +#: forum/skins/default/templates/question_edit_tips.html:37 +msgid "image" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:43 +#: forum/skins/default/templates/question_edit_tips.html:41 +msgid "numbered list:" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:48 +#: forum/skins/default/templates/question_edit_tips.html:46 +msgid "basic HTML tags are also supported" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:52 +#: forum/skins/default/templates/question_edit_tips.html:50 +msgid "learn more about Markdown" +msgstr "" + +#: forum/skins/default/templates/ask.html:5 +#: forum/skins/default/templates/ask.html:61 +msgid "Ask a question" +msgstr "" + +#: forum/skins/default/templates/ask.html:68 +msgid "login to post question info" +msgstr "" +"You are welcome to start submitting your question " +"anonymously. When you submit the post, you will be redirected to the " +"login/signup page. Your question will be saved in the current session and " +"will be published after you log in. Login/signup process is very simple. " +"Login takes about 30 seconds, initial signup takes a minute or less." + +#: forum/skins/default/templates/ask.html:74 +#, python-format +msgid "" +"must have valid %(email)s to post, \n" +" see %(email_validation_faq_url)s\n" +" " +msgstr "" +"Looks like your email address, %(email)s has not " +"yet been validated. To post messages you must verify your email, " +"please see more details here." +"
    You can submit your question now and validate email after that. Your " +"question will saved as pending meanwhile. " + +#: forum/skins/default/templates/ask.html:112 +msgid "(required)" +msgstr "" + +#: forum/skins/default/templates/ask.html:119 +msgid "Login/signup to post your question" +msgstr "Login/Signup to Post" + +#: forum/skins/default/templates/ask.html:121 +msgid "Ask your question" +msgstr "Ask Your Question" + +#: forum/skins/default/templates/badge.html:6 +#: forum/skins/default/templates/badge.html:17 +msgid "Badge" +msgstr "" + +#: forum/skins/default/templates/badge.html:26 +msgid "The users have been awarded with badges:" +msgstr "" + +#: forum/skins/default/templates/badges.html:6 +msgid "Badges summary" +msgstr "" + +#: forum/skins/default/templates/badges.html:17 +msgid "Badges" +msgstr "" + +#: forum/skins/default/templates/badges.html:21 +msgid "Community gives you awards for your questions, answers and votes." +msgstr "" +"If your questions and answers are highly voted, your contribution to this " +"Q&A community will be recognized with the variety of badges." + +#: forum/skins/default/templates/badges.html:22 +#, python-format +msgid "" +"Below is the list of available badges and number \n" +" of times each type of badge has been awarded. Give us feedback at %" +"(feedback_faq_url)s.\n" +" " +msgstr "" +"Currently badges differ only by their level: gold, " +"silver and bronze (their meanings are " +"described on the right). In the future there will be many types of badges at " +"each level. Please give us your feedback - what kinds of badges would you like to see and " +"suggest the activity for which those badges might be awarded." + +#: forum/skins/default/templates/badges.html:50 +msgid "Community badges" +msgstr "Badge levels" + +#: forum/skins/default/templates/badges.html:56 +msgid "gold badge description" +msgstr "" +"Gold badge is the highest award in this community. To obtain it have to show " +"profound knowledge and ability in addition to your active participation." + +#: forum/skins/default/templates/badges.html:64 +msgid "silver badge description" +msgstr "" +"Obtaining silver badge requires significant patience. If you have received " +"one, that means you have greatly contributed to this community." + +#: forum/skins/default/templates/badges.html:67 +msgid "bronze badge: often given as a special honor" +msgstr "" + +#: forum/skins/default/templates/badges.html:71 +msgid "bronze badge description" +msgstr "" +"If you are an active participant in this community, you will be recognized " +"with this badge." + +#: forum/skins/default/templates/book.html:7 +msgid "reading channel" +msgstr "" + +#: forum/skins/default/templates/book.html:26 +msgid "[author]" +msgstr "" + +#: forum/skins/default/templates/book.html:30 +msgid "[publisher]" +msgstr "" + +#: forum/skins/default/templates/book.html:34 +msgid "[publication date]" +msgstr "" + +#: forum/skins/default/templates/book.html:38 +msgid "[price]" +msgstr "" + +#: forum/skins/default/templates/book.html:39 +msgid "currency unit" +msgstr "" + +#: forum/skins/default/templates/book.html:42 +msgid "[pages]" +msgstr "" + +#: forum/skins/default/templates/book.html:43 +msgid "pages abbreviation" +msgstr "" + +#: forum/skins/default/templates/book.html:46 +msgid "[tags]" +msgstr "" + +#: forum/skins/default/templates/book.html:56 +msgid "author blog" +msgstr "" + +#: forum/skins/default/templates/book.html:62 +msgid "book directory" +msgstr "" + +#: forum/skins/default/templates/book.html:66 +msgid "buy online" +msgstr "" + +#: forum/skins/default/templates/book.html:79 +msgid "reader questions" +msgstr "" + +#: forum/skins/default/templates/book.html:82 +msgid "ask the author" +msgstr "" + +#: forum/skins/default/templates/book.html:88 +#: forum/skins/default/templates/book.html:93 +#: forum/skins/default/templates/users_questions.html:18 +msgid "this question was selected as favorite" +msgstr "" + +#: forum/skins/default/templates/book.html:88 +#: forum/skins/default/templates/book.html:93 +#: forum/skins/default/templates/users_questions.html:11 +#: forum/skins/default/templates/users_questions.html:18 +msgid "number of times" +msgstr "" + +#: forum/skins/default/templates/book.html:105 +#: forum/skins/default/templates/index.html:40 +#: forum/skins/default/templates/index_.html:40 +#: forum/skins/default/templates/question_summary_list_roll.html:14 +#: forum/skins/default/templates/questions.html:80 +#: forum/skins/default/templates/users_questions.html:32 +msgid "votes" +msgstr "" + +#: forum/skins/default/templates/book.html:108 +msgid "the answer has been accepted to be correct" +msgstr "" + +#: forum/skins/default/templates/book.html:115 +#: forum/skins/default/templates/index.html:48 +#: forum/skins/default/templates/index_.html:48 +#: forum/skins/default/templates/question_summary_list_roll.html:15 +#: forum/skins/default/templates/questions.html:81 +#: forum/skins/default/templates/users_questions.html:40 +msgid "views" +msgstr "" + +#: forum/skins/default/templates/book.html:125 +#: forum/skins/default/templates/index.html:63 +#: forum/skins/default/templates/index_.html:63 +#: forum/skins/default/templates/question.html:478 +#: forum/skins/default/templates/question_summary_list_roll.html:52 +#: forum/skins/default/templates/questions.html:136 +#: forum/skins/default/templates/tags.html:49 +#: forum/skins/default/templates/users_questions.html:52 +msgid "using tags" +msgstr "" + +#: forum/skins/default/templates/book.html:147 +msgid "subscribe to book RSS feed" +msgstr "" + +#: forum/skins/default/templates/book.html:147 +#: forum/skins/default/templates/index.html:114 +#: forum/skins/default/templates/index_.html:114 +msgid "subscribe to the questions feed" +msgstr "" + +#: forum/skins/default/templates/changepw.html:7 +#: forum/skins/default/templates/authopenid/changepw.html:7 +msgid "Account: change password" +msgstr "Change your password" + +#: forum/skins/default/templates/changepw.html:8 +#: forum/skins/default/templates/authopenid/changepw.html:8 +msgid "This is where you can change your password. Make sure you remember it!" +msgstr "" +"To change your password please fill out and " +"submit this form" + +#: forum/skins/default/templates/close.html:6 +#: forum/skins/default/templates/close.html:16 +msgid "Close question" +msgstr "" + +#: forum/skins/default/templates/close.html:19 +msgid "Close the question" +msgstr "" + +#: forum/skins/default/templates/close.html:25 +msgid "Reasons" +msgstr "" + +#: forum/skins/default/templates/close.html:28 +msgid "OK to close" +msgstr "" + +#: forum/skins/default/templates/faq.html:11 +msgid "Frequently Asked Questions " +msgstr "" + +#: forum/skins/default/templates/faq.html:16 +msgid "What kinds of questions can I ask here?" +msgstr "" + +#: forum/skins/default/templates/faq.html:17 +msgid "" +"Most importanly - questions should be relevant to this " +"community." +msgstr "" + +#: forum/skins/default/templates/faq.html:18 +msgid "" +"Before asking the question - please make sure to use search to see whether " +"your question has alredy been answered." +msgstr "" +"Before you ask - please make sure to search for a similar question. You can " +"search questions by their title or tags." + +#: forum/skins/default/templates/faq.html:21 +msgid "What questions should I avoid asking?" +msgstr "What kinds of questions should be avoided?" + +#: forum/skins/default/templates/faq.html:22 +msgid "" +"Please avoid asking questions that are not relevant to this community, too " +"subjective and argumentative." +msgstr "" + +#: forum/skins/default/templates/faq.html:27 +msgid "What should I avoid in my answers?" +msgstr "" + +#: forum/skins/default/templates/faq.html:28 +msgid "" +"is a Q&A site, not a discussion group. Therefore - please avoid having " +"discussions in your answers, comment facility allows some space for brief " +"discussions." +msgstr "" +"is a question and answer site - it is not a " +"discussion group. Please avoid holding debates in your answers as " +"they tend to dilute the essense of questions and answers. For the brief " +"discussions please use commenting facility." + +#: forum/skins/default/templates/faq.html:32 +msgid "Who moderates this community?" +msgstr "" + +#: forum/skins/default/templates/faq.html:33 +msgid "The short answer is: you." +msgstr "" + +#: forum/skins/default/templates/faq.html:34 +msgid "This website is moderated by the users." +msgstr "" + +#: forum/skins/default/templates/faq.html:35 +msgid "" +"The reputation system allows users earn the authorization to perform a " +"variety of moderation tasks." +msgstr "" +"Karma system allows users to earn rights to perform a variety of moderation " +"tasks" + +#: forum/skins/default/templates/faq.html:40 +msgid "How does reputation system work?" +msgstr "How does karma system work?" + +#: forum/skins/default/templates/faq.html:41 +msgid "Rep system summary" +msgstr "" +"When a question or answer is upvoted, the user who posted them will gain " +"some points, which are called \"karma points\". These points serve as a " +"rough measure of the community trust to him/her. Various moderation tasks " +"are gradually assigned to the users based on those points." + +#: forum/skins/default/templates/faq.html:42 +msgid "" +"For example, if you ask an interesting question or give a helpful answer, " +"your input will be upvoted. On the other hand if the answer is misleading - " +"it will be downvoted. Each vote in favor will generate 10 " +"points, each vote against will subtract 2 points. There is " +"a limit of 200 points that can be accumulated per question " +"or answer. The table below explains reputation point requirements for each " +"type of moderation task." +msgstr "" + +#: forum/skins/default/templates/faq.html:53 +#: forum/skins/default/templates/user_votes.html:15 +msgid "upvote" +msgstr "" + +#: forum/skins/default/templates/faq.html:57 +msgid "use tags" +msgstr "" + +#: forum/skins/default/templates/faq.html:62 +msgid "add comments" +msgstr "" + +#: forum/skins/default/templates/faq.html:66 +#: forum/skins/default/templates/user_votes.html:17 +msgid "downvote" +msgstr "" + +#: forum/skins/default/templates/faq.html:69 +msgid "open and close own questions" +msgstr "" + +#: forum/skins/default/templates/faq.html:73 +msgid "retag questions" +msgstr "" + +#: forum/skins/default/templates/faq.html:78 +msgid "edit community wiki questions" +msgstr "" + +#: forum/skins/default/templates/faq.html:83 +msgid "edit any answer" +msgstr "" + +#: forum/skins/default/templates/faq.html:87 +msgid "open any closed question" +msgstr "" + +#: forum/skins/default/templates/faq.html:91 +msgid "delete any comment" +msgstr "" + +#: forum/skins/default/templates/faq.html:95 +msgid "delete any questions and answers and perform other moderation tasks" +msgstr "" + +#: forum/skins/default/templates/faq.html:103 +msgid "how to validate email title" +msgstr "How to validate email and why?" + +#: forum/skins/default/templates/faq.html:105 +#, python-format +msgid "" +"how to validate email info with %(send_email_key_url)s %(gravatar_faq_url)s" +msgstr "" +"

    How? If you have just set or changed your " +"email address - check your email and click the included link.
    The link contains a key generated specifically for you. You can " +"also and check your email again.

    Why? Email validation is required to make sure that " +"only you can post messages on your behalf and to " +"minimize spam posts.
    With email you can " +"subscribe for updates on the most interesting questions. " +"Also, when you sign up for the first time - create a unique gravatar personal image.

    " + +#: forum/skins/default/templates/faq.html:110 +msgid "what is gravatar" +msgstr "What is gravatar?" + +#: forum/skins/default/templates/faq.html:111 +msgid "gravatar faq info" +msgstr "" +"Gravatar means globally recognized avatar - your unique avatar image " +"associated with your email address. It's simply a picture that shows next to " +"your posts on the websites that support gravatar protocol. By default gravar " +"appears as a square filled with a snowflake-like figure. You can set " +"your image at gravatar.com" + +#: forum/skins/default/templates/faq.html:114 +msgid "To register, do I need to create new password?" +msgstr "" + +#: forum/skins/default/templates/faq.html:115 +msgid "" +"No, you don't have to. You can login through any service that supports " +"OpenID, e.g. Google, Yahoo, AOL, etc." +msgstr "" + +#: forum/skins/default/templates/faq.html:116 +msgid "Login now!" +msgstr "" + +#: forum/skins/default/templates/faq.html:121 +msgid "Why other people can edit my questions/answers?" +msgstr "" + +#: forum/skins/default/templates/faq.html:122 +msgid "Goal of this site is..." +msgstr "" + +#: forum/skins/default/templates/faq.html:122 +msgid "" +"So questions and answers can be edited like wiki pages by experienced users " +"of this site and this improves the overall quality of the knowledge base " +"content." +msgstr "" + +#: forum/skins/default/templates/faq.html:123 +msgid "If this approach is not for you, we respect your choice." +msgstr "" + +#: forum/skins/default/templates/faq.html:127 +msgid "Still have questions?" +msgstr "" + +#: forum/skins/default/templates/faq.html:128 +#, python-format +msgid "" +"Please ask your question at %(ask_question_url)s, help make our community " +"better!" +msgstr "" +"Please ask your question, help make our " +"community better!" + +#: forum/skins/default/templates/faq.html:130 +#: forum/skins/default/templates/header.html:27 +#: forum/skins/default/templates/header.html:55 +msgid "questions" +msgstr "" + +#: forum/skins/default/templates/faq.html:130 +#: forum/skins/default/templates/index.html:121 +#: forum/skins/default/templates/index_.html:121 +msgid "." +msgstr "" + +#: forum/skins/default/templates/feedback.html:6 +msgid "Feedback" +msgstr "" + +#: forum/skins/default/templates/feedback.html:11 +msgid "Give us your feedback!" +msgstr "" + +#: forum/skins/default/templates/feedback.html:17 +#, python-format +msgid "" +"\n" +" Dear %(user_name)s, we look " +"forward to hearing your feedback. \n" +" Please type and send us your message below.\n" +" " +msgstr "" + +#: forum/skins/default/templates/feedback.html:24 +msgid "" +"\n" +" Dear visitor, we look forward to " +"hearing your feedback.\n" +" Please type and send us your message below.\n" +" " +msgstr "" + +#: forum/skins/default/templates/feedback.html:41 +msgid "(this field is required)" +msgstr "" + +#: forum/skins/default/templates/feedback.html:49 +msgid "Send Feedback" +msgstr "" + +#: forum/skins/default/templates/feedback_email.txt:3 +#, python-format +msgid "" +"\n" +"Hello, this is a %(site_title)s forum feedback message\n" +msgstr "" + +#: forum/skins/default/templates/feedback_email.txt:9 +msgid "Sender is" +msgstr "" + +#: forum/skins/default/templates/feedback_email.txt:11 +#: forum/skins/default/templates/feedback_email.txt:14 +msgid "email" +msgstr "" + +#: forum/skins/default/templates/feedback_email.txt:13 +msgid "anonymous" +msgstr "" + +#: forum/skins/default/templates/feedback_email.txt:19 +msgid "Message body:" +msgstr "" + +#: forum/skins/default/templates/footer.html:8 +#: forum/skins/default/templates/header.html:13 +#: forum/skins/default/templates/index.html:77 +#: forum/skins/default/templates/index_.html:77 +msgid "about" +msgstr "" + +#: forum/skins/default/templates/footer.html:9 +#: forum/skins/default/templates/header.html:14 +#: forum/skins/default/templates/index.html:78 +#: forum/skins/default/templates/index_.html:78 +#: forum/skins/default/templates/question_edit_tips.html:17 +msgid "faq" +msgstr "" + +#: forum/skins/default/templates/footer.html:10 +msgid "privacy policy" +msgstr "" + +#: forum/skins/default/templates/footer.html:19 +msgid "give feedback" +msgstr "" + +#: forum/skins/default/templates/header.html:9 +msgid "logout" +msgstr "" + +#: forum/skins/default/templates/header.html:11 +msgid "login" +msgstr "" + +#: forum/skins/default/templates/header.html:21 +msgid "back to home page" +msgstr "" + +#: forum/skins/default/templates/header.html:29 +#: forum/skins/default/templates/header.html:57 +msgid "users" +msgstr "" + +#: forum/skins/default/templates/header.html:31 +msgid "books" +msgstr "" + +#: forum/skins/default/templates/header.html:33 +#: forum/templatetags/extra_tags.py:165 forum/templatetags/extra_tags.py:194 +msgid "badges" +msgstr "" + +#: forum/skins/default/templates/header.html:34 +msgid "unanswered questions" +msgstr "unanswered" + +#: forum/skins/default/templates/header.html:36 +msgid "ask a question" +msgstr "" + +#: forum/skins/default/templates/header.html:51 +msgid "search" +msgstr "" + +#: forum/skins/default/templates/index.html:8 +#: forum/skins/default/templates/index_.html:8 +msgid "Home" +msgstr "" + +#: forum/skins/default/templates/index.html:25 +#: forum/skins/default/templates/index_.html:25 +#: forum/skins/default/templates/questions.html:8 +msgid "Questions" +msgstr "" + +#: forum/skins/default/templates/index.html:27 +#: forum/skins/default/templates/index_.html:27 +msgid "last updated questions" +msgstr "" + +#: forum/skins/default/templates/index.html:27 +#: forum/skins/default/templates/index_.html:27 +#: forum/skins/default/templates/questions.html:47 +msgid "newest" +msgstr "" + +#: forum/skins/default/templates/index.html:28 +#: forum/skins/default/templates/index_.html:28 +#: forum/skins/default/templates/questions.html:49 +msgid "hottest questions" +msgstr "" + +#: forum/skins/default/templates/index.html:28 +#: forum/skins/default/templates/index_.html:28 +#: forum/skins/default/templates/questions.html:49 +msgid "hottest" +msgstr "" + +#: forum/skins/default/templates/index.html:29 +#: forum/skins/default/templates/index_.html:29 +#: forum/skins/default/templates/questions.html:50 +msgid "most voted questions" +msgstr "" + +#: forum/skins/default/templates/index.html:29 +#: forum/skins/default/templates/index_.html:29 +#: forum/skins/default/templates/questions.html:50 +msgid "most voted" +msgstr "" + +#: forum/skins/default/templates/index.html:30 +#: forum/skins/default/templates/index_.html:30 +msgid "all questions" +msgstr "" + +#: forum/skins/default/templates/index.html:42 +#: forum/skins/default/templates/index_.html:42 +#: forum/skins/default/templates/users_questions.html:34 +msgid "this answer has been accepted to be correct" +msgstr "" + +#: forum/skins/default/templates/index.html:44 +#: forum/skins/default/templates/index_.html:44 +#: forum/skins/default/templates/question_summary_list_roll.html:13 +#: forum/skins/default/templates/questions.html:79 +#: forum/skins/default/templates/users_questions.html:36 +msgid "answers" +msgstr "" + +#: forum/skins/default/templates/index.html:63 +#: forum/skins/default/templates/index_.html:63 +#: forum/skins/default/templates/question.html:478 +#: forum/skins/default/templates/question_summary_list_roll.html:52 +#: forum/skins/default/templates/questions.html:136 +#: forum/skins/default/templates/tags.html:49 +#: forum/skins/default/templates/users_questions.html:52 +msgid "see questions tagged" +msgstr "" + +#: forum/skins/default/templates/index.html:74 +#: forum/skins/default/templates/index_.html:74 +msgid "welcome to website" +msgstr "Welcome to Q&A forum" + +#: forum/skins/default/templates/index.html:85 +#: forum/skins/default/templates/index_.html:85 +msgid "Recent tags" +msgstr "" + +#: forum/skins/default/templates/index.html:90 +#: forum/skins/default/templates/index_.html:90 +#: forum/skins/default/templates/question.html:133 +#, python-format +msgid "see questions tagged '%(tagname)s'" +msgstr "" + +#: forum/skins/default/templates/index.html:93 +#: forum/skins/default/templates/index.html:121 +#: forum/skins/default/templates/index_.html:93 +#: forum/skins/default/templates/index_.html:121 +msgid "popular tags" +msgstr "tags" + +#: forum/skins/default/templates/index.html:98 +#: forum/skins/default/templates/index_.html:98 +msgid "Recent awards" +msgstr "Recent badges" + +#: forum/skins/default/templates/index.html:104 +msgid "given to" +msgstr "" + +#: forum/skins/default/templates/index.html:109 +#: forum/skins/default/templates/index_.html:109 +msgid "all awards" +msgstr "all badges" + +#: forum/skins/default/templates/index.html:114 +#: forum/skins/default/templates/index_.html:114 +msgid "subscribe to last 30 questions by RSS" +msgstr "" + +#: forum/skins/default/templates/index.html:121 +#: forum/skins/default/templates/index_.html:121 +msgid "Still looking for more? See" +msgstr "" + +#: forum/skins/default/templates/index.html:121 +#: forum/skins/default/templates/index_.html:121 +msgid "complete list of questions" +msgstr "list of all questions" + +#: forum/skins/default/templates/index.html:121 +#: forum/skins/default/templates/index_.html:121 +#: forum/skins/default/templates/auth/signup.html:28 +#: forum/skins/default/templates/authopenid/signup.html:28 +msgid "or" +msgstr "" + +#: forum/skins/default/templates/index.html:121 +#: forum/skins/default/templates/index_.html:121 +msgid "Please help us answer" +msgstr "" + +#: forum/skins/default/templates/index.html:121 +#: forum/skins/default/templates/index_.html:121 +msgid "list of unanswered questions" +msgstr "unanswered questions" + +#: forum/skins/default/templates/logout.html:6 +#: forum/skins/default/templates/logout.html:16 +msgid "Logout" +msgstr "" + +#: forum/skins/default/templates/logout.html:19 +msgid "" +"As a registered user you can login with your OpenID, log out of the site or " +"permanently remove your account." +msgstr "" +"Clicking Logout will log you out from the forumbut will not " +"sign you off from your OpenID provider.

    If you wish to sign off " +"completely - please make sure to log out from your OpenID provider as well." + +#: forum/skins/default/templates/logout.html:20 +msgid "Logout now" +msgstr "Logout Now" + +#: forum/skins/default/templates/notarobot.html:3 +msgid "Please prove that you are a Human Being" +msgstr "" + +#: forum/skins/default/templates/notarobot.html:10 +msgid "I am a Human Being" +msgstr "" + +#: forum/skins/default/templates/pagesize.html:6 +msgid "posts per page" +msgstr "" + +#: forum/skins/default/templates/paginator.html:6 +#: forum/skins/default/templates/paginator.html:7 +msgid "previous" +msgstr "" + +#: forum/skins/default/templates/paginator.html:19 +msgid "current page" +msgstr "" + +#: forum/skins/default/templates/paginator.html:22 +#: forum/skins/default/templates/paginator.html:29 +msgid "page number " +msgstr "" + +#: forum/skins/default/templates/paginator.html:22 +#: forum/skins/default/templates/paginator.html:29 +msgid "number - make blank in english" +msgstr "" + +#: forum/skins/default/templates/paginator.html:33 +msgid "next page" +msgstr "" + +#: forum/skins/default/templates/post_contributor_info.html:9 +#, python-format +msgid "" +"\n" +" one revision\n" +" " +msgid_plural "" +"\n" +" %(rev_count)s revisions\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/post_contributor_info.html:19 +msgid "asked" +msgstr "" + +#: forum/skins/default/templates/post_contributor_info.html:22 +msgid "answered" +msgstr "" + +#: forum/skins/default/templates/post_contributor_info.html:24 +msgid "posted" +msgstr "" + +#: forum/skins/default/templates/post_contributor_info.html:45 +msgid "updated" +msgstr "" + +#: forum/skins/default/templates/privacy.html:6 +#: forum/skins/default/templates/privacy.html:11 +msgid "Privacy policy" +msgstr "" + +#: forum/skins/default/templates/privacy.html:15 +msgid "general message about privacy" +msgstr "" +"Respecting users privacy is an important core principle of this Q&A " +"forum. Information on this page details how this forum protects your " +"privacy, and what type of information is collected." + +#: forum/skins/default/templates/privacy.html:18 +msgid "Site Visitors" +msgstr "" + +#: forum/skins/default/templates/privacy.html:20 +msgid "what technical information is collected about visitors" +msgstr "" +"Information on question views, revisions of questions and answers - both " +"times and content are recorded for each user in order to correctly count " +"number of views, maintain data integrity and report relevant updates." + +#: forum/skins/default/templates/privacy.html:23 +msgid "Personal Information" +msgstr "" + +#: forum/skins/default/templates/privacy.html:25 +msgid "details on personal information policies" +msgstr "" +"Members of this community may choose to display personally identifiable " +"information in their profiles. Forum will never display such information " +"without a request from the user." + +#: forum/skins/default/templates/privacy.html:28 +msgid "Other Services" +msgstr "" + +#: forum/skins/default/templates/privacy.html:30 +msgid "details on sharing data with third parties" +msgstr "" +"None of the data that is not openly shown on the forum by the choice of the " +"user is shared with any third party." + +#: forum/skins/default/templates/privacy.html:35 +msgid "cookie policy details" +msgstr "" +"Forum software relies on the internet cookie technology to keep track of " +"user sessions. Cookies must be enabled in your browser so that forum can " +"work for you." + +#: forum/skins/default/templates/privacy.html:37 +msgid "Policy Changes" +msgstr "" + +#: forum/skins/default/templates/privacy.html:38 +msgid "how privacy policies can be changed" +msgstr "" +"These policies may be adjusted to improve protection of user's privacy. " +"Whenever such changes occur, users will be notified via the internal " +"messaging system. " + +#: forum/skins/default/templates/question.html:77 +#: forum/skins/default/templates/question.html:78 +#: forum/skins/default/templates/question.html:94 +#: forum/skins/default/templates/question.html:96 +msgid "i like this post (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:80 +#: forum/skins/default/templates/question.html:98 +#: forum/skins/default/templates/question.html:255 +msgid "current number of votes" +msgstr "" + +#: forum/skins/default/templates/question.html:89 +#: forum/skins/default/templates/question.html:90 +#: forum/skins/default/templates/question.html:103 +#: forum/skins/default/templates/question.html:104 +msgid "i dont like this post (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:108 +#: forum/skins/default/templates/question.html:109 +msgid "mark this question as favorite (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:115 +#: forum/skins/default/templates/question.html:116 +msgid "remove favorite mark from this question (click again to restore mark)" +msgstr "" + +#: forum/skins/default/templates/question.html:138 +#: forum/skins/default/templates/question.html:292 +#: forum/skins/default/templates/revisions_answer.html:58 +#: forum/skins/default/templates/revisions_question.html:58 +msgid "edit" +msgstr "" + +#: forum/skins/default/templates/question.html:143 +msgid "reopen" +msgstr "" + +#: forum/skins/default/templates/question.html:147 +msgid "close" +msgstr "" + +#: forum/skins/default/templates/question.html:153 +#: forum/skins/default/templates/question.html:297 +msgid "" +"report as offensive (i.e containing spam, advertising, malicious text, etc.)" +msgstr "" + +#: forum/skins/default/templates/question.html:154 +#: forum/skins/default/templates/question.html:298 +msgid "flag offensive" +msgstr "" + +#: forum/skins/default/templates/question.html:162 +#: forum/skins/default/templates/question.html:309 +msgid "delete" +msgstr "" + +#: forum/skins/default/templates/question.html:180 +#: forum/skins/default/templates/question.html:329 +msgid "delete this comment" +msgstr "" + +#: forum/skins/default/templates/question.html:191 +#: forum/skins/default/templates/question.html:340 +msgid "add comment" +msgstr "post a comment" + +#: forum/skins/default/templates/question.html:195 +#, python-format +msgid "" +"\n" +" see one more \n" +" " +msgid_plural "" +"\n" +" see %(counter)s " +"more\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:201 +#, python-format +msgid "" +"\n" +" see one more " +"comment\n" +" " +msgid_plural "" +"\n" +" see %(counter)s " +"more comments\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:217 +#, python-format +msgid "" +"The question has been closed for the following reason \"%(close_reason)s\" by" +msgstr "" + +#: forum/skins/default/templates/question.html:219 +#, python-format +msgid "close date %(closed_at)s" +msgstr "" + +#: forum/skins/default/templates/question.html:227 +#, python-format +msgid "" +"\n" +" One Answer:\n" +" " +msgid_plural "" +"\n" +" %(counter)s Answers:\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:235 +msgid "oldest answers will be shown first" +msgstr "" + +#: forum/skins/default/templates/question.html:235 +msgid "oldest answers" +msgstr "oldest" + +#: forum/skins/default/templates/question.html:237 +msgid "newest answers will be shown first" +msgstr "" + +#: forum/skins/default/templates/question.html:237 +msgid "newest answers" +msgstr "newest" + +#: forum/skins/default/templates/question.html:239 +msgid "most voted answers will be shown first" +msgstr "" + +#: forum/skins/default/templates/question.html:239 +msgid "popular answers" +msgstr "most voted" + +#: forum/skins/default/templates/question.html:253 +#: forum/skins/default/templates/question.html:254 +msgid "i like this answer (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:260 +#: forum/skins/default/templates/question.html:261 +msgid "i dont like this answer (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:266 +#: forum/skins/default/templates/question.html:267 +msgid "mark this answer as favorite (click again to undo)" +msgstr "" + +#: forum/skins/default/templates/question.html:272 +#: forum/skins/default/templates/question.html:273 +msgid "the author of the question has selected this answer as correct" +msgstr "" + +#: forum/skins/default/templates/question.html:286 +msgid "answer permanent link" +msgstr "" + +#: forum/skins/default/templates/question.html:287 +msgid "permanent link" +msgstr "link" + +#: forum/skins/default/templates/question.html:309 +msgid "undelete" +msgstr "" + +#: forum/skins/default/templates/question.html:344 +#, python-format +msgid "" +"\n" +" see one more \n" +" " +msgid_plural "" +"\n" +" see %" +"(counter)s more\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:350 +#, python-format +msgid "" +"\n" +" see one more comment\n" +" " +msgid_plural "" +"\n" +" see %" +"(counter)s more comments\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:376 +#: forum/skins/default/templates/question.html:379 +msgid "Notify me once a day when there are any new answers" +msgstr "" +"Notify me once a day by email when there are any new " +"answers or updates" + +#: forum/skins/default/templates/question.html:382 +msgid "Notify me weekly when there are any new answers" +msgstr "" +"Notify me weekly when there are any new answers or updates" + +#: forum/skins/default/templates/question.html:387 +#, python-format +msgid "" +"\n" +" You can always adjust frequency of email updates from your %" +"(profile_url)s\n" +" " +msgstr "" +"\n" +"(note: you can always adjust frequency of email updates)" + +#: forum/skins/default/templates/question.html:394 +msgid "once you sign in you will be able to subscribe for any updates here" +msgstr "" +"Here (once you log in) you will be able to sign " +"up for the periodic email updates about this question." + +#: forum/skins/default/templates/question.html:405 +msgid "Your answer" +msgstr "" + +#: forum/skins/default/templates/question.html:407 +msgid "Be the first one to answer this question!" +msgstr "" + +#: forum/skins/default/templates/question.html:413 +msgid "you can answer anonymously and then login" +msgstr "" +"Please start posting your answer anonymously " +"- your answer will be saved within the current session and published after " +"you log in or create a new account. Please try to give a substantial " +"answer, for discussions, please use comments and " +"please do remember to vote (after you log in)!" + +#: forum/skins/default/templates/question.html:417 +msgid "answer your own question only to give an answer" +msgstr "" +"You are welcome to answer your own question, " +"but please make sure to give an answer. Remember that you " +"can always revise your original question. Please " +"use comments for discussions and please don't " +"forget to vote :) for the answers that you liked (or perhaps did " +"not like)! " + +#: forum/skins/default/templates/question.html:419 +msgid "please only give an answer, no discussions" +msgstr "" +"Please try to give a substantial answer. If " +"you wanted to comment on the question or answer, just use the " +"commenting tool. Please remember that you can always revise " +"your answers - no need to answer the same question twice. Also, " +"please don't forget to vote - it really helps to select the " +"best questions and answers!" + +#: forum/skins/default/templates/question.html:455 +msgid "Login/Signup to Post Your Answer" +msgstr "" + +#: forum/skins/default/templates/question.html:458 +msgid "Answer Your Own Question" +msgstr "" + +#: forum/skins/default/templates/question.html:460 +msgid "Answer the question" +msgstr "Post Your Answer" + +#: forum/skins/default/templates/question.html:473 +msgid "Question tags" +msgstr "Tags" + +#: forum/skins/default/templates/question.html:483 +msgid "question asked" +msgstr "Asked" + +#: forum/skins/default/templates/question.html:486 +msgid "question was seen" +msgstr "Seen" + +#: forum/skins/default/templates/question.html:486 +msgid "times" +msgstr "" + +#: forum/skins/default/templates/question.html:489 +msgid "last updated" +msgstr "Last updated" + +#: forum/skins/default/templates/question.html:494 +msgid "Related questions" +msgstr "" + +#: forum/skins/default/templates/question_edit.html:5 +#: forum/skins/default/templates/question_edit.html:66 +msgid "Edit question" +msgstr "" + +#: forum/skins/default/templates/question_edit_tips.html:4 +msgid "question tips" +msgstr "Tips" + +#: forum/skins/default/templates/question_edit_tips.html:7 +msgid "please ask a relevant question" +msgstr "ask a question relevant to the CNPROG community" + +#: forum/skins/default/templates/question_edit_tips.html:10 +msgid "please try provide enough details" +msgstr "provide enough details" + +#: forum/skins/default/templates/question_retag.html:4 +#: forum/skins/default/templates/question_retag.html:53 +msgid "Change tags" +msgstr "" + +#: forum/skins/default/templates/question_retag.html:40 +msgid "up to 5 tags, less than 20 characters each" +msgstr "" + +#: forum/skins/default/templates/question_retag.html:83 +msgid "Why use and modify tags?" +msgstr "" + +#: forum/skins/default/templates/question_retag.html:86 +msgid "tags help us keep Questions organized" +msgstr "" + +#: forum/skins/default/templates/question_retag.html:94 +msgid "tag editors receive special awards from the community" +msgstr "" + +#: forum/skins/default/templates/questions.html:29 +msgid "Found by tags" +msgstr "Tagged questions" + +#: forum/skins/default/templates/questions.html:33 +msgid "Search results" +msgstr "" + +#: forum/skins/default/templates/questions.html:35 +msgid "Found by title" +msgstr "" + +#: forum/skins/default/templates/questions.html:39 +msgid "Unanswered questions" +msgstr "" + +#: forum/skins/default/templates/questions.html:41 +msgid "All questions" +msgstr "" + +#: forum/skins/default/templates/questions.html:47 +msgid "most recently asked questions" +msgstr "" + +#: forum/skins/default/templates/questions.html:48 +msgid "most recently updated questions" +msgstr "" + +#: forum/skins/default/templates/questions.html:48 +msgid "active" +msgstr "" + +#: forum/skins/default/templates/questions.html:111 +#: forum/skins/default/templates/questions.html:125 +msgid "Posted:" +msgstr "" + +#: forum/skins/default/templates/questions.html:114 +#: forum/skins/default/templates/questions.html:119 +msgid "Updated:" +msgstr "" + +#: forum/skins/default/templates/questions.html:144 +msgid "Did not find anything?" +msgstr "" + +#: forum/skins/default/templates/questions.html:147 +msgid "Did not find what you were looking for?" +msgstr "" + +#: forum/skins/default/templates/questions.html:149 +msgid "Please, post your question!" +msgstr "" + +#: forum/skins/default/templates/questions.html:163 +#, python-format +msgid "" +"\n" +" have total %(q_num)s questions tagged %(tagname)s\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s questions tagged %(tagname)s\n" +" " +msgstr[0] "" +"\n" +"

    %(q_num)s

    question tagged

    %(tagname)s

    " +msgstr[1] "" +"\n" +"
    %(q_num)s

    questions tagged

    %(tagname)s
    " + +#: forum/skins/default/templates/questions.html:171 +#, python-format +msgid "" +"\n" +" have total %(q_num)s questions containing %(searchtitle)" +"s in full text\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s questions containing %(searchtitle)" +"s in full text\n" +" " +msgstr[0] "" +"\n" +"
    %(q_num)s

    question containing " +"%(searchtitle)s

    " +msgstr[1] "" +"\n" +"
    %(q_num)s

    questions containing " +"%(searchtitle)s

    " + +#: forum/skins/default/templates/questions.html:177 +#, python-format +msgid "" +"\n" +" have total %(q_num)s questions containing %(searchtitle)" +"s\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s questions containing %(searchtitle)" +"s\n" +" " +msgstr[0] "" +"\n" +"
    %(q_num)s

    question with title " +"containing %(searchtitle)s" +msgstr[1] "" +"\n" +"

    %(q_num)s

    questions with title " +"containing %(searchtitle)s" + +#: forum/skins/default/templates/questions.html:185 +#, python-format +msgid "" +"\n" +" have total %(q_num)s unanswered questions\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s unanswered questions\n" +" " +msgstr[0] "" +"\n" +"

    %(q_num)s

    question without an " +"accepted answer

    " +msgstr[1] "" +"\n" +"
    %(q_num)s

    questions without an " +"accepted answer

    " + +#: forum/skins/default/templates/questions.html:191 +#, python-format +msgid "" +"\n" +" have total %(q_num)s question\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s questions\n" +" " +msgstr[0] "" +"\n" +"
    %(q_num)s

    question

    " +msgstr[1] "" +"\n" +"
    %(q_num)s

    questions

    " + +#: forum/skins/default/templates/questions.html:201 +msgid "latest questions info" +msgstr "Newest questions are shown first." + +#: forum/skins/default/templates/questions.html:205 +msgid "Questions are sorted by the time of last update." +msgstr "" + +#: forum/skins/default/templates/questions.html:206 +msgid "Most recently answered ones are shown first." +msgstr "Most recently answered questions are shown first." + +#: forum/skins/default/templates/questions.html:210 +msgid "Questions sorted by number of responses." +msgstr "Questions sorted by the number of answers." + +#: forum/skins/default/templates/questions.html:211 +msgid "Most answered questions are shown first." +msgstr " " + +#: forum/skins/default/templates/questions.html:215 +msgid "Questions are sorted by the number of votes." +msgstr "" + +#: forum/skins/default/templates/questions.html:216 +msgid "Most voted questions are shown first." +msgstr "" + +#: forum/skins/default/templates/questions.html:224 +msgid "Related tags" +msgstr "Tags" + +#: forum/skins/default/templates/questions.html:227 +#: forum/skins/default/templates/tag_selector.html:10 +#: forum/skins/default/templates/tag_selector.html:27 +#, python-format +msgid "see questions tagged '%(tag_name)s'" +msgstr "" + +#: forum/skins/default/templates/reopen.html:6 +#: forum/skins/default/templates/reopen.html:16 +msgid "Reopen question" +msgstr "" + +#: forum/skins/default/templates/reopen.html:19 +msgid "Open the previously closed question" +msgstr "" + +#: forum/skins/default/templates/reopen.html:22 +msgid "The question was closed for the following reason " +msgstr "" + +#: forum/skins/default/templates/reopen.html:22 +msgid "reason - leave blank in english" +msgstr "" + +#: forum/skins/default/templates/reopen.html:22 +msgid "on " +msgstr "" + +#: forum/skins/default/templates/reopen.html:22 +msgid "date closed" +msgstr "" + +#: forum/skins/default/templates/reopen.html:29 +msgid "Reopen this question" +msgstr "" + +#: forum/skins/default/templates/revisions_answer.html:7 +#: forum/skins/default/templates/revisions_answer.html:38 +#: forum/skins/default/templates/revisions_question.html:8 +#: forum/skins/default/templates/revisions_question.html:38 +msgid "Revision history" +msgstr "" + +#: forum/skins/default/templates/revisions_answer.html:50 +#: forum/skins/default/templates/revisions_question.html:50 +msgid "click to hide/show revision" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:4 +msgid "Interesting tags" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:14 +#, python-format +msgid "remove '%(tag_name)s' from the list of interesting tags" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:20 +#: forum/skins/default/templates/tag_selector.html:37 +msgid "Add" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:21 +msgid "Ignored tags" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:31 +#, python-format +msgid "remove '%(tag_name)s' from the list of ignored tags" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:40 +msgid "keep ingored questions hidden" +msgstr "" + +#: forum/skins/default/templates/tags.html:6 +#: forum/skins/default/templates/tags.html:30 +msgid "Tag list" +msgstr "" + +#: forum/skins/default/templates/tags.html:32 +msgid "sorted alphabetically" +msgstr "" + +#: forum/skins/default/templates/tags.html:32 +msgid "by name" +msgstr "" + +#: forum/skins/default/templates/tags.html:33 +msgid "sorted by frequency of tag use" +msgstr "" + +#: forum/skins/default/templates/tags.html:33 +msgid "by popularity" +msgstr "" + +#: forum/skins/default/templates/tags.html:39 +msgid "All tags matching query" +msgstr "" + +#: forum/skins/default/templates/tags.html:39 +msgid "all tags - make this empty in english" +msgstr "" + +#: forum/skins/default/templates/tags.html:42 +msgid "Nothing found" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:6 +msgid "Edit user profile" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:19 +msgid "edit profile" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:31 +msgid "image associated with your email address" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:31 +#, python-format +msgid "avatar, see %(gravatar_faq_url)s" +msgstr "gravatar" + +#: forum/skins/default/templates/user_edit.html:36 +#: forum/skins/default/templates/user_info.html:60 +msgid "Registered user" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:43 +msgid "Screen Name" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:86 +#: forum/skins/default/templates/user_email_subscriptions.html:20 +msgid "Update" +msgstr "" + +#: forum/skins/default/templates/user_email_subscriptions.html:8 +msgid "Email subscription settings" +msgstr "" + +#: forum/skins/default/templates/user_email_subscriptions.html:9 +msgid "email subscription settings info" +msgstr "" +"Adjust frequency of email updates. Receive " +"updates on interesting questions by email,
    help the community by answering questions of your colleagues. If you do not wish to " +"receive emails - select 'no email' on all items below.
    Updates are only " +"sent when there is any new activity on selected items." + +#: forum/skins/default/templates/user_email_subscriptions.html:21 +msgid "Stop sending email" +msgstr "Stop Email" + +#: forum/skins/default/templates/user_info.html:22 +#: forum/skins/default/templates/users.html:26 forum/views/users.py:916 +msgid "reputation" +msgstr "karma" + +#: forum/skins/default/templates/user_info.html:32 +msgid "Moderate this user" +msgstr "" + +#: forum/skins/default/templates/user_info.html:45 +msgid "update profile" +msgstr "" + +#: forum/skins/default/templates/user_info.html:64 +msgid "real name" +msgstr "" + +#: forum/skins/default/templates/user_info.html:69 +msgid "member for" +msgstr "member since" + +#: forum/skins/default/templates/user_info.html:74 +msgid "last seen" +msgstr "" + +#: forum/skins/default/templates/user_info.html:80 +msgid "user website" +msgstr "" + +#: forum/skins/default/templates/user_info.html:86 +msgid "location" +msgstr "" + +#: forum/skins/default/templates/user_info.html:93 +msgid "age" +msgstr "" + +#: forum/skins/default/templates/user_info.html:94 +msgid "age unit" +msgstr "years old" + +#: forum/skins/default/templates/user_info.html:100 +msgid "todays unused votes" +msgstr "" + +#: forum/skins/default/templates/user_info.html:101 +msgid "votes left" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:12 +#, python-format +msgid "" +"\n" +" 1 Question\n" +" " +msgid_plural "" +"\n" +" %(counter)s Questions\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_stats.html:23 +#, python-format +msgid "" +"\n" +" 1 Answer\n" +" " +msgid_plural "" +"\n" +" %(counter)s Answers\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_stats.html:36 +#, python-format +msgid "the answer has been voted for %(vote_count)s times" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:36 +msgid "this answer has been selected as correct" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:46 +#, python-format +msgid "" +"\n" +" (one comment)\n" +" " +msgid_plural "" +"\n" +" the answer has been commented %(comment_count)s times\n" +" " +msgstr[0] "" +"\n" +"(one comment)" +msgstr[1] "" +"\n" +"(%(comment_count)s comments)" + +#: forum/skins/default/templates/user_stats.html:61 +#, python-format +msgid "" +"\n" +" 1 Vote\n" +" " +msgid_plural "" +"\n" +" %(cnt)s Votes\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_stats.html:72 +msgid "thumb up" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:73 +msgid "user has voted up this many times" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:77 +msgid "thumb down" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:78 +msgid "user voted down this many times" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:87 +#, python-format +msgid "" +"\n" +" 1 Tag\n" +" " +msgid_plural "" +"\n" +" %(counter)s Tags\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_stats.html:100 +#, python-format +msgid "" +"see other questions with %(view_user)s's contributions tagged '%(tag_name)s' " +msgstr "" + +#: forum/skins/default/templates/user_stats.html:115 +#, python-format +msgid "" +"\n" +" 1 Badge\n" +" " +msgid_plural "" +"\n" +" %(counter)s Badges\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_tabs.html:7 +msgid "User profile" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:7 forum/views/users.py:890 +msgid "overview" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:9 forum/views/users.py:898 +msgid "recent activity" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:12 forum/views/users.py:908 +msgid "comments and answers to others questions" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:13 forum/views/users.py:907 +msgid "responses" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:16 +msgid "graph of user reputation" +msgstr "Graph of user karma" + +#: forum/skins/default/templates/user_tabs.html:17 +msgid "reputation history" +msgstr "karma history" + +#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:934 +msgid "user vote record" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:933 +msgid "casted votes" +msgstr "votes" + +#: forum/skins/default/templates/user_tabs.html:23 +msgid "questions that user selected as his/her favorite" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:24 +msgid "favorites" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:27 forum/views/users.py:943 +msgid "email subscription settings" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:28 forum/views/users.py:942 +msgid "email subscriptions" +msgstr "" + +#: forum/skins/default/templates/users.html:6 +#: forum/skins/default/templates/users.html:24 +msgid "Users" +msgstr "" + +#: forum/skins/default/templates/users.html:27 +msgid "recent" +msgstr "" + +#: forum/skins/default/templates/users.html:28 +msgid "oldest" +msgstr "" + +#: forum/skins/default/templates/users.html:29 +msgid "by username" +msgstr "" + +#: forum/skins/default/templates/users.html:35 +#, python-format +msgid "users matching query %(suser)s:" +msgstr "" + +#: forum/skins/default/templates/users.html:39 +msgid "Nothing found." +msgstr "" + +#: forum/skins/default/templates/users_questions.html:11 +msgid "this questions was selected as favorite" +msgstr "" + +#: forum/skins/default/templates/users_questions.html:12 +msgid "thumb-up on" +msgstr "" + +#: forum/skins/default/templates/users_questions.html:19 +msgid "thumb-up off" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:5 +#: forum/skins/default/templates/authopenid/complete.html:19 +msgid "Connect your OpenID with this site" +msgstr "New user signup" + +#: forum/skins/default/templates/auth/complete.html:8 +#: forum/skins/default/templates/authopenid/complete.html:22 +msgid "Connect your OpenID with your account on this site" +msgstr "New user signup" + +#: forum/skins/default/templates/auth/complete.html:12 +msgid "You are here for the first time with " +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:13 +msgid "" +"Please create your screen name and save your email address. Saved email " +"address will let you subscribe for the updates on the most interesting " +"questions and will be used to create and retrieve your unique avatar image. " +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:15 +#: forum/skins/default/templates/authopenid/complete.html:42 +msgid "This account already exists, please use another." +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:30 +#: forum/skins/default/templates/authopenid/complete.html:57 +msgid "Sorry, looks like we have some errors:" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:47 +#: forum/skins/default/templates/authopenid/complete.html:82 +msgid "Screen name label" +msgstr "Screen Name (will be shown to others)" + +#: forum/skins/default/templates/auth/complete.html:54 +#: forum/skins/default/templates/authopenid/complete.html:89 +msgid "Email address label" +msgstr "" +"Email Address (will not be shared with " +"anyone, must be valid)" + +#: forum/skins/default/templates/auth/complete.html:60 +#: forum/skins/default/templates/auth/signup.html:18 +#: forum/skins/default/templates/authopenid/complete.html:95 +#: forum/skins/default/templates/authopenid/signup.html:18 +msgid "receive updates motivational blurb" +msgstr "" +"Receive forum updates by email - this will help our " +"community grow and become more useful.
    By default Q&A forum sends up to one email digest per " +"week - only when there is anything new.
    If you like, please " +"adjust this now or any time later from your user account." + +#: forum/skins/default/templates/auth/complete.html:64 +#: forum/skins/default/templates/auth/signup.html:22 +#: forum/skins/default/templates/authopenid/complete.html:99 +#: forum/skins/default/templates/authopenid/signup.html:22 +msgid "please select one of the options above" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:67 +#: forum/skins/default/templates/authopenid/complete.html:102 +msgid "Tag filter tool will be your right panel, once you log in." +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:68 +#: forum/skins/default/templates/authopenid/complete.html:103 +msgid "create account" +msgstr "Signup" + +#: forum/skins/default/templates/auth/complete.html:77 +#: forum/skins/default/templates/authopenid/complete.html:112 +msgid "Existing account" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:78 +#: forum/skins/default/templates/authopenid/complete.html:113 +msgid "user name" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:79 +#: forum/skins/default/templates/authopenid/complete.html:114 +msgid "password" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:86 +#: forum/skins/default/templates/authopenid/complete.html:121 +msgid "Register" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:87 +#: forum/skins/default/templates/authopenid/complete.html:122 +#: forum/skins/default/templates/authopenid/signin.html:151 +msgid "Forgot your password?" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:22 +#: forum/skins/default/templates/authopenid/signin.html:5 +#: forum/skins/default/templates/authopenid/signin.html:21 +msgid "User login" +msgstr "User login" + +#: forum/skins/default/templates/auth/signin.html:29 +#: forum/skins/default/templates/authopenid/signin.html:42 +msgid "Click to sign in through any of these services." +msgstr "" +"

    Please select your favorite login method below." +"

    External login services use OpenID technology, where your password " +"always stays confidential between you and your login provider and you don't " +"have to remember another one. CNPROG option requires your login name and " +"password entered here.

    " + +#: forum/skins/default/templates/auth/signin.html:34 +msgid "" +"Take the opurtunity to validate my email next to the external provider I " +"choose." +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:84 +msgid "Enter your " +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:140 +#: forum/skins/default/templates/authopenid/signin.html:160 +msgid "Why use OpenID?" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:143 +#: forum/skins/default/templates/authopenid/signin.html:163 +msgid "with openid it is easier" +msgstr "With the OpenID you don't need to create new username and password." + +#: forum/skins/default/templates/auth/signin.html:146 +#: forum/skins/default/templates/authopenid/signin.html:166 +msgid "reuse openid" +msgstr "You can safely re-use the same login for all OpenID-enabled websites." + +#: forum/skins/default/templates/auth/signin.html:149 +#: forum/skins/default/templates/authopenid/signin.html:169 +msgid "openid is widely adopted" +msgstr "" +"There are > 160,000,000 OpenID account in use. Over 10,000 sites are OpenID-" +"enabled." + +#: forum/skins/default/templates/auth/signin.html:152 +#: forum/skins/default/templates/authopenid/signin.html:172 +msgid "openid is supported open standard" +msgstr "OpenID is based on an open standard, supported by many organizations." + +#: forum/skins/default/templates/auth/signin.html:157 +#: forum/skins/default/templates/authopenid/signin.html:177 +msgid "Find out more" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:158 +#: forum/skins/default/templates/authopenid/signin.html:178 +msgid "Get OpenID" +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:4 +#: forum/skins/default/templates/authopenid/signup.html:4 +msgid "Signup" +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:8 +#: forum/skins/default/templates/authopenid/signup.html:8 +msgid "Create login name and password" +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:10 +#: forum/skins/default/templates/authopenid/signup.html:10 +msgid "Traditional signup info" +msgstr "" +"If you prefer, create your forum login name and " +"password here. However, please keep in mind that we also support " +"OpenID login method. With OpenID you can " +"simply reuse your external login (e.g. Gmail or AOL) without ever sharing " +"your login details with anyone and having to remember yet another password." + +#: forum/skins/default/templates/auth/signup.html:25 +#: forum/skins/default/templates/authopenid/signup.html:25 +msgid "" +"Please read and type in the two words below to help us prevent automated " +"account creation." +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:27 +#: forum/skins/default/templates/authopenid/signup.html:27 +msgid "Create Account" +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:29 +msgid "return to login page" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeemail.html:3 +#: forum/skins/default/templates/authopenid/changeemail.html:9 +#: forum/skins/default/templates/authopenid/changeemail.html:38 +msgid "Change email" +msgstr "Change Email" + +#: forum/skins/default/templates/authopenid/changeemail.html:11 +msgid "Save your email address" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeemail.html:16 +#, python-format +msgid "change %(email)s info" +msgstr "" +"Enter your new email into the box below if " +"you'd like to use another email for update subscriptions." +"
    Currently you are using %(email)s" + +#: forum/skins/default/templates/authopenid/changeemail.html:18 +#, python-format +msgid "here is why email is required, see %(gravatar_faq_url)s" +msgstr "" +"Please enter your email address in the box below. Valid email address is required on this Q&A forum. If you like, " +"you can receive updates on interesting questions or entire " +"forum via email. Also, your email is used to create a unique gravatar image for your account. " +"Email addresses are never shown or otherwise shared with anybody else." + +#: forum/skins/default/templates/authopenid/changeemail.html:31 +msgid "Your new Email" +msgstr "" +"Your new Email: (will not be shown to " +"anyone, must be valid)" + +#: forum/skins/default/templates/authopenid/changeemail.html:31 +msgid "Your Email" +msgstr "" +"Your Email (must be valid, never shown to others)" + +#: forum/skins/default/templates/authopenid/changeemail.html:38 +msgid "Save Email" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeemail.html:49 +msgid "Validate email" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeemail.html:52 +#, python-format +msgid "validate %(email)s info or go to %(change_email_url)s" +msgstr "" +"An email with a validation link has been sent to %" +"(email)s. Please follow the emailed link with your " +"web browser. Email validation is necessary to help insure the proper use of " +"email on Q&A. If you would like to use " +"another email, please change it again." + +#: forum/skins/default/templates/authopenid/changeemail.html:57 +msgid "Email not changed" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeemail.html:60 +#, python-format +msgid "old %(email)s kept, if you like go to %(change_email_url)s" +msgstr "" +"Your email address %(email)s has not been changed." +" If you decide to change it later - you can always do it by editing " +"it in your user profile or by using the previous form again." + +#: forum/skins/default/templates/authopenid/changeemail.html:65 +msgid "Email changed" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeemail.html:68 +#, python-format +msgid "your current %(email)s can be used for this" +msgstr "" +"Your email address is now set to %(email)s. " +"Updates on the questions that you like most will be sent to this address. " +"Email notifications are sent once a day or less frequently - only when there " +"are any news." + +#: forum/skins/default/templates/authopenid/changeemail.html:73 +msgid "Email verified" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeemail.html:76 +msgid "thanks for verifying email" +msgstr "" +"Thank you for verifying your email! Now " +"you can ask and answer questions. Also if " +"you find a very interesting question you can subscribe for the " +"updates - then will be notified about changes once a day or less frequently." + +#: forum/skins/default/templates/authopenid/changeemail.html:81 +msgid "email key not sent" +msgstr "Validation email not sent" + +#: forum/skins/default/templates/authopenid/changeemail.html:84 +#, python-format +msgid "email key not sent %(email)s change email here %(change_link)s" +msgstr "" +"Your current email address %(email)s has been " +"validated before so the new key was not sent. You can change email used for update subscriptions if necessary." + +#: forum/skins/default/templates/authopenid/changeopenid.html:8 +msgid "Account: change OpenID URL" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeopenid.html:12 +msgid "" +"This is where you can change your OpenID URL. Make sure you remember it!" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeopenid.html:14 +#: forum/skins/default/templates/authopenid/delete.html:14 +#: forum/skins/default/templates/authopenid/delete.html:24 +msgid "Please correct errors below:" +msgstr "" + +#: forum/skins/default/templates/authopenid/changeopenid.html:29 +msgid "OpenID URL:" +msgstr "" + +#: forum/skins/default/templates/authopenid/complete.html:27 +#, python-format +msgid "register new %(provider)s account info, see %(gravatar_faq_url)s" +msgstr "" +"

    You are here for the first time with your %" +"(provider)s login. Please create your screen name " +"and save your email address. Saved email address will let " +"you subscribe for the updates on the most interesting " +"questions and will be used to create and retrieve your unique avatar image - " +"gravatar.

    " + +#: forum/skins/default/templates/authopenid/complete.html:31 +#, python-format +msgid "" +"%(username)s already exists, choose another name for \n" +" %(provider)s. Email is required too, see %" +"(gravatar_faq_url)s\n" +" " +msgstr "" +"

    Oops... looks like screen name %(username)s is " +"already used in another account.

    Please choose another screen " +"name to use with your %(provider)s login. Also, a valid email address is " +"required on the Q&A forum. Your email is " +"used to create a unique gravatar image for your account. If you like, you can receive " +"updates on the interesting questions or entire forum by email. " +"Email addresses are never shown or otherwise shared with anybody else.

    " + +#: forum/skins/default/templates/authopenid/complete.html:35 +#, python-format +msgid "" +"register new external %(provider)s account info, see %(gravatar_faq_url)s" +msgstr "" +"

    You are here for the first time with your %" +"(provider)s login.

    You can either keep your screen " +"name the same as your %(provider)s login name or choose some other " +"nickname.

    Also, please save a valid email address. " +"With the email you can subscribe for the updates on the " +"most interesting questions. Email address is also used to create and " +"retrieve your unique avatar image - gravatar.

    " + +#: forum/skins/default/templates/authopenid/complete.html:38 +#, python-format +msgid "register new Facebook connect account info, see %(gravatar_faq_url)s" +msgstr "" +"

    You are here for the first time with your " +"Facebook login. Please create your screen name and " +"save your email address. Saved email address will let you " +"subscribe for the updates on the most interesting questions " +"and will be used to create and retrieve your unique avatar image - gravatar.

    " + +#: forum/skins/default/templates/authopenid/confirm_email.txt:2 +msgid "Thank you for registering at our Q&A forum!" +msgstr "" + +#: forum/skins/default/templates/authopenid/confirm_email.txt:4 +msgid "Your account details are:" +msgstr "" + +#: forum/skins/default/templates/authopenid/confirm_email.txt:6 +msgid "Username:" +msgstr "" + +#: forum/skins/default/templates/authopenid/confirm_email.txt:7 +#: forum/skins/default/templates/authopenid/delete.html:19 +msgid "Password:" +msgstr "" + +#: forum/skins/default/templates/authopenid/confirm_email.txt:9 +msgid "Please sign in here:" +msgstr "" + +#: forum/skins/default/templates/authopenid/confirm_email.txt:12 +#: forum/skins/default/templates/authopenid/email_validation.txt:14 +#: forum/skins/default/templates/authopenid/sendpw_email.txt:8 +msgid "" +"Sincerely,\n" +"Forum Administrator" +msgstr "" +"Sincerely,\n" +"Q&A Forum Administrator" + +#: forum/skins/default/templates/authopenid/delete.html:8 +msgid "Account: delete account" +msgstr "" + +#: forum/skins/default/templates/authopenid/delete.html:12 +msgid "" +"Note: After deleting your account, anyone will be able to register this " +"username." +msgstr "" + +#: forum/skins/default/templates/authopenid/delete.html:16 +msgid "Check confirm box, if you want delete your account." +msgstr "" + +#: forum/skins/default/templates/authopenid/delete.html:31 +msgid "I am sure I want to delete my account." +msgstr "" + +#: forum/skins/default/templates/authopenid/delete.html:32 +msgid "Password/OpenID URL" +msgstr "" + +#: forum/skins/default/templates/authopenid/delete.html:32 +msgid "(required for your security)" +msgstr "" + +#: forum/skins/default/templates/authopenid/delete.html:34 +msgid "Delete account permanently" +msgstr "" + +#: forum/skins/default/templates/authopenid/email_validation.txt:2 +msgid "Greetings from the Q&A forum" +msgstr "" + +#: forum/skins/default/templates/authopenid/email_validation.txt:4 +msgid "To make use of the Forum, please follow the link below:" +msgstr "" + +#: forum/skins/default/templates/authopenid/email_validation.txt:8 +msgid "Following the link above will help us verify your email address." +msgstr "" + +#: forum/skins/default/templates/authopenid/email_validation.txt:10 +msgid "" +"If you beleive that this message was sent in mistake - \n" +"no further action is needed. Just ingore this email, we apologize\n" +"for any inconvenience" +msgstr "" + +#: forum/skins/default/templates/authopenid/external_legacy_login_info.html:4 +#: forum/skins/default/templates/authopenid/external_legacy_login_info.html:7 +msgid "Traditional login information" +msgstr "" + +#: forum/skins/default/templates/authopenid/external_legacy_login_info.html:12 +#, python-format +msgid "" +"how to login with password through external login website or use %" +"(feedback_url)s" +msgstr "" + +#: forum/skins/default/templates/authopenid/sendpw.html:4 +#: forum/skins/default/templates/authopenid/sendpw.html:7 +msgid "Send new password" +msgstr "Recover password" + +#: forum/skins/default/templates/authopenid/sendpw.html:10 +msgid "password recovery information" +msgstr "" +"Forgot you password? No problems - just get a new " +"one!
    Please follow the following steps:
    • submit your " +"user name below and check your email
    follow the " +"activation link for the new password - sent to you by email and " +"login with the suggested password
    • at this you might want to " +"change your password to something you can remember better" + +#: forum/skins/default/templates/authopenid/sendpw.html:21 +msgid "Reset password" +msgstr "Send me a new password" + +#: forum/skins/default/templates/authopenid/sendpw.html:22 +msgid "return to login" +msgstr "" + +#: forum/skins/default/templates/authopenid/sendpw_email.txt:2 +#, python-format +msgid "" +"Someone has requested to reset your password on %(site_url)s.\n" +"If it were not you, it is safe to ignore this email." +msgstr "" + +#: forum/skins/default/templates/authopenid/sendpw_email.txt:5 +#, python-format +msgid "" +"email explanation how to use new %(password)s for %(username)s\n" +"with the %(key_link)s" +msgstr "" +"To change your password, please follow these steps:\n" +"* visit this link: %(key_link)s\n" +"* login with user name %(username)s and password %(password)s\n" +"* go to your user profile and set the password to something you can remember" + +#: forum/skins/default/templates/authopenid/signin.html:28 +#, python-format +msgid "" +"\n" +" Your answer to %(title)s %(summary)s will be posted once you " +"log in\n" +" " +msgstr "" +"\n" +"Your answer to \"%(title)s %(summary)s...\" is saved and will be " +"posted once you log in." + +#: forum/skins/default/templates/authopenid/signin.html:35 +#, python-format +msgid "" +"Your question \n" +" %(title)s %(summary)s will be posted once you log in\n" +" " +msgstr "" +"Your question \"%(title)s %(summary)s...\" is saved and will be " +"posted once you log in." + +#: forum/skins/default/templates/authopenid/signin.html:128 +msgid "Enter your Provider user name" +msgstr "" +"Enter your Provider user name
    (or " +"select another login method above)" + +#: forum/skins/default/templates/authopenid/signin.html:135 +msgid "" +"Enter your OpenID " +"web address" +msgstr "" +"Enter your OpenID web address
    (or choose " +"another login method above)" + +#: forum/skins/default/templates/authopenid/signin.html:137 +#: forum/skins/default/templates/authopenid/signin.html:149 +msgid "Login" +msgstr "" + +#: forum/skins/default/templates/authopenid/signin.html:140 +msgid "Enter your login name and password" +msgstr "" +"Enter your CNPROG login and password
    (or select your OpenID provider above)" + +#: forum/skins/default/templates/authopenid/signin.html:144 +msgid "Login name" +msgstr "" + +#: forum/skins/default/templates/authopenid/signin.html:146 +msgid "Password" +msgstr "" + +#: forum/skins/default/templates/authopenid/signin.html:150 +msgid "Create account" +msgstr "" + +#: forum/skins/default/templates/authopenid/signup.html:29 +msgid "return to OpenID login" +msgstr "" + +#: forum/skins/default/templates/fbconnect/xd_receiver.html:5 +#, python-format +msgid "Connect to %(APP_SHORT_NAME)s with Facebook!" +msgstr "" + +#: forum/templatetags/extra_tags.py:166 forum/templatetags/extra_tags.py:193 +msgid "reputation points" +msgstr "karma" + +#: forum/templatetags/extra_tags.py:253 +msgid "2 days ago" +msgstr "" + +#: forum/templatetags/extra_tags.py:255 +msgid "yesterday" +msgstr "" + +#: forum/templatetags/extra_tags.py:257 +#, python-format +msgid "%(hr)d hour ago" +msgid_plural "%(hr)d hours ago" +msgstr[0] "" +msgstr[1] "" + +#: forum/templatetags/extra_tags.py:259 +#, python-format +msgid "%(min)d min ago" +msgid_plural "%(min)d mins ago" +msgstr[0] "" +msgstr[1] "" + +#: forum/utils/forms.py:27 +msgid "this field is required" +msgstr "" + +#: forum/utils/forms.py:42 +msgid "choose a username" +msgstr "Choose screen name" + +#: forum/utils/forms.py:47 +msgid "user name is required" +msgstr "" + +#: forum/utils/forms.py:48 +msgid "sorry, this name is taken, please choose another" +msgstr "" + +#: forum/utils/forms.py:49 +msgid "sorry, this name is not allowed, please choose another" +msgstr "" + +#: forum/utils/forms.py:50 +msgid "sorry, there is no user with this name" +msgstr "" + +#: forum/utils/forms.py:51 +msgid "sorry, we have a serious error - user name is taken by several users" +msgstr "" + +#: forum/utils/forms.py:52 +msgid "user name can only consist of letters, empty space and underscore" +msgstr "" + +#: forum/utils/forms.py:100 +msgid "your email address" +msgstr "Your email (never shared)" + +#: forum/utils/forms.py:101 +msgid "email address is required" +msgstr "" + +#: forum/utils/forms.py:102 +msgid "please enter a valid email address" +msgstr "" + +#: forum/utils/forms.py:103 +msgid "this email is already used by someone else, please choose another" +msgstr "" + +#: forum/utils/forms.py:128 +msgid "choose password" +msgstr "Password" + +#: forum/utils/forms.py:129 +msgid "password is required" +msgstr "" + +#: forum/utils/forms.py:132 +msgid "retype password" +msgstr "Password (please retype)" + +#: forum/utils/forms.py:133 +msgid "please, retype your password" +msgstr "" + +#: forum/utils/forms.py:134 +msgid "sorry, entered passwords did not match, please try again" +msgstr "" + +#: forum/views/auth.py:94 forum/views/auth.py:103 +msgid "" +"Sorry, these login credentials belong to anoother user. Plese terminate your " +"current session and try again." +msgstr "" + +#: forum/views/auth.py:96 +msgid "You are already logged in with that user." +msgstr "" + +#: forum/views/auth.py:101 +msgid "These login credentials are already associated with your account." +msgstr "" + +#: forum/views/auth.py:107 +msgid "These new credentials are now associated with your account." +msgstr "" + +#: forum/views/commands.py:217 +#, python-format +msgid "subscription saved, %(email)s needs validation, see %(details_url)s" +msgstr "" +"Your subscription is saved, but email address %(email)s needs to be " +"validated, please see more details here" + +#: forum/views/commands.py:225 +msgid "email update frequency has been set to daily" +msgstr "" + +#: forum/views/meta.py:34 +msgid "Q&A forum feedback" +msgstr "" + +#: forum/views/meta.py:35 +msgid "Thanks for the feedback!" +msgstr "" + +#: forum/views/meta.py:43 +msgid "We look forward to hearing your feedback! Please, give it next time :)" +msgstr "" + +#: forum/views/users.py:851 forum/views/users.py:855 +msgid "changes saved" +msgstr "" + +#: forum/views/users.py:861 +msgid "email updates canceled" +msgstr "" + +#: forum/views/users.py:891 +msgid "user profile" +msgstr "" + +#: forum/views/users.py:892 +msgid "user profile overview" +msgstr "" + +#: forum/views/users.py:899 +msgid "recent user activity" +msgstr "" + +#: forum/views/users.py:900 +msgid "profile - recent activity" +msgstr "" + +#: forum/views/users.py:909 +msgid "profile - responses" +msgstr "" + +#: forum/views/users.py:917 +msgid "user reputation in the community" +msgstr "user karma" + +#: forum/views/users.py:918 +msgid "profile - user reputation" +msgstr "Profile - User's Karma" + +#: forum/views/users.py:924 +msgid "favorite questions" +msgstr "" + +#: forum/views/users.py:925 +msgid "users favorite questions" +msgstr "" + +#: forum/views/users.py:926 +msgid "profile - favorite questions" +msgstr "" + +#: forum/views/users.py:935 +msgid "profile - votes" +msgstr "" + +#: forum/views/users.py:944 +msgid "profile - email subscriptions" +msgstr "" + +#: forum/views/users.py:977 +msgid "Password changed." +msgstr "" + +#: forum/views/writers.py:74 +msgid "uploading images is limited to users with >60 reputation points" +msgstr "sorry, file uploading requires karma >60" + +#: forum/views/writers.py:76 +msgid "allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'" +msgstr "" + +#: forum/views/writers.py:78 +#, python-format +msgid "maximum upload file size is %sK" +msgstr "" + +#: forum/views/writers.py:80 +#, python-format +msgid "" +"Error uploading file. Please contact the site administrator. Thank you. %s" +msgstr "" + +#: forum_modules/books/urls.py:7 forum_modules/books/urls.py:8 +#: forum_modules/books/urls.py:9 +msgid "books/" +msgstr "" + +#: forum_modules/facebookauth/authentication.py:29 +msgid "Sorry, your Facebook session has expired, please try again" +msgstr "" + +#: forum_modules/facebookauth/authentication.py:31 +msgid "" +"The authentication with Facebook connect failed due to an invalid signature" +msgstr "" + +#: forum_modules/facebookauth/authentication.py:33 +msgid "" +"The authentication with Facebook connect failed, cannot find authentication " +"tokens" +msgstr "" + +#: forum_modules/localauth/forms.py:59 +msgid "Please enter valid username and password (both are case-sensitive)." +msgstr "" + +#: forum_modules/localauth/forms.py:62 +msgid "This account is inactive." +msgstr "" + +#: forum_modules/localauth/forms.py:64 +msgid "Login failed." +msgstr "" + +#: forum_modules/localauth/forms.py:66 +msgid "Please enter username and password" +msgstr "" + +#: forum_modules/localauth/forms.py:68 +msgid "Please enter your password" +msgstr "" + +#: forum_modules/localauth/forms.py:70 +msgid "Please enter user name" +msgstr "" + +#: forum_modules/localauth/urls.py:7 +msgid "local/" +msgstr "" + +#: forum_modules/oauthauth/consumer.py:33 +msgid "Error, the oauth token is not on the server" +msgstr "" + +#: forum_modules/oauthauth/consumer.py:38 +msgid "Something went wrong! Auth tokens do not match" +msgstr "" + +#: forum_modules/openidauth/consumer.py:40 +msgid "Sorry, but your input is not a valid OpenId" +msgstr "" + +#: forum_modules/openidauth/consumer.py:92 +msgid "The OpenId authentication request was canceled" +msgstr "" + +#: forum_modules/openidauth/consumer.py:94 +msgid "The OpenId authentication failed: " +msgstr "" + +#: forum_modules/openidauth/consumer.py:96 +msgid "Setup needed" +msgstr "" + +#: forum_modules/openidauth/consumer.py:98 +msgid "The OpenId authentication failed with an unknown status: " +msgstr "" + +#: forum_modules/openidauth/templates/openidurl.html:7 +msgid "Enter your OpenId Url" +msgstr "" + +#~ msgid "Incorrect username." +#~ msgstr "sorry, there is no such user name" + +#~ msgid "Welcome email subject line" +#~ msgstr "Welcome to the Q&A forum" + +#~ msgid "your email needs to be validated see %(details_url)s" +#~ msgstr "" +#~ "Your email needs to be validated. Please see details here." + +#~ msgid "Email verification subject line" +#~ msgstr "Verification Email from Q&A forum" + +#~ msgid "first time greeting with %(url)s" +#~ msgstr "Hello and welcome to OSQA - please join us!" + +#~ msgid "have %(num_q)s unanswered questions" +#~ msgstr "" +#~ "
    %(num_q)s
    questions without " +#~ "accepted answers" + +#~ msgid "" +#~ "\n" +#~ "\t\t\t\thave total %(q_num)s questions\n" +#~ "\t\t\t\t" +#~ msgid_plural "" +#~ "\n" +#~ "\t\t\t\thave total %(q_num)s questions\n" +#~ "\t\t\t\t" +#~ msgstr[0] "" +#~ "\n" +#~ "
    %(q_num)s

    question

    " +#~ msgstr[1] "" +#~ "\n" +#~ "
    %(q_num)s

    questions

    " diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2b514069645cc8d6aca3f4a0c060dd0dd21e95f9 GIT binary patch literal 367 zcmZXPK~KUk7=|%=+R?Lz9=z#?El~p%36mAF*Z~=Xdu4Uj%$9V8=nwJl`CI&Uk%MpY zq)qzt>)W66v+oY(1i3&ikyGRvY12pU@Nj@@>-=Tu-MiifNK4pg-xy~(S;mv+cqYh3 z;wt%CEMOxIG9d7KF{6j_|gahxQ%Sgl5=+G?*V4TV-8oXB`S zTep>mQjTlWb-o%!S(=ICr&yOp6K8|A_{P@`%Le@!Zg#aY_JM5Qly7u+To+U5AHBBA StM(x5)|JLqob+Ezh&sQ_Ltz5| literal 0 HcmV?d00001 diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po new file mode 100644 index 0000000..dcce1a7 --- /dev/null +++ b/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,3297 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-23 10:41-0400\n" +"PO-Revision-Date: 2010-02-09 14:11-0600\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forum/auth.py:438 +msgid "Your question and all of it's answers have been deleted" +msgstr "" + +#: forum/auth.py:440 +msgid "Your question has been deleted" +msgstr "" + +#: forum/auth.py:443 +msgid "The question and all of it's answers have been deleted" +msgstr "" + +#: forum/auth.py:445 +msgid "The question has been deleted" +msgstr "" + +#: forum/const.py:8 +msgid "duplicate question" +msgstr "" + +#: forum/const.py:9 +msgid "question is off-topic or not relevant" +msgstr "" + +#: forum/const.py:10 +msgid "too subjective and argumentative" +msgstr "" + +#: forum/const.py:11 +msgid "is not an answer to the question" +msgstr "" + +#: forum/const.py:12 +msgid "the question is answered, right answer was accepted" +msgstr "" + +#: forum/const.py:13 +msgid "problem is not reproducible or outdated" +msgstr "" + +#: forum/const.py:15 +msgid "question contains offensive inappropriate, or malicious remarks" +msgstr "" + +#: forum/const.py:16 +msgid "spam or advertising" +msgstr "" + +#: forum/const.py:57 +msgid "question" +msgstr "" + +#: forum/const.py:58 forum/skins/default/templates/book.html:110 +msgid "answer" +msgstr "" + +#: forum/const.py:59 +msgid "commented question" +msgstr "" + +#: forum/const.py:60 +msgid "commented answer" +msgstr "" + +#: forum/const.py:61 +msgid "edited question" +msgstr "" + +#: forum/const.py:62 +msgid "edited answer" +msgstr "" + +#: forum/const.py:63 +msgid "received award" +msgstr "" + +#: forum/const.py:64 +msgid "marked best answer" +msgstr "" + +#: forum/const.py:65 +msgid "upvoted" +msgstr "" + +#: forum/const.py:66 +msgid "downvoted" +msgstr "" + +#: forum/const.py:67 +msgid "canceled vote" +msgstr "" + +#: forum/const.py:68 +msgid "deleted question" +msgstr "" + +#: forum/const.py:69 +msgid "deleted answer" +msgstr "" + +#: forum/const.py:70 +msgid "marked offensive" +msgstr "" + +#: forum/const.py:71 +msgid "updated tags" +msgstr "" + +#: forum/const.py:72 +msgid "selected favorite" +msgstr "" + +#: forum/const.py:73 +msgid "completed user profile" +msgstr "" + +#: forum/const.py:74 +msgid "email update sent to user" +msgstr "" + +#: forum/const.py:78 +msgid "question_answered" +msgstr "" + +#: forum/const.py:79 +msgid "question_commented" +msgstr "" + +#: forum/const.py:80 +msgid "answer_commented" +msgstr "" + +#: forum/const.py:81 +msgid "answer_accepted" +msgstr "" + +#: forum/const.py:85 +msgid "[closed]" +msgstr "" + +#: forum/const.py:86 +msgid "[deleted]" +msgstr "" + +#: forum/const.py:87 forum/views/readers.py:565 forum/views/readers.py:584 +msgid "initial version" +msgstr "" + +#: forum/const.py:88 +msgid "retagged" +msgstr "" + +#: forum/const.py:92 +msgid "exclude ignored tags" +msgstr "" + +#: forum/const.py:92 +msgid "allow only selected tags" +msgstr "" + +#: forum/feed.py:18 +msgid " - " +msgstr "" + +#: forum/feed.py:18 +msgid "latest questions" +msgstr "" + +#: forum/forms.py:21 forum/skins/default/templates/answer_edit_tips.html:35 +#: forum/skins/default/templates/answer_edit_tips.html:39 +#: forum/skins/default/templates/question_edit_tips.html:32 +#: forum/skins/default/templates/question_edit_tips.html:37 +msgid "title" +msgstr "" + +#: forum/forms.py:22 +msgid "please enter a descriptive title for your question" +msgstr "" + +#: forum/forms.py:27 +msgid "title must be > 10 characters" +msgstr "" + +#: forum/forms.py:36 +msgid "content" +msgstr "" + +#: forum/forms.py:42 +msgid "question content must be > 10 characters" +msgstr "" + +#: forum/forms.py:52 forum/skins/default/templates/header.html:31 +#: forum/skins/default/templates/header.html:59 +msgid "tags" +msgstr "" + +#: forum/forms.py:54 +msgid "" +"Tags are short keywords, with no spaces within. Up to five tags can be used." +msgstr "" + +#: forum/forms.py:61 forum/skins/default/templates/question_retag.html:40 +msgid "tags are required" +msgstr "" + +#: forum/forms.py:67 +msgid "please use 5 tags or less" +msgstr "" + +#: forum/forms.py:70 +msgid "tags must be shorter than 20 characters" +msgstr "" + +#: forum/forms.py:74 +msgid "" +"please use following characters in tags: letters 'a-z', numbers, and " +"characters '.-_#'" +msgstr "" + +#: forum/forms.py:84 +#: forum/skins/default/templates/post_contributor_info.html:7 +#: forum/skins/default/templates/question_summary_list_roll.html:26 +#: forum/skins/default/templates/question_summary_list_roll.html:38 +msgid "community wiki" +msgstr "" + +#: forum/forms.py:85 +msgid "" +"if you choose community wiki option, the question and answer do not generate " +"points and name of author will not be shown" +msgstr "" + +#: forum/forms.py:101 +msgid "update summary:" +msgstr "" + +#: forum/forms.py:102 +msgid "" +"enter a brief summary of your revision (e.g. fixed spelling, grammar, " +"improved style, this field is optional)" +msgstr "" + +#: forum/forms.py:105 +msgid "Automatically accept user's contributions for the email updates" +msgstr "" + +#: forum/forms.py:118 +msgid "Your name:" +msgstr "" + +#: forum/forms.py:119 +msgid "Email (not shared with anyone):" +msgstr "" + +#: forum/forms.py:120 +msgid "Your message:" +msgstr "" + +#: forum/forms.py:202 +msgid "this email does not have to be linked to gravatar" +msgstr "" + +#: forum/forms.py:204 +msgid "Screen name" +msgstr "" + +#: forum/forms.py:205 +msgid "Real name" +msgstr "" + +#: forum/forms.py:206 +msgid "Website" +msgstr "" + +#: forum/forms.py:207 +msgid "Location" +msgstr "" + +#: forum/forms.py:208 +msgid "Date of birth" +msgstr "" + +#: forum/forms.py:208 +msgid "will not be shown, used to calculate age, format: YYYY-MM-DD" +msgstr "" + +#: forum/forms.py:209 forum/skins/default/templates/account_settings.html:21 +msgid "Profile" +msgstr "" + +#: forum/forms.py:240 forum/forms.py:241 +msgid "this email has already been registered, please use another one" +msgstr "" + +#: forum/forms.py:247 +msgid "Choose email tag filter" +msgstr "" + +#: forum/forms.py:263 forum/forms.py:264 +msgid "weekly" +msgstr "" + +#: forum/forms.py:263 forum/forms.py:264 +msgid "no email" +msgstr "" + +#: forum/forms.py:264 +msgid "daily" +msgstr "" + +#: forum/forms.py:279 +msgid "Asked by me" +msgstr "" + +#: forum/forms.py:282 +msgid "Answered by me" +msgstr "" + +#: forum/forms.py:285 +msgid "Individually selected" +msgstr "" + +#: forum/forms.py:288 +msgid "Entire forum (tag filtered)" +msgstr "" + +#: forum/urls.py:30 +msgid "upfiles/" +msgstr "" + +#: forum/urls.py:35 +msgid "about/" +msgstr "" + +#: forum/urls.py:36 +msgid "faq/" +msgstr "" + +#: forum/urls.py:37 +msgid "privacy/" +msgstr "" + +#: forum/urls.py:38 +msgid "logout/" +msgstr "" + +#: forum/urls.py:39 forum/urls.py:40 forum/urls.py:41 forum/urls.py:58 +msgid "answers/" +msgstr "" + +#: forum/urls.py:39 forum/urls.py:51 forum/urls.py:54 forum/urls.py:58 +msgid "comments/" +msgstr "" + +#: forum/urls.py:40 forum/urls.py:45 forum/urls.py:80 +#: forum/skins/default/templates/user_info.html:45 +msgid "edit/" +msgstr "" + +#: forum/urls.py:41 forum/urls.py:50 +msgid "revisions/" +msgstr "" + +#: forum/urls.py:42 forum/urls.py:43 forum/urls.py:44 forum/urls.py:45 +#: forum/urls.py:46 forum/urls.py:47 forum/urls.py:48 forum/urls.py:49 +#: forum/urls.py:50 forum/urls.py:51 forum/urls.py:54 +msgid "questions/" +msgstr "" + +#: forum/urls.py:43 forum_modules/books/urls.py:8 +msgid "ask/" +msgstr "" + +#: forum/urls.py:44 +msgid "unanswered/" +msgstr "" + +#: forum/urls.py:46 +msgid "close/" +msgstr "" + +#: forum/urls.py:47 +msgid "reopen/" +msgstr "" + +#: forum/urls.py:48 +msgid "answer/" +msgstr "" + +#: forum/urls.py:49 +msgid "vote/" +msgstr "" + +#: forum/urls.py:52 +msgid "command/" +msgstr "" + +#: forum/urls.py:54 forum/urls.py:58 +msgid "delete/" +msgstr "" + +#: forum/urls.py:62 forum/views/readers.py:436 +msgid "question/" +msgstr "" + +#: forum/urls.py:63 forum/urls.py:64 +msgid "tags/" +msgstr "" + +#: forum/urls.py:66 forum/urls.py:70 +msgid "mark-tag/" +msgstr "" + +#: forum/urls.py:66 +msgid "interesting/" +msgstr "" + +#: forum/urls.py:70 +msgid "ignored/" +msgstr "" + +#: forum/urls.py:74 +msgid "unmark-tag/" +msgstr "" + +#: forum/urls.py:78 forum/urls.py:80 forum/urls.py:81 +msgid "users/" +msgstr "" + +#: forum/urls.py:79 +msgid "moderate-user/" +msgstr "" + +#: forum/urls.py:82 forum/urls.py:83 +msgid "badges/" +msgstr "" + +#: forum/urls.py:84 +msgid "messages/" +msgstr "" + +#: forum/urls.py:84 +msgid "markread/" +msgstr "" + +#: forum/urls.py:86 +msgid "nimda/" +msgstr "" + +#: forum/urls.py:88 +msgid "upload/" +msgstr "" + +#: forum/urls.py:89 +msgid "search/" +msgstr "" + +#: forum/urls.py:90 +msgid "feedback/" +msgstr "" + +#: forum/urls.py:95 forum/urls.py:96 forum/urls.py:97 forum/urls.py:98 +#: forum/urls.py:99 forum/urls.py:100 forum/urls.py:101 forum/urls.py:102 +#: forum/urls.py:103 forum/urls.py:104 forum/urls.py:105 forum/urls.py:106 +#: forum_modules/localauth/urls.py:7 +msgid "account/" +msgstr "" + +#: forum/urls.py:95 forum/urls.py:97 forum/urls.py:98 +msgid "signin/" +msgstr "" + +#: forum/urls.py:96 +msgid "signout/" +msgstr "" + +#: forum/urls.py:99 +msgid "done/" +msgstr "" + +#: forum/urls.py:100 forum_modules/localauth/urls.py:7 +msgid "register/" +msgstr "" + +#: forum/urls.py:101 +msgid "validate/" +msgstr "" + +#: forum/urls.py:102 forum/urls.py:103 +msgid "tempsignin/" +msgstr "" + +#: forum/urls.py:104 +msgid "authsettings/" +msgstr "" + +#: forum/urls.py:105 forum/urls.py:106 +msgid "providers/" +msgstr "" + +#: forum/urls.py:105 +msgid "remove/" +msgstr "" + +#: forum/urls.py:106 +msgid "add/" +msgstr "" + +#: forum/urls.py:112 forum/urls.py:113 +msgid "admin/" +msgstr "" + +#: forum/authentication/forms.py:22 +msgid "Your account email" +msgstr "" + +#: forum/authentication/forms.py:24 +msgid "You cannot leave this field blank" +msgstr "" + +#: forum/authentication/forms.py:25 forum/utils/forms.py:102 +msgid "please enter a valid email address" +msgstr "" + +#: forum/authentication/forms.py:33 +msgid "Sorry, but this email is not on our database." +msgstr "" + +#: forum/authentication/forms.py:41 +msgid "okay, let's try!" +msgstr "" + +#: forum/authentication/forms.py:42 +msgid "no OSQA community email please, thanks" +msgstr "" + +#: forum/authentication/forms.py:45 +msgid "please choose one of the options above" +msgstr "" + +#: forum/authentication/forms.py:60 +msgid "Current password" +msgstr "" + +#: forum/authentication/forms.py:71 +msgid "" +"Old password is incorrect. Please enter the correct " +"password." +msgstr "" + +#: forum/management/commands/send_email_alerts.py:236 +msgid "email update message subject" +msgstr "" + +#: forum/management/commands/send_email_alerts.py:238 +#, python-format +msgid "%(name)s, this is an update message header for a question" +msgid_plural "%(name)s, this is an update message header for %(num)d questions" +msgstr[0] "" +msgstr[1] "" + +#: forum/management/commands/send_email_alerts.py:255 +msgid "new question" +msgstr "" + +#: forum/management/commands/send_email_alerts.py:272 +msgid "" +"Please visit the forum and see what's new! Could you spread the word about " +"it - can somebody you know help answering those questions or benefit from " +"posting one?" +msgstr "" + +#: forum/management/commands/send_email_alerts.py:284 +msgid "" +"Your most frequent subscription setting is 'daily' on selected questions. If " +"you are receiving more than one email per dayplease tell about this issue to " +"the forum administrator." +msgstr "" + +#: forum/management/commands/send_email_alerts.py:290 +msgid "" +"Your most frequent subscription setting is 'weekly' if you are receiving " +"this email more than once a week please report this issue to the forum " +"administrator." +msgstr "" + +#: forum/management/commands/send_email_alerts.py:296 +msgid "" +"There is a chance that you may be receiving links seen before - due to a " +"technicality that will eventually go away. " +msgstr "" + +#: forum/management/commands/send_email_alerts.py:311 +#, python-format +msgid "" +"go to %(link)s to change frequency of email updates or %(email)s " +"administrator" +msgstr "" + +#: forum/middleware/anon_user.py:34 +#, python-format +msgid "First time here? Check out the FAQ!" +msgstr "" + +#: forum/models/question.py:257 +#, python-format +msgid "%(author)s modified the question" +msgstr "" + +#: forum/models/question.py:261 +#, python-format +msgid "%(people)s posted %(new_answer_count)s new answers" +msgstr "" + +#: forum/models/question.py:266 +#, python-format +msgid "%(people)s commented the question" +msgstr "" + +#: forum/models/question.py:271 +#, python-format +msgid "%(people)s commented answers" +msgstr "" + +#: forum/models/question.py:273 +#, python-format +msgid "%(people)s commented an answer" +msgstr "" + +#: forum/models/repute.py:13 forum/skins/default/templates/badges.html:53 +msgid "gold" +msgstr "" + +#: forum/models/repute.py:14 forum/skins/default/templates/badges.html:61 +msgid "silver" +msgstr "" + +#: forum/models/repute.py:15 forum/skins/default/templates/badges.html:68 +msgid "bronze" +msgstr "" + +#: forum/models/tag.py:81 +msgid "interesting" +msgstr "" + +#: forum/models/tag.py:81 +msgid "ignored" +msgstr "" + +#: forum/models/user.py:45 +msgid "Entire forum" +msgstr "" + +#: forum/models/user.py:46 +msgid "Questions that I asked" +msgstr "" + +#: forum/models/user.py:47 +msgid "Questions that I answered" +msgstr "" + +#: forum/models/user.py:48 +msgid "Individually selected questions" +msgstr "" + +#: forum/models/user.py:51 +msgid "Weekly" +msgstr "" + +#: forum/models/user.py:52 +msgid "Daily" +msgstr "" + +#: forum/models/user.py:53 +msgid "No email" +msgstr "" + +#: forum/skins/default/templates/404.html:24 +msgid "Sorry, could not find the page you requested." +msgstr "" + +#: forum/skins/default/templates/404.html:26 +msgid "This might have happened for the following reasons:" +msgstr "" + +#: forum/skins/default/templates/404.html:28 +msgid "this question or answer has been deleted;" +msgstr "" + +#: forum/skins/default/templates/404.html:29 +msgid "url has error - please check it;" +msgstr "" + +#: forum/skins/default/templates/404.html:30 +msgid "" +"the page you tried to visit is protected or you don't have sufficient " +"points, see" +msgstr "" + +#: forum/skins/default/templates/404.html:31 +msgid "if you believe this error 404 should not have occured, please" +msgstr "" + +#: forum/skins/default/templates/404.html:32 +msgid "report this problem" +msgstr "" + +#: forum/skins/default/templates/404.html:41 +#: forum/skins/default/templates/500.html:27 +msgid "back to previous page" +msgstr "" + +#: forum/skins/default/templates/404.html:42 +msgid "see all questions" +msgstr "" + +#: forum/skins/default/templates/404.html:43 +msgid "see all tags" +msgstr "" + +#: forum/skins/default/templates/500.html:22 +msgid "sorry, system error" +msgstr "" + +#: forum/skins/default/templates/500.html:24 +msgid "system error log is recorded, error will be fixed as soon as possible" +msgstr "" + +#: forum/skins/default/templates/500.html:25 +msgid "please report the error to the site administrators if you wish" +msgstr "" + +#: forum/skins/default/templates/500.html:28 +msgid "see latest questions" +msgstr "" + +#: forum/skins/default/templates/500.html:29 +msgid "see tags" +msgstr "" + +#: forum/skins/default/templates/about.html:4 +#: forum/skins/default/templates/about.html:8 +msgid "About" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:4 +msgid "Account functions" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:29 +#: forum/skins/default/templates/auth/auth_settings.html:31 +msgid "Change password" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:30 +msgid "Give your account a new password." +msgstr "" + +#: forum/skins/default/templates/account_settings.html:32 +msgid "Change email " +msgstr "" + +#: forum/skins/default/templates/account_settings.html:33 +msgid "Add or update the email address associated with your account." +msgstr "" + +#: forum/skins/default/templates/account_settings.html:35 +msgid "Change OpenID" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:36 +msgid "Change openid associated to your account" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:39 +msgid "Delete account" +msgstr "" + +#: forum/skins/default/templates/account_settings.html:40 +msgid "Erase your username and all your data from website" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:5 +#: forum/skins/default/templates/answer_edit.html:48 +msgid "Edit answer" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:25 +#: forum/skins/default/templates/answer_edit.html:28 +#: forum/skins/default/templates/ask.html:26 +#: forum/skins/default/templates/ask.html:29 +#: forum/skins/default/templates/question.html:46 +#: forum/skins/default/templates/question.html:49 +#: forum/skins/default/templates/question_edit.html:25 +#: forum/skins/default/templates/question_edit.html:28 +msgid "hide preview" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:28 +#: forum/skins/default/templates/ask.html:29 +#: forum/skins/default/templates/question.html:49 +#: forum/skins/default/templates/question_edit.html:28 +msgid "show preview" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:48 +#: forum/skins/default/templates/question_edit.html:66 +#: forum/skins/default/templates/question_retag.html:54 +#: forum/skins/default/templates/revisions_answer.html:38 +#: forum/skins/default/templates/revisions_question.html:38 +msgid "back" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:53 +#: forum/skins/default/templates/question_edit.html:71 +#: forum/skins/default/templates/revisions_answer.html:52 +#: forum/skins/default/templates/revisions_question.html:52 +msgid "revision" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:56 +#: forum/skins/default/templates/question_edit.html:75 +msgid "select revision" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:63 +#: forum/skins/default/templates/ask.html:97 +#: forum/skins/default/templates/question.html:433 +#: forum/skins/default/templates/question_edit.html:92 +msgid "Toggle the real time Markdown editor preview" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:63 +#: forum/skins/default/templates/ask.html:97 +#: forum/skins/default/templates/question.html:434 +#: forum/skins/default/templates/question_edit.html:92 +msgid "toggle preview" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:72 +#: forum/skins/default/templates/question_edit.html:118 +#: forum/skins/default/templates/question_retag.html:75 +msgid "Save edit" +msgstr "" + +#: forum/skins/default/templates/answer_edit.html:73 +#: forum/skins/default/templates/close.html:29 +#: forum/skins/default/templates/feedback.html:50 +#: forum/skins/default/templates/question_edit.html:119 +#: forum/skins/default/templates/question_retag.html:76 +#: forum/skins/default/templates/reopen.html:30 +#: forum/skins/default/templates/user_edit.html:87 +msgid "Cancel" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:4 +msgid "answer tips" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:7 +msgid "please make your answer relevant to this community" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:10 +msgid "try to give an answer, rather than engage into a discussion" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:13 +msgid "please try to provide details" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:16 +#: forum/skins/default/templates/question_edit_tips.html:13 +msgid "be clear and concise" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:20 +#: forum/skins/default/templates/question_edit_tips.html:17 +msgid "see frequently asked questions" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:26 +#: forum/skins/default/templates/question_edit_tips.html:23 +msgid "Markdown tips" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:29 +#: forum/skins/default/templates/question_edit_tips.html:26 +msgid "*italic* or __italic__" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:32 +#: forum/skins/default/templates/question_edit_tips.html:29 +msgid "**bold** or __bold__" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:35 +#: forum/skins/default/templates/question_edit_tips.html:32 +msgid "link" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:35 +#: forum/skins/default/templates/answer_edit_tips.html:39 +#: forum/skins/default/templates/question_edit_tips.html:32 +#: forum/skins/default/templates/question_edit_tips.html:37 +msgid "text" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:39 +#: forum/skins/default/templates/question_edit_tips.html:37 +msgid "image" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:43 +#: forum/skins/default/templates/question_edit_tips.html:41 +msgid "numbered list:" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:48 +#: forum/skins/default/templates/question_edit_tips.html:46 +msgid "basic HTML tags are also supported" +msgstr "" + +#: forum/skins/default/templates/answer_edit_tips.html:52 +#: forum/skins/default/templates/question_edit_tips.html:50 +msgid "learn more about Markdown" +msgstr "" + +#: forum/skins/default/templates/ask.html:5 +#: forum/skins/default/templates/ask.html:61 +msgid "Ask a question" +msgstr "" + +#: forum/skins/default/templates/ask.html:68 +msgid "login to post question info" +msgstr "" + +#: forum/skins/default/templates/ask.html:74 +#, python-format +msgid "" +"must have valid %(email)s to post, \n" +" see %(email_validation_faq_url)s\n" +" " +msgstr "" + +#: forum/skins/default/templates/ask.html:112 +msgid "(required)" +msgstr "" + +#: forum/skins/default/templates/ask.html:119 +msgid "Login/signup to post your question" +msgstr "" + +#: forum/skins/default/templates/ask.html:121 +msgid "Ask your question" +msgstr "" + +#: forum/skins/default/templates/badge.html:6 +#: forum/skins/default/templates/badge.html:17 +msgid "Badge" +msgstr "" + +#: forum/skins/default/templates/badge.html:26 +msgid "The users have been awarded with badges:" +msgstr "" + +#: forum/skins/default/templates/badges.html:6 +msgid "Badges summary" +msgstr "" + +#: forum/skins/default/templates/badges.html:17 +msgid "Badges" +msgstr "" + +#: forum/skins/default/templates/badges.html:21 +msgid "Community gives you awards for your questions, answers and votes." +msgstr "" + +#: forum/skins/default/templates/badges.html:22 +#, python-format +msgid "" +"Below is the list of available badges and number \n" +" of times each type of badge has been awarded. Give us feedback at %" +"(feedback_faq_url)s.\n" +" " +msgstr "" + +#: forum/skins/default/templates/badges.html:50 +msgid "Community badges" +msgstr "" + +#: forum/skins/default/templates/badges.html:56 +msgid "gold badge description" +msgstr "" + +#: forum/skins/default/templates/badges.html:64 +msgid "silver badge description" +msgstr "" + +#: forum/skins/default/templates/badges.html:67 +msgid "bronze badge: often given as a special honor" +msgstr "" + +#: forum/skins/default/templates/badges.html:71 +msgid "bronze badge description" +msgstr "" + +#: forum/skins/default/templates/book.html:7 +msgid "reading channel" +msgstr "" + +#: forum/skins/default/templates/book.html:26 +msgid "[author]" +msgstr "" + +#: forum/skins/default/templates/book.html:30 +msgid "[publisher]" +msgstr "" + +#: forum/skins/default/templates/book.html:34 +msgid "[publication date]" +msgstr "" + +#: forum/skins/default/templates/book.html:38 +msgid "[price]" +msgstr "" + +#: forum/skins/default/templates/book.html:39 +msgid "currency unit" +msgstr "" + +#: forum/skins/default/templates/book.html:42 +msgid "[pages]" +msgstr "" + +#: forum/skins/default/templates/book.html:43 +msgid "pages abbreviation" +msgstr "" + +#: forum/skins/default/templates/book.html:46 +msgid "[tags]" +msgstr "" + +#: forum/skins/default/templates/book.html:56 +msgid "author blog" +msgstr "" + +#: forum/skins/default/templates/book.html:62 +msgid "book directory" +msgstr "" + +#: forum/skins/default/templates/book.html:66 +msgid "buy online" +msgstr "" + +#: forum/skins/default/templates/book.html:79 +msgid "reader questions" +msgstr "" + +#: forum/skins/default/templates/book.html:82 +msgid "ask the author" +msgstr "" + +#: forum/skins/default/templates/book.html:88 +#: forum/skins/default/templates/book.html:93 +#: forum/skins/default/templates/users_questions.html:18 +msgid "this question was selected as favorite" +msgstr "" + +#: forum/skins/default/templates/book.html:88 +#: forum/skins/default/templates/book.html:93 +#: forum/skins/default/templates/users_questions.html:11 +#: forum/skins/default/templates/users_questions.html:18 +msgid "number of times" +msgstr "" + +#: forum/skins/default/templates/book.html:105 +#: forum/skins/default/templates/index_.html:40 +#: forum/skins/default/templates/question_list.html:14 +#: forum/skins/default/templates/question_summary_list_roll.html:14 +#: forum/skins/default/templates/users_questions.html:32 +msgid "votes" +msgstr "" + +#: forum/skins/default/templates/book.html:108 +msgid "the answer has been accepted to be correct" +msgstr "" + +#: forum/skins/default/templates/book.html:115 +#: forum/skins/default/templates/index_.html:48 +#: forum/skins/default/templates/question_list.html:22 +#: forum/skins/default/templates/question_summary_list_roll.html:15 +#: forum/skins/default/templates/users_questions.html:40 +msgid "views" +msgstr "" + +#: forum/skins/default/templates/book.html:125 +#: forum/skins/default/templates/index_.html:63 +#: forum/skins/default/templates/question.html:480 +#: forum/skins/default/templates/question_list.html:36 +#: forum/skins/default/templates/question_summary_list_roll.html:52 +#: forum/skins/default/templates/tags.html:49 +#: forum/skins/default/templates/users_questions.html:52 +msgid "using tags" +msgstr "" + +#: forum/skins/default/templates/book.html:147 +msgid "subscribe to book RSS feed" +msgstr "" + +#: forum/skins/default/templates/book.html:147 +#: forum/skins/default/templates/index.html:85 +#: forum/skins/default/templates/index_.html:114 +msgid "subscribe to the questions feed" +msgstr "" + +#: forum/skins/default/templates/close.html:6 +#: forum/skins/default/templates/close.html:16 +msgid "Close question" +msgstr "" + +#: forum/skins/default/templates/close.html:19 +msgid "Close the question" +msgstr "" + +#: forum/skins/default/templates/close.html:25 +msgid "Reasons" +msgstr "" + +#: forum/skins/default/templates/close.html:28 +msgid "OK to close" +msgstr "" + +#: forum/skins/default/templates/email_base.html:11 +msgid "home" +msgstr "" + +#: forum/skins/default/templates/faq.html:11 +msgid "Frequently Asked Questions " +msgstr "" + +#: forum/skins/default/templates/faq.html:16 +msgid "What kinds of questions can I ask here?" +msgstr "" + +#: forum/skins/default/templates/faq.html:17 +msgid "" +"Most importanly - questions should be relevant to this " +"community." +msgstr "" + +#: forum/skins/default/templates/faq.html:18 +msgid "" +"Before asking the question - please make sure to use search to see whether " +"your question has alredy been answered." +msgstr "" + +#: forum/skins/default/templates/faq.html:21 +msgid "What questions should I avoid asking?" +msgstr "" + +#: forum/skins/default/templates/faq.html:22 +msgid "" +"Please avoid asking questions that are not relevant to this community, too " +"subjective and argumentative." +msgstr "" + +#: forum/skins/default/templates/faq.html:27 +msgid "What should I avoid in my answers?" +msgstr "" + +#: forum/skins/default/templates/faq.html:28 +msgid "" +"is a Q&A site, not a discussion group. Therefore - please avoid having " +"discussions in your answers, comment facility allows some space for brief " +"discussions." +msgstr "" + +#: forum/skins/default/templates/faq.html:32 +msgid "Who moderates this community?" +msgstr "" + +#: forum/skins/default/templates/faq.html:33 +msgid "The short answer is: you." +msgstr "" + +#: forum/skins/default/templates/faq.html:34 +msgid "This website is moderated by the users." +msgstr "" + +#: forum/skins/default/templates/faq.html:35 +msgid "" +"The reputation system allows users earn the authorization to perform a " +"variety of moderation tasks." +msgstr "" + +#: forum/skins/default/templates/faq.html:40 +msgid "How does reputation system work?" +msgstr "" + +#: forum/skins/default/templates/faq.html:41 +msgid "Rep system summary" +msgstr "" + +#: forum/skins/default/templates/faq.html:42 +msgid "" +"For example, if you ask an interesting question or give a helpful answer, " +"your input will be upvoted. On the other hand if the answer is misleading - " +"it will be downvoted. Each vote in favor will generate 10 " +"points, each vote against will subtract 2 points. There is " +"a limit of 200 points that can be accumulated per question " +"or answer. The table below explains reputation point requirements for each " +"type of moderation task." +msgstr "" + +#: forum/skins/default/templates/faq.html:53 +#: forum/skins/default/templates/user_votes.html:15 +msgid "upvote" +msgstr "" + +#: forum/skins/default/templates/faq.html:57 +msgid "use tags" +msgstr "" + +#: forum/skins/default/templates/faq.html:62 +msgid "add comments" +msgstr "" + +#: forum/skins/default/templates/faq.html:66 +#: forum/skins/default/templates/user_votes.html:17 +msgid "downvote" +msgstr "" + +#: forum/skins/default/templates/faq.html:69 +msgid "open and close own questions" +msgstr "" + +#: forum/skins/default/templates/faq.html:73 +msgid "retag questions" +msgstr "" + +#: forum/skins/default/templates/faq.html:78 +msgid "edit community wiki questions" +msgstr "" + +#: forum/skins/default/templates/faq.html:83 +msgid "edit any answer" +msgstr "" + +#: forum/skins/default/templates/faq.html:87 +msgid "open any closed question" +msgstr "" + +#: forum/skins/default/templates/faq.html:91 +msgid "delete any comment" +msgstr "" + +#: forum/skins/default/templates/faq.html:95 +msgid "delete any questions and answers and perform other moderation tasks" +msgstr "" + +#: forum/skins/default/templates/faq.html:103 +msgid "how to validate email title" +msgstr "" + +#: forum/skins/default/templates/faq.html:105 +#, python-format +msgid "" +"how to validate email info with %(send_email_key_url)s %(gravatar_faq_url)s" +msgstr "" + +#: forum/skins/default/templates/faq.html:110 +msgid "what is gravatar" +msgstr "" + +#: forum/skins/default/templates/faq.html:111 +msgid "gravatar faq info" +msgstr "" + +#: forum/skins/default/templates/faq.html:114 +msgid "To register, do I need to create new password?" +msgstr "" + +#: forum/skins/default/templates/faq.html:115 +msgid "" +"No, you don't have to. You can login through any service that supports " +"OpenID, e.g. Google, Yahoo, AOL, etc." +msgstr "" + +#: forum/skins/default/templates/faq.html:116 +msgid "Login now!" +msgstr "" + +#: forum/skins/default/templates/faq.html:121 +msgid "Why other people can edit my questions/answers?" +msgstr "" + +#: forum/skins/default/templates/faq.html:122 +msgid "Goal of this site is..." +msgstr "" + +#: forum/skins/default/templates/faq.html:122 +msgid "" +"So questions and answers can be edited like wiki pages by experienced users " +"of this site and this improves the overall quality of the knowledge base " +"content." +msgstr "" + +#: forum/skins/default/templates/faq.html:123 +msgid "If this approach is not for you, we respect your choice." +msgstr "" + +#: forum/skins/default/templates/faq.html:127 +msgid "Still have questions?" +msgstr "" + +#: forum/skins/default/templates/faq.html:128 +#, python-format +msgid "" +"Please ask your question at %(ask_question_url)s, help make our community " +"better!" +msgstr "" + +#: forum/skins/default/templates/faq.html:130 +#: forum/skins/default/templates/header.html:30 +#: forum/skins/default/templates/header.html:58 +msgid "questions" +msgstr "" + +#: forum/skins/default/templates/faq.html:130 +#: forum/skins/default/templates/index.html:92 +#: forum/skins/default/templates/index_.html:121 +msgid "." +msgstr "" + +#: forum/skins/default/templates/feedback.html:6 +msgid "Feedback" +msgstr "" + +#: forum/skins/default/templates/feedback.html:11 +msgid "Give us your feedback!" +msgstr "" + +#: forum/skins/default/templates/feedback.html:17 +#, python-format +msgid "" +"\n" +" Dear %(user_name)s, we look " +"forward to hearing your feedback. \n" +" Please type and send us your message below.\n" +" " +msgstr "" + +#: forum/skins/default/templates/feedback.html:24 +msgid "" +"\n" +" Dear visitor, we look forward to " +"hearing your feedback.\n" +" Please type and send us your message below.\n" +" " +msgstr "" + +#: forum/skins/default/templates/feedback.html:41 +msgid "(this field is required)" +msgstr "" + +#: forum/skins/default/templates/feedback.html:49 +msgid "Send Feedback" +msgstr "" + +#: forum/skins/default/templates/footer.html:8 +#: forum/skins/default/templates/header.html:16 +#: forum/skins/default/templates/index.html:44 +#: forum/skins/default/templates/index_.html:77 +msgid "about" +msgstr "" + +#: forum/skins/default/templates/footer.html:9 +#: forum/skins/default/templates/header.html:17 +#: forum/skins/default/templates/index.html:45 +#: forum/skins/default/templates/index_.html:78 +#: forum/skins/default/templates/question_edit_tips.html:17 +msgid "faq" +msgstr "" + +#: forum/skins/default/templates/footer.html:10 +msgid "privacy policy" +msgstr "" + +#: forum/skins/default/templates/footer.html:19 +msgid "give feedback" +msgstr "" + +#: forum/skins/default/templates/header.html:9 +msgid "administration" +msgstr "" + +#: forum/skins/default/templates/header.html:12 +msgid "logout" +msgstr "" + +#: forum/skins/default/templates/header.html:14 +msgid "login" +msgstr "" + +#: forum/skins/default/templates/header.html:24 +msgid "back to home page" +msgstr "" + +#: forum/skins/default/templates/header.html:32 +#: forum/skins/default/templates/header.html:60 +msgid "users" +msgstr "" + +#: forum/skins/default/templates/header.html:34 +msgid "books" +msgstr "" + +#: forum/skins/default/templates/header.html:36 +#: forum/templatetags/extra_tags.py:166 forum/templatetags/extra_tags.py:195 +msgid "badges" +msgstr "" + +#: forum/skins/default/templates/header.html:37 +msgid "unanswered questions" +msgstr "" + +#: forum/skins/default/templates/header.html:39 +msgid "ask a question" +msgstr "" + +#: forum/skins/default/templates/header.html:54 +msgid "search" +msgstr "" + +#: forum/skins/default/templates/index.html:9 +#: forum/skins/default/templates/index_.html:8 +msgid "Home" +msgstr "" + +#: forum/skins/default/templates/index.html:26 +#: forum/skins/default/templates/index_.html:25 +#: forum/skins/default/templates/questions.html:8 +msgid "Questions" +msgstr "" + +#: forum/skins/default/templates/index.html:28 +#: forum/skins/default/templates/index_.html:27 +msgid "last updated questions" +msgstr "" + +#: forum/skins/default/templates/index.html:28 +#: forum/skins/default/templates/index_.html:27 +#: forum/skins/default/templates/questions.html:47 +msgid "newest" +msgstr "" + +#: forum/skins/default/templates/index.html:29 +#: forum/skins/default/templates/index_.html:28 +#: forum/skins/default/templates/questions.html:49 +msgid "hottest questions" +msgstr "" + +#: forum/skins/default/templates/index.html:29 +#: forum/skins/default/templates/index_.html:28 +#: forum/skins/default/templates/questions.html:49 +msgid "hottest" +msgstr "" + +#: forum/skins/default/templates/index.html:30 +#: forum/skins/default/templates/index_.html:29 +#: forum/skins/default/templates/questions.html:50 +msgid "most voted questions" +msgstr "" + +#: forum/skins/default/templates/index.html:30 +#: forum/skins/default/templates/index_.html:29 +#: forum/skins/default/templates/questions.html:50 +msgid "most voted" +msgstr "" + +#: forum/skins/default/templates/index.html:31 +#: forum/skins/default/templates/index_.html:30 +msgid "all questions" +msgstr "" + +#: forum/skins/default/templates/index.html:41 +#: forum/skins/default/templates/index_.html:74 +msgid "welcome to website" +msgstr "" + +#: forum/skins/default/templates/index.html:52 +#: forum/skins/default/templates/index_.html:85 +msgid "Recent tags" +msgstr "" + +#: forum/skins/default/templates/index.html:58 +#: forum/skins/default/templates/index_.html:90 +#: forum/skins/default/templates/question.html:134 +#, python-format +msgid "see questions tagged '%(tagname)s'" +msgstr "" + +#: forum/skins/default/templates/index.html:62 +#: forum/skins/default/templates/index.html:92 +#: forum/skins/default/templates/index_.html:93 +#: forum/skins/default/templates/index_.html:121 +msgid "popular tags" +msgstr "" + +#: forum/skins/default/templates/index.html:67 +#: forum/skins/default/templates/index_.html:98 +msgid "Recent awards" +msgstr "" + +#: forum/skins/default/templates/index.html:80 +#: forum/skins/default/templates/index_.html:109 +msgid "all awards" +msgstr "" + +#: forum/skins/default/templates/index.html:85 +#: forum/skins/default/templates/index_.html:114 +msgid "subscribe to last 30 questions by RSS" +msgstr "" + +#: forum/skins/default/templates/index.html:92 +#: forum/skins/default/templates/index_.html:121 +msgid "Still looking for more? See" +msgstr "" + +#: forum/skins/default/templates/index.html:92 +#: forum/skins/default/templates/index_.html:121 +msgid "complete list of questions" +msgstr "" + +#: forum/skins/default/templates/index.html:92 +#: forum/skins/default/templates/index_.html:121 +#: forum/skins/default/templates/auth/signup.html:32 +msgid "or" +msgstr "" + +#: forum/skins/default/templates/index.html:92 +#: forum/skins/default/templates/index_.html:121 +msgid "Please help us answer" +msgstr "" + +#: forum/skins/default/templates/index.html:92 +#: forum/skins/default/templates/index_.html:121 +msgid "list of unanswered questions" +msgstr "" + +#: forum/skins/default/templates/index_.html:42 +#: forum/skins/default/templates/question_list.html:16 +#: forum/skins/default/templates/users_questions.html:34 +msgid "this answer has been accepted to be correct" +msgstr "" + +#: forum/skins/default/templates/index_.html:44 +#: forum/skins/default/templates/question_list.html:18 +#: forum/skins/default/templates/question_summary_list_roll.html:13 +#: forum/skins/default/templates/users_questions.html:36 +msgid "answers" +msgstr "" + +#: forum/skins/default/templates/index_.html:63 +#: forum/skins/default/templates/question.html:480 +#: forum/skins/default/templates/question_list.html:36 +#: forum/skins/default/templates/question_summary_list_roll.html:52 +#: forum/skins/default/templates/tags.html:49 +#: forum/skins/default/templates/users_questions.html:52 +msgid "see questions tagged" +msgstr "" + +#: forum/skins/default/templates/logout.html:6 +#: forum/skins/default/templates/logout.html:16 +msgid "Logout" +msgstr "" + +#: forum/skins/default/templates/logout.html:19 +msgid "" +"As a registered user you can login with your OpenID, log out of the site or " +"permanently remove your account." +msgstr "" + +#: forum/skins/default/templates/logout.html:20 +msgid "Logout now" +msgstr "" + +#: forum/skins/default/templates/notarobot.html:3 +msgid "Please prove that you are a Human Being" +msgstr "" + +#: forum/skins/default/templates/notarobot.html:10 +msgid "I am a Human Being" +msgstr "" + +#: forum/skins/default/templates/pagesize.html:6 +msgid "posts per page" +msgstr "" + +#: forum/skins/default/templates/paginator.html:6 +#: forum/skins/default/templates/paginator.html:7 +msgid "previous" +msgstr "" + +#: forum/skins/default/templates/paginator.html:19 +msgid "current page" +msgstr "" + +#: forum/skins/default/templates/paginator.html:22 +#: forum/skins/default/templates/paginator.html:29 +msgid "page number " +msgstr "" + +#: forum/skins/default/templates/paginator.html:22 +#: forum/skins/default/templates/paginator.html:29 +msgid "number - make blank in english" +msgstr "" + +#: forum/skins/default/templates/paginator.html:33 +msgid "next page" +msgstr "" + +#: forum/skins/default/templates/post_contributor_info.html:9 +#, python-format +msgid "" +"\n" +" one revision\n" +" " +msgid_plural "" +"\n" +" %(rev_count)s revisions\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/post_contributor_info.html:19 +msgid "asked" +msgstr "" + +#: forum/skins/default/templates/post_contributor_info.html:22 +msgid "answered" +msgstr "" + +#: forum/skins/default/templates/post_contributor_info.html:24 +msgid "posted" +msgstr "" + +#: forum/skins/default/templates/post_contributor_info.html:45 +msgid "updated" +msgstr "" + +#: forum/skins/default/templates/privacy.html:6 +#: forum/skins/default/templates/privacy.html:11 +msgid "Privacy policy" +msgstr "" + +#: forum/skins/default/templates/privacy.html:15 +msgid "general message about privacy" +msgstr "" + +#: forum/skins/default/templates/privacy.html:18 +msgid "Site Visitors" +msgstr "" + +#: forum/skins/default/templates/privacy.html:20 +msgid "what technical information is collected about visitors" +msgstr "" + +#: forum/skins/default/templates/privacy.html:23 +msgid "Personal Information" +msgstr "" + +#: forum/skins/default/templates/privacy.html:25 +msgid "details on personal information policies" +msgstr "" + +#: forum/skins/default/templates/privacy.html:28 +msgid "Other Services" +msgstr "" + +#: forum/skins/default/templates/privacy.html:30 +msgid "details on sharing data with third parties" +msgstr "" + +#: forum/skins/default/templates/privacy.html:35 +msgid "cookie policy details" +msgstr "" + +#: forum/skins/default/templates/privacy.html:37 +msgid "Policy Changes" +msgstr "" + +#: forum/skins/default/templates/privacy.html:38 +msgid "how privacy policies can be changed" +msgstr "" + +#: forum/skins/default/templates/question.html:78 +#: forum/skins/default/templates/question.html:79 +#: forum/skins/default/templates/question.html:95 +#: forum/skins/default/templates/question.html:97 +msgid "i like this post (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:81 +#: forum/skins/default/templates/question.html:99 +#: forum/skins/default/templates/question.html:256 +msgid "current number of votes" +msgstr "" + +#: forum/skins/default/templates/question.html:90 +#: forum/skins/default/templates/question.html:91 +#: forum/skins/default/templates/question.html:104 +#: forum/skins/default/templates/question.html:105 +msgid "i dont like this post (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:109 +#: forum/skins/default/templates/question.html:110 +msgid "mark this question as favorite (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:116 +#: forum/skins/default/templates/question.html:117 +msgid "remove favorite mark from this question (click again to restore mark)" +msgstr "" + +#: forum/skins/default/templates/question.html:139 +#: forum/skins/default/templates/question.html:293 +#: forum/skins/default/templates/revisions_answer.html:58 +#: forum/skins/default/templates/revisions_question.html:58 +msgid "edit" +msgstr "" + +#: forum/skins/default/templates/question.html:144 +msgid "reopen" +msgstr "" + +#: forum/skins/default/templates/question.html:148 +msgid "close" +msgstr "" + +#: forum/skins/default/templates/question.html:154 +#: forum/skins/default/templates/question.html:298 +msgid "" +"report as offensive (i.e containing spam, advertising, malicious text, etc.)" +msgstr "" + +#: forum/skins/default/templates/question.html:155 +#: forum/skins/default/templates/question.html:299 +msgid "flag offensive" +msgstr "" + +#: forum/skins/default/templates/question.html:163 +#: forum/skins/default/templates/question.html:310 +msgid "delete" +msgstr "" + +#: forum/skins/default/templates/question.html:181 +#: forum/skins/default/templates/question.html:330 +msgid "delete this comment" +msgstr "" + +#: forum/skins/default/templates/question.html:192 +#: forum/skins/default/templates/question.html:341 +msgid "add comment" +msgstr "" + +#: forum/skins/default/templates/question.html:196 +#, python-format +msgid "" +"\n" +" see one more \n" +" " +msgid_plural "" +"\n" +" see %(counter)s " +"more\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:202 +#, python-format +msgid "" +"\n" +" see one more " +"comment\n" +" " +msgid_plural "" +"\n" +" see %(counter)s " +"more comments\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:218 +#, python-format +msgid "" +"The question has been closed for the following reason \"%(close_reason)s\" by" +msgstr "" + +#: forum/skins/default/templates/question.html:220 +#, python-format +msgid "close date %(closed_at)s" +msgstr "" + +#: forum/skins/default/templates/question.html:228 +#, python-format +msgid "" +"\n" +" One Answer:\n" +" " +msgid_plural "" +"\n" +" %(counter)s Answers:\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:236 +msgid "oldest answers will be shown first" +msgstr "" + +#: forum/skins/default/templates/question.html:236 +msgid "oldest answers" +msgstr "" + +#: forum/skins/default/templates/question.html:238 +msgid "newest answers will be shown first" +msgstr "" + +#: forum/skins/default/templates/question.html:238 +msgid "newest answers" +msgstr "" + +#: forum/skins/default/templates/question.html:240 +msgid "most voted answers will be shown first" +msgstr "" + +#: forum/skins/default/templates/question.html:240 +msgid "popular answers" +msgstr "" + +#: forum/skins/default/templates/question.html:254 +#: forum/skins/default/templates/question.html:255 +msgid "i like this answer (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:261 +#: forum/skins/default/templates/question.html:262 +msgid "i dont like this answer (click again to cancel)" +msgstr "" + +#: forum/skins/default/templates/question.html:267 +#: forum/skins/default/templates/question.html:268 +msgid "mark this answer as favorite (click again to undo)" +msgstr "" + +#: forum/skins/default/templates/question.html:273 +#: forum/skins/default/templates/question.html:274 +msgid "the author of the question has selected this answer as correct" +msgstr "" + +#: forum/skins/default/templates/question.html:287 +msgid "answer permanent link" +msgstr "" + +#: forum/skins/default/templates/question.html:288 +msgid "permanent link" +msgstr "" + +#: forum/skins/default/templates/question.html:310 +msgid "undelete" +msgstr "" + +#: forum/skins/default/templates/question.html:345 +#, python-format +msgid "" +"\n" +" see one more \n" +" " +msgid_plural "" +"\n" +" see %" +"(counter)s more\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:351 +#, python-format +msgid "" +"\n" +" see one more comment\n" +" " +msgid_plural "" +"\n" +" see %" +"(counter)s more comments\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/question.html:377 +#: forum/skins/default/templates/question.html:380 +msgid "Notify me once a day when there are any new answers" +msgstr "" + +#: forum/skins/default/templates/question.html:383 +msgid "Notify me weekly when there are any new answers" +msgstr "" + +#: forum/skins/default/templates/question.html:388 +#, python-format +msgid "" +"\n" +" You can always adjust frequency of email updates from your %" +"(profile_url)s\n" +" " +msgstr "" + +#: forum/skins/default/templates/question.html:395 +msgid "once you sign in you will be able to subscribe for any updates here" +msgstr "" + +#: forum/skins/default/templates/question.html:406 +msgid "Your answer" +msgstr "" + +#: forum/skins/default/templates/question.html:408 +msgid "Be the first one to answer this question!" +msgstr "" + +#: forum/skins/default/templates/question.html:414 +msgid "you can answer anonymously and then login" +msgstr "" + +#: forum/skins/default/templates/question.html:418 +msgid "answer your own question only to give an answer" +msgstr "" + +#: forum/skins/default/templates/question.html:420 +msgid "please only give an answer, no discussions" +msgstr "" + +#: forum/skins/default/templates/question.html:456 +msgid "Login/Signup to Post Your Answer" +msgstr "" + +#: forum/skins/default/templates/question.html:459 +msgid "Answer Your Own Question" +msgstr "" + +#: forum/skins/default/templates/question.html:461 +msgid "Answer the question" +msgstr "" + +#: forum/skins/default/templates/question.html:475 +msgid "Question tags" +msgstr "" + +#: forum/skins/default/templates/question.html:485 +msgid "question asked" +msgstr "" + +#: forum/skins/default/templates/question.html:488 +msgid "question was seen" +msgstr "" + +#: forum/skins/default/templates/question.html:488 +msgid "times" +msgstr "" + +#: forum/skins/default/templates/question.html:491 +msgid "last updated" +msgstr "" + +#: forum/skins/default/templates/question.html:497 +msgid "Related questions" +msgstr "" + +#: forum/skins/default/templates/question_edit.html:5 +#: forum/skins/default/templates/question_edit.html:66 +msgid "Edit question" +msgstr "" + +#: forum/skins/default/templates/question_edit_tips.html:4 +msgid "question tips" +msgstr "" + +#: forum/skins/default/templates/question_edit_tips.html:7 +msgid "please ask a relevant question" +msgstr "" + +#: forum/skins/default/templates/question_edit_tips.html:10 +msgid "please try provide enough details" +msgstr "" + +#: forum/skins/default/templates/question_retag.html:5 +#: forum/skins/default/templates/question_retag.html:54 +msgid "Change tags" +msgstr "" + +#: forum/skins/default/templates/question_retag.html:41 +msgid "up to 5 tags, less than 20 characters each" +msgstr "" + +#: forum/skins/default/templates/question_retag.html:84 +msgid "Why use and modify tags?" +msgstr "" + +#: forum/skins/default/templates/question_retag.html:87 +msgid "tags help us keep Questions organized" +msgstr "" + +#: forum/skins/default/templates/question_retag.html:95 +msgid "tag editors receive special awards from the community" +msgstr "" + +#: forum/skins/default/templates/questions.html:29 +msgid "Found by tags" +msgstr "" + +#: forum/skins/default/templates/questions.html:33 +msgid "Search results" +msgstr "" + +#: forum/skins/default/templates/questions.html:35 +msgid "Found by title" +msgstr "" + +#: forum/skins/default/templates/questions.html:39 +msgid "Unanswered questions" +msgstr "" + +#: forum/skins/default/templates/questions.html:41 +msgid "All questions" +msgstr "" + +#: forum/skins/default/templates/questions.html:47 +msgid "most recently asked questions" +msgstr "" + +#: forum/skins/default/templates/questions.html:48 +msgid "most recently updated questions" +msgstr "" + +#: forum/skins/default/templates/questions.html:48 +msgid "active" +msgstr "" + +#: forum/skins/default/templates/questions.html:64 +#, python-format +msgid "" +"\n" +" have total %(q_num)s questions tagged %(tagname)s\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s questions tagged %(tagname)s\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/questions.html:72 +#, python-format +msgid "" +"\n" +" have total %(q_num)s questions containing %(searchtitle)" +"s in full text\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s questions containing %(searchtitle)" +"s in full text\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/questions.html:78 +#, python-format +msgid "" +"\n" +" have total %(q_num)s questions containing %(searchtitle)" +"s\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s questions containing %(searchtitle)" +"s\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/questions.html:86 +#, python-format +msgid "" +"\n" +" have total %(q_num)s unanswered questions\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s unanswered questions\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/questions.html:92 +#, python-format +msgid "" +"\n" +" have total %(q_num)s question\n" +" " +msgid_plural "" +"\n" +" have total %(q_num)s questions\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/questions.html:102 +msgid "latest questions info" +msgstr "" + +#: forum/skins/default/templates/questions.html:106 +msgid "Questions are sorted by the time of last update." +msgstr "" + +#: forum/skins/default/templates/questions.html:107 +msgid "Most recently answered ones are shown first." +msgstr "" + +#: forum/skins/default/templates/questions.html:111 +msgid "Questions sorted by number of responses." +msgstr "" + +#: forum/skins/default/templates/questions.html:112 +msgid "Most answered questions are shown first." +msgstr "" + +#: forum/skins/default/templates/questions.html:116 +msgid "Questions are sorted by the number of votes." +msgstr "" + +#: forum/skins/default/templates/questions.html:117 +msgid "Most voted questions are shown first." +msgstr "" + +#: forum/skins/default/templates/questions.html:125 +msgid "Related tags" +msgstr "" + +#: forum/skins/default/templates/questions.html:128 +#: forum/skins/default/templates/tag_selector.html:10 +#: forum/skins/default/templates/tag_selector.html:27 +#, python-format +msgid "see questions tagged '%(tag_name)s'" +msgstr "" + +#: forum/skins/default/templates/reopen.html:6 +#: forum/skins/default/templates/reopen.html:16 +msgid "Reopen question" +msgstr "" + +#: forum/skins/default/templates/reopen.html:19 +msgid "Open the previously closed question" +msgstr "" + +#: forum/skins/default/templates/reopen.html:22 +msgid "The question was closed for the following reason " +msgstr "" + +#: forum/skins/default/templates/reopen.html:22 +msgid "reason - leave blank in english" +msgstr "" + +#: forum/skins/default/templates/reopen.html:22 +msgid "on " +msgstr "" + +#: forum/skins/default/templates/reopen.html:22 +msgid "date closed" +msgstr "" + +#: forum/skins/default/templates/reopen.html:29 +msgid "Reopen this question" +msgstr "" + +#: forum/skins/default/templates/revisions_answer.html:7 +#: forum/skins/default/templates/revisions_answer.html:38 +#: forum/skins/default/templates/revisions_question.html:8 +#: forum/skins/default/templates/revisions_question.html:38 +msgid "Revision history" +msgstr "" + +#: forum/skins/default/templates/revisions_answer.html:50 +#: forum/skins/default/templates/revisions_question.html:50 +msgid "click to hide/show revision" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:4 +msgid "Interesting tags" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:14 +#, python-format +msgid "remove '%(tag_name)s' from the list of interesting tags" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:20 +#: forum/skins/default/templates/tag_selector.html:37 +msgid "Add" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:21 +msgid "Ignored tags" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:31 +#, python-format +msgid "remove '%(tag_name)s' from the list of ignored tags" +msgstr "" + +#: forum/skins/default/templates/tag_selector.html:40 +msgid "keep ignored questions hidden" +msgstr "" + +#: forum/skins/default/templates/tags.html:6 +#: forum/skins/default/templates/tags.html:30 +msgid "Tag list" +msgstr "" + +#: forum/skins/default/templates/tags.html:32 +msgid "sorted alphabetically" +msgstr "" + +#: forum/skins/default/templates/tags.html:32 +msgid "by name" +msgstr "" + +#: forum/skins/default/templates/tags.html:33 +msgid "sorted by frequency of tag use" +msgstr "" + +#: forum/skins/default/templates/tags.html:33 +msgid "by popularity" +msgstr "" + +#: forum/skins/default/templates/tags.html:39 +msgid "All tags matching query" +msgstr "" + +#: forum/skins/default/templates/tags.html:39 +msgid "all tags - make this empty in english" +msgstr "" + +#: forum/skins/default/templates/tags.html:42 +msgid "Nothing found" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:6 +msgid "Edit user profile" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:19 +msgid "edit profile" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:31 +msgid "image associated with your email address" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:31 +#, python-format +msgid "avatar, see %(gravatar_faq_url)s" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:36 +#: forum/skins/default/templates/user_info.html:56 +msgid "Registered user" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:43 +msgid "Screen Name" +msgstr "" + +#: forum/skins/default/templates/user_edit.html:86 +#: forum/skins/default/templates/user_email_subscriptions.html:20 +msgid "Update" +msgstr "" + +#: forum/skins/default/templates/user_email_subscriptions.html:8 +msgid "Email subscription settings" +msgstr "" + +#: forum/skins/default/templates/user_email_subscriptions.html:9 +msgid "email subscription settings info" +msgstr "" + +#: forum/skins/default/templates/user_email_subscriptions.html:21 +msgid "Stop sending email" +msgstr "" + +#: forum/skins/default/templates/user_info.html:22 +#: forum/skins/default/templates/users.html:26 forum/views/users.py:916 +msgid "reputation" +msgstr "" + +#: forum/skins/default/templates/user_info.html:32 +msgid "Moderate this user" +msgstr "" + +#: forum/skins/default/templates/user_info.html:45 +msgid "update profile" +msgstr "" + +#: forum/skins/default/templates/user_info.html:60 +msgid "real name" +msgstr "" + +#: forum/skins/default/templates/user_info.html:65 +msgid "member for" +msgstr "" + +#: forum/skins/default/templates/user_info.html:70 +msgid "last seen" +msgstr "" + +#: forum/skins/default/templates/user_info.html:76 +msgid "user website" +msgstr "" + +#: forum/skins/default/templates/user_info.html:82 +msgid "location" +msgstr "" + +#: forum/skins/default/templates/user_info.html:89 +msgid "age" +msgstr "" + +#: forum/skins/default/templates/user_info.html:90 +msgid "age unit" +msgstr "" + +#: forum/skins/default/templates/user_info.html:96 +msgid "todays unused votes" +msgstr "" + +#: forum/skins/default/templates/user_info.html:97 +msgid "votes left" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:12 +#, python-format +msgid "" +"\n" +" 1 Question\n" +" " +msgid_plural "" +"\n" +" %(counter)s Questions\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_stats.html:23 +#, python-format +msgid "" +"\n" +" 1 Answer\n" +" " +msgid_plural "" +"\n" +" %(counter)s Answers\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_stats.html:36 +#, python-format +msgid "the answer has been voted for %(vote_count)s times" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:36 +msgid "this answer has been selected as correct" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:46 +#, python-format +msgid "" +"\n" +" (one comment)\n" +" " +msgid_plural "" +"\n" +" the answer has been commented %(comment_count)s times\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_stats.html:61 +#, python-format +msgid "" +"\n" +" 1 Vote\n" +" " +msgid_plural "" +"\n" +" %(cnt)s Votes\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_stats.html:72 +msgid "thumb up" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:73 +msgid "user has voted up this many times" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:77 +msgid "thumb down" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:78 +msgid "user voted down this many times" +msgstr "" + +#: forum/skins/default/templates/user_stats.html:87 +#, python-format +msgid "" +"\n" +" 1 Tag\n" +" " +msgid_plural "" +"\n" +" %(counter)s Tags\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_stats.html:100 +#, python-format +msgid "" +"see other questions with %(view_user)s's contributions tagged '%(tag_name)s' " +msgstr "" + +#: forum/skins/default/templates/user_stats.html:115 +#, python-format +msgid "" +"\n" +" 1 Badge\n" +" " +msgid_plural "" +"\n" +" %(counter)s Badges\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: forum/skins/default/templates/user_tabs.html:7 +msgid "User profile" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:7 forum/views/users.py:890 +msgid "overview" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:9 forum/views/users.py:898 +msgid "recent activity" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:12 forum/views/users.py:908 +msgid "comments and answers to others questions" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:13 forum/views/users.py:907 +msgid "responses" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:16 +msgid "graph of user reputation" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:17 +msgid "reputation history" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:934 +msgid "user vote record" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:20 forum/views/users.py:933 +msgid "casted votes" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:23 +msgid "questions that user selected as his/her favorite" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:24 +msgid "favorites" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:27 forum/views/users.py:943 +msgid "email subscription settings" +msgstr "" + +#: forum/skins/default/templates/user_tabs.html:28 forum/views/users.py:942 +msgid "email subscriptions" +msgstr "" + +#: forum/skins/default/templates/users.html:6 +#: forum/skins/default/templates/users.html:24 +msgid "Users" +msgstr "" + +#: forum/skins/default/templates/users.html:27 +msgid "recent" +msgstr "" + +#: forum/skins/default/templates/users.html:28 +msgid "oldest" +msgstr "" + +#: forum/skins/default/templates/users.html:29 +msgid "by username" +msgstr "" + +#: forum/skins/default/templates/users.html:35 +#, python-format +msgid "users matching query %(suser)s:" +msgstr "" + +#: forum/skins/default/templates/users.html:39 +msgid "Nothing found." +msgstr "" + +#: forum/skins/default/templates/users_questions.html:11 +msgid "this questions was selected as favorite" +msgstr "" + +#: forum/skins/default/templates/users_questions.html:12 +msgid "thumb-up on" +msgstr "" + +#: forum/skins/default/templates/users_questions.html:19 +msgid "thumb-up off" +msgstr "" + +#: forum/skins/default/templates/auth/auth_settings.html:5 +#: forum/skins/default/templates/auth/auth_settings.html:7 +msgid "Authentication settings" +msgstr "" + +#: forum/skins/default/templates/auth/auth_settings.html:9 +msgid "" +"These are the external authentication providers currently associated with " +"your account." +msgstr "" + +#: forum/skins/default/templates/auth/auth_settings.html:12 +msgid "remove" +msgstr "" + +#: forum/skins/default/templates/auth/auth_settings.html:17 +msgid "" +"You currently have no external authentication provider associated with your " +"account." +msgstr "" + +#: forum/skins/default/templates/auth/auth_settings.html:19 +msgid "Add new provider" +msgstr "" + +#: forum/skins/default/templates/auth/auth_settings.html:21 +msgid "This is where you can change your password. Make sure you remember it!" +msgstr "" + +#: forum/skins/default/templates/auth/auth_settings.html:24 +msgid "" +"You can set up a password for your account, so you can login using standard " +"username and password!" +msgstr "" + +#: forum/skins/default/templates/auth/auth_settings.html:31 +msgid "Create password" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:5 +msgid "Connect your OpenID with this site" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:8 +msgid "Connect your OpenID with your account on this site" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:12 +msgid "You are here for the first time with " +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:13 +msgid "" +"Please create your screen name and save your email address. Saved email " +"address will let you subscribe for the updates on the most interesting " +"questions and will be used to create and retrieve your unique avatar image. " +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:15 +msgid "This account already exists, please use another." +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:30 +msgid "Sorry, looks like we have some errors:" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:47 +msgid "Screen name label" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:54 +msgid "Email address label" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:60 +#: forum/skins/default/templates/auth/signup.html:18 +msgid "receive updates motivational blurb" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:64 +#: forum/skins/default/templates/auth/signup.html:22 +msgid "please select one of the options above" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:67 +msgid "Tag filter tool will be your right panel, once you log in." +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:68 +msgid "create account" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:77 +msgid "Existing account" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:78 +msgid "user name" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:79 +msgid "password" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:86 +msgid "Register" +msgstr "" + +#: forum/skins/default/templates/auth/complete.html:87 +msgid "Forgot your password?" +msgstr "" + +#: forum/skins/default/templates/auth/email_validation.html:6 +#: forum/skins/default/templates/auth/temp_login_email.html:6 +msgid "Greetings from the Q&A forum" +msgstr "" + +#: forum/skins/default/templates/auth/email_validation.html:8 +msgid "To make use of the Forum, please follow the link below:" +msgstr "" + +#: forum/skins/default/templates/auth/email_validation.html:12 +msgid "Following the link above will help us verify your email address." +msgstr "" + +#: forum/skins/default/templates/auth/email_validation.html:14 +#: forum/skins/default/templates/auth/temp_login_email.html:14 +msgid "" +"If you beleive that this message was sent in mistake -\n" +" no further action is needed. Just ingore this email, we apologize\n" +" for any inconvenience" +msgstr "" + +#: forum/skins/default/templates/auth/email_validation.html:18 +#: forum/skins/default/templates/auth/temp_login_email.html:18 +msgid "" +"Sincerely,
    \n" +" Forum Administrator" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:22 +msgid "User login" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:34 +#: forum/skins/default/templates/auth/signin.html:84 +#: forum/skins/default/templates/auth/signin.html:90 +msgid "Or..." +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:37 +msgid "Click to sign in through any of these services." +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:42 +msgid "" +"Take the oppurtunity to validate my email next to the external provider I " +"choose." +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:92 +msgid "Click" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:92 +msgid "if you're having troubles signing in." +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:96 +msgid "Enter your " +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:152 +msgid "Why use OpenID?" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:155 +msgid "with openid it is easier" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:158 +msgid "reuse openid" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:161 +msgid "openid is widely adopted" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:164 +msgid "openid is supported open standard" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:169 +msgid "Find out more" +msgstr "" + +#: forum/skins/default/templates/auth/signin.html:170 +msgid "Get OpenID" +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:4 +msgid "Signup" +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:8 +msgid "Create login name and password" +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:10 +msgid "Traditional signup info" +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:31 +msgid "Create Account" +msgstr "" + +#: forum/skins/default/templates/auth/signup.html:33 +msgid "return to login page" +msgstr "" + +#: forum/skins/default/templates/auth/temp_login_email.html:8 +msgid "You're seeing this because someone requested a temporary login link" +msgstr "" + +#: forum/skins/default/templates/auth/temp_login_email.html:12 +msgid "Following the link above will give you access to your account." +msgstr "" + +#: forum/skins/default/templates/auth/temp_login_request.html:5 +msgid "Request temporary login key" +msgstr "" + +#: forum/skins/default/templates/auth/temp_login_request.html:7 +msgid "Account: request temporary login key" +msgstr "" + +#: forum/skins/default/templates/auth/temp_login_request.html:8 +msgid "" +"\n" +" If you're experiencing problems accessing your account, or if you forgot " +"your password,\n" +" here you can request a temporary login key. Fill out your account email " +"and we'll send you a temporary access link that\n" +" will enable you to access your account. This token is valid only once " +"and for a limited period of time.\n" +" " +msgstr "" + +#: forum/skins/default/templates/auth/temp_login_request.html:25 +msgid "Send link" +msgstr "" + +#: forum/skins/default/templates/fbconnect/xd_receiver.html:5 +#, python-format +msgid "Connect to %(APP_SHORT_NAME)s with Facebook!" +msgstr "" + +#: forum/skins/default/templates/osqaadmin/base.html:12 +msgid "OSQA administration area" +msgstr "" + +#: forum/skins/default/templates/osqaadmin/base.html:36 +msgid "Administration menu" +msgstr "" + +#: forum/skins/default/templates/osqaadmin/index.html:6 +msgid "Basic settings" +msgstr "" + +#: forum/skins/default/templates/osqaadmin/index.html:9 +msgid "Welcome to the OSQA administration area." +msgstr "" + +#: forum/templatetags/extra_tags.py:167 forum/templatetags/extra_tags.py:194 +msgid "reputation points" +msgstr "" + +#: forum/templatetags/extra_tags.py:254 +msgid "2 days ago" +msgstr "" + +#: forum/templatetags/extra_tags.py:256 +msgid "yesterday" +msgstr "" + +#: forum/templatetags/extra_tags.py:258 +#, python-format +msgid "%(hr)d hour ago" +msgid_plural "%(hr)d hours ago" +msgstr[0] "" +msgstr[1] "" + +#: forum/templatetags/extra_tags.py:260 +#, python-format +msgid "%(min)d min ago" +msgid_plural "%(min)d mins ago" +msgstr[0] "" +msgstr[1] "" + +#: forum/utils/forms.py:27 +msgid "this field is required" +msgstr "" + +#: forum/utils/forms.py:42 +msgid "choose a username" +msgstr "" + +#: forum/utils/forms.py:47 +msgid "user name is required" +msgstr "" + +#: forum/utils/forms.py:48 +msgid "sorry, this name is taken, please choose another" +msgstr "" + +#: forum/utils/forms.py:49 +msgid "sorry, this name is not allowed, please choose another" +msgstr "" + +#: forum/utils/forms.py:50 +msgid "sorry, there is no user with this name" +msgstr "" + +#: forum/utils/forms.py:51 +msgid "sorry, we have a serious error - user name is taken by several users" +msgstr "" + +#: forum/utils/forms.py:52 +msgid "user name can only consist of letters, empty space and underscore" +msgstr "" + +#: forum/utils/forms.py:100 +msgid "your email address" +msgstr "" + +#: forum/utils/forms.py:101 +msgid "email address is required" +msgstr "" + +#: forum/utils/forms.py:103 +msgid "this email is already used by someone else, please choose another" +msgstr "" + +#: forum/utils/forms.py:128 +msgid "choose password" +msgstr "" + +#: forum/utils/forms.py:129 +msgid "password is required" +msgstr "" + +#: forum/utils/forms.py:132 +msgid "retype password" +msgstr "" + +#: forum/utils/forms.py:133 +msgid "please, retype your password" +msgstr "" + +#: forum/utils/forms.py:134 +msgid "sorry, entered passwords did not match, please try again" +msgstr "" + +#: forum/views/auth.py:104 forum/views/auth.py:113 +msgid "" +"Sorry, these login credentials belong to anoother user. Plese terminate your " +"current session and try again." +msgstr "" + +#: forum/views/auth.py:106 +msgid "You are already logged in with that user." +msgstr "" + +#: forum/views/auth.py:111 +msgid "These login credentials are already associated with your account." +msgstr "" + +#: forum/views/auth.py:117 +msgid "The new credentials are now associated with your account" +msgstr "" + +#: forum/views/auth.py:155 +msgid "" +"Oops, something went wrong in the middle of this process. Please try again." +msgstr "" + +#: forum/views/auth.py:215 +msgid "Temporary login link" +msgstr "" + +#: forum/views/auth.py:220 +msgid "An email has been sent with your temporary login key" +msgstr "" + +#: forum/views/auth.py:235 +msgid "" +"You are logged in with a temporary access key, please take the time to fix " +"your issue with authentication." +msgstr "" + +#: forum/views/auth.py:241 +msgid "Email Validation" +msgstr "" + +#: forum/views/auth.py:252 +msgid "Thank you, your email is now validated." +msgstr "" + +#: forum/views/auth.py:276 +msgid "Your password was changed" +msgstr "" + +#: forum/views/auth.py:278 +msgid "New password set" +msgstr "" + +#: forum/views/auth.py:311 +#, python-format +msgid "You removed the association with %s" +msgstr "" + +#: forum/views/auth.py:350 +#, python-format +msgid "Welcome back %s, you are now logged in" +msgstr "" + +#: forum/views/commands.py:218 +#, python-format +msgid "subscription saved, %(email)s needs validation, see %(details_url)s" +msgstr "" + +#: forum/views/commands.py:226 +msgid "email update frequency has been set to daily" +msgstr "" + +#: forum/views/meta.py:39 +msgid "Q&A forum feedback" +msgstr "" + +#: forum/views/meta.py:40 +msgid "Thanks for the feedback!" +msgstr "" + +#: forum/views/meta.py:48 +msgid "We look forward to hearing your feedback! Please, give it next time :)" +msgstr "" + +#: forum/views/users.py:851 forum/views/users.py:855 +msgid "changes saved" +msgstr "" + +#: forum/views/users.py:861 +msgid "email updates canceled" +msgstr "" + +#: forum/views/users.py:891 +msgid "user profile" +msgstr "" + +#: forum/views/users.py:892 +msgid "user profile overview" +msgstr "" + +#: forum/views/users.py:899 +msgid "recent user activity" +msgstr "" + +#: forum/views/users.py:900 +msgid "profile - recent activity" +msgstr "" + +#: forum/views/users.py:909 +msgid "profile - responses" +msgstr "" + +#: forum/views/users.py:917 +msgid "user reputation in the community" +msgstr "" + +#: forum/views/users.py:918 +msgid "profile - user reputation" +msgstr "" + +#: forum/views/users.py:924 +msgid "favorite questions" +msgstr "" + +#: forum/views/users.py:925 +msgid "users favorite questions" +msgstr "" + +#: forum/views/users.py:926 +msgid "profile - favorite questions" +msgstr "" + +#: forum/views/users.py:935 +msgid "profile - votes" +msgstr "" + +#: forum/views/users.py:944 +msgid "profile - email subscriptions" +msgstr "" + +#: forum/views/writers.py:85 +#, python-format +msgid "" +"Error uploading file. Please contact the site administrator. Thank you. %s" +msgstr "" + +#: forum_modules/books/urls.py:7 forum_modules/books/urls.py:8 +#: forum_modules/books/urls.py:9 +msgid "books/" +msgstr "" + +#: forum_modules/default_badges/badges.py:18 +#: forum_modules/default_badges/badges.py:25 +#: forum_modules/default_badges/badges.py:32 +#, python-format +msgid "Asked a question with %s views" +msgstr "" + +#: forum_modules/default_badges/badges.py:40 +#: forum_modules/default_badges/badges.py:54 +#: forum_modules/default_badges/badges.py:68 +#, python-format +msgid "Answer voted up %s times" +msgstr "" + +#: forum_modules/default_badges/badges.py:47 +#: forum_modules/default_badges/badges.py:61 +#: forum_modules/default_badges/badges.py:75 +#, python-format +msgid "Question voted up %s times" +msgstr "" + +#: forum_modules/default_badges/badges.py:83 +#: forum_modules/default_badges/badges.py:90 +#, python-format +msgid "Question favorited by %s users" +msgstr "" + +#: forum_modules/default_badges/badges.py:98 +#, python-format +msgid "Deleted own post with score of %s or higher" +msgstr "" + +#: forum_modules/default_badges/badges.py:109 +#, python-format +msgid "Deleted own post with score of %s or lower" +msgstr "" + +#: forum_modules/default_badges/badges.py:121 +msgid "First flagged post" +msgstr "" + +#: forum_modules/default_badges/badges.py:128 +msgid "First down vote" +msgstr "" + +#: forum_modules/default_badges/badges.py:135 +msgid "First retag" +msgstr "" + +#: forum_modules/default_badges/badges.py:142 +msgid "First up vote" +msgstr "" + +#: forum_modules/default_badges/badges.py:149 +msgid "First edit" +msgstr "" + +#: forum_modules/default_badges/badges.py:156 +msgid "First accepted answer on your own question" +msgstr "" + +#: forum_modules/default_badges/badges.py:163 +msgid "Completed all user profile fields" +msgstr "" + +#: forum_modules/default_badges/badges.py:170 +msgid "First rollback" +msgstr "" + +#: forum_modules/default_badges/badges.py:178 +#, python-format +msgid "Voted %s times" +msgstr "" + +#: forum_modules/default_badges/badges.py:185 +#, python-format +msgid "Left %s comments" +msgstr "" + +#: forum_modules/default_badges/badges.py:193 +#, python-format +msgid "Answered your own question with at least %s up votes" +msgstr "" + +#: forum_modules/default_badges/badges.py:206 +msgid "Strunk & White" +msgstr "" + +#: forum_modules/default_badges/badges.py:207 +#, python-format +msgid "Edited %s entries" +msgstr "" + +#: forum_modules/default_badges/badges.py:218 +msgid "Asked first question with at least one up vote" +msgstr "" + +#: forum_modules/default_badges/badges.py:229 +msgid "Answered first question with at least one up vote" +msgstr "" + +#: forum_modules/default_badges/badges.py:260 +#, python-format +msgid "First answer was accepted with at least %s up votes" +msgstr "" + +#: forum_modules/default_badges/badges.py:271 +#, python-format +msgid "Accepted answer and voted up %s times" +msgstr "" + +#: forum_modules/default_badges/badges.py:282 +#, python-format +msgid "" +"Answered a question more than `%(dif_days)s` days later with at least `%" +"(up_votes)s` votes" +msgstr "" + +#: forum_modules/default_badges/badges.py:298 +#, python-format +msgid "Created a tag used by %s questions" +msgstr "" + +#: forum_modules/facebookauth/authentication.py:31 +msgid "Sorry, your Facebook session has expired, please try again" +msgstr "" + +#: forum_modules/facebookauth/authentication.py:33 +msgid "" +"The authentication with Facebook connect failed due to an invalid signature" +msgstr "" + +#: forum_modules/facebookauth/authentication.py:35 +msgid "" +"The authentication with Facebook connect failed, cannot find authentication " +"tokens" +msgstr "" + +#: forum_modules/localauth/forms.py:74 +msgid "Please enter valid username and password (both are case-sensitive)." +msgstr "" + +#: forum_modules/localauth/forms.py:77 +msgid "This account is inactive." +msgstr "" + +#: forum_modules/localauth/forms.py:79 +msgid "Login failed." +msgstr "" + +#: forum_modules/localauth/forms.py:81 +msgid "Please enter username and password" +msgstr "" + +#: forum_modules/localauth/forms.py:83 +msgid "Please enter your password" +msgstr "" + +#: forum_modules/localauth/forms.py:85 +msgid "Please enter user name" +msgstr "" + +#: forum_modules/localauth/urls.py:7 +msgid "local/" +msgstr "" + +#: forum_modules/localauth/views.py:23 +msgid "A validation email has been sent to your email address. " +msgstr "" + +#: forum_modules/oauthauth/consumer.py:33 +msgid "Error, the oauth token is not on the server" +msgstr "" + +#: forum_modules/oauthauth/consumer.py:38 +msgid "Something went wrong! Auth tokens do not match" +msgstr "" + +#: forum_modules/openidauth/consumer.py:40 +msgid "Sorry, but your input is not a valid OpenId" +msgstr "" + +#: forum_modules/openidauth/consumer.py:92 +msgid "The OpenId authentication request was canceled" +msgstr "" + +#: forum_modules/openidauth/consumer.py:94 +msgid "The OpenId authentication failed: " +msgstr "" + +#: forum_modules/openidauth/consumer.py:96 +msgid "Setup needed" +msgstr "" + +#: forum_modules/openidauth/consumer.py:98 +msgid "The OpenId authentication failed with an unknown status: " +msgstr "" + +#: forum_modules/openidauth/templates/openidurl.html:7 +msgid "Enter your OpenId Url" +msgstr "" + +#: forum_modules/project_badges/badges.py:9 +#, python-format +msgid "Got %s upvotes in a question tagged with \"bug\"" +msgstr "" + +#: forum_modules/recaptcha/formfield.py:20 +msgid "Invalid captcha" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/django.mo b/locale/zh_CN/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5173c858c4186ebeddc76f9d8174d3a67952c0de GIT binary patch literal 37880 zcmdsEkjKP2bgSXf~0)&u}G?E5O8ZjeTID}N* zAp(=?mz%&2KY-zpmw4J_P>#yMo}6bAw>>l`0K_uY4p3=7N6&=D)@r}7r=Lbe+8ZgeiO`s-}U+FH&{PUg72if&gWaei^$IfF9DZ> z7lT_twZ9L1FL(lc5BMkGIPly4{fCFzJconVP<|hHGgt#&0d4>_zr&!~`vTYsehpMV z58Y_*9|bj!N|2=qn!&5VjiCBH396kx1y_OJ0=1r*n`}PwLA`$oR6pB6ZB-X|5%|ZT z*7xh6#`h!ea`5V5Ht*5k+sQu+Ccr76_O%JT1MCO2FIQCr!3E$bQ0qM!RQvaMd<4`w zJ`R2WtO2zjFZ%cMz>kve0N(|E8DxuszX7L#zXa(jm^wTNAg$m<@M3T$SPyoBwcwQ_ zY@TyLy?+V34crP|3;wl#|8Jnid;UnEocr@i_QF@H3$J^ab!za6PDX-v_GyL*N#$4`hjhr*Czv z7c2oa@7F=m%U3{+uOC!D{|t&Ae+*WEm$S%_Uhp~a25=9^(gj}wwT|c99t3m|JPB%F zmxG@MkAZAm@P0O5`+Gn5e(*U^<6Q{858ME1+?}B0$x%?_IsuB#{sz>%zYC59{}I%> z4TVUxPPc=i%kki3@DWh^uo2XFc7mGES3&XXzkpYPm$7+}N-zr4ek8%m!RJ8j+hS1b zvex4^P~+GOs{PkJ_JHpt|3y&W{SB!3d=J#PioX0upvL_lpyql0XlwssQ2F_aji>{|BgjKIcx`hx0)7 zcR8qbuLo6c4Cv$=sC}vd_1z1g`e_3-?+#G?>;$#XdqKBvpvLuGQ2iG{_489u>u~NE z`~DJ8^l%NReYh1=d-wbI4};o=r$NzQ4XFM*zz=|1!JELNp!)kBsCf*4YWG*5>R$@; z{tlP`)&Cvfd%*Fa#`id=c~^p(R~ozz{2Zuue;-skUjg;qH$aW22#P;0g*Y|NF`(#V zJg9c2fLgaoQ1hz=uL4^^jbja{b=m3P9|Rl7|2`;G@ zQ2X=nz4m@8sCmr-)!rg-3%ChPfFENKwH{A`>c1M)zC8zO9os?e*9PzkunW{a{Sl~n zeGk+;^Pu{D1JpkK47?fq1&F8#M%-`fT?4A!S>T7k#h~bMAE@yi1+N9a3~C*J2&&$N zqu z3D*9HzzfI^10l`eHt+_p1-uU23X1;!5Y+zsC3qp&4~_(X1ZqD&{IIn*64d*9K<(SZ zpvL_ycpf+l)V$h2&2xn>|2lXj`EP?0!G8xe?gt*ReSZ=ZzotO7|2(L6=71XiOFqBJ z<9<-<-|OFh1yuik0lp3VTTt`)dr4vMZm$RNZABS7`@0I2$pgX*sid?)xE zsCGXOt^wzR3_ZAVlI>FscoF$5cq{lKD1Le!RDWLqHO~U5{rNelb^pL*TfZ^jZR9@% zUJSkjz8%~OYCJE4+V`Wr{M)|#`{0d~{}e=21s|S*jRJleyahZ6YM=YTQQ*6#TD`l$ z5#&D)4h1{G>%qST-vR#0<2z_f{CP2`@ec*x4c-MNz=2$@M+I`x8(MDQi>^WgiQ2!h$*Dp2jb|4GAZK&|@-P~Y7S zz5w3i%TI#p{|`KV-QxhLc7EaU!l$g>2SAk%1-0I{`+POnME*HY>;HZ5GVq`M`*S{J z-@hBYobszdjcYWh_QruT!O1@VC69jzYJA@TM}a>E#aADB+W7BbP~U$BoCh|5TBjfT z@^e3J?=SKAA&)~n-VRQq{(T^-G*}B>34Rk4fBy{BI4^$2#{FLK^W<*=$AJ4l)hmFi z_e+m&|BS8o#h}Lbeo*ti2Go4+1XVuS=br*clWzpy2fhkweNTh1R`5^YUEtWHm46P@ ze(nPofJeYd;GLB={zahL-woaZz7C3C^S=DjDjVelw`={}R+XeaGkX9)IG?gBlyp`Jn25(Blw~ zw}RiIe4Ni;RcrNb1ka=Vqdq?tyoUTE9veZ?#Y+EvhtGF{?UbJewcZcb**>*^+Slda zN5Ea6#`8y@*8S_?5b(R;Ht>S9`Kf!s-zEQjpFihWE58%Gn(`J<{j39-a_}Wk?cX%R z?1`!1`Q+z%Tmotwt3b`~RgVWj(bI8IqnM+-UVK2OXV(+J`%Q z`9mHb^H}LI18TmX1K$SD^|;W#U*d5+sP=Y)kAO!(eRodA*5?9H{ay{K{8muoz7xCz zd)&RX^$9 z&jT+ZzYY)4RZnC?5ujPCg21-=>0U z_j&N2&cR*+ucn zM)KEw4&DMMgPPA)P<+1|RJ&gW)y`jo1;%&ri?%O6L8*vNulzm3;h@%K9H{R;0X_p( zgC7L{5LCP00oBhrZH50sP! zTc0n0T8D3g8rQ#qqNjJxvG=!v>TjyYr#(IkN^Z1*YJV*#e%=m>Uw8TZzkvGwr=Z4l z&Rm<%rJ%mM9Mt=3JdOa>?ig@9_!M|AxC7LB^n3gv_%`xC_W6GW)y^-$dhnuowvMgf z734R7Q^CVvCHVIFR=*b1x;29u-$GFRtOGT^t)SZ73w{JV>hpgGYP|{`f9dhE1y(-P zW4})rdgvT-9-Q*{L8qXq+ zD?F|P)&5qGhdllvsCK>qUIq61{JD#)ol87^093uJeEvpIbTtaR27D3J`fLX!508Ok zz%PK>r~d@62CrRg?TiOC|7oDs|2a@{XelUu-ws{~{xzui`~&y_Fa#6eFMRn`OKjgh z0;-?8K&^A7#|_|(;4^%%t1l8_29ft1%)!qFO{Pi7>YG?g!r9}Iy zy;6TqQ0d)e6_@ZFQm)@^qzgzRDZ5$){PvKlef{;W#Qs6exZgzHT})ydf^U-EXT`xo z;60?Bq+9&=4}tF>|EDDV8c7YL^GVBj_q!zR=@HVmN$yA4T+(eMt@C~0eg4&jJRc-w zNt1lp7M`b&-a+~qWvyWJdzR;;Bt)nCJ;T3WB;7;V|F$9*^V>#VG;tkx0cktwa?;yK z`$*C67!RNFncFFUob*xBLeig6eiir>Nxw1Rx9l;P?aO@D0ph{MWpD9?Q@|P$-kcY|*yy@&KLX@T;T*OT;XBmFt)^OUa! zhk*Y8E(Q03ZQ$LcI-Xx5og(S?$E3ZKk0<>F&*MpdMd~2`zd-#UV@J>8r45w7N)o+p zBt^fO{^3C|OS*_UKL@w?@(+P^ltsVic_@)I^!%5;v@yB*jo^%6c{|ZhceTh^{ zek?eSlp^gR|4Gt3QuKp`2K^rPx#8fym%aHO&!6VIH9^85wTP|~I3rGp*-FCm@g`7kN^T}zpMSA$*l=wf!0 z$RG3XRQ$AmzKZ7`ktUFuNsCGKW%bAgy`&$KT1Y*l>7)~+N2&J-U-!_yd{<*_{^Y>(5BmE!$Za(EN@?7Qff=<$F zl)nL<1Kv;C$8!bgQ#|Xp82pAk2CwrxnRG7s-K1ZTGNfsgb%T8*{iI*NOS*}2{bqVx z!}F!C1l{S&d^X6CzlqGb;2-$HCh$t~e*|vxWgiBAkFs}zEuel&N$Yri%H`~zNBp~} zsFM6-GVdZ)l4{7WBJChON`4pkIq(2Uzps+MO!_e8FOl?n4t&5KgQMV`q*~Hv{QJjv z?k7D>T1%QpT1ol|X(TE7z1P>DO~J?g^S$60@{f}a^ZY^5e4ZDQT1lP0UIq9f=>Ta7 zM-Xw1DSLq~${LJHW4z&iviTyZg%uKSVx3dYdo%C-5X`HD&FjCX#-K zz+v_nECN4E{yb8S=O@Ac0AC<=^E`+27)ig+f!C1!kmu2)St{iB9@1AxH%lqx#ZL0Oc>aO%7hQPag>}i9sYG+8Ia!~$?uO@{ zX>4g2noB&_lFBuwGmW`KRi?2ynQlxs*77=+N@lC-n$ykosi8T2{Qstf=45Scs+#_J zXiPTz7Ja|Pmx+o*a9u8utjz>B-dLHbufFldL?)Yf<{3Rd^9+Z=Bi>Vu*9rP zOQI^-n5fPq8Zz0`=wMuZeQAANj#1_k4aw%JIyJ@GXJ-ZD8gs2Q)LfT}EBmq>I4jeb za;+wFGvfD5sIfXx%LsYU*Ys|qNF=kVL}R8o(U_`A<#NgFtV9j-ZLUi;GgZDzWK*^2 z9J6AXTXOUpjk-Ql%dA?{&2=iuCZ;r{8YkR8EJ1l9)6%SoYKXaXb4n}Nl*%?F8&i$V z^|NTQA;VDIXRMW$({L@Rw3ht}VFtm7FA`H=Ti8H`V|aTLZHWGxaPr-|}yuBEa$n`GM2w>O{p>F{8Db-LLvpgqSM<=!|(Y|3V8 z()FoeyaZ6ivA2 z+{^M!6D_+1VK6OCTI6b~RJ(?4ktH_OccMAl!s?L|ftE2ZW2$A&ZrdX&znhV^&`jm5 z1cW{)lPk+fQw0xXQ;gTiB;)}7e>~Q1!Go!0FVlhtGZ2lFXI}Co(z)Tohf`ipKVl9F z+}P^UwRJ2+!m))7c(Aw`{K-t@c_Pb(4G$iYvQ2t*o2lXCq9MgUt!M{WEt_Js9KA-; z4u+m_cQB#G$Q%lGLIojFoyhU2w19DGGSQIEA(^V();j4w%#GFfGu{H*fNBwi8mUW- z$g$Xx5(rgV^kh9;eL7Z5HbH?Rab_sWlipw_h9z24j5pUL&UQOfRhLOuF~tduRheuy zlFm}s!-I*LDr3WmQYU1kRP-u(%(PzZA04SmdHMXAsz=38s|SYE$|HL*m^u=ZGYQ6B zS&zo3V3tr96`Yn}(Cm2{T{J0~o#9rZIo*^CCaD!$El4CHaO5@L8W+{1v$>+Hd!;{Yfh)oytIH}xyEjdQ#+AGmQFvW4-bX%TWFg4P+Q!%xi z%9+pzdtk^(<4iR>K?a(m&1kcRIZ0{ugDk38&_Om*jaSEC&dgvUc_SqHS^|h&iR`(E zyfpj4R0a2EFhyD_pM@38B&4xyZA$}G#t3IJXFo&=B1=UoM|{ax>XAwk5pTMUIlfV! zZf0e+W2(a0$-ZG{(6vCrP96nQGwkuKgc&j{UlvLr-{gwPnxgx-7tWIFxgg4wJsC$r zlMs=_Kk_Tmu_fzU43dkPZg{DkU-NZynu((T>XUF-OH(yu`lc=9;=a%BS0WL&X;9zO zQYaQD?RbJva=|pm>!v^AoSW}7Z--OG406-)Zk@eV7`z|>MhO1@7n z@(E(X9?mEvb0c9uc4j&!{>Dmg&fx4!M=iR45-CigV0sF=YnYW7XI_j5EwUSkOA~+*_c(phTP~QMiPuN8DSO0uOHMr?yEO*Zvp$W5FAJ7|V;F0mspoNU zoWQWP_j8Tx1-0e45cQD7_c3dMhiuaMe93y8k!X2lpt|Z)vMMU&Psq=PsfIJUYdGV1$ldKr z^{uQ1X?EFRcPFN&Qo*CiTG~V3@sM->nB0P$XQWb1Wi}MnS+X(x*;I7^!MuqL!`w5i zIq$3CB$=2^wlvpevgyw{VW~}IWhFeZj%FrVV_T?(Otma<(MmIt5a&XDpk}j?uEs7I z9rHhQS;n!dDh|Q3)Pk7DB~OOUb!LTmJfmro9rX6F^UsnvXek-W@}NzQ(-3sx2wj8V z15-%)5|2(_ocSx0i)dKMdPGW6yNyq4tztCEK^xp~1LkG3jkyl<3n!%7yXz@XtEugx zPstKL`qosX^T8R8Uo$@P($TGf25l-{q~ye-DA72#DV1TGjOmtcnm85N!Qx|Eq^ivwbDtv$oCoJJWy2C>2A_bM&B97Fx1z&m zH6b-v>J|;b*3;;pNL0CVtM^)k5z+YNiC5E{BZJ@*G7{iwoOT+EJ9QFnf@}(B6W?w1 zO0T{BN{uqx!`C|F9cze$_L5Uo6y9>o>ck#&7|VaXjdX;kG*OxMSZ&1Jk0@(xmR7*q zoc6u)60mNCo!5s1dqP}gp9N2uNO?MV%Ir2Cs-2%-&65-1!Yr1pu%!}X#3YLpeN==u zl;v5v^ywg3DNiF=UG3(AbS{6+1+qgWk`-g(ArnZ-Td2f6#uIZnHHov};zmwMq#BwK za;#&ju@*^Nr&^g-@jCv#r-UR5ddRa)wL^vpQVwg=HOf{tGzpp-U14*&re;XsSHhqa zjB|Fhe+i@E?D&-qLC5#g!vE7r|pfXuC!~G-nu5)gq7DL4< zaV!?+B7@rLFG^jM2`QMaN<8%Fq>0XMappy`J|~OS`5W{LH&r1ewZGbc#;P_$@Mxk|>QOdb z($hD5O-?LI3~<;S6&;h|0x`aYpWz zjKM%`=v}VB7}o;}fG=h%RbCYH*Ps;=wM4drX*VyIVk5%0F~VbH|Hav;T?*WU6?~yZ zbMew87thuuoywJ0RAf%-S*qTw446I3kdj$kO{x-laU>KyR0q{9O->e-1!|oc>;$Cd z?%CSqOS|Sw(`c-@z`cz&TNwzT?89;r6UD(+iAwCO8aS?@K_>zz3TQxD$6Mz&I9I_%;8N07GkZ(8*zSp!iijH*13j3U?ON9k-2DX~hlLWNJxV#(Sc` z$Zs7i)Z8K&rPiY8q7zGwv{}wLh8VE^O?BEV$K9onVc@2B-3>6^GtUjh-hMM%s4iU% zJ8Orrs_HVt8?f*_mPwQ}1|0nBJRrBNMo5VpsvuM}h63HrvU5UlXmD2jCIzY9y7q6; zaH;CAZ_`56ge}r3gqbN=IX{V8N8YL(kGv_jN*N4X;^&cZANWAGm)h}mn)hdvEcz}n zXqm*3tt;a%J}iii+@K~&er=Ukq0WBvhN80}gLH#Lq5Bt|l*^!x#J8oOr#TsrB7ucm z!0}eIG#1q0L}t2iCO)MX^iIt{DoJTTcXT$)4J?VO%vH7IoX1^@576XX`>Y*u#Rpnu z^07Qldc|MlMC48`cok%dL*l(AS!K-PJv`@e=9-d(4&_UlbSd?X^Ty~jeYqIU+LHxgst0At$W(C;=&U3I&n#f2?;y6PwHoE&C)IsqBxp{KzZ~`wUvBbSDk2FV_-9CGid~r$O>vE3-7Lw6+@Q6ZkK4PTZOC>W>vvhRmjRLBrkaMEMph1jW3QfD? zlV}#XGv4~$D%%hDwX~gY$UXXn%R%MX%UF4i6|j00T`zr6-VAcrTQNA15?KaOOJ`)? zwBg3o^NK*hZQd&Jrg&w2(qhb!6<#u0B6qhWN#o!`+2Bg`OY8C`Wmx&zIF?qXRaHC; zisbs{qG6HODn)sATTz(N0ZKv>H;5-bIQym(S3D3A0YSv3HOd)FILG-#HPMiuRHGI3 zfRamABlFlZs7Apnrz~9X$E%cH#l?UGUfE!HVG$uK5LNc^8XBe)t!V@(FKTtM9 zgQiRq#<$!V7j2C58W9D$SblNaW@Qe=qgZpwnW+$JoTEk-DbiH@Q?1txgve z&6y@#P1>|oGO{Ywa{h2UxK<>y(?3y3sbhci;wEhOPhd`}qYFmpsz(&ZrxIDbb)Y z`O8XP%re!Ph}mpZTs8>ZX=1OVeWXUS+zf`GLz>8Jw^Pkv(BWn*X)}%gt>e!G$Nfm( zgzi~z?CcJVbxX^+9c2fmC|`WvnopRt4sCLnUCBm!b}A&`^iAg@j%=KLtyrQrs@dDvsOLI~JZBdI&_^0? zvc9P<$uX^#GYF8|zF8zM+Z&Ds~Ia%}@0nZ-PEe8SeKO4+@JTuTiH z`y9|=>iO%J;_32bRueW4k&1<}{JbRl31PV@@l9NjqZmKoc<2eYzIG) zH2be^DFm7cyk@t|BFB-POR}q;fHB=M?6D%KSMKcwCCk0Uh!pzhVoQ@6HWQK?tr(CA zE?1nv4+-7x3(U0AI;a@W+oX<4DtOtAvaz%Gtj$36<}LZk}nq zoNwUzLU!id1sxZCLm)@Qt7f#GZh283=^Es-7u5Ok_*fNb^o%xHO*GQ zrgPan;Qm_q$(#F5hfAp(uj-kw6YEPiaaLq32WQ2O+^uORdQoOo3hN^#YEj)fMNe{b{Rw^*lO|Q% ze?K2{f7`E=Nm1<1G_t{YT!UjwQ?nUe8LF62UGcbunMNn3j=S%XaSx79JU)Kf^a)cY zUo_2`ZWWVqwdv}Lds}LA6^~{{CoY;g<zF zqTr(ZoW1!2FNd4==8tw1_q691wdFT28dIH~$&m&0de=2Ekyf~??$?Zs|C(aV2&#?k z@7|Z+zHngY`f$a5eTsF_7<~&ttNx%ruOQYyjj>}!G>!fLr1xUy!T#=^H=8)~m(&=l z8(aV5lm0EctqA&imS2|}Q=hIkR-4%A74wv?Xvp4299SL`B zENqhrKN@5 zBl*R<_$+*7PJZiVy`6hF?CuN~znXXLSmpjxo2>=giGj^+#aCwA7BNFxiNb+Jg`Pcr z1iZF&3ku5*N>sQ-48q-O3yYQp`K=qHCs*EoVoA7YndUx!KHD9(zp6cm7O=Q*U$}TL zyO>{enr%RI6b_tb?D-X&3rBYHRblfI{?j(BcqKgkdZD)islw>;+mACk+wSnhF%|YK zfClnA+BM9uV{QIedjJvTm+kaxy!l|brOg)&rd3yKP?62d=-QKa*tMXreYVe7$2Q!+ z*u|5c_MvAv#N6M#BwW5N+_c@+l~uEP#l8)YXH?tB-7j6oig00%z0uTrH}v%Q+C}K_QN%%1D(=|JH1y^2b{f*#74r&*dTo2OO2%xT z(4Vh_E0*RD?Dlt!Si1b|uAtDn5J7!NE-`9h^|t)F z-9gyCePF{bUzs5@P{@yQ^!MzcN)&i5`*RZ(#>N!OhJ06tn7Lya^Rp%jo4UiE)%is) z(>85It(5-oM2$GnqAA)IdSPH0zx0-&a(_=x@#wt#+6|1mB*ES|+0I{~K&$L#xa&wb zwMHfShiyYgbl$n(19&mkz$a#F>y@)CM%Gc)C^CzQ$Z}Yab8S1 z+WLbF7+7)V{&4=W{@%4V1W2lQbZfqS1uN^grf)rJ#0dS3liLELZ@*rHGfwUndRHM> z0tQvwGuu}yEv*gL4Gzk6r63(>iN zX=q8Dw1o&0+S|xFKz0r+T*@Shou{paW-tl6MfXg?zWoDj+ro}H#kRRJ3Bp~=@|)Yt ziZB9#3ydp8ExcN^Y+%byx9wf~^Xs-3)~=);>&1SD^V?1Hv)zM?xmjEh$+T8t%H|hi z9d{K@u7#i@@}2E%yFksaSguWUwu$ZgSSh5n2V;VG>+vjJ15f_OqhEW_OIZlO6gZPI zA{9BF-o(24-9Y@fUCXcT$}gR5B#UlhhwZOj(8BJ|T~PV`y}kXX)>y^zz0~$NgC#t8 z$hO8?R!*zC<#cLcbi(FpI~8{9Lo%_uTKm2>3`8>(`@0WlJyxC0FW=3I#iPd&`eEnNaP2&^%IGh63xezKULMO%2+HUWx@Dkz z#a@Od5$MPJdlrQ&j#44qwU0HBInv!*+%qTNwufCU_H8N7U1|dhJJ;pcId)qxKkPig zdU*29Z+@+?e?!>YQ`j%#t6X}AyY}>-To;eSb}B(wPL>2CxU^ED++sNTM>F!`oGZG*5AA2OyM7o)_hsBa=gvwj=$fwxp;IVX2WK;@pCz=Y1pZK|sb~_gwgauZ<)jY0E}`@>5>LJgPUV0yAj0O!n9| zME3Qmm2hmavya8cN0+kJ9RVeq-@GUUI2x>YT0;~6Ii3x>m*zKb z^1^HGDQ~tpBOw3!qWtkTv;<3EIMO9+ZP!MYo^7Osg6zTt&iU*Z*tb+GCC8+D8DdGT zmq~IofgFfKbNCG73PtRN0@HdEpQ2ob+N@-uqD#WAUQ~mP!%ug`I^L=AZMz57vlQl4 z8n43eo>n8jd9URqhA{>Y^~TPrm*++&MrkY&_y3unevcE9EM;)On_*W-QMVxDWe06@~bf6HnXyx1p?bz_7&IbHyBp=muA)- ze_iU{_EQ#qZAi6_1uV(U{A{g?L6dmrkV`CG~gj&Tl^{YB@nrV6h0Wb4Ovt z0{IqBB?oLsxa(Eh!mxcmvcBBuVK7oG$lYD2ntd1sgI&||KLLVpj0W8PZP56-7qhi) z)a@%x&Dk7nQc`8!ZWcYlk+Lyt{cJZQ!__u9+~72E=T^!7oj5-2LGj2d#DzwCV`Fq+ zvo;ALwz2SFqL0q=kbOeOTyi!s8`sd zXo7r<4)Hy@wB!cMKgho_M}uae{J?y>#&{-KOtSWO?~;3B3O#aC*oks$(s`Bhw55I# zmx&A9gv_sr>B*KfQsqt#2J~i)F&Xn3OsIMnt}J?_tvS0?qeW`L4uiixv$pMpBZff^ zpXx~)#lB)0X}UJ>hn+WRng_b{b9bRsdXKkvgmp3KBO|tQn|#n~H+e_Rt~J|@NccdA z=3zO%g!ru_8XDsVZ7YMP;8Y_`{yIp{E`sy4Dj}j#zN(}zdXK|*J|njd1-Nc^e)G0L zMG%qCTi?piy5h0UybSWkdvW!PUGs{aJ%cmhi6aB2=LO;GvjdzoANlo0N;rS-z}&qN zi6JZ9A%%58;BQ|ze|E968|Lgkx&1f)t0D!)wk~1S^J^Cpz?Lqug_kfZah$m+7D_C4 z@Qu2nPuPG`lr&ti(pK2l@r2m399GrBhs!pGojapQl?ycm#lF?_sphZ(eDuM}JpWoo z4lHpATbTSSgkrW4pn8p2=x>f}N%~K0g9?rBcp=WfD$g(9TU@pRN-*;dCyaULJMftf z+RAzhr6~JcWtyRdcs;3q&%^tu;@g-b8&Im%f)@f*G|EPi;G7N^q)8wU|^dR z$~zmnB({S5OS_1Zo6-zCn2Iq`9E*_P%}c#OWu(vWM3A1qJawL7AZlZFEyK?7uT5TB zB()PGN`WZp8b_Kwx|pARK*5vQ3QNRCwsZ1| zR;)B0<~*f<3%42JAwS9M9XWm*HGu9_19*2Xgej}6eZPHWXM3h@?sI?pgxn98&d1I1 z>iEFA!fUAJ*V(x6U`NCei`eOe(M!U9Ek1W@oh!a zrwQ`5(~MuS($h=iD!WKO5!3At5t_rnPb;(PG-YvFO(Y#P8 z2>$%)V-S5@w(b~1BLvJSq#ODc(ylrC1s6am^`=N<&!%wkHY^H=#HK*!WO3J-sU1k! zQH}WLzUYt5Zm1fn!{p)Y`?M(!4!>{8B*N&j9le>)Q5sC2Z|gPxQb%i%5O7cCiufZ5 zAA$E^;T+rHh^n1@FMr{61-_GW7&OC<#h&=hv~rUg+_H&BU*`EnMuZDA8NqmCo9%R` zLM)1XWNTDT-x8dM=Ga$AN9q&5iWxYz0eC1kF%_Jtz%&G>&A=Tpm9;*^7+J*@iTWq*n}5hoDc@Nop2+)Vf-(vX_~o{JLLQu2 ziB5{C-ch$Zp)~qOd|9v5;1E?3%;w-cS2GO6^{>nc7s%qUIG@Q1#%-OIntHh{e{_jW zSdomQvpM_Za|{F>Hac33DI)%={CvjyGdB9(4e=&<0_@sd8pA1q$2eJj42S@UVms<_ z7L`#}ymL}SamapfM)5wZn1#zwA{wpP@#Y2u21Zh6u%myczlnsZ{bv?q@Jhxqo*^yc zt9fs3^J_XCu>*VAq;27{H8R}$u0>RHrR?A&FP zVDULE3o#aiL7NVqAq-PPHdYB|j^dpPuoe)<#3W_MpmUcK13D%Wbo5PA#)P&tWEFNg z)T@bM*>o(9#?Usfa3P0Rs^7PTv-7yVgl5mC{PKPIwWu>MU@S<2fKmJyw{`KWvTR*^ zn=lA>7HEfmA!Ck$=}XaahUD~GBAm}z2kKT#(HL1x+wl%cvy)KzPNLMIHH;`BhrzUi-0aBjJ}&O`fuLiq{v-VGIj5L^upW& zSXuT}VCOw&A3R~uZzyyvgyy*-<6{@S$HTUhV!8#(V9A0z60>^?7UB{6{7-zw)rjA^ ztKaY&vwomEV#QFg_n7eqmmlO0Qlkq23ix=#+Xz7NE5CP#olUZG*c$rO8MASWMHfL< zEW>Eym4(jDT{3Qwe^FSpFc3#M;cJIUQjA+TdGE5j3v4G=iEKk}7kO>E0$*MJu^GL^ zC5MnLNVPF*t$$w)4% z9M~<{x#wk1Tb)}mXQ}3Ic(?;gS-?BmDU|8y)I<5nH(f-W>unDklG)t0gsO9DCyQzy z+Ei8O&StD@$ekN0`2)M?=&fRfPC&8fW9{@BQEOczTjlC6=l+(v7v&_0HLG5n`JlNk zou6Own!l0KyH=46SCcx$&b>HRs)PAwhiO>DE_%n?{Ly{IBPXQGdkMGC%lGIW6ZVLY zbC%?8Z%?talU+9z{T92Dq@HCqHU_b^ILqSj{Sognjjqp@=a zU~}aRfO?BzS(BWK)~!22;8N$kvX0gsEEOr^is;WiS4B#F#-RM<$eG91KrE}yI62~T z!Y03ow4yVP9S=uw#$wkig{5iX8#|4$St)6T{3sTQ9Qdls`Z*)y&J3_7%DF8!wt zN3O!Jm1O8WDRXB5Al1-(HuwKR020ICN=kV@3g_#VN@PTw8S>!|g5@I~?9djMVmSn} z+?ug>2f|IK;`2*tVQ`U+4=+a@=#I?UC9qJqWm9<_$YZ2UB|;}}*n)WhE<}I#+QJ%i)1pzsZ}0Evvvw_1ptfFGI%?!FuA;L{_D#&zLCPBXkFQZgHdY8b)!O zW@pFG1`OAGZ)J*|<&bkgkkd`sEBPqUg%ldjz@JH6n~1|i&V6x#w76MxYT;Fm@lGP~ z2R5#*FjgoHfbr8(|H<``g&%^u;2OHi%1qWw4QtO;UKFv6V=81>>CRX*r>+ht-H6DY z%DE_)R8YhR<@XuvNDgNR6@sW@t&vs=buBO5Iuh5QmLpDd#LeW*VDP0d47V)LEVT&R znWbj3ompxQ##yCqw}brbV^Y6++Z6dX)1kQVaClHUVwA`g3ycsXBbBL9E+M@z8MIK= zrUK7|#_SIl+(ig~#lrg^#>Fv*>)ez;G~`c{J|sP`bLGJ7Re`@DK~=lKiZsh~d`v;efZ{_Id`tofJQxFM>Oi0-wRL?}OaEPwC_SvX2M zbjAMgL|?dau{NE(?b)AS-OC+2*|TM9jlUA-@6Juek!ug2!{hdAzDSV>6P zS)RAuEmG{S%|^Fp2dNReP+NZ5Z+C15T~PJcZk=Hij2aprMw{F*+3A7<8zY~^-R|HH zkqcfJ3vge$i)ncm(C(cDVdq?kRV=q+DYp{nRUGdQG9--gIJj7kkKVf;JGyx6Fp)Kp z*kZ20Zz4FLXp%c+krcEhM~AbIg$Gyr6M_>gXB^c&k9KAtk1zw8=( z^TJ&YRs7i!~G?H0)ye|W#i8M zChw^2wZEOwcr(qBX24$t7dv-yCBq%5>3j$dDjCD^Yb(7)a=^2@eMb4%QgsVcS^sov z;!Cj@camhsNGf+R2YtL*!OH2YXfH?-klP1*Usa%xkecFa3Hd*cx*nh z_2!X*6v^h-{9${!+O_pXG%R9I@aX*A2X`Dn`@}ln4SOZ;o+-xlbY&5P%trbO z^Vrb#CqqmPy}-2@zOir>n$0{L<7E-zu5FI;IG3O8g`rmv?pC$lVHexc-k^a+N1ir% zXkJ4v9|MiY(NCIT@!#~Gybe#x!`gl|ev_LZ{Z_8TWR`5myTlJd~5C_{g=WT1xJ=G$dpJPYPIYGlygyOe z!1+Ypn6e{?Qj=_cVcP-iS!9fI_5-tvN8N+X-kUkr(_7go^yzfkTi#HM2`9LDD3=&; zA&4Mx2qx!{;rBVPiufo*oS zRe&GllBQ#8-~;IH*5sH<{s>gpd&Z2Y9BW$MVtvpOEgNB*varU*8)f&DM3~M*w>sV! zaMpsT(Rbzku!80wnW#+yRR~o6KENcX{jpQz2AZ;rJ#rX4_5>j!V-*R^b{%nGmnuSa z;&9lZKNv~qkE8g5JYH345Xco_-U zbNiyfA;dWnkM(&xGPQ74tRecy`;9$Z#(9}POrwALF=CAyP@kL-GZ?!~pyM@XQ#n7U*~TR9EZb$?CFH5 z#)z^&%Z}=G8oPCg_WV#scw&tf{4{^3wvZBk@zPab{bPf|cEpZq{5;%cBZcl<@QrE4 z^N6n_ps_Gc?W)9BNJ4%y!LHq>n5^-eO)Z`ROKmm)%VqU-#j*XEcA;!pw5FyT>{>Vi zV2~4zqxF8qu7rb*%l1-e)b^cY}cCpFLXGO)Bpeg literal 0 HcmV?d00001 diff --git a/locale/zh_CN/LC_MESSAGES/django.po b/locale/zh_CN/LC_MESSAGES/django.po new file mode 100644 index 0000000..4d8524b --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/django.po @@ -0,0 +1,2418 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-07-28 15:57+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" + +#: settings.py:12 +#, fuzzy +msgid "account/" +msgstr "新帐号" + +#: settings.py:12 django_authopenid/urls.py:9 django_authopenid/urls.py:11 +msgid "signin/" +msgstr "" + +#: django_authopenid/forms.py:67 django_authopenid/views.py:93 +#, fuzzy +msgid "i-names are not supported" +msgstr "基本的HTML标签也是支持的" + +#: django_authopenid/forms.py:102 django_authopenid/forms.py:207 +msgid "" +"Usernames can only contain letters, numbers and " +"underscores" +msgstr "" + +#: django_authopenid/forms.py:109 +msgid "" +"This username does not exist in our database. Please " +"choose another." +msgstr "" + +#: django_authopenid/forms.py:126 django_authopenid/forms.py:231 +msgid "" +"Please enter a valid username and password. Note that " +"both fields are case-sensitive." +msgstr "" + +#: django_authopenid/forms.py:130 django_authopenid/forms.py:235 +msgid "This account is inactive." +msgstr "" + +# translation and user name validation are language-specific +#: django_authopenid/forms.py:158 +msgid "invalid user name" +msgstr "用户名只能包含英文字母、数字和下划线" + +#: django_authopenid/forms.py:160 +msgid "sorry, this name can not be used, please try another" +msgstr "对不起,您不能注册该用户名,请换一个试试" + +# minimal length of user name may be language specific +#: django_authopenid/forms.py:162 +msgid "username too short" +msgstr "用户名太短,请使用三个或三个以上字符" + +#: django_authopenid/forms.py:170 django_authopenid/forms.py:171 +msgid "this name is already in use - please try anoter" +msgstr "该用户名已被注册,请换一个试试" + +#: django_authopenid/forms.py:184 +msgid "" +"This email is already registered in our database. Please " +"choose another." +msgstr "该电子邮件已被注册,请选择另一个再试。" + +#: django_authopenid/forms.py:214 +msgid "" +"This username don't exist. Please choose another." +msgstr "" + +#: django_authopenid/forms.py:253 +msgid "choose a username" +msgstr "选择一个用户名" + +#: django_authopenid/forms.py:255 templates/authopenid/signup.html:36 +msgid "your email address" +msgstr "您的电子邮件地址" + +#: django_authopenid/forms.py:257 templates/authopenid/signup.html:37 +msgid "choose password" +msgstr "密码" + +#: django_authopenid/forms.py:259 templates/authopenid/signup.html:38 +msgid "retype password" +msgstr "确认密码" + +#: django_authopenid/forms.py:330 +msgid "" +"Old password is incorrect. Please enter the correct " +"password." +msgstr "" + +#: django_authopenid/forms.py:342 +msgid "new passwords do not match" +msgstr "" + +#: django_authopenid/forms.py:434 +msgid "Incorrect username." +msgstr "选择一个用户名" + +#: django_authopenid/urls.py:10 +msgid "signout/" +msgstr "" + +#: django_authopenid/urls.py:11 +msgid "complete/" +msgstr "" + +#: django_authopenid/urls.py:13 +#, fuzzy +msgid "register/" +msgstr "确认" + +#: django_authopenid/urls.py:14 +#, fuzzy +msgid "signup/" +msgstr "注册帐号" + +#: django_authopenid/urls.py:16 +msgid "sendpw/" +msgstr "" + +#: django_authopenid/urls.py:26 +msgid "delete/" +msgstr "删除" + +#: django_authopenid/views.py:99 +#, python-format +msgid "非法OpenID地址: %s" +msgstr "" + +#: django_authopenid/views.py:366 +msgid "Welcome" +msgstr "" + +#: django_authopenid/views.py:456 +#, fuzzy +msgid "Password changed." +msgstr "密码" + +#: django_authopenid/views.py:488 +msgid "Email changed." +msgstr "" + +#: django_authopenid/views.py:519 django_authopenid/views.py:671 +#, python-format +msgid "No OpenID %s found associated in our database" +msgstr "" + +#: django_authopenid/views.py:523 django_authopenid/views.py:678 +#, python-format +msgid "The OpenID %s isn't associated to current user logged in" +msgstr "" + +#: django_authopenid/views.py:531 +msgid "Email Changed." +msgstr "" + +#: django_authopenid/views.py:606 +msgid "This OpenID is already associated with another account." +msgstr "" + +#: django_authopenid/views.py:611 +#, python-format +msgid "OpenID %s is now associated with your account." +msgstr "" + +# todo please check this in chinese +#: django_authopenid/views.py:681 +#, fuzzy +msgid "Account deleted." +msgstr "取消" + +#: django_authopenid/views.py:721 +#, fuzzy +msgid "Request for new password" +msgstr "重设密码" + +#: django_authopenid/views.py:734 +#, fuzzy +msgid "A new password has been sent to your email address." +msgstr "和您的邮件地址是绑定的" + +#: django_authopenid/views.py:764 +#, python-format +msgid "" +"Could not change password. Confirmation key '%s' is not " +"registered." +msgstr "" + +#: django_authopenid/views.py:773 +msgid "" +"Can not change password. User don't exist anymore in our " +"database." +msgstr "" + +#: django_authopenid/views.py:782 +#, python-format +msgid "Password changed for %s. You may now sign in." +msgstr "" + +#: forum/const.py:8 +msgid "duplicate question" +msgstr "完全重复的问题" + +# chinese translation is domain specific +#: forum/const.py:9 +msgid "question if off-topic or not relevant" +msgstr "不是编程技术问题" + +#: forum/const.py:10 +msgid "too subjective and argumentative" +msgstr "太主观性、引起争吵的问题" + +#: forum/const.py:11 +msgid "is not an answer to the question" +msgstr "不是一个可以回答的“问题”" + +#: forum/const.py:12 +msgid "the question is answered, right answer was accepted" +msgstr "问题已经解决,已得到正确答案" + +#: forum/const.py:13 +msgid "problem is not reproducible or outdated" +msgstr "已经过时、不可重现的问题" + +#: forum/const.py:15 +msgid "question contains offensive inappropriate, or malicious remarks" +msgstr "恶意言论" + +#: forum/const.py:16 +msgid "spam or advertising" +msgstr "垃圾广告" + +#: forum/const.py:56 +msgid "question" +msgstr "提问" + +#: forum/const.py:57 templates/book.html:110 +msgid "answer" +msgstr "回答" + +#: forum/const.py:58 +msgid "commented question" +msgstr "评论问题" + +#: forum/const.py:59 +#, fuzzy +msgid "commented answer" +msgstr "修改回答" + +#: forum/const.py:60 +msgid "edited question" +msgstr "修改问题" + +#: forum/const.py:61 +msgid "edited answer" +msgstr "修改回答" + +#: forum/const.py:62 +msgid "received award" +msgstr "获奖" + +#: forum/const.py:63 +msgid "marked best answer" +msgstr "标记最佳答案" + +#: forum/const.py:64 +msgid "upvoted" +msgstr "投赞成票" + +#: forum/const.py:65 +msgid "downvoted" +msgstr "投反对票" + +#: forum/const.py:66 +msgid "canceled vote" +msgstr "撤销投票" + +#: forum/const.py:67 +msgid "deleted question" +msgstr "删除问题" + +#: forum/const.py:68 +msgid "deleted answer" +msgstr "删除回答" + +#: forum/const.py:69 +msgid "marked offensive" +msgstr "标记垃圾帖" + +#: forum/const.py:70 +msgid "updated tags" +msgstr "更新标签" + +#: forum/const.py:71 +msgid "selected favorite" +msgstr "收藏" + +#: forum/const.py:72 +msgid "completed user profile" +msgstr "完成个人所有资料" + +#: forum/const.py:83 +msgid "[closed]" +msgstr "[已关闭]" + +#: forum/const.py:84 +msgid "[deleted]" +msgstr "[已删除]" + +#: forum/const.py:85 +msgid "initial version" +msgstr "初始版本" + +#: forum/const.py:86 +msgid "retagged" +msgstr "更新了标签" + +#: forum/feed.py:17 +msgid "site title" +msgstr "CNProg.com" + +#: forum/feed.py:17 +msgid " - " +msgstr "-" + +#: forum/feed.py:17 +msgid "site slogan" +msgstr "程序员问答社区" + +#: forum/feed.py:17 +msgid "latest questions" +msgstr "最新问题" + +#: forum/feed.py:20 +msgid "meta site content" +msgstr "中国程序员的编程技术问答社区。我们做专业的、可协作编辑的技术问答社区。" + +#: forum/feed.py:22 +msgid "copyright message" +msgstr "Copyright(c)2009.CNPROG.COM" + +#: forum/forms.py:14 templates/question_edit_tips.html:31 +#: templates/question_edit_tips.html:36 +msgid "title" +msgstr "标题" + +#: forum/forms.py:15 +msgid "please enter a descriptive title for your question" +msgstr "" +"请输入对问题具有描述性质的标题 - “帮忙!紧急求助!”不是建议的提问方式。" + +#: forum/forms.py:20 +msgid "title must be > 10 characters" +msgstr "标题的长度必须大于10" + +#: forum/forms.py:29 +msgid "content" +msgstr "内容" + +#: forum/forms.py:35 +msgid "question content must be > 10 characters" +msgstr "内容至少要10个字符" + +#: forum/forms.py:45 templates/header.html:30 templates/header.html.py:61 +msgid "tags" +msgstr "标签" + +#: forum/forms.py:46 +msgid "please use space to separate tags (this enables autocomplete feature)" +msgstr "多个标签请用空格间隔-最多5个标签。(优先使用自动匹配的英文标签。)" + +#: forum/forms.py:53 +msgid "tags are required" +msgstr " 标签不能为空。" + +#: forum/forms.py:57 +msgid "please use 5 tags or less" +msgstr "最多只能有5个标签" + +#: forum/forms.py:60 +msgid "tags must be shorter than 20 characters" +msgstr "每个标签的长度不超过20" + +#: forum/forms.py:64 +msgid "" +"please use following characters in tags: letters 'a-z', numbers, and " +"characters '.-_#'" +msgstr "标签请使用英文字母,中文或者数字字符串(. - _ # 也可以)" + +# index.html +#: forum/forms.py:74 templates/index.html:56 templates/question.html:196 +#: templates/question.html.py:377 templates/unanswered.html:48 +#: templates/unanswered.html.py:60 +msgid "community wiki" +msgstr "社区Wiki" + +#: forum/forms.py:75 +msgid "" +"if you choose community wiki option, the question and answer do not generate " +"points and name of author will not be shown" +msgstr "选择社区wiki模式,问答不计算积分,签名也不显示作者信息" + +#: forum/forms.py:84 +msgid "update summary:" +msgstr "更新概要:" + +#: forum/forms.py:85 +msgid "" +"enter a brief summary of your revision (e.g. fixed spelling, grammar, " +"improved style, this field is optional)" +msgstr "" +"输入本次修改的简单概述(如:修改了别字,修正了语法,改进了样式等。非必填" +"项。)" + +#: forum/forms.py:160 +msgid "this email does not have to be linked to gravatar" +msgstr "不会公开,用于头像显示服务" + +#: forum/forms.py:161 +msgid "Real name" +msgstr "真实姓名" + +#: forum/forms.py:162 +msgid "Website" +msgstr "个人网站" + +#: forum/forms.py:163 +msgid "Location" +msgstr "城市" + +#: forum/forms.py:164 +msgid "Date of birth" +msgstr "生日" + +#: forum/forms.py:164 +msgid "will not be shown, used to calculate age, format: YYYY-MM-DD" +msgstr "不会公开,只会显示您的年龄,格式为:YYYY-MM-DD" + +#: forum/forms.py:165 templates/authopenid/settings.html:20 +msgid "Profile" +msgstr "个人简介" + +#: forum/forms.py:190 forum/forms.py:191 +msgid "this email has already been registered, please use another one" +msgstr "该电子邮件已被注册,请选择另一个再试。" + +#: forum/models.py:316 templates/badges.html:50 +msgid "gold" +msgstr "金牌" + +#: forum/models.py:317 templates/badges.html:58 +msgid "silver" +msgstr "银牌" + +#: forum/models.py:318 templates/badges.html:65 +msgid "bronze" +msgstr "" + +#: forum/user.py:17 templates/user_tabs.html:7 +msgid "overview" +msgstr "概览" + +#: forum/user.py:18 +#, fuzzy +msgid "user profile" +msgstr "用户概览" + +#: forum/user.py:19 +#, fuzzy +msgid "user profile overview" +msgstr "用户概览" + +#: forum/user.py:25 templates/user_tabs.html:9 +msgid "recent activity" +msgstr "最近活动" + +#: forum/user.py:26 +#, fuzzy +msgid "recent user activity" +msgstr "最近活动" + +#: forum/user.py:27 +#, fuzzy +msgid "profile - recent activity" +msgstr "最近活动" + +#: forum/user.py:34 templates/user_tabs.html:13 +msgid "responses" +msgstr "回应" + +#: forum/user.py:35 templates/user_tabs.html:12 +msgid "comments and answers to others questions" +msgstr "其他用户的回复和评论" + +#: forum/user.py:36 +msgid "profile - responses" +msgstr "回应 - 用户资料" + +#: forum/user.py:43 templates/user_info.html:23 templates/users.html:25 +msgid "reputation" +msgstr "积分" + +#: forum/user.py:44 +msgid "user reputation in the community" +msgstr "用户社区积分" + +#: forum/user.py:45 +msgid "profile - user reputation" +msgstr "积分 - 用户资料" + +#: forum/user.py:51 +#, fuzzy +msgid "favorite questions" +msgstr "收藏" + +#: forum/user.py:52 +msgid "users favorite questions" +msgstr "用户收藏的问题" + +#: forum/user.py:53 +msgid "profile - favorite questions" +msgstr "收藏 - 用户资料" + +#: forum/user.py:60 templates/user_tabs.html:20 +msgid "casted votes" +msgstr "投票" + +#: forum/user.py:61 templates/user_tabs.html:20 +msgid "user vote record" +msgstr "用户所有投票" + +#: forum/user.py:62 +msgid "profile - votes" +msgstr "投票 - 用户资料" + +#: forum/user.py:69 +msgid "preferences" +msgstr "设置" + +#: forum/user.py:70 templates/user_tabs.html:28 +msgid "user preference settings" +msgstr "用户参数的设置" + +#: forum/user.py:71 +msgid "profile - user preferences" +msgstr "设置 - 用户资料" + +#: forum/views.py:1726 +msgid "uploading images is limited to users with >60 reputation points" +msgstr "上传图片只限于积分+60以上注册用户!" + +# todo take these out of settings +#: forum/views.py:1728 +msgid "allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'" +msgstr "只允许上传'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'类型的文件!" + +#: forum/views.py:1730 +#, python-format +msgid "maximum upload file size is %sK" +msgstr "只允许上传%sK大小的文件!" + +#: forum/views.py:1732 +#, fuzzy, python-format +msgid "" +"Error uploading file. Please contact the site administrator. Thank you. %s" +msgstr "在文件上传过程中产生了错误,请联系管理员,谢谢^_^" + +#: forum/templatetags/extra_tags.py:139 forum/templatetags/extra_tags.py:168 +#: templates/header.html:33 +msgid "badges" +msgstr "奖牌榜" + +#: forum/templatetags/extra_tags.py:140 forum/templatetags/extra_tags.py:167 +#, fuzzy +msgid "reputation points" +msgstr "积分" + +#: forum/templatetags/extra_tags.py:221 +#, fuzzy +msgid " ago" +msgstr "前" + +#: templates/404.html:24 +msgid "Sorry, could not find the page you requested." +msgstr "对不起,没有找到您请求的页面!" + +#: templates/404.html:26 +msgid "This might have happened for the following reasons:" +msgstr "有可能是以下原因导致:" + +#: templates/404.html:28 +msgid "this question or answer has been deleted;" +msgstr "你正在查看的问题或者回答已经被删除;" + +#: templates/404.html:29 +msgid "url has error - please check it;" +msgstr "请求的地址有误 - 请核实原始URL地址;" + +#: templates/404.html:30 +msgid "" +"the page you tried to visit is protected or you don't have sufficient " +"points, see" +msgstr "访问的页面被保护或你的积分不够,参见" + +#: templates/404.html:31 +msgid "if you believe this error 404 should not have occured, please" +msgstr "如果你确信不该出现404错误,请" + +#: templates/404.html:32 +msgid "report this problem" +msgstr "报告这个问题" + +#: templates/404.html:41 templates/500.html:27 +msgid "back to previous page" +msgstr "返回前页" + +#: templates/404.html:42 +msgid "see all questions" +msgstr "查看最新问题" + +#: templates/404.html:43 +msgid "see all tags" +msgstr "查看标签列表" + +#: templates/500.html:24 +msgid "system error log is recorded, error will be fixed as soon as possible" +msgstr "" + +#: templates/500.html:25 +msgid "please report the error to the site administrators if you wish" +msgstr "" + +#: templates/500.html:28 +#, fuzzy +msgid "see latest questions" +msgstr "最新问题" + +#: templates/500.html:29 +#, fuzzy +msgid "see tags" +msgstr "标记垃圾帖" + +#: templates/answer_edit.html:4 templates/answer_edit.html.py:47 +msgid "Edit answer" +msgstr "修改回答" + +#: templates/answer_edit.html:24 templates/answer_edit.html.py:27 +#: templates/ask.html:25 templates/ask.html.py:28 templates/question.html:37 +#: templates/question.html.py:40 templates/question_edit.html:27 +msgid "hide preview" +msgstr "禁用预览" + +#: templates/answer_edit.html:27 templates/ask.html:28 +#: templates/question.html:40 templates/question_edit.html:27 +msgid "show preview" +msgstr "启用预览" + +#: templates/answer_edit.html:47 templates/question_edit.html:65 +#: templates/revisions_answer.html:36 templates/revisions_question.html:36 +msgid "back" +msgstr "返回" + +#: templates/answer_edit.html:52 templates/question_edit.html:70 +#: templates/revisions_answer.html:47 templates/revisions_question.html:47 +msgid "revision" +msgstr "版本" + +#: templates/answer_edit.html:55 templates/question_edit.html:74 +msgid "select revision" +msgstr "选择版本" + +#: templates/answer_edit.html:62 templates/ask.html:81 +#: templates/question.html:447 templates/question_edit.html:91 +msgid "Toggle the real time Markdown editor preview" +msgstr "打开或者关闭Markdown编辑器的实时预览" + +#: templates/answer_edit.html:62 templates/ask.html:81 +#: templates/question.html:447 templates/question_edit.html:91 +msgid "toggle preview" +msgstr "预览开关" + +# synonym of above in Edit question +#: templates/answer_edit.html:73 templates/question_edit.html:119 +msgid "Save edit" +msgstr "现在修改" + +msgid "Save" +msgstr "保存" + +#: templates/answer_edit.html:74 templates/close.html:29 +#: templates/question_edit.html:120 templates/reopen.html:30 +#: templates/user_edit.html:83 +msgid "Cancel" +msgstr "取消" + +#: templates/ask.html:4 templates/ask.html.py:60 +msgid "Ask a question" +msgstr "我要提问" + +#: templates/ask.html:106 +msgid "Use" +msgstr "使用" + +#: templates/ask.html:106 +msgid "learn more about OpenID" +msgstr "了解更多有关OpenID的信息" + +#: templates/ask.html:106 templates/authopenid/signin.html:35 +#: templates/authopenid/signin.html:61 +msgid "Login" +msgstr "登录" + +#: templates/ask.html:109 +#, fuzzy +msgid "Get your own " +msgstr "获取您自己的" + +#: templates/ask.html:117 templates/authopenid/sendpw.html:27 +msgid "User name" +msgstr "您的大名" + +#: templates/ask.html:120 +msgid "Email: (won't be shown to anyone)" +msgstr "电子邮件:(不会公开显示)" + +#: templates/ask.html:127 +msgid "Ask your question" +msgstr "现在提问" + +#: templates/badge.html:6 templates/badge.html.py:17 +msgid "Badge" +msgstr "奖牌" + +#: templates/badge.html:26 +msgid "The users have been awarded with badges:" +msgstr "用户已被授予该奖牌:" + +#: templates/badges.html:5 +#, fuzzy +msgid "Badges summary" +msgstr "奖牌列表" + +#: templates/badges.html:16 templates/user_stats.html:113 +msgid "Badges" +msgstr "枚奖牌" + +#: templates/badges.html:20 +#, fuzzy +msgid "" +"Community gives you awards for your questions, answers and votes. Below is " +"the list of available badges and number of times each type of badge has been " +"awarded." +msgstr "这里列出社区所有的奖牌,以及到目前为此,每个奖牌被授予的用户人数。" + +#: templates/badges.html:47 +msgid "Community badges" +msgstr "社区奖牌" + +#: templates/badges.html:53 +msgid "gold badge description" +"Gold badge is very rare. To obtain it you have to show profound knowledge " +"and ability in addition to actively participating in the community. Gold " +"badge is the highest award in this community." +msgstr "" +"金牌是十分罕见的。你不仅要参与社区的提问、回答、投票等活动,而且需要有高深的知识和能力才能获" +"得。" + +#: templates/badges.html:61 +msgid "silver badge description" +"Obtaining silver badge requires significant patience. If you got one, you've " +"very significantly contributed to this community" +msgstr "它是不同寻常的荣誉,只要你付出足够的努力就会得到。" + +#: templates/badges.html:64 +msgid "bronze badge: often given as a special honor" +msgstr "铜牌:时常授予之特殊荣誉" + +msgid "Connect with Twitter" +msgstr "同步Twitter消息" + +msgid "Twitter account name:" +msgstr "账号:" + +msgid "Twitter password:" +msgstr "密码:" + +msgid "Send my Questions to Twitter" +msgstr "发布我的提问到我的Twitter" + +msgid "Send my Answers to Twitter" +msgstr "发布我的回答到我的Twitter" + +#: templates/badges.html:68 +#, fuzzy +msgid "bronze badge description" +"If you are active in this community, you will get this medal - still it is a " +"special honor." +msgstr "铜牌会在你活跃于社区时产生,它相对容易获得,但也是一种特殊的荣誉。" + +# base_content.html +#: templates/base.html:61 templates/base_content.html:60 +msgid "congratulations, community gave you a badge" +msgstr "恭喜您,社区给您颁发了奖牌" + +#: templates/base.html:63 templates/base_content.html:62 +msgid "profile" +msgstr "个人资料" + +#: templates/base_content.html:61 +msgid "see" +msgstr "查看" + +# templates/book.html 78 +#: templates/book.html:7 +msgid "reading channel" +msgstr "读书频道" + +#: templates/book.html:26 +msgid "[author]" +msgstr "【作者】" + +#: templates/book.html:30 +msgid "[publisher]" +msgstr "【出版社】" + +#: templates/book.html:34 +msgid "[publication date]" +msgstr "【出版日期】" + +#: templates/book.html:38 +msgid "[price]" +msgstr "【价格】" + +#: templates/book.html:39 +msgid "currency unit" +msgstr "" + +#: templates/book.html:42 +msgid "[pages]" +msgstr "【页数】" + +#: templates/book.html:43 +msgid "pages abbreviation" +msgstr "" + +#: templates/book.html:46 +msgid "[tags]" +msgstr "【标签】" + +#: templates/book.html:56 +msgid "author blog" +msgstr "作者博客" + +#: templates/book.html:62 +msgid "book directory" +msgstr "书籍目录" + +#: templates/book.html:66 +msgid "buy online" +msgstr "网上购买" + +#: templates/book.html:79 +msgid "reader questions" +msgstr "答读者问" + +#: templates/book.html:82 +msgid "ask the author" +msgstr "向作者提问" + +#: templates/book.html:88 templates/book.html.py:93 +#: templates/users_questions.html:17 +msgid "this question was selected as favorite" +msgstr "这个问题被" + +#: templates/book.html:88 templates/book.html.py:93 +#: templates/users_questions.html:11 templates/users_questions.html.py:17 +msgid "number of times" +msgstr "位用户收藏" + +#: templates/book.html:105 templates/index.html:47 +#: templates/unanswered.html:37 templates/users_questions.html:30 +msgid "votes" +msgstr "票" + +#: templates/book.html:108 +msgid "the answer has been accepted to be correct" +msgstr "有答案已被接受为正确答案" + +#: templates/book.html:115 templates/index.html:48 +#: templates/unanswered.html:38 templates/users_questions.html:40 +msgid "views" +msgstr "浏览" + +# book.html line 123 must be empty in english +#: templates/book.html:125 templates/index.html:68 templates/question.html:112 +#: templates/question.html.py:479 templates/tags.html:46 +#: templates/unanswered.html:75 templates/unanswered.html.py:109 +#: templates/users_questions.html:52 +msgid "using tags" +msgstr "的问题" + +#: templates/book.html:147 +msgid "subscribe to book RSS feed" +msgstr "RSS订阅该图书最新问题" + +#: templates/book.html:147 templates/index.html:115 +msgid "subscribe to the questions feed" +msgstr "订阅最>新问题" + +# close.html +#: templates/close.html:6 templates/close.html.py:16 +msgid "Close question" +msgstr "关闭问题" + +#: templates/close.html:19 +msgid "Close the question" +msgstr "由于以下原因,你要关闭这个问题" + +#: templates/close.html:25 +msgid "Reasons" +msgstr "原因" + +#: templates/close.html:28 +msgid "OK to close" +msgstr "确定关闭" + +#: templates/footer.html:5 +#, fuzzy +msgid "About us" +msgstr "关于本站" + +#: templates/footer.html:6 templates/header.html:13 templates/index.html:83 +msgid "faq" +msgstr "常见问题" + +#: templates/footer.html:8 +#, fuzzy +msgid "Contact" +msgstr "联系我们" + +#: templates/footer.html:9 +#, fuzzy +msgid "Privacy" +msgstr "隐私政策" + +#: templates/footer.html:10 +#, fuzzy +msgid "Feedback" +msgstr "问题反馈" + +#: templates/header.html:8 +msgid "logout" +msgstr "退出登录" + +#: templates/header.html:10 templates/authopenid/signup.html:39 +msgid "login" +msgstr "登录" + +# footer.html +#: templates/header.html:12 templates/index.html:82 +msgid "about" +msgstr "关于本站" + +#: templates/header.html:23 +msgid "back to home page" +msgstr "回到首页" + +#: templates/header.html:29 templates/header.html.py:60 +msgid "questions" +msgstr "问题" + +#: templates/header.html:31 templates/header.html.py:62 +msgid "users" +msgstr "用户" + +#: templates/header.html:32 +msgid "books" +msgstr "读书" + +#: templates/header.html:34 templates/index.html:120 +msgid "unanswered questions" +msgstr "没有回答的问题" + +#: templates/header.html:38 +msgid "my profile" +msgstr "我的资料" + +#: templates/header.html:42 +msgid "ask a question" +msgstr "我要提问" + +#: templates/header.html:57 +msgid "search" +msgstr "搜索" + +#: templates/index.html:6 +msgid "Home" +msgstr "首页" + +#: templates/index.html:21 +msgid "Questions" +msgstr "问题列表" + +#: templates/index.html:23 +msgid "last updated questions" +msgstr "最新更新的问题" + +#: templates/index.html:23 templates/unanswered.html:20 +msgid "newest" +msgstr "最新问题" + +#: templates/index.html:24 +msgid "hottest questions" +msgstr "被回复最多的问题" + +#: templates/index.html:24 +msgid "hottest" +msgstr "热门问题" + +#: templates/index.html:25 +msgid "most voted questions" +msgstr "投票次数最多的问题" + +#: templates/index.html:25 +#"最有价值问题" +#"最新问题" +msgid "most voted" +msgstr "最有价值的问题" + +#: templates/index.html:26 +msgid "all questions" +msgstr "全部问题" + +#: templates/index.html:46 templates/unanswered.html:36 +#: templates/users_questions.html:35 +msgid "answers" +msgstr "回答" + +# must have extra space after in english +#: templates/index.html:68 templates/question.html:112 +#: templates/question.html.py:479 templates/tags.html:46 +#: templates/unanswered.html:75 templates/unanswered.html.py:109 +#: templates/users_questions.html:52 +msgid "see questions tagged" +msgstr "查看有关" + +#: templates/index.html:79 +msgid "welcome to website" +msgstr "CNProg欢迎您!" + +#: templates/index.html:88 +msgid "Recent tags" +msgstr "最新标签" + +# this is how above two are supposed to be +#: templates/index.html:93 +#, fuzzy, python-format +msgid "see questions tagged '%(tagname)s'" +msgstr "查看有关'%(tagname)s'的问题" + +#: templates/index.html:96 templates/index.html.py:120 +msgid "popular tags" +msgstr "受欢迎的标签" + +#: templates/index.html:100 +msgid "Recent awards" +msgstr "最新奖牌" + +#: templates/index.html:106 +msgid "given to" +msgstr "授予" + +#: templates/index.html:111 +msgid "all awards" +msgstr "所有奖牌" + +#: templates/index.html:115 +msgid "subscribe to last 30 questions by RSS" +msgstr "RSS订阅最新30个问题" + +#: templates/index.html:120 +msgid "Still looking for more? See" +msgstr "在寻找更多问题吗?请查阅" + +#: templates/index.html:120 +#, fuzzy +msgid "complete list of quesionts" +msgstr "全部问题列表" + +#: templates/index.html:120 +msgid "or" +msgstr "或者" + +#: templates/index.html:120 +msgid "." +msgstr "。" + +#: templates/pagesize.html:5 +msgid "posts per page" +msgstr "每页显示:" + +#: templates/paginator.html:5 +msgid "previous" +msgstr "上一页" + +#: templates/questions.html:22 +msgid "Found by tags" +msgstr "标签问题" + +#: templates/questions.html:25 +msgid "Active" +msgstr "活跃问题" + +#: templates/authopenid/changeemail.html:10 +msgid "Account: change email" +msgstr "修改电子邮件" + +#: templates/index.html:120 +msgid "Please help us answer" +msgstr "请帮助我们回答" + +#: templates/logout.html:6 templates/logout.html.py:17 +msgid "Logout" +msgstr "退出登录" + +#: templates/logout.html:20 +msgid "" +"As a registered user you can login with your OpenID, log out of the site or " +"permanently remove your account." +msgstr "" +"您是系统的注册用户,可以随时使用OpenID帐号" +"登录系统或者注销登录。" + +#: templates/logout.html:21 +msgid "Logout now" +msgstr "点击退出登录" + +#: templates/pagesize.html:5 +#, fuzzy +msgid "Size per page:" +msgstr "每页显示" + +#: templates/privacy.html:6 templates/privacy.html.py:11 +msgid "Privacy policy" +msgstr "隐私政策" + +#: templates/privacy.html:15 +msgid "general message about privacy" +msgstr "" +"CNProg承认用户隐私的重要性。本文件概述在您浏览CNProg过程中所接收和收集的个人" +"信息的种类,以及CNProg所采取的保护信息的一些措施。CNProg希望这将有助于您在知" +"情的情况下,就和我们 共享个人信息的问题作出决定。" + +#: templates/privacy.html:18 +msgid "Site Visitors" +msgstr "网站访问者" + +#: templates/privacy.html:20 +msgid "what technical information is collected about visitors" +msgstr "" +"当您访问本网站或使用我们的某些在线服务时,服务器会自动记录信息,包括但不限于" +"URL、IP地址、浏览器的类型、屏幕分辨率、系统类型和使用的语言以及访问日期和时" +"间。我们的目的是为了向您>提供更好的用户服务,包括可能为您提供定制的在线服务。" + +#: templates/privacy.html:23 +msgid "Personal Information" +msgstr "个人身份信息" + +#: templates/privacy.html:25 +msgid "details on personal information policies" +msgstr "" +"在登录使用CNProg的提问和回答功能时,我们要求使用者提供用户名、密码、电子邮件" +"等信息。CNProg收集这类关于个人身份的信息只是为了登录系统获得使用功能的目的。" +"我们不会向任何其他社区用 户、个人或第三方透露您的密码或者电子邮件信息。用户可" +"以选择性地填写用户资料、个人网站、年龄、城市等信息,我们收集这些内容为了使用" +"户能够更容易和更满意地使用CNProg提供的网页和服务。" + +#: templates/privacy.html:28 +msgid "Other Services" +msgstr "其他服务" + +#: templates/privacy.html:30 +msgid "details on sharing data with third parties" +msgstr "" +"CNProg可能会收集和统计用户访问本站的概况数据。例如,CNProg可能会检测网站最流" +"行的部分功能。CNProg可能会公开显示或者提供给第三方使用该数据。但是,CNProg不" +"会公开您的身份信息。" + +#: templates/privacy.html:35 +msgid "cookie policy details" +msgstr "" +"访问CNProg时,我们会向您的计算机发送一个或多个专门用于识别您的浏览器的Cookie" +"(包含一个字符串的小文件)。 使用 Cookie 的目的是通过储存用户偏好、跟踪用户倾" +"向(例如搜索方法)来提高我们的服务质量。大多数浏览器的初始设置均为接受 " +"Cookie,但也可以将其重置为拒绝所有 Cookie 或在收到 Cookie 时提示。不过,如果" +"禁用 Cookie,某些功能和服务可能无法正常运行。" + +#: templates/privacy.html:37 +msgid "Policy Changes" +msgstr "政策更改" + +#: templates/privacy.html:38 +#, fuzzy +msgid "how privacy policies can be changed" +msgstr "" +"我们可能在事先通知或不通知的情况下随时更改此'隐私政策',我们建议用户时常查看" +"CNProg隐私政策的改动,在任何改动生效后您的继续访问和使用本站,我们假设您已同" +"意了CNProg以上的所有条款。" + +#: templates/question.html:66 templates/question.html.py:78 +msgid "i like this post (click again to cancel)" +msgstr "这篇帖子有价值(再次点击取消操作)" + +#: templates/question.html:68 templates/question.html.py:80 +#: templates/question.html:273 +msgid "current number of votes" +msgstr "当前总票数" + +#: templates/question.html:73 templates/question.html.py:84 +msgid "i dont like this post (click again to cancel)" +msgstr "这篇帖子没有价值(再次点击取消操作)" + +#: templates/question.html:90 +msgid "mark this question as favorite (click again to cancel)" +msgstr "我要收藏这个问题(再次点击取消操作)" + +#: templates/question.html:96 +msgid "remove favorite mark from this question (click again to restore mark)" +msgstr "我要收藏这个问题(再次点击取消操作)" + +#: templates/question.html:121 templates/question.html.py:304 +#: templates/revisions_answer.html:53 templates/revisions_question.html:53 +msgid "edit" +msgstr "编辑" + +#: templates/question.html:125 templates/question.html.py:314 +msgid "delete" +msgstr "删除" + +#: templates/question.html:130 +msgid "reopen" +msgstr "打开" + +#: templates/question.html:135 +msgid "close" +msgstr "关闭" + +#: templates/question.html:141 templates/question.html.py:327 +msgid "" +"report as offensive (i.e containing spam, advertising, malicious text, etc.)" +msgstr "检举该帖为垃“水帖”(含广告、人身攻击、恶意言论等)" + +#: templates/question.html:142 templates/question.html.py:328 +msgid "flag offensive" +msgstr "垃圾帖?" + +#: templates/question.html:154 templates/question.html.py:337 +#: templates/revisions_answer.html:65 templates/revisions_question.html:65 +msgid "updated" +msgstr "更新于" + +#: templates/question.html:203 templates/question.html.py:384 +#: templates/revisions_answer.html:63 templates/revisions_question.html:63 +msgid "asked" +msgstr "提问于" + +#: templates/question.html:233 templates/question.html.py:411 +msgid "comments" +msgstr "评论" + +#: templates/question.html:234 templates/question.html.py:412 +msgid "add comment" +msgstr "添加评论" + +#: templates/question.html:247 +#, fuzzy, python-format +msgid "" +"The question has been closed for the following reason \"%(question." +"get_close_reason_display)s\" by" +msgstr "问题以“%s”的原因已被" + +#: templates/question.html:249 +#, fuzzy, python-format +msgid "close date %(question.closed_at)s" +msgstr "由于以下原因,你要关闭这个问题" + +#: templates/question.html:256 templates/questions.html:44 +#: templates/user_stats.html:28 +msgid "Answers" +msgstr "个回答" + +#: templates/question.html:258 +msgid "oldest answers will be shown first" +msgstr "最先回答显示在最前面" + +#: templates/question.html:258 +msgid "oldest answers" +msgstr "最先回答" + +#: templates/question.html:259 +msgid "newest answers will be shown first" +msgstr "最晚回答显示在最前面" + +#: templates/question.html:259 +msgid "newest answers" +msgstr "最近回答" + +#: templates/question.html:260 +msgid "most voted answers will be shown first" +msgstr "投票次数最多的显示在最前面" + +#: templates/question.html:260 +msgid "popular answers" +msgstr "投票最多" + +#: templates/question.html:272 +msgid "i like this answer (click again to cancel)" +msgstr "这篇帖子有价值(再次点击取消操作)" + +#: templates/question.html:278 +msgid "i dont like this answer (click again to cancel)" +msgstr "这篇帖子没有价值(再次点击取消操作)" + +#: templates/question.html:284 +msgid "mark this answer as favorite (click again to undo)" +msgstr "最佳答案(再次点击取消操作)" + +#: templates/question.html:289 +msgid "the author of the question has selected this answer as correct" +msgstr "这个答案已经被提问作者标记为最佳答案" + +# todo please check this in chinese +#: templates/question.html:311 +msgid "undelete" +msgstr "取消" + +#: templates/question.html:321 +msgid "answer permanent link" +msgstr "该回答的链接地址" + +#: templates/question.html:322 +msgid "permanent link" +msgstr "永久链接" + +#: templates/question.html:436 +msgid "Your answer" +msgstr "您的回答" + +#: templates/question.html:460 +msgid "Answer the question" +msgstr "回答该问题" + +#: templates/question.html:462 +msgid "Login to answer" +msgstr "登录并回答该问题" + +#: templates/question.html:474 +msgid "Question tags" +msgstr "您正在浏览的问题含有以下标签" + +#: templates/question.html:484 +#, fuzzy +msgid "question asked" +msgstr "提问时间" + +#: templates/question.html:484 templates/question.html.py:490 +#: templates/user_info.html:51 +msgid "ago" +msgstr "前" + +#: templates/question.html:487 +msgid "question was seen" +msgstr "目前浏览数量" + +#: templates/question.html:487 +msgid "times" +msgstr "次" + +#: templates/question.html:490 +msgid "last updated" +msgstr "最后更新时间" + +#: templates/question.html:495 +#, fuzzy +msgid "Related questions" +msgstr "相似的问题" + +# page title +#: templates/question_edit.html:4 templates/question_edit.html.py:65 +msgid "Edit question" +msgstr "修改问题" + +#: templates/question_edit_tips.html:4 +msgid "question tips" +msgstr "受欢迎的提问" + +#: templates/question_edit_tips.html:7 +#, fuzzy +msgid "please ask a relevant question" +msgstr "我要提问" + +#: templates/question_edit_tips.html:10 +#, fuzzy +msgid "please try provide enough details" +msgstr "请详细描述您的问题。" + +#: templates/question_edit_tips.html:13 +msgid "be clear and concise" +msgstr "我们推荐您使用中文描述问题,这样可以得到更多的答复机会。" + +#: templates/question_edit_tips.html:16 +msgid "see frequently asked questions" +msgstr "查看常见问题" + +#: templates/question_edit_tips.html:22 +msgid "Markdown tips" +msgstr "Markdown快速参考" + +#: templates/question_edit_tips.html:25 +#, fuzzy +msgid "*italic* or __italic__" +msgstr "*斜体* 或者 _斜体_" + +#: templates/question_edit_tips.html:28 +msgid "**bold** or __bold__" +msgstr "**加粗** 或者 __加粗__ " + +#: templates/question_edit_tips.html:31 +msgid "link" +msgstr "链接" + +#: templates/question_edit_tips.html:31 templates/question_edit_tips.html:36 +msgid "text" +msgstr "文本" + +#: templates/question_edit_tips.html:36 +msgid "image" +msgstr "图片" + +#: templates/question_edit_tips.html:40 +msgid "numbered list:" +msgstr "列表:" + +#: templates/question_edit_tips.html:45 +msgid "basic HTML tags are also supported" +msgstr "基本的HTML标签也是支持的" + +#: templates/question_edit_tips.html:48 +msgid "learn more about Markdown" +msgstr "有关Markdown详细说明" + +#: templates/questions.html:22 +msgid "All questions" +msgstr "所有问题" + +#: templates/questions.html:26 +#, fuzzy +msgid "Questions with most answers" +msgstr "您正在浏览的问题含有以下标签" + +#: templates/questions.html:27 +msgid "Questions with most votes" +msgstr "" + +# index.html +#: templates/questions.html:57 templates/questions.html.py:69 +msgid "Community wiki" +msgstr "社区Wiki" + +# must have extra space after in english +#: templates/questions.html:83 +#, fuzzy +msgid "Browse questions with tag of " +msgstr "查看有关" + +#: templates/questions.html:125 templates/unanswered.html:105 +msgid "Related tags" +msgstr "相关标签" + +#: templates/reopen.html:6 templates/reopen.html.py:16 +msgid "Reopen question" +msgstr "重设问题" + +#: templates/reopen.html:19 +msgid "Open the previously closed question" +msgstr "你将打开这个已经被关闭的问题" + +#: templates/reopen.html:22 +#, fuzzy +msgid "The question was closed for the following reason " +msgstr "问题曾以" + +#: templates/reopen.html:22 +msgid "reason - leave blank in english" +msgstr "的原因被" + +#: templates/reopen.html:22 +#, fuzzy +msgid "on " +msgstr "于" + +#: templates/reopen.html:22 +msgid "date closed" +msgstr "关闭" + +#: templates/reopen.html:29 +#, fuzzy +msgid "Reopen this question" +msgstr "确定打开这个问题" + +# revisions_answer.html +#: templates/revisions_answer.html:7 templates/revisions_answer.html.py:36 +#: templates/revisions_question.html:8 templates/revisions_question.html:36 +msgid "Revision history" +msgstr "版本历史" + +#: templates/tags.html:5 templates/tags.html.py:28 +msgid "Tag list" +msgstr "标签列表" + +#: templates/tags.html:30 +msgid "sorted alphabetically" +msgstr "按名称的字母先后顺序排序" + +#: templates/tags.html:30 +msgid "by name" +msgstr "按名称排序" + +#: templates/tags.html:31 +msgid "sorted by frequency of tag use" +msgstr "按标签被使用的次数排序" + +#: templates/tags.html:31 +#, fuzzy +msgid "by popularity" +msgstr "按流行程度排序" + +#: templates/tags.html:37 +msgid "All tags matching query" +msgstr "匹配查询" + +#: templates/tags.html:37 +msgid "all tags - make this empty in english" +msgstr "的所有标签" + +#: templates/tags.html:40 +#, fuzzy +msgid "Nothing found" +msgstr "没有找到相关数据。" + +#: templates/unanswered.html:7 templates/unanswered.html.py:18 +msgid "Unanswered questions" +msgstr "没有回答的问题" + +#: templates/unanswered.html:20 +msgid "most recently asked questions" +msgstr "最新加入系统的问题" + +#: templates/unanswered.html:97 +#, python-format +msgid "have %(num_q)s unanswered questions" +msgstr "" +"您正在浏览所有
    %(num_q)s
    个

    问题按 " +"问题创建时间 排序。最新加入的问题将显示在最前面。

    " + +# in unanswered.html and somewhere else +#: templates/unanswered.html:99 +msgid "Have a total of" +msgstr "您正在浏览所有" + +#: templates/user_edit.html:6 +msgid "Edit user profile" +msgstr "修改个人资料" + +#: templates/user_edit.html:19 +msgid "edit profile" +msgstr "修改资料" + +#: templates/user_edit.html:31 +msgid "image associated with your email address" +msgstr "和您的邮件地址是绑定的" + +#: templates/user_edit.html:31 +msgid "avatar" +msgstr "修改头像" + +#: templates/user_edit.html:36 templates/user_info.html:31 +msgid "Registered user" +msgstr "注册用户" + +#: templates/user_edit.html:82 +msgid "Update" +msgstr "更新" + +#: templates/user_info.html:34 +msgid "update profile" +msgstr "更新我的资料" + +#: templates/user_info.html:40 +msgid "real name" +msgstr "姓名" + +#: templates/user_info.html:45 +msgid "member for" +msgstr "已加入" + +#: templates/user_info.html:50 +msgid "last seen" +msgstr "上次活动时间" + +#: templates/user_info.html:56 +msgid "user website" +msgstr "个人网站" + +#: templates/user_info.html:62 +msgid "location" +msgstr "城市" + +# user_info.html +#: templates/user_info.html:69 +msgid "age" +msgstr "年龄" + +#: templates/user_info.html:70 +msgid "age unit" +msgstr "岁" + +#: templates/user_info.html:75 +msgid "todays unused votes" +msgstr "今日剩余投票数" + +#: templates/user_info.html:76 +msgid "votes left" +msgstr "票" + +#: templates/user_stats.html:15 +msgid "User questions" +msgstr "个问题" + +#: templates/user_stats.html:37 +#, fuzzy, python-format +msgid "the answer has been voted for %(vote_count)s times" +msgstr "该回答总共有%d个投票" + +#: templates/user_stats.html:37 +msgid "this answer has been selected as correct" +msgstr "该回答已被设为最佳答案" + +#: templates/user_stats.html:43 +#, fuzzy, python-format +msgid "the answer has been commented %(answered_question.comment_count)s times" +msgstr "该回答有%d条评论" + +#: templates/user_stats.html:56 +msgid "votes total" +msgstr "个投票" + +#: templates/user_stats.html:65 +msgid "user has voted up this many times" +msgstr "该用户投的赞成票总数" + +#: templates/user_stats.html:70 +#, fuzzy +msgid "user voted down this many times" +msgstr "用户投的反对票总数" + +#: templates/user_stats.html:84 +msgid "Tags" +msgstr "个标签" + +msgid "Tags help us keep Questions organized" +msgstr "CNProg用标签来分类系统的信息" + +#: templates/user_stats.html:94 +#, fuzzy, python-format +msgid "see other questions tagged '%(tag)s' " +msgstr "查看有关'%s'的问题" + +#: templates/user_tabs.html:7 +msgid "User profile" +msgstr "用户概览" + +#: templates/user_tabs.html:16 +msgid "graph of user reputation" +msgstr "用户的社区积分历史" + +#: templates/user_tabs.html:17 +msgid "reputation history" +msgstr "积分" + +#: templates/user_tabs.html:24 +msgid "favorites" +msgstr "收藏" + +#: templates/user_tabs.html:29 +msgid "settings" +msgstr "设置" + +#: templates/user_votes.html:14 +msgid "upvote" +msgstr "投赞成票" + +#: templates/user_votes.html:16 +msgid "downvote" +msgstr "投反对票" + +#: templates/users.html:5 templates/users.html.py:23 +msgid "Users" +msgstr "用户列表" + +#: templates/users.html:26 +msgid "recent" +msgstr "最新加入" + +#: templates/users.html:27 +msgid "oldest" +msgstr "最先加入" + +#: templates/users.html:28 +msgid "by username" +msgstr "用户名" + +#: templates/users.html:34 +#, fuzzy, python-format +msgid "users matching query %(suser)s:" +msgstr "" +"匹配查询 '%s' 的所有用户名:" + +#: templates/users.html:38 +msgid "Nothing found." +msgstr "没有找到相关数据。" + +#: templates/users_questions.html:11 +#, fuzzy +msgid "this questions was selected as favorite" +msgstr "这个问题被" + +#: templates/users_questions.html:33 +#, fuzzy +msgid "this answer has been accepted to be correct" +msgstr "有答案已被接受为正确答案" + +#: templates/authopenid/changeemail.html:9 +msgid "" +"This is where you can change the email address associated with your account. " +"Please keep this email address up to date so we can send you a password-" +"reset email if you request one." +msgstr "" + +#: templates/authopenid/changeemail.html:11 +#: templates/authopenid/changeopenid.html:13 +#: templates/authopenid/changepw.html:18 templates/authopenid/delete.html:14 +#: templates/authopenid/delete.html:24 +msgid "Please correct errors below:" +msgstr "" + +#: templates/authopenid/changeemail.html:28 +msgid "Email" +msgstr "" + +#: templates/authopenid/changeemail.html:29 +#: templates/authopenid/signin.html:60 +msgid "Password" +msgstr "密码" + +#: templates/authopenid/changeemail.html:31 +msgid "Change email" +msgstr "更换电子邮件" + +#: templates/authopenid/changeopenid.html:7 +#, fuzzy +msgid "Account: change OpenID URL" +msgstr "更换OpenID地址" + +#: templates/authopenid/changeopenid.html:11 +msgid "" +"This is where you can change your OpenID URL. Make sure you remember it!" +msgstr "" + +#: templates/authopenid/changeopenid.html:28 +msgid "OpenID URL:" +msgstr "" + +#: templates/authopenid/changeopenid.html:29 +msgid "Change OpenID" +msgstr "更换OpenID地址" + +#: templates/authopenid/changepw.html:13 +#, fuzzy +msgid "Account: change password" +msgstr "修改密码" + +#: templates/authopenid/changepw.html:16 +msgid "This is where you can change your password. Make sure you remember it!" +msgstr "" + +#: templates/authopenid/changepw.html:26 +#, fuzzy +msgid "Current password" +msgstr "确认密码" + +#: templates/authopenid/changepw.html:27 +#, fuzzy +msgid "New password" +msgstr "密码" + +#: templates/authopenid/changepw.html:28 +#, fuzzy +msgid "New password again" +msgstr "发送新密码" + +#: templates/authopenid/changepw.html:29 templates/authopenid/settings.html:28 +msgid "Change password" +msgstr "修改密码" + +#: templates/authopenid/complete.html:4 +msgid "Connect your OpenID with this site" +msgstr "绑定OpenID" + +#: templates/authopenid/complete.html:7 +msgid "Connect your OpenID with your account on this site" +msgstr "绑定OpenID帐号" + +#: templates/authopenid/complete.html:10 +#, fuzzy +msgid "Your OpenID is accepted. Please complete this to finish registration." +msgstr "您的OpenID帐号已经验证通过! 请完成最后一步 - 绑定OpenID到您的帐号。" + +# todo: review this message may be confusing user +#: templates/authopenid/complete.html:11 +msgid "This account already exists, please use another." +msgstr "输入您的新帐号或者指定已经存在的帐号。" + +#: templates/authopenid/complete.html:16 templates/authopenid/complete.html:29 +#: templates/authopenid/signin.html:43 +msgid "Sorry, looks like we have some errors:" +msgstr "请注意以下错误:" + +#: templates/authopenid/complete.html:45 +msgid "New account" +msgstr "新帐号" + +#: templates/authopenid/complete.html:46 +msgid "User name (will be shown to others, cannot be modified)" +msgstr "用户名(在社区显示友好名称,不可更改)" + +#: templates/authopenid/complete.html:47 +msgid "Email (not shared with anyone)" +msgstr "电子邮件(用于头像显示服务)" + +#: templates/authopenid/complete.html:48 +msgid "create account" +msgstr "创建帐号" + +#: templates/authopenid/complete.html:56 +msgid "Existing account" +msgstr "已经存在的用户" + +#: templates/authopenid/complete.html:57 +msgid "user name" +msgstr "用户名" + +#: templates/authopenid/complete.html:58 +msgid "password" +msgstr "密码" + +#: templates/authopenid/complete.html:61 +msgid "Register" +msgstr "确认" + +#: templates/authopenid/complete.html:62 templates/authopenid/signin.html:62 +msgid "Forgot your password?" +msgstr "忘记密码?" + +#: templates/authopenid/delete.html:8 +#, fuzzy +msgid "Account: delete account" +msgstr "删除帐号" + +#: templates/authopenid/delete.html:12 +msgid "" +"Note: After deleting your account, anyone will be able to register this " +"username." +msgstr "" + +#: templates/authopenid/delete.html:16 +msgid "Check confirm box, if you want delete your account." +msgstr "" + +#: templates/authopenid/delete.html:19 +#, fuzzy +msgid "Password:" +msgstr "密码" + +#: templates/authopenid/delete.html:31 +msgid "I am sure I want to delete my account." +msgstr "" + +#: templates/authopenid/delete.html:32 +msgid "Password/OpenID URL" +msgstr "" + +#: templates/authopenid/delete.html:32 +msgid "(required for your security)" +msgstr "" + +#: templates/authopenid/delete.html:34 +#, fuzzy +msgid "Delete account permanently" +msgstr "删除帐号" + +#: templates/authopenid/sendpw.html:3 templates/authopenid/sendpw.html.py:7 +msgid "Send new password" +msgstr "发送新密码" + +#: templates/authopenid/sendpw.html:11 +msgid "Lost your password? No problem - here you can reset it." +msgstr "丢失了您的密码? 你可以在这里重设密码。" + +#: templates/authopenid/sendpw.html:12 +msgid "" +"Please enter your username below and new password will be sent to your " +"registered e-mail" +msgstr "请输入用户名,新的密码会发送到你注册时候填写的电子邮件。" + +#: templates/authopenid/sendpw.html:29 +msgid "Reset password" +msgstr "重设密码" + +#: templates/authopenid/sendpw.html:29 +msgid "return to login" +msgstr "返回登录" + +# todo - check translation or see if it's indeed true +#: templates/authopenid/sendpw.html:32 +msgid "" +"Note: your new password will be activated only after you click the " +"activation link in the email message" +msgstr "注意: 新的密码只有您在激活邮件中的链接后才会被激活。" + +#: templates/authopenid/settings.html:29 +msgid "Give your account a new password." +msgstr "" + +#: templates/authopenid/settings.html:30 +msgid "Change email " +msgstr "更换电子邮件" + +#: templates/authopenid/settings.html:31 +msgid "Add or update the email address associated with your account." +msgstr "" + +#: templates/authopenid/settings.html:34 +msgid "Change openid associated to your account" +msgstr "" + +#: templates/authopenid/settings.html:37 +msgid "Delete account" +msgstr "删除帐号" + +#: templates/authopenid/settings.html:38 +msgid "Erase your username and all your data from website" +msgstr "" + +#: templates/authopenid/signin.html:3 templates/authopenid/signin.html:16 +msgid "User login" +msgstr "用户登录" + +#: templates/authopenid/signin.html:21 +msgid "we support two login modes" +msgstr "" +"CNProg支持两种登录模式。您可以使用帐号、密码登录,或者使用OpenID登录。" + +#: templates/authopenid/signin.html:26 templates/authopenid/signup.html:49 +msgid "Login with your OpenID" +msgstr "使用OpenID登录" + +#: templates/authopenid/signin.html:28 +msgid "select openid provider" +msgstr "1)请选择您的帐号类:" + +#: templates/authopenid/signin.html:32 +msgid "verify openid link and login" +msgstr "2)型并完成正确的OpenID地址(如:替换“{username}”为您的对应帐号):" + +#: templates/authopenid/signin.html:58 +msgid "Use login name and password" +msgstr "使用帐号密码登录" + +#: templates/authopenid/signin.html:59 +msgid "Login name" +msgstr "用户名" + +#: templates/authopenid/signin.html:63 +#, fuzzy +msgid "Create new acccount" +msgstr "注册新帐号" + +#: templates/authopenid/signin.html:72 +msgid "Why use OpenID?" +msgstr "为什么需要OpenID登录?" + +#: templates/authopenid/signin.html:76 +msgid "with openid it is easier" +msgstr "" +"构建在OpenID网络认证上的本系统,不需要你注册新的帐号,即可使用我们系统的所有" +"功能" + +#: templates/authopenid/signin.html:79 +msgid "reuse openid" +msgstr "用同一个帐号可登录互联网所有激活OpenID的网站" + +#: templates/authopenid/signin.html:82 +msgid "openid is widely adopted" +msgstr "全世界有1.6亿OpenID帐号,和10,000个支持OpenID的站点" + +#: templates/authopenid/signin.html:85 +msgid "openid is supported open standard" +msgstr "OpenID是有开放标准,并且有相关的基金组织提供支持" + +#: templates/authopenid/signin.html:89 +msgid "Find out more" +msgstr "查看更多" + +#: templates/authopenid/signin.html:90 +msgid "Get OpenID" +msgstr "获取OpenID" + +#: templates/authopenid/signup.html:2 templates/authopenid/signup.html.py:6 +msgid "Signup" +msgstr "注册帐号" + +#: templates/authopenid/signup.html:10 +msgid "" +"We support two types of user registration: conventional username/password, " +"and" +msgstr "我们支持两种注册方式,你可以使用常规的用户名、密码方式注册,或者" + +#: templates/authopenid/signup.html:10 +msgid "the OpenID method" +msgstr "使用OpenID帐号注册" + +#: templates/authopenid/signup.html:15 +#, fuzzy +msgid "Sorry, looks like we have some errors" +msgstr "请注意以下错误:" + +#: templates/authopenid/signup.html:33 +msgid "Conventional registration" +msgstr "请注意以下错误:" + +#: templates/authopenid/signup.html:34 +msgid "choose a user name" +msgstr "选择一个用户名" + +#: templates/authopenid/signup.html:40 +msgid "back to login" +msgstr "返回登录" + +#: templates/authopenid/signup.html:46 +msgid "Register with your OpenID" +msgstr "使用OpenID注册" + +msgid "meta site keywords, comma separated" +msgstr "" +"技术问答社区,中国程序员,编程技术社区,程序员社区,程序员论坛,程序员" +"wiki,程序员博客" + +msgid "what is this website" +msgstr "" +"CNProg是一个面向程序员的可协作编辑的开放源代码问" +"答社区。" + +msgid "what can one do on this website" +msgstr "" +"您可以在这里提问各类程序技术问题 - 问题不分语言和平台。 " +"同时也希望您对力所能及的问题,给予您的宝贵答案。" + +msgid "Goal of this site is..." +msgstr "CNProg 是为了帮助程序员解决更多问题,更加方便的解决问题。" + +msgid "Community gives you awards for your questions, answers and votes." +msgstr "" +"提出问题,给予回答,投出你的票 - CNProg 会针对你在社区的表现,授予你各类奖" +"牌。" + +msgid "please make your answer relevant to this community" +msgstr "您的问题与编程相关吗?" + +msgid "book technical Q&A" +msgstr "图书相关的技术答疑" + +msgid "blog" +msgstr "Blog" + +msgid "privacy policy" +msgstr "隐私政策" + +msgid "current revision" +msgstr "当前版本" + +msgid "number of votes" +msgstr "票数" + +msgid "current page" +msgstr "当前页" + +msgid "next page" +msgstr "下一页" + +msgid "page number " +msgstr "第" + +msgid "number - make blank in english" +msgstr "页" + +msgid "Change tags" +msgstr "修改问题标签" + +# todo: remove magic numbers from this file +msgid "up to 5 tags, less than 20 characters each" +msgstr "最多5个标签,每个标签长度小于20个字符。" + +msgid "Change now" +msgstr "现在修改" + +msgid "uses tags for the classification of questions" +msgstr "用标签来分类系统的信息" + +msgid "tag editors receive special awards from the community" +msgstr "修改标签的用户将授予特殊的社区奖牌" + +msgid "Why use and modify tags?" +msgstr "为什么我只能修改问题标签?" + +msgid "Found by tag" +msgstr "标签问题" + +msgid "Found by title" +msgstr "查询结果" + +msgid "most recently updated questions" +msgstr "最近被更新的问题" + +msgid "latest questions info" +msgstr "" +"问题按提问时间显示排序。新加入的问题将显示在最前面。" + +msgid "" +"\n" +"\t\t\thave total %(q_num)s questions tagged %(tagname)s\n" +"\t\t\t" +msgid_plural "" +"\n" +"\t\t\thave total %(q_num)s questions tagged %(tagname)s\n" +"\t\t\t" +msgstr[0] "" +"\n" +"您正在浏览所有
    %(q_num)s
    个标记为%(tagname)s

    " +msgstr[1] "" +"\n" +"您正在浏览所有
    %(q_num)s
    个标记为%(tagname)s

    " + +msgid "" +"\n" +"\t\t\thave total %(q_num)s questions containing %(searchtitle)s\n" +"\t\t\t" +msgid_plural "" +"\n" +"\t\t\thave total %(q_num)s questions containing %(searchtitle)s\n" +"\t\t\t" +msgstr[0] "" +"\n" +"您正在浏览所有
    %(q_num)s
    个标题含有" +"%(searchtitle)s

    " +msgstr[1] "" +"\n" +"您正在浏览所有
    %(q_num)s
    个标题含有" +"%(searchtitle)s

    " + +msgid "number of questions" +msgstr "个" + +msgid "number of unanswered questions" +msgstr "" +"个 没有回答的 问题。" + +msgid "tagged with" +msgstr "标记为" + +msgid "whose title contains" +msgstr "标题含有" + +msgid "number of questions end of sentence" +msgstr "的问题。" + +msgid "Questions are sorted by the time of last update." +msgstr "问题按最后更新时间显示排序。" + +msgid "Most recently answered ones are shown first." +msgstr "最后被回答或者>更新的问题将显示在最前面。" + +msgid "Questions sorted by number of responses." +msgstr "问题按回复数量显示排序。" + +msgid "Most answered questions are shown first" +msgstr "回复最多的问题将显示在最前面。" + +msgid "Questions are sorted by the number of votes." +msgstr "问题按投票数量显示排序。" + +msgid "Most voted questions are shown first" +msgstr "投票最多的问题将显示在最前面。" + +msgid "questions that user selected as his/her favorite" +msgstr "用户收藏的问题" + +msgid "Frequently Asked Questions " +msgstr "常见问题" + +msgid "What kinds of questions can I ask here?" +msgstr "我可以在这里提问什么样的问题?" + +msgid "What questions should I avoid asking?" +msgstr "什么样的问题我不该在这里提问?" + +msgid "" +"Most importanly - questions should be relevant to this " +"community." +msgstr "毫无疑问,首先必须是技术编程问题!" + +msgid "" +"Before asking the question - please make sure to use search to see " +"whether your question has alredy been answered." +msgstr "" +"提问之前,充分利用系统的自动查找、标签和搜索,看看是否已经有一样的问题并有" +"了答案。" + +msgid "What should I avoid in my answers?" +msgstr "什么样的回答是不受欢迎的?" + +msgid "Who moderates this community?" +msgstr "谁是社区的管理员?" + +msgid "" +"Please avoid asking questions that are not relevant to this community, " +"too subjective and argumentative." +msgstr "" +"与程序员或技术无关的,引起争吵或太过于主观性等违" +"背社区宗旨的内容。本站建立是为了帮助大众程序员解决实际技术问题,我" +"们需要实际的问题!" + +msgid "" +"is a Q&A site, not a discussion group. Therefore - please avoid having " +"discussions in your answers, comment facility allows some space for brief " +"discussions." +msgstr "" +"希望用户提供针对提问的技术回答,可以是进一步了解问题实质,给予参考方案,或" +"完全解决问题的回答。我们希望通过问答的形式解决用户的实际问题。因此,我们不>欢迎在回答中出现不是回答问题的内容,包括针对他人" +"回答的讨论,和其他无意义的浪费网络资源行为。CNProg建议您使用评论功能来讨论你的意见和想法。" + +msgid "The short answer is: you." +msgstr "答案是:每个用户。" + +msgid "" +"The reputation system allows users earn the authorization to perform a " +"variety of moderation tasks." +msgstr "" +"通过积分运作,每个用户都有权限创建标签,进行对所" +"有问题、回答的投票、编辑、关闭等操作。" + +msgid "This website is moderated by the users." +msgstr "社区没有严格意义上的管理员身份" + +msgid "How does reputation system work?" +msgstr "什么是社区积分?" + +msgid "" +"Anyone can ask questions and give answers, points are not necessary for " +"that." +msgstr "对于正常使用社区进行提问、回答而言,积分不是必须的。" + +msgid "" +"As we've said before, users help running this site. Point system helps " +"select users who can administer this community." +msgstr "" +"我们一再声明,CNProg由你来运行和维护。如果你想帮助我们来运作CNProg,你需要" +"一定的积分等级。" + +msgid "" +"Reputation points roughly measure how community trusts you. These points " +"are given to you directly by other members of the community." +msgstr "" +"积分是一种用来粗略衡量社区对你有多信任的数据。积分不是有谁来支付或直接给予你的,而是你通过获得其他用户的支持和信" +"任“赚得”的。" + +msgid "" +"For example, if you ask an interesting question or give a helpful answer, " +"your input will be upvoted and you will gain more trust in the community." +msgstr "" +"举例来说,如果你提了一个非常有帮助的问题或者做了很有用的回答,你将会被其他" +"用户投赞成票。" + +msgid "" +"If on the other hand someone gives a misleading answer, the answer will " +"be voted down and he/she loses some points." +msgstr "" +"相反,你提了不受欢迎的问题,或者误导用户的回答,你将可能被其他用户投反对" +"票。每个赞成" + +msgid "" +"Each vote in favor will generate 10 points, each vote " +"against will subtract 2 points." +msgstr "" +"票会帮你产生10个社区积分,每个反对票会相应扣除你" +"2个积分。" + +msgid "" +"Through the votes of other people you can accumulate a maximum of " +"200 points." +msgstr "" +"每天通过别人投赞成票,你最多只能产生200个积分,这是上限。" + +msgid "After accumulating certain number of points, you can do more:" +msgstr "当你累计到一定>积分,你可以在社区做更多的事情:" + +# todo - check if it's indeed plural +msgid "add comments" +msgstr "添加评论" + +msgid "retag questions" +msgstr "给任何问题整理标签" + +msgid "edit community wiki questions" +msgstr "编辑wiki类问题" + +msgid "edit any answer" +msgstr "编辑任何问题或答案" + +msgid "reopen any closed questions" +msgstr "打开关闭任何人的问题" + +msgid "delete any comment" +msgstr "删除任何一个评论" + +msgid "delete any questions and answers and perform other moderation tasks" +msgstr "删除任何一个问题或答案,及其他管理功能" + +msgid "To register, do I need to create new password?" +msgstr "我需要注册一个新用户吗?" + +msgid "Why other people can edit my questions/answers?" +msgstr "为什么其他人可以修改我的问题/回答?" + +msgid "Still have questions?" +msgstr "还有其他问题?" + +msgid "Please ask your question, help make our community better!" +msgstr "如果您对社区还有其他疑问,请一起来完善我们的" + +msgid "" +"No, you don't have to. You can login through any service that supports " +"OpenID, e.g. Google, Yahoo, AOL, etc." +msgstr "" +"不需要。社区提供了OpenID的登录支持,你要用Google、Yahoo等任何支持OpenID登" +"录的帐号就可以使用系统。" + +msgid "Login now!" +msgstr "马上登录" + +msgid "" +"So questions and answers can be edited like wiki pages by experienced " +"users of this site and this improves the overall quality of the knowledge " +"base content." +msgstr "" +"所以问题和答案都是如Wiki一样可编辑的,我们希望社区能帮助用户沉淀、积累更多" +"有用的知识和经验。" + +msgid "If this approach is not for you, we respect your choice." +msgstr "如果您不喜欢这种方式,我们尊重你的选择。" + +msgid "answer tips" +msgstr "受欢迎的提问" + +msgid "try to give an answer, rather than engage into a discussion" +msgstr "建议您提的问题是可以被答复的,而不仅仅是可以讨论。" + +msgid "gold badge: the highest honor and is very rare" +msgstr "金牌:十分罕见之最高荣耀" + +msgid "" +"silver badge: occasionally awarded for the very high quality contributions" +msgstr "银牌:偶尔颁发之优质奖章" + +msgid "Gold badge is very rare." +msgstr "金牌是十分罕见的。" + +msgid "Gold badge is the highest award in this community." +msgstr "获得金牌意味着你在某个层次上已经达到了顶峰。" + +msgid "Obtaining silver badge requires significant patience." +msgstr "银牌需要经过长时间的奋斗才能获得。" + +msgid "%s ago" +msgstr "于%s关闭" diff --git a/log/README.TXT b/log/README.TXT new file mode 100644 index 0000000..54247a8 --- /dev/null +++ b/log/README.TXT @@ -0,0 +1 @@ +this file is just a placeholder so the empty directory is not ignored by version control \ No newline at end of file diff --git a/log/django.osqa.log b/log/django.osqa.log new file mode 100644 index 0000000..0a0aab3 --- /dev/null +++ b/log/django.osqa.log @@ -0,0 +1,2648 @@ +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-26 19:49:23,969 MSG: pagesize.py:process_exception:33 have exception SubscriptionSettings matching query does not exist. +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:35:25,446 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:35:25,930 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:35:25,996 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:36:27,973 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:36:28,276 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:36:28,342 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:36:54,345 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:36:54,651 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:36:54,714 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:37:28,526 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:37:28,861 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:37:28,928 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:38:54,523 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:38:54,904 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:38:54,977 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:39:11,576 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:39:11,895 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:39:11,966 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:39:37,927 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:39:38,250 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:39:38,311 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:41:33,898 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:41:34,217 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:41:34,283 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:42:02,309 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:42:02,681 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:42:02,747 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:42:19,944 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:42:20,098 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:42:20,188 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:42:29,967 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:42:30,181 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:44:25,065 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:44:25,377 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:44:59,007 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:44:59,505 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:48:24,023 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:48:24,275 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:49:14,601 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:49:18,344 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:49:24,082 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:50:26,776 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:50:35,214 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:50:35,437 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:50:35,500 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:53:00,076 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:53:00,382 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:53:00,448 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:56:30,275 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:56:30,549 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:56:30,615 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:21,661 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:31,177 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:31,269 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:32,832 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:32,940 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:33,936 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:34,017 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:34,082 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:36,227 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:36,345 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:37,691 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 00:59:37,831 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:13:08,194 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:13:08,538 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:13:20,427 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:13:20,608 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:13:24,694 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:13:58,236 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:13:58,506 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:14:02,017 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:14:02,209 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:14:02,288 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:14:02,355 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:15:20,062 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:15:20,401 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:15:20,471 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:15:20,552 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:17:34,242 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:17:34,510 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:17:34,586 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:17:34,673 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:18:25,740 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:18:25,994 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:18:26,082 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:18:26,196 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:19:21,772 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:19:22,036 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:19:22,105 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:19:22,177 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:20:05,875 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:20:06,138 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:20:06,207 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:20:06,325 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,128 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,161 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,171 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,178 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,187 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,193 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,201 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,210 MSG: __init__.py:get_profile_link:101 in get profile link Gandulo +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,219 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:20:27,229 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:20:27,471 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:20:32,203 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:20:37,674 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:21:48,417 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:23:13,713 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:23:13,908 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa____.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:23:13,993 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_____.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:23:22,319 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:23:22,444 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa______.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:23:22,517 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_______.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:23:28,795 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:23:28,963 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa________.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:23:29,036 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_________.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:13,911 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:14,131 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa________.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:14,213 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:14,292 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:14,388 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,851 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,861 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,867 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,874 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,880 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,884 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,891 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,898 MSG: __init__.py:get_profile_link:101 in get profile link Gandulo +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,904 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 01:24:24,911 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:25,155 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:25,342 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa________.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:27,648 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:27,862 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa________.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:43,503 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:43,686 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:24:43,788 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo_.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:25:39,362 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:25:39,552 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:25:45,460 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:25:45,664 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo__.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:25:45,759 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo___.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:26:58,088 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:26:58,278 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo____.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:26:58,348 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo_____.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:27:25,005 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:27:25,198 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo_____.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:27:48,012 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:27:48,214 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo_____.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:28:12,867 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:28:13,062 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo_____.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:28:16,092 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:28:16,262 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo_____.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:28:18,369 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:28:18,546 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo_____.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:28:22,785 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:29:22,122 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:34:09,061 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:34:09,746 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:34:09,818 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:34:09,887 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:35:45,063 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:35:45,392 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:35:45,476 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:35:45,540 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:36:18,734 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:36:19,177 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:36:19,263 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:36:19,335 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:37:06,309 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:37:06,627 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:37:06,688 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:37:06,767 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:37:24,611 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:37:24,959 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:37:25,039 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:37:25,105 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:39:26,078 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:39:26,431 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:39:26,496 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:39:26,578 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:41:02,628 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:41:02,983 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:41:03,053 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:41:03,121 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:41:48,144 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:41:48,573 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:41:48,641 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:41:48,704 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:42:39,420 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:42:39,746 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:42:39,812 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:42:39,884 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:43:24,295 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:43:24,697 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:43:24,780 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:43:24,842 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:44:16,226 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:44:16,565 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:44:16,630 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:44:16,734 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:57:39,713 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:57:40,042 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:57:40,154 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:57:42,144 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:57:42,384 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:57:42,447 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 01:57:42,513 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 03:28:43,815 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 03:28:44,128 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 03:28:44,213 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 03:28:44,286 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:10:45,084 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:10:46,591 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:10:46,778 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\default/media/images/img_tag.jpg" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:10:47,364 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:10:47,450 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:11:22,838 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:11:23,398 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:11:23,565 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:11:23,654 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,079 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,223 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,230 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,236 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,243 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,247 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,255 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,259 MSG: __init__.py:get_profile_link:101 in get profile link Gandulo +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,266 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:13:41,270 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:13:41,601 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:41,960 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:42,030 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:42,038 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:42,048 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:42,055 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:42,059 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:42,068 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:42,073 MSG: __init__.py:get_profile_link:101 in get profile link Gandulo +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:42,081 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:23:42,085 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:23:42,680 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:23:44,392 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:23:44,562 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:23:44,723 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:23:44,786 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:24:27,250 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:24:27,568 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:24:27,713 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:24:27,780 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:24:54,348 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:24:54,700 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:24:54,845 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:24:54,913 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:25:09,862 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:25:10,193 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:25:10,400 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:25:10,474 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:25:37,236 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:25:37,569 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:25:37,710 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:25:37,772 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:27:20,338 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:27:20,671 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:27:20,808 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:27:20,875 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:28:52,387 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:28:52,700 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:28:52,838 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:28:52,910 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:29:16,171 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala_on.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:29:41,201 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:29:41,558 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:29:41,687 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:29:41,767 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:32:27,153 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:32:27,566 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:32:27,719 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:32:27,782 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:36:21,229 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:36:21,630 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:36:21,769 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:36:21,835 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:36:47,365 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:36:47,694 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:36:47,832 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:36:47,904 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:37:19,298 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:37:19,641 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:37:19,769 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:37:19,834 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:44:51,180 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:44:51,552 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:44:51,700 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:44:51,769 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:45:33,296 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:45:33,640 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:45:33,805 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:45:33,887 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:47:07,203 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:47:07,608 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:47:07,783 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:47:07,851 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 18:47:41,200 MSG: readers.py:question:424 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 18:47:41,200 MSG: readers.py:question:435 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 18:47:41,211 MSG: readers.py:question:441 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 18:47:41,211 MSG: readers.py:question:442 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 18:47:41,211 MSG: readers.py:question:446 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:47:42,584 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:47:42,640 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 18:47:42,664 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:47:44,039 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:47:44,871 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:47:45,053 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:55:40,259 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:55:40,513 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:55:40,698 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:55:40,769 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:56:52,423 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:56:53,033 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:56:53,214 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:56:53,309 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:12,778 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:13,124 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:13,328 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:13,401 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:26,789 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:27,217 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:27,576 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:27,644 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:48,615 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:48,969 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:49,128 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:57:49,201 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:58:43,907 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:58:44,249 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:58:44,467 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:58:44,563 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:58:59,831 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:59:00,232 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:59:00,401 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 18:59:00,471 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:00:08,778 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:00:09,102 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:00:09,260 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:00:09,332 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:00:55,996 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:00:56,404 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:00:56,654 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:00:56,720 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:01:50,440 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:01:50,759 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:01:50,947 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:01:51,015 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:01:59,526 MSG: readers.py:question:424 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:01:59,526 MSG: readers.py:question:435 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:01:59,529 MSG: readers.py:question:441 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:01:59,529 MSG: readers.py:question:442 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:01:59,530 MSG: readers.py:question:446 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:01:59,755 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:01:59,782 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:01:59,808 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:00,250 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:00,572 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:00,644 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:19,539 MSG: readers.py:question:424 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:19,539 MSG: readers.py:question:435 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:19,546 MSG: readers.py:question:441 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:19,546 MSG: readers.py:question:442 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:19,546 MSG: readers.py:question:446 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:02:19,798 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:02:19,826 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:02:19,857 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:21,369 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:22,565 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:22,632 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:41,990 MSG: readers.py:question:424 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:41,990 MSG: readers.py:question:435 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:41,993 MSG: readers.py:question:441 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:41,993 MSG: readers.py:question:442 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:02:41,993 MSG: readers.py:question:446 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:02:42,227 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:02:42,260 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:02:42,292 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:42,976 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:43,974 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:44,055 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:58,665 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:58,996 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:59,091 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:02:59,165 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:34,111 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:36,415 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:36,760 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:36,842 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:36,907 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:38,312 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:43,323 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:43,628 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:43,698 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:03:43,766 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:42,140 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:42,338 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:44,736 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:44,895 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:47,158 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:47,244 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:49,611 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:49,763 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:49,832 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:49,891 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:51,486 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:51,642 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:54,654 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:54,802 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:56,157 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:56,273 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:58,578 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:05:58,697 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:01,200 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:01,309 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:02,346 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:02,461 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:05,483 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:05,595 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:07,361 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:07,559 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:07,618 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:06:07,678 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:07:42,269 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:07:42,801 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:07:42,938 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:07:43,000 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:08:08,003 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:08:08,326 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:08:08,497 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:08:08,569 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:09:56,062 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:09:56,473 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:09:56,611 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:09:56,670 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:05,009 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:05,279 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:05,427 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:05,509 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:26,371 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:26,634 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:26,795 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:26,875 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:12:28,687 MSG: readers.py:question:424 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:12:28,687 MSG: readers.py:question:435 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:12:28,690 MSG: readers.py:question:441 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:12:28,690 MSG: readers.py:question:442 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 19:12:28,691 MSG: readers.py:question:446 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:12:29,098 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:12:29,115 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 19:12:29,131 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:29,351 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:29,505 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:29,569 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:34,532 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:34,720 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:34,786 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:12:34,861 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:17:12,036 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:17:12,431 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:17:12,586 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\default/images/medala.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:17:12,644 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:17:15,815 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\default/images/medala_on.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:17:33,891 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:17:34,188 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:17:34,413 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:17:36,631 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\default/mediaimages/medala_on.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:18:23,372 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:18:40,214 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:18:40,456 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:18:40,706 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:20:03,678 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:20:03,954 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 19:20:04,181 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:52:37,085 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:52:37,436 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:52:37,678 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:53:35,105 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:53:35,448 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:53:35,697 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:54:12,628 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:54:12,872 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:54:13,105 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:56:58,551 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:56:58,924 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:56:59,151 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:57:21,188 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:57:21,540 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:57:21,779 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:58:28,460 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:58:28,563 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 21:58:28,653 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:20:32,319 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\default/mediaimages/medala_on.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:46:27,265 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:46:27,704 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:46:27,920 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:46:39,819 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:46:57,190 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:46:57,408 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:46:57,736 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:47:06,839 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:48:52,012 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:49:04,497 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:49:53,023 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:50:27,473 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:50:27,585 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:50:27,657 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:50:31,262 MSG: pagesize.py:process_exception:33 have exception __init__() got an unexpected keyword argument 'initial_data' +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:51:12,507 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:51:23,211 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:52:40,661 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 22:55:12,943 MSG: readers.py:question:424 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 22:55:12,943 MSG: readers.py:question:435 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 22:55:12,947 MSG: readers.py:question:441 /question/104/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 22:55:12,947 MSG: readers.py:question:442 /question/104/dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 22:55:12,947 MSG: readers.py:question:446 have slug dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 22:55:13,072 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:55:13,736 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:55:14,499 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 22:55:19,782 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:05:39,137 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:06:17,588 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:06:17,780 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:06:17,842 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:06:19,739 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:07:35,118 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:07:55,062 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:08:08,628 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:08:08,710 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:08:13,273 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:08:13,388 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:08:13,471 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,510 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,517 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,528 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,535 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,542 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,548 MSG: __init__.py:get_profile_link:101 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,552 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,559 MSG: __init__.py:get_profile_link:101 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,566 MSG: __init__.py:get_profile_link:101 in get profile link Gandulo +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:20:23,573 MSG: __init__.py:get_profile_link:101 in get profile link rickross +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:20:23,825 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:21:27,907 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:21:28,019 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:21:28,105 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:30,171 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:30,171 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:30,174 MSG: readers.py:question:442 /question/104/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:30,174 MSG: readers.py:question:443 /question/104/dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:30,174 MSG: readers.py:question:447 have slug dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:21:30,305 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:21:30,471 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:21:30,617 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:36,507 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:36,507 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:36,513 MSG: readers.py:question:442 /question/104/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:36,513 MSG: readers.py:question:443 /question/104/dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:21:36,513 MSG: readers.py:question:447 have slug dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:21:36,642 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:21:36,664 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:21:37,210 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:21:38,028 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:21:38,369 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:21:46,263 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-accepted-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:25:26,194 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:25:26,585 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:25:26,788 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:25:32,295 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:25:57,223 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:25:57,489 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:25:57,614 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:26:15,944 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\default/mediaimages/medala_on.gif" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:23,213 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:23,213 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:23,213 MSG: readers.py:question:442 /question/104/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:23,213 MSG: readers.py:question:443 /question/104/dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:23,213 MSG: readers.py:question:447 have slug dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:26:23,477 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:26:23,493 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:26:24,398 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:26:24,803 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:26:24,960 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:35,163 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:35,163 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:35,163 MSG: readers.py:question:442 /question/104/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:35,163 MSG: readers.py:question:443 /question/104/dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-27 23:26:35,163 MSG: readers.py:question:447 have slug dsf-gsdfgsdfgsdfg +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:26:35,288 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\__init__.py TIME: 2010-03-27 23:26:35,302 MSG: __init__.py:get_profile_link:101 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:26:36,191 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:26:36,926 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:26:37,003 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-27 23:26:57,549 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-accepted-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:40:23,739 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:40:24,174 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:40:24,237 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:40:27,654 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:40:35,828 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:40:42,598 MSG: pagesize.py:process_exception:33 have exception 'SimpleEmailSubscribeForm' object has no attribute 'save' +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:02,237 MSG: pagesize.py:process_exception:33 have exception 'auth_provider' +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:29,474 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:29,709 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:29,786 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:33,655 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:33,828 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:37,891 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:38,171 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:39,607 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:39,763 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:42,025 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 00:59:42,289 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:08,670 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:09,091 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:10,900 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:14,410 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:35,131 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:39,779 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:40,092 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:44,497 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:46,526 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:46,822 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:46,884 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:49,256 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:49,520 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:51,627 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:00:51,953 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:03:46,371 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:03:51,535 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:03:51,878 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:03:54,654 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:03:56,885 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:03:59,242 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:04:32,694 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-28 02:04:43,302 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-28 02:04:43,302 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-28 02:04:43,319 MSG: readers.py:question:442 /question/1/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-28 02:04:43,319 MSG: readers.py:question:443 /question/1/this-is-the-first-question +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-28 02:04:43,319 MSG: readers.py:question:447 have slug this-is-the-first-question +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 02:04:43,474 MSG: user.py:get_profile_link:79 in get profile link hrc +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:04:44,519 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:04:44,862 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:49:57,621 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:49:57,871 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:49:57,933 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:50:00,819 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:50:03,752 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:50:24,234 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:51:24,799 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:51:28,043 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:51:35,796 MSG: pagesize.py:process_exception:33 have exception Cannot assign "": "ValidationHash.user" must be a "User" instance. +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:54:56,548 MSG: pagesize.py:process_exception:33 have exception Cannot assign "": "ValidationHash.user" must be a "User" instance. +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:55:04,987 MSG: pagesize.py:process_exception:33 have exception Cannot assign "": "ValidationHash.user" must be a "User" instance. +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:55:54,684 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:55:55,151 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 02:55:55,230 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:38,223 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:38,489 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo__.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:38,612 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:38,815 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:42,357 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:42,529 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo__.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:47,645 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:47,802 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo__.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:53,869 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:51:54,026 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo__.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:15,273 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:15,444 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo__.png" does not exist +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,588 MSG: user.py:get_profile_link:76 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,604 MSG: user.py:get_profile_link:76 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,604 MSG: user.py:get_profile_link:76 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,651 MSG: user.py:get_profile_link:76 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,651 MSG: user.py:get_profile_link:76 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,665 MSG: user.py:get_profile_link:76 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,665 MSG: user.py:get_profile_link:76 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,665 MSG: user.py:get_profile_link:76 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,681 MSG: user.py:get_profile_link:76 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-28 03:52:23,681 MSG: user.py:get_profile_link:76 in get profile link Gandulo +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:24,259 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:24,493 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo__.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:27,239 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:27,457 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/upfiles\osqa_logo__.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:32,651 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:37,207 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:37,549 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:37,628 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:40,686 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:42,838 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:43,134 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:43,213 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:45,756 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:55,444 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:55,786 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 03:52:55,865 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 17:57:13,127 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 17:57:13,555 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 17:57:13,595 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:27:23,392 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:27:23,861 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:27:23,891 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:27:25,842 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:27:25,997 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:27:29,617 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:27:29,867 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:58:51,183 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:58:51,354 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:58:51,542 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:58:53,960 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:58:54,069 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:58:56,549 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:59:02,632 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:59:07,671 MSG: pagesize.py:process_exception:33 have exception 'function' object has no attribute 'count' +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:59:31,230 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:59:31,556 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:59:36,346 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:59:38,280 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:59:38,654 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:59:38,687 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-28 23:59:41,572 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 00:00:13,982 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 00:00:20,081 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 00:00:20,440 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 00:00:20,486 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 04:47:45,709 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 04:47:46,170 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 04:47:46,503 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 04:47:52,469 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 04:48:20,460 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 04:48:20,677 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 04:48:21,140 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:24:14,115 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:24:14,515 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:24:14,826 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:24:17,829 MSG: pagesize.py:process_exception:33 have exception column auth_user.bronze does not exist +LINE 1: SELECT (auth_user.bronze) AS "la_user_bronze", (auth_user.si... + ^ + +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:27:47,145 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:27:47,835 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/edit.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:02,311 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:02,642 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/edit.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:07,085 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:07,323 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/edit.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:37,256 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:37,551 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/edit.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:42,033 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:42,243 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/edit.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:47,867 MSG: pagesize.py:process_exception:33 have exception Caught an exception while rendering: column auth_user.bronze does not exist +LINE 1: SELECT (auth_user.bronze) AS "la_user_bronze", (auth_user.si... + ^ + + +Original Traceback (most recent call last): + File "C:\Python26\lib\site-packages\django\template\debug.py", line 71, in render_node + result = node.render(context) + File "C:\Python26\lib\site-packages\django\template\defaulttags.py", line 126, in render + len_values = len(values) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 81, in __len__ + self._result_cache = list(self.iterator()) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 756, in iterator + for row in self.query.results_iter(): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 287, in results_iter + for rows in self.execute_sql(MULTI): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 2369, in execute_sql + cursor.execute(sql, params) + File "C:\Python26\lib\site-packages\django_debug_toolbar-0.8.3-py2.6.egg\debug_toolbar\panels\sql.py", line 91, in execute + return self.cursor.execute(sql, params) +ProgrammingError: column auth_user.bronze does not exist +LINE 1: SELECT (auth_user.bronze) AS "la_user_bronze", (auth_user.si... + ^ + + +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:58,431 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:28:58,753 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/edit.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:29:02,607 MSG: pagesize.py:process_exception:33 have exception Caught an exception while rendering: column auth_user.bronze does not exist +LINE 1: SELECT (auth_user.bronze) AS "la_user_bronze", (auth_user.si... + ^ + + +Original Traceback (most recent call last): + File "C:\Python26\lib\site-packages\django\template\debug.py", line 71, in render_node + result = node.render(context) + File "C:\Python26\lib\site-packages\django\template\defaulttags.py", line 126, in render + len_values = len(values) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 81, in __len__ + self._result_cache = list(self.iterator()) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 756, in iterator + for row in self.query.results_iter(): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 287, in results_iter + for rows in self.execute_sql(MULTI): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 2369, in execute_sql + cursor.execute(sql, params) + File "C:\Python26\lib\site-packages\django_debug_toolbar-0.8.3-py2.6.egg\debug_toolbar\panels\sql.py", line 91, in execute + return self.cursor.execute(sql, params) +ProgrammingError: column auth_user.bronze does not exist +LINE 1: SELECT (auth_user.bronze) AS "la_user_bronze", (auth_user.si... + ^ + + +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:36:54,905 MSG: pagesize.py:process_exception:33 have exception Caught an exception while rendering: column auth_user.bronze does not exist +LINE 1: SELECT (auth_user.bronze) AS "la_user_bronze", (auth_user.si... + ^ + + +Original Traceback (most recent call last): + File "C:\Python26\lib\site-packages\django\template\debug.py", line 71, in render_node + result = node.render(context) + File "C:\Python26\lib\site-packages\django\template\defaulttags.py", line 126, in render + len_values = len(values) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 81, in __len__ + self._result_cache = list(self.iterator()) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 756, in iterator + for row in self.query.results_iter(): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 287, in results_iter + for rows in self.execute_sql(MULTI): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 2369, in execute_sql + cursor.execute(sql, params) + File "C:\Python26\lib\site-packages\django_debug_toolbar-0.8.3-py2.6.egg\debug_toolbar\panels\sql.py", line 91, in execute + return self.cursor.execute(sql, params) +ProgrammingError: column auth_user.bronze does not exist +LINE 1: SELECT (auth_user.bronze) AS "la_user_bronze", (auth_user.si... + ^ + + +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:40:03,237 MSG: pagesize.py:process_exception:33 have exception Caught an exception while rendering: column auth_user.bronze does not exist +LINE 1: SELECT (auth_user.bronze) AS "la_user_bronze", (auth_user.si... + ^ + + +Original Traceback (most recent call last): + File "C:\Python26\lib\site-packages\django\template\debug.py", line 71, in render_node + result = node.render(context) + File "C:\Python26\lib\site-packages\django\template\defaulttags.py", line 126, in render + len_values = len(values) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 81, in __len__ + self._result_cache = list(self.iterator()) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 756, in iterator + for row in self.query.results_iter(): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 287, in results_iter + for rows in self.execute_sql(MULTI): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 2369, in execute_sql + cursor.execute(sql, params) + File "C:\Python26\lib\site-packages\django_debug_toolbar-0.8.3-py2.6.egg\debug_toolbar\panels\sql.py", line 91, in execute + return self.cursor.execute(sql, params) +ProgrammingError: column auth_user.bronze does not exist +LINE 1: SELECT (auth_user.bronze) AS "la_user_bronze", (auth_user.si... + ^ + + +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:43:02,184 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 10:43:02,704 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/edit.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:12:33,444 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:12:33,822 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:12:34,104 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:12:48,657 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:12:48,657 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:12:48,661 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:12:48,661 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:12:48,661 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:12:49,819 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:12:49,914 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:12:50,000 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:12:52,719 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:12:53,026 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:12:53,111 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:12:55,526 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-down-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:12:56,555 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-up-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:12:58,950 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-favorite-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:27:25,783 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:27:26,010 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:27:26,094 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:30,434 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:30,434 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:30,438 MSG: readers.py:question:442 /question/96/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:30,440 MSG: readers.py:question:443 /question/96/mark-question-as-favorite-counter-bug +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:30,440 MSG: readers.py:question:447 have slug mark-question-as-favorite-counter-bug +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:27:30,641 MSG: user.py:get_profile_link:69 in get profile link alexlavr1 +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:27:32,467 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:27:32,900 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:27:34,999 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-up-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:27:35,082 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-down-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:27:38,832 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-favorite-on.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:58,831 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:58,832 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:58,836 MSG: readers.py:question:442 /question/96/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:58,838 MSG: readers.py:question:443 /question/96/mark-question-as-favorite-counter-bug +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:27:58,838 MSG: readers.py:question:447 have slug mark-question-as-favorite-counter-bug +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:27:59,069 MSG: user.py:get_profile_link:69 in get profile link alexlavr1 +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:00,778 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:01,641 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:06,095 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-down-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:11,033 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-up-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:15,072 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:15,267 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:15,351 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:28:21,456 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:28:21,456 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:28:21,461 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:28:21,461 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:28:21,461 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:28:21,678 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:28:21,739 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:28:21,822 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:23,707 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:23,986 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:24,066 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:29,095 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-up-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:32,855 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-down.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:28:32,947 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-up.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:32:28,454 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:32:28,658 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:32:28,740 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:35:45,316 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:35:45,661 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:35:46,032 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/feed-icon-small.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:36:26,746 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:36:26,746 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:36:26,753 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:36:26,753 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 11:36:26,753 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:36:27,065 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:36:27,125 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 11:36:27,207 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:36:28,927 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:36:29,272 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:36:29,354 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:59:03,035 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-down-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 11:59:03,141 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-up-on.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 12:05:15,065 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-favorite-on.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:24:10,299 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:24:10,301 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:24:10,306 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:24:10,306 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:24:10,306 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:24:10,594 MSG: pagesize.py:process_exception:33 have exception Invalid block tag: 'media' +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:25:37,198 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:25:37,198 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:25:37,209 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:25:37,209 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:25:37,209 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:25:37,474 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:25:37,532 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:25:37,615 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:25:39,431 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:25:40,209 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:25:40,598 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:25:50,456 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-arrow-up-on.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:26:30,556 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:26:30,556 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:26:30,562 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:26:30,562 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:26:30,562 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:26:30,819 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:26:30,882 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:26:31,002 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:26:32,953 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:26:33,984 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:26:34,098 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:01,884 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:01,884 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:01,890 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:01,890 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:01,890 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:27:02,142 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:27:02,220 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:27:02,315 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:27:05,984 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:27:07,069 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:27:07,190 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:46,621 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:46,621 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:46,627 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:46,627 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:27:46,627 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:27:46,892 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:27:46,960 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:27:47,040 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:27:49,003 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:27:49,926 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:27:50,013 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:28:54,795 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:28:54,795 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:28:54,801 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:28:54,801 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:28:54,802 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:28:55,040 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:28:55,099 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:28:55,181 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:28:56,966 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:28:57,637 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:28:57,999 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:29:42,157 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:29:42,157 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:29:42,161 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:29:42,161 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:29:42,163 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:29:42,384 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:29:42,441 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:29:42,532 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:29:44,647 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:29:45,463 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:29:45,821 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:29:47,941 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-favorite-on.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:30:45,427 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:30:45,427 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:30:45,437 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:30:45,437 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:30:45,437 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:30:45,694 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:30:45,752 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:30:45,835 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:30:47,762 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:30:48,681 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:30:48,780 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:31:16,344 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/vote-favorite-on.png" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:17,696 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:17,696 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:17,703 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:17,703 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:17,703 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:31:17,940 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:31:17,997 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:31:18,115 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:31:20,134 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/style/jquery.autocomplete.css" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:31:20,776 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/gray-up-arrow-h18px.png" does not exist +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 17:31:21,292 MSG: pagesize.py:process_exception:33 have exception "D:/osqa/dev/osqa/forum/skins\css3/media/images/dot-list.gif" does not exist +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:28,829 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:28,831 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:28,842 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:28,842 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:31:28,842 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:31:29,138 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:31:29,194 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:31:29,276 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:39:38,627 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:39:38,627 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:39:38,631 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:39:38,631 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:39:38,632 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:39:38,875 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:39:38,934 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:39:39,010 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:42:39,631 MSG: readers.py:question:425 loaded from session latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:42:39,632 MSG: readers.py:question:436 view_id=latest +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:42:39,638 MSG: readers.py:question:442 /question/100/([\w-]+) +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:42:39,638 MSG: readers.py:question:443 /question/100/cant-create-language-file +d:\osqa\dev\osqa\forum\views\readers.py TIME: 2010-03-29 17:42:39,638 MSG: readers.py:question:447 have slug cant-create-language-file +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:42:39,858 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:42:39,914 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-29 17:42:39,993 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-29 21:17:43,624 MSG: pagesize.py:process_exception:33 have exception Caught an exception while rendering: column auth_user.gold does not exist +LINE 1: SELECT DISTINCT (auth_user.username) AS "name", (auth_user.g... + ^ + + +Original Traceback (most recent call last): + File "C:\Python26\lib\site-packages\django\template\debug.py", line 71, in render_node + result = node.render(context) + File "C:\Python26\lib\site-packages\django\template\debug.py", line 87, in render + output = force_unicode(self.filter_expression.resolve(context)) + File "C:\Python26\lib\site-packages\django\template\__init__.py", line 572, in resolve + new_obj = func(obj, *arg_vals) + File "C:\Python26\lib\site-packages\django\template\defaultfilters.py", line 523, in length + return len(value) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 81, in __len__ + self._result_cache = list(self.iterator()) + File "C:\Python26\lib\site-packages\django\db\models\query.py", line 238, in iterator + for row in self.query.results_iter(): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 287, in results_iter + for rows in self.execute_sql(MULTI): + File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", line 2369, in execute_sql + cursor.execute(sql, params) + File "C:\Python26\lib\site-packages\django_debug_toolbar-0.8.3-py2.6.egg\debug_toolbar\panels\sql.py", line 91, in execute + return self.cursor.execute(sql, params) +ProgrammingError: column auth_user.gold does not exist +LINE 1: SELECT DISTINCT (auth_user.username) AS "name", (auth_user.g... + ^ + + +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-30 00:22:42,796 MSG: pagesize.py:process_exception:33 have exception Caught an exception while rendering: Reverse for 'question' with arguments '()' and keyword arguments '{'id': 104}' not found. + +Original Traceback (most recent call last): + File "C:\Python26\lib\site-packages\django\template\debug.py", line 71, in render_node + result = node.render(context) + File "C:\Python26\lib\site-packages\django\template\defaulttags.py", line 382, in render + raise e +NoReverseMatch: Reverse for 'question' with arguments '()' and keyword arguments '{'id': 104}' not found. + +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-30 02:52:03,246 MSG: pagesize.py:process_exception:33 have exception global name 'answer' is not defined +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-30 02:53:01,062 MSG: pagesize.py:process_exception:33 have exception 'AnonymousUser' object has no attribute 'subscription_settings' +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-30 02:53:25,250 MSG: pagesize.py:process_exception:33 have exception 'AnonymousUser' object has no attribute 'subscription_settings' +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-30 02:56:15,960 MSG: pagesize.py:process_exception:33 have exception Invalid block tag: 'trans' +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 02:56:42,651 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 02:56:42,676 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 02:56:42,694 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:14:32,982 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:14:33,040 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:14:33,095 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,528 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,558 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,569 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,595 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,619 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,641 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,664 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,680 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,700 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 09:41:00,723 MSG: user.py:get_profile_link:69 in get profile link Gandulo +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 11:27:55,456 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 11:27:55,515 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 11:27:55,556 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:25:12,288 MSG: user.py:get_profile_link:69 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:25:12,335 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:25:12,348 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:25:12,355 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:27:10,976 MSG: user.py:get_profile_link:69 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:27:11,005 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:27:11,017 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:27:11,023 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:27:58,983 MSG: user.py:get_profile_link:69 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:27:59,006 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:27:59,019 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:27:59,026 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:35:19,229 MSG: user.py:get_profile_link:69 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:35:19,255 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:35:19,267 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:35:19,275 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:36:11,082 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:36:11,117 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:36:11,154 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:37:24,987 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:37:25,016 MSG: user.py:get_profile_link:69 in get profile link Joseph +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:39:11,969 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:39:12,000 MSG: user.py:get_profile_link:69 in get profile link Joseph +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:40:02,839 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:40:02,845 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:40:02,872 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:40:02,895 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:43:29,471 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:43:29,496 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 19:43:29,515 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:03:55,140 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:03:55,164 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:03:55,184 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:04:19,486 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:04:19,545 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:04:19,589 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:05:47,285 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:05:47,342 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:05:47,392 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:06:29,924 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:06:29,989 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:06:30,030 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:08:30,848 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:08:30,918 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:08:31,010 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:10:10,305 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:10:10,381 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:10:10,427 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:10:35,878 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:10:35,938 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:10:35,980 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:11:04,312 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:11:04,400 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 20:11:04,467 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:36:44,483 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:36:44,540 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:36:44,585 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:37:11,947 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:37:12,006 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:37:12,049 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:40:54,015 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:40:54,072 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:40:54,118 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:40:58,737 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:40:58,795 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:40:58,836 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-30 23:41:06,224 MSG: pagesize.py:process_exception:33 have exception Reverse for 'question' with arguments '(100,)' and keyword arguments '{}' not found. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:42:58,615 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:42:58,673 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:42:58,717 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:43:03,401 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:43:03,460 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:43:03,502 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:59:23,046 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:59:23,105 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-30 23:59:23,147 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:00:02,408 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:00:02,467 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:00:02,509 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:03:28,835 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:03:28,892 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:03:28,937 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:04:34,217 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:04:34,306 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:04:34,359 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:22:54,766 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:22:54,825 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:22:54,868 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:23:24,736 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:23:24,808 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:23:24,861 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:24:33,469 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:24:33,526 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:24:33,569 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:25:00,210 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:25:00,293 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:25:00,348 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:25:32,130 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:25:32,210 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:25:32,256 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:26:38,930 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:26:38,990 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:26:39,032 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:26:59,207 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:26:59,265 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:26:59,308 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:27:30,355 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:27:30,413 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:27:30,460 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:28:46,658 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:28:46,723 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:28:46,766 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:29:26,150 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:29:26,220 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:29:26,266 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:31:33,882 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:31:33,944 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:31:33,989 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:33:22,984 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:33:23,042 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:33:23,088 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:34:15,448 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:34:15,506 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:34:15,551 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:34:36,316 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:34:36,377 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 00:34:36,421 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:17:10,247 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:17:10,305 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:17:10,351 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:17:53,128 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:17:53,194 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:17:53,240 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:19:22,828 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:19:22,927 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:19:22,980 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:19:46,607 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:19:46,674 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:19:46,723 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,648 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,686 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,697 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,724 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,747 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,772 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,792 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,809 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,832 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:15,852 MSG: user.py:get_profile_link:69 in get profile link Gandulo +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:37,585 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:37,642 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:20:37,684 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-31 02:20:45,513 MSG: pagesize.py:process_exception:33 have exception is not JSON serializable +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:21:02,026 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:21:02,085 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:21:02,128 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:21:23,608 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:21:23,664 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:21:23,707 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:21:45,641 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:21:45,700 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:21:45,743 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-03-31 02:24:12,625 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-31 02:24:13,203 MSG: pagesize.py:process_exception:33 have exception is not JSON serializable +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-31 02:24:17,400 MSG: pagesize.py:process_exception:33 have exception is not JSON serializable +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:24:19,147 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:24:19,209 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:24:19,240 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-03-31 02:24:24,871 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-31 02:24:25,464 MSG: pagesize.py:process_exception:33 have exception is not JSON serializable +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-31 02:24:31,253 MSG: pagesize.py:process_exception:33 have exception is not JSON serializable +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-03-31 02:27:05,345 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:52:15,709 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:52:15,770 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:52:15,802 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:52:29,624 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:52:29,686 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:52:29,733 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:52:39,467 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:52:39,513 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 02:52:39,561 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-03-31 02:52:44,194 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 03:02:37,150 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 03:02:37,213 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 03:02:37,259 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 03:05:45,983 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 03:05:46,045 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 03:05:46,092 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-03-31 03:05:55,624 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 12:21:55,688 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 12:21:55,756 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-03-31 12:21:55,802 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\middleware\pagesize.py TIME: 2010-03-31 12:27:23,460 MSG: pagesize.py:process_exception:33 have exception 'VoteManager' object has no attribute 'get_votes_count_today_from_user' +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 01:49:39,418 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 01:49:39,480 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 01:49:39,528 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 01:52:24,585 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 01:52:24,648 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 01:52:24,694 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-01 02:42:48,499 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 02:42:49,091 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 02:42:49,154 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 02:42:49,184 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +c:\python26\lib\site-packages\south-0.7-py2.6.egg\south\db\generic.py TIME: 2010-04-01 22:17:26,864 MSG: generic.py:execute:129 south execute "ALTER TABLE "vote" ADD COLUMN "canceled" boolean NOT NULL DEFAULT False;" with params "[]" +c:\python26\lib\site-packages\south-0.7-py2.6.egg\south\db\generic.py TIME: 2010-04-01 22:17:27,269 MSG: generic.py:execute:129 south execute "ALTER TABLE "vote" ALTER COLUMN "canceled" TYPE boolean, ALTER COLUMN "canceled" DROP DEFAULT, ALTER COLUMN "canceled" SET NOT NULL;" with params "[]" +c:\python26\lib\site-packages\south-0.7-py2.6.egg\south\db\generic.py TIME: 2010-04-01 22:28:46,187 MSG: generic.py:execute:129 south execute " + SELECT kc.constraint_name, kc.column_name + FROM information_schema.key_column_usage AS kc + JOIN information_schema.table_constraints AS c ON + kc.table_schema = c.table_schema AND + kc.table_name = c.table_name AND + kc.constraint_name = c.constraint_name + WHERE + kc.table_schema = %s AND + kc.table_name = %s AND + c.constraint_type = %s + " with params "['public', u'vote', 'UNIQUE']" +c:\python26\lib\site-packages\south-0.7-py2.6.egg\south\db\generic.py TIME: 2010-04-01 22:28:46,436 MSG: generic.py:execute:129 south execute "ALTER TABLE "vote" DROP CONSTRAINT "vote_content_type_id_key"" with params "[]" +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:24,102 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:24,161 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:24,204 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:29,483 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:29,552 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:29,598 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:35,196 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:35,263 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:35,306 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:39,119 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:39,177 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:39,220 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:42,845 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:42,903 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:42:42,944 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:48:22,765 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:48:22,836 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:48:22,887 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:48:26,976 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:48:27,033 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:48:27,078 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:48:49,438 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:48:49,513 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:48:49,565 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:50:27,982 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:50:28,039 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:50:28,081 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:54:03,338 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:54:03,404 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:54:03,447 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:54:08,651 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:54:08,730 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:54:08,786 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:55:07,030 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:55:07,091 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:55:07,135 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:55:11,878 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:55:11,937 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:55:11,980 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:55:40,117 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:55:40,180 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:55:40,224 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:01,609 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:01,670 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:01,711 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:14,849 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:14,921 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:14,973 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:20,364 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:20,423 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:20,469 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:24,986 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:25,049 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:56:25,092 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:59:59,500 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:59:59,562 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 22:59:59,619 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:00:36,443 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:00:36,503 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:00:36,546 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:01:28,240 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:01:28,325 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:01:28,381 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:01:48,556 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:01:48,617 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:01:48,660 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:01:53,714 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:01:53,776 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:01:53,819 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:02:18,203 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:02:18,263 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:02:18,306 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:02:35,210 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:02:35,270 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:02:35,315 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:03:15,365 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:03:15,424 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:03:15,467 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:18,734 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:18,795 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:18,838 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:24,194 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:24,253 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:24,298 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:33,032 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:33,089 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:33,132 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:38,263 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:38,319 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:38,361 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:44,749 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:44,813 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:04:44,867 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:05:37,298 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:05:37,358 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:05:37,401 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:05:49,937 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:05:49,996 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:05:50,039 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:06:50,634 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:06:50,696 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:06:50,740 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:11:36,211 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:11:36,273 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:11:36,316 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:11:41,311 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:11:41,368 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-01 23:11:41,414 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:06,581 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:06,642 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:06,690 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:13,523 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:13,585 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:13,631 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:18,811 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:18,874 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:18,904 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:23,788 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:23,849 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:26:23,881 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:29:07,680 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:29:07,743 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:29:07,789 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:39:13,276 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:39:13,338 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:39:13,384 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:39:26,582 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:39:26,630 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:39:26,677 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:39:31,762 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:39:31,825 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:39:31,871 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:45:31,844 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:45:31,905 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:45:31,937 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:46:25,180 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:46:25,226 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:46:25,273 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:49:44,897 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:49:44,944 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:49:44,990 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:50:19,144 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:50:19,176 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:50:19,207 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:50:31,280 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:50:31,312 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 00:50:31,344 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:06:21,211 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:06:21,243 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:06:21,275 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:06:25,440 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:06:25,470 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:06:25,486 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:07:44,197 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:07:44,229 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:07:44,259 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:08,707 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:08,753 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:08,769 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:26,319 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:26,349 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:26,365 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:32,512 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:32,542 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:32,575 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:40,921 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:40,951 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:12:40,983 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:13:19,450 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:13:19,496 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:13:19,528 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:13:29,278 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:13:29,309 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:13:29,325 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:13:34,487 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:13:34,519 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 01:13:34,535 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:01,490 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:01,538 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:01,553 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:07,575 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:07,607 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:07,638 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:11,756 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:11,786 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:11,819 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:16,265 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:16,296 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:16,326 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:37,694 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:37,742 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:37,756 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,565 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,595 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,595 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,642 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,658 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,690 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,704 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,720 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,752 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:19:50,767 MSG: user.py:get_profile_link:69 in get profile link Gandulo +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:21:59,125 MSG: user.py:get_profile_link:69 in get profile link alexlavr1 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:22:09,796 MSG: user.py:get_profile_link:69 in get profile link alexlavr1 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:22:38,967 MSG: user.py:get_profile_link:69 in get profile link alexlavr1 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:44:27,951 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:44:27,986 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:44:28,015 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:45:46,454 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:45:46,490 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:45:46,517 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:46:28,355 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:46:28,398 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:46:28,427 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:47:16,302 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:47:16,345 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:47:16,372 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:48:25,717 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:48:25,747 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:48:25,779 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:51:27,138 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:51:27,184 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:51:27,200 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:52:45,381 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:52:45,413 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:52:45,444 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:52:56,519 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:52:56,551 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:52:56,582 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:53:03,088 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:53:03,118 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:53:03,150 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:54:34,293 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:54:34,325 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:54:34,371 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:57:17,941 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:57:17,973 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 02:57:18,005 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 03:00:28,714 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 03:00:28,762 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 03:00:28,792 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:08:18,730 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:08:18,762 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:08:18,793 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:03,598 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:03,635 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:03,683 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:10,984 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:11,016 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:11,048 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:25,375 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:25,423 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:25,437 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:57,267 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:57,299 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:09:57,331 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-02 04:10:09,513 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:10:37,706 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:10:37,743 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:10:37,786 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:11:56,599 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:11:56,647 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:11:56,661 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:12:07,503 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:12:07,551 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:12:07,582 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:12:17,721 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:12:17,753 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 04:12:17,769 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:30:15,842 MSG: user.py:get_profile_link:69 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:35:41,392 MSG: user.py:get_profile_link:69 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:35:44,404 MSG: user.py:get_profile_link:69 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:19,246 MSG: user.py:get_profile_link:69 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:19,308 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:19,323 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:19,338 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:33,364 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:33,364 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:33,394 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:33,410 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:40,523 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:36:40,571 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:37:24,986 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 05:37:25,049 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 14:50:25,043 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 14:50:52,609 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 14:50:52,668 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:13:21,913 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:13:21,963 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:14:15,825 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:14:15,885 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:16:40,831 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:16:40,898 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:18:28,157 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:18:28,236 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:19:09,897 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:21:10,049 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:21:31,217 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:21:31,243 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:21:31,257 MSG: user.py:get_profile_link:69 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:21:55,315 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:21:55,355 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:22:48,009 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:22:48,062 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:23:32,217 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:23:32,269 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:27:46,940 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:27:46,993 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:28:19,608 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:28:19,660 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:28:31,793 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:28:31,861 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:28:46,246 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:28:46,407 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:30:22,839 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:30:23,000 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:34:21,387 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:34:21,440 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:35:43,940 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 15:35:43,990 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 21:07:07,020 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 21:07:07,098 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 21:09:10,976 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 21:09:11,039 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 21:10:09,519 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 21:10:09,565 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 21:12:08,213 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 21:12:08,260 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 22:22:52,809 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-02 22:22:52,855 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:42:10,387 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:42:10,450 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:42:41,474 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:42:41,770 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:43:12,362 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:43:12,424 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:49:49,229 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:49:49,354 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:53:36,757 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:53:36,815 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:54:34,599 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:54:34,664 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:55:25,618 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:55:25,668 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:55:47,484 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 00:55:47,548 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:02:51,006 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:02:51,052 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:03:59,834 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:04:00,049 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:04:35,954 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:04:36,026 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:04:59,825 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:04:59,944 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:13:02,289 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:13:02,351 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:13:32,487 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:13:32,565 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:14:00,351 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:14:00,585 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:14:12,992 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:14:13,049 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:14:27,207 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:14:27,378 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:14:50,992 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:14:51,055 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:15:40,730 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:15:40,785 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:16:14,440 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:16:14,496 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:17:22,957 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:17:23,035 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:18:47,272 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:18:47,365 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:24:35,897 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:24:36,163 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:24:59,898 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:24:59,953 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:25:49,197 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:25:49,270 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:26:35,796 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:26:35,874 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:27:26,654 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:27:26,730 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:28:13,821 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 01:28:13,882 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:28:48,917 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:28:48,996 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:31:29,812 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:31:29,890 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:32:05,536 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:32:05,598 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:33:31,927 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:33:31,994 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:45:33,319 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:45:33,413 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:47:35,795 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:47:35,858 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:48:11,846 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:48:11,908 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:49:03,305 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:49:03,368 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:50:14,299 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:50:14,361 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:50:20,336 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 02:50:20,414 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:12:57,112 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:12:57,190 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:13:02,385 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:13:02,447 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:18,394 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:18,473 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:24,838 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:24,900 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:32,029 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:32,108 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:38,753 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:38,831 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:49,766 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:14:49,828 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:15:19,918 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:15:19,971 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:15:50,714 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:15:50,778 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:16:39,875 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:16:39,937 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:17:29,032 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:17:29,088 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:32:41,407 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:32:41,484 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:33:29,861 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:33:29,907 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:45:54,976 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:46:29,571 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:46:29,690 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:47:29,088 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:47:29,150 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:51:48,216 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:51:48,263 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:52:39,484 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:52:39,540 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:53:00,249 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:53:00,357 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:54:02,515 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:54:02,561 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:55:29,894 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 03:55:29,956 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:13:04,793 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:13:04,839 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:25:02,380 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:25:02,441 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:27:15,808 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:27:15,855 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:27:43,201 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:27:43,262 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:28:41,615 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:28:41,661 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:51:15,269 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:51:15,348 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:52:44,278 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 04:52:44,339 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:00:16,282 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:00:16,345 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:57:30,956 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:57:31,019 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:57:53,549 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:57:53,612 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:59:05,954 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:59:06,016 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-03 05:59:11,867 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:59:12,522 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:59:12,585 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:59:16,733 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:59:16,796 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-03 05:59:22,397 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:59:22,911 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 05:59:22,959 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:04:41,101 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:04:41,163 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-03 06:04:49,993 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:07:08,598 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:07:08,677 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:08:44,020 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:08:44,114 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:09:22,608 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:09:22,671 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:13:41,246 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:13:41,309 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:14:52,884 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:14:52,963 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:19:35,555 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:19:35,618 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:19:51,522 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:19:51,599 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:22:57,496 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:22:57,558 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-03 06:23:03,736 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:26:34,098 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:26:34,177 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:27:12,638 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:27:12,732 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:30:11,198 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 06:30:11,292 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:55:26,266 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:55:26,407 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:55:36,671 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:55:36,750 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:55:57,404 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:55:57,483 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:56:20,566 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:56:20,645 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:56:40,240 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:56:40,318 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:56:55,668 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:56:55,746 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:57:04,749 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:57:04,842 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:57:16,526 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:57:16,619 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:57:24,029 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:57:24,108 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:58:06,237 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:58:06,331 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:58:16,533 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:58:16,611 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:58:56,539 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:58:56,632 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:59:05,102 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:59:05,180 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:59:12,857 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 21:59:12,934 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:23:48,502 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:23:48,595 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:38:42,605 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:38:57,342 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:38:57,451 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:41:29,283 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:41:29,361 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:43:49,601 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:43:49,680 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:46:05,503 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:46:05,602 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:47:05,578 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:47:05,671 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:47:19,901 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:47:19,990 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:52:04,484 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:52:04,578 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:53:09,404 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 22:53:09,483 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,019 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,049 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,065 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,065 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,081 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,096 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,111 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,128 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,144 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:08:23,158 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:57:01,313 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-03 23:57:01,407 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:04:07,293 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:04:07,387 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:04:29,407 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:04:29,500 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:06:12,688 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:06:12,766 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:07:04,003 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:07:04,081 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:08:14,099 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:08:14,194 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:09:23,848 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:09:23,940 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:32:30,763 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:32:30,888 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:32:47,282 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:32:47,391 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:34:58,262 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:34:58,371 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:41:39,036 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:41:39,131 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:41:56,400 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:41:56,493 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:42:23,536 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:42:23,644 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:46:14,026 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:46:14,088 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:47:36,562 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:47:36,668 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:53:25,049 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:53:25,128 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:53:57,403 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:53:57,473 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:56:00,306 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:56:00,369 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:57:06,289 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:57:06,365 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:57:33,269 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 00:57:33,331 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:24:09,605 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:24:09,683 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:24:33,078 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:24:33,140 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:30:29,644 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:30:29,707 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:38:40,736 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:38:40,799 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:39:25,224 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 01:39:25,302 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:44:41,815 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:44:41,892 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:45:17,351 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:45:17,430 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:45:24,371 MSG: user.py:get_profile_link:69 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:45:24,450 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:46:36,881 MSG: user.py:get_profile_link:69 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:46:36,927 MSG: user.py:get_profile_link:69 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:46:36,943 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:46:36,943 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:46:51,138 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 02:46:51,186 MSG: user.py:get_profile_link:69 in get profile link DZ_Brandon +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:03:32,671 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:03:32,671 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:03:32,717 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:03:32,717 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:03:32,733 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:07:08,207 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:07:08,207 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:07:08,247 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:07:08,257 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:07:08,267 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:45:26,131 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:45:26,131 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:45:48,171 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:45:48,176 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:45:48,221 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:45:48,253 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:45:48,267 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:46:24,976 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:46:24,993 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:46:25,023 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:46:25,055 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:46:25,086 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:47:32,420 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:47:32,436 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:47:32,483 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:47:32,545 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:47:32,561 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:48:20,578 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:48:20,578 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:48:20,625 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:48:20,671 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:48:20,687 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:51:07,312 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:51:07,326 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:51:07,374 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:51:07,404 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:51:07,421 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:22,921 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:22,921 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:22,969 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:23,032 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:23,062 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:47,789 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:47,789 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:47,835 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:47,867 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 03:54:47,881 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:17,516 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:17,516 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:17,563 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:17,595 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:17,625 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:49,163 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:49,163 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:49,223 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:49,256 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:12:49,283 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:07,775 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:07,775 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:07,838 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:07,868 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:07,884 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:17,572 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:17,572 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:17,618 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:17,680 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:18:17,697 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-04 04:19:03,269 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:19:06,249 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:19:06,249 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:19:06,311 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:19:06,342 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 04:19:06,374 MSG: user.py:get_profile_link:69 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:33:40,654 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:33:40,671 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:33:40,701 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:33:40,733 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:33:40,763 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:52:22,450 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:52:22,464 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:52:22,512 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:52:22,542 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:52:22,559 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:08,951 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:08,951 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:08,997 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:09,029 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:09,061 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:27,081 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:27,088 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:27,121 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:27,184 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 05:53:27,214 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:44:57,829 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:44:57,845 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:44:57,907 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:44:57,938 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:44:57,970 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:46:09,230 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:46:09,233 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:46:38,388 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:46:38,404 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:46:38,482 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:46:38,529 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:46:38,559 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-04 19:47:22,630 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:47:29,572 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:47:29,572 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:47:29,618 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:47:29,650 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:47:29,681 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:48:59,443 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:48:59,453 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:48:59,502 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:48:59,539 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-04 19:48:59,555 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-05 00:39:19,269 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-05 00:39:26,809 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:55:25,301 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:55:25,305 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:55:25,348 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:55:25,387 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:55:25,414 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:56:02,595 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:56:02,601 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:56:02,644 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:56:02,683 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 01:56:02,714 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:22,644 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:22,651 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:22,690 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:22,816 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:22,851 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:53,752 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:53,756 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:53,799 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:53,835 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:06:53,862 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:17:41,046 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:17:41,051 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:17:41,095 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:17:41,132 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:17:41,161 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:42,167 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:42,174 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:42,233 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:42,322 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:42,351 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:58,818 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:58,823 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:58,868 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:58,904 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:18:58,933 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:31,220 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:31,227 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:31,276 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:31,325 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:31,357 MSG: user.py:get_profile_link:70 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:47,838 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:47,844 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:47,888 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:47,924 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:56,427 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:56,431 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:56,470 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:19:56,507 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:21:36,253 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:21:36,259 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:21:36,298 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:21:36,332 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:21:57,519 MSG: user.py:get_profile_link:70 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:21:57,526 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:21:57,562 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:22:42,769 MSG: user.py:get_profile_link:70 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:22:42,812 MSG: user.py:get_profile_link:70 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:22:42,838 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:22:42,854 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:12,553 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:12,561 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:12,598 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:12,631 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:24,559 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:24,565 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:24,601 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:24,647 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:37,028 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:37,032 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:37,072 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:26:37,105 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:30:41,901 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:30:41,907 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:30:41,943 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:30:41,974 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:30:57,607 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:30:57,612 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:30:57,650 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:30:57,681 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:40:58,191 MSG: user.py:get_profile_link:70 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:40:58,200 MSG: user.py:get_profile_link:70 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:40:58,247 MSG: user.py:get_profile_link:70 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 02:40:58,298 MSG: user.py:get_profile_link:70 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:22:54,273 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:22:54,279 MSG: user.py:get_profile_link:69 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:22:54,316 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:22:54,351 MSG: user.py:get_profile_link:69 in get profile link dakota23123 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:28:42,220 MSG: user.py:get_profile_link:69 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:28:42,263 MSG: user.py:get_profile_link:69 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:28:42,290 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:28:42,305 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:33:54,492 MSG: user.py:get_profile_link:69 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:33:54,535 MSG: user.py:get_profile_link:69 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:33:54,562 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:33:54,581 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:34:06,385 MSG: user.py:get_profile_link:69 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:34:06,427 MSG: user.py:get_profile_link:69 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:34:06,453 MSG: user.py:get_profile_link:69 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 03:34:06,467 MSG: user.py:get_profile_link:69 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:22:20,042 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:22:20,130 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:22:20,161 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:22:29,338 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:22:29,380 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:22:29,413 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\badges\base.py TIME: 2010-04-05 22:22:35,892 MSG: base.py:award_badge:53 Trying to award badged already awarded. +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:22:44,153 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:22:44,194 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:22:44,223 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:23:19,838 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:23:19,898 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:23:19,980 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:26:57,058 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:26:57,101 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:26:57,141 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:28:24,075 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:28:24,115 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:28:24,187 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:29:22,367 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:29:22,407 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:29:22,437 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:31:13,588 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:31:13,641 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:31:13,677 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:34:15,536 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:34:15,578 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:34:15,611 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:35:24,561 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:35:24,601 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:35:24,641 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:35:41,591 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:35:41,632 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-05 22:35:41,670 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 01:31:35,196 MSG: user.py:get_profile_link:72 in get profile link alexlavr1 +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:17,667 MSG: user.py:get_profile_link:72 in get profile link mrdoornbos +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:17,683 MSG: user.py:get_profile_link:72 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:33,750 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:33,798 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:33,812 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:33,828 MSG: user.py:get_profile_link:72 in get profile link quimey +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:48,118 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:48,164 MSG: user.py:get_profile_link:72 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:48,180 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:12:48,197 MSG: user.py:get_profile_link:72 in get profile link quimey +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,700 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,700 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,716 MSG: user.py:get_profile_link:72 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,732 MSG: user.py:get_profile_link:72 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,855 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,871 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,934 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,950 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,966 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 02:58:38,980 MSG: user.py:get_profile_link:72 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:13:00,493 MSG: user.py:get_profile_link:76 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:14:23,828 MSG: user.py:get_profile_link:76 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:14:23,872 MSG: user.py:get_profile_link:76 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:14:23,918 MSG: user.py:get_profile_link:76 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:14:42,108 MSG: user.py:get_profile_link:76 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:14:42,155 MSG: user.py:get_profile_link:76 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:14:42,187 MSG: user.py:get_profile_link:76 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:17:58,029 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:17:58,075 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:17:58,121 MSG: user.py:get_profile_link:121 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:19:48,997 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:19:49,059 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 04:19:49,107 MSG: user.py:get_profile_link:121 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:20:00,638 MSG: user.py:get_profile_link:121 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:20:00,670 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:20:00,700 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:20:00,700 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:20:48,624 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:20:48,640 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:20:48,671 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:20:48,701 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:21:32,210 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:21:32,210 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:21:32,256 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:21:32,303 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:21:55,989 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:21:55,994 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:21:56,032 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:21:56,095 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:22:58,119 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:22:58,134 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:22:58,181 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:22:58,229 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:23:57,131 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:23:57,131 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:23:57,178 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:24:38,930 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:24:38,944 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:24:38,992 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:25:24,055 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:25:24,055 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:25:24,102 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:26:50,763 MSG: user.py:get_profile_link:121 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:26:50,763 MSG: user.py:get_profile_link:121 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:26:50,825 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:27:05,147 MSG: user.py:get_profile_link:121 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:27:05,224 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:27:05,286 MSG: user.py:get_profile_link:121 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:27:05,334 MSG: user.py:get_profile_link:121 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:27:21,042 MSG: user.py:get_profile_link:121 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:27:21,121 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:27:21,198 MSG: user.py:get_profile_link:121 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:27:21,246 MSG: user.py:get_profile_link:121 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:28:15,907 MSG: user.py:get_profile_link:121 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:28:15,986 MSG: user.py:get_profile_link:121 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:28:16,049 MSG: user.py:get_profile_link:121 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 06:28:16,111 MSG: user.py:get_profile_link:121 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:42,440 MSG: user.py:get_profile_link:126 in get profile link Joseph +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:42,539 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:42,631 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,124 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,132 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,141 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,150 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,160 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,168 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,178 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,187 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,196 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:08:52,267 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:35:09,858 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:35:09,907 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:35:09,951 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:36:27,326 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:36:27,431 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:36:27,487 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:37:04,316 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:37:04,450 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:37:04,507 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:38:53,651 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:38:53,698 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:38:53,756 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:41:36,269 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:41:36,315 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:41:36,361 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:41:52,588 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:41:52,635 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:41:52,678 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:41:52,700 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:44:36,937 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:44:36,990 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:44:37,132 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:44:37,158 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:44:55,884 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:44:55,937 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:44:55,993 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:44:56,019 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:44:56,048 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:46:55,933 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:46:55,992 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:46:56,046 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:46:56,072 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:46:56,099 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:47:36,970 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:47:37,019 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:47:37,062 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:47:37,082 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:47:37,102 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:47:37,124 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:49:10,122 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:49:10,174 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:49:10,217 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:49:10,237 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:49:10,259 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:49:10,279 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:50:02,049 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:50:02,148 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:50:02,216 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:50:02,240 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:50:02,285 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:50:02,316 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:52:02,042 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:52:02,095 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:52:02,137 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:52:02,158 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:52:02,178 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:52:02,200 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:53:21,081 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:53:21,127 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:53:21,168 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:53:21,190 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:53:21,210 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:53:21,230 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:58:02,154 MSG: user.py:get_profile_link:126 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:58:02,207 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:58:02,239 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 07:58:02,246 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 08:00:06,237 MSG: user.py:get_profile_link:126 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 08:00:06,286 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 08:00:06,318 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 08:00:06,323 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 09:17:37,213 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 09:17:37,220 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 09:17:37,338 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 09:17:37,634 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 09:52:21,381 MSG: user.py:get_profile_link:126 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 09:52:21,438 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 09:52:21,470 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 09:52:21,476 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\views\commands.py TIME: 2010-04-06 09:54:22,802 MSG: commands.py:mark_tag:363 deleting tag localization +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:18:27,575 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:18:27,602 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:18:27,664 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:53,917 MSG: user.py:get_profile_link:126 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:53,928 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:53,940 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:53,948 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:53,959 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:53,970 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:53,980 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:53,987 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:53,996 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 12:19:54,006 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 18:15:38,974 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 18:15:39,052 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 18:15:39,096 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 18:15:39,117 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 18:15:39,138 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-06 18:15:39,157 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:18,849 MSG: user.py:get_profile_link:126 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:18,943 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:18,974 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:18,990 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:19,006 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:19,395 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:19,411 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:19,661 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:19,677 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:53:19,691 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 06:54:58,517 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 07:43:39,562 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 07:45:14,500 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:00:24,803 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,154 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,161 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,168 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,177 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,184 MSG: user.py:get_profile_link:126 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,193 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,303 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,415 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,519 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:26,700 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:01:58,009 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:03:08,167 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:04:55,276 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:06:52,826 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:09:15,332 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:14:49,026 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:29:42,094 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:30:06,740 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:32:55,674 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:37:03,372 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 08:39:28,765 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:18:24,121 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:18:24,299 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:19:45,278 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:19:45,286 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:19:45,292 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:20:19,072 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:20:19,180 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:20:24,415 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:20:24,424 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:20:24,433 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:20:48,132 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:20:48,244 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:21:09,213 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:21:09,220 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:21:09,226 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:21:16,332 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:21:16,448 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:37:13,556 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:56:16,148 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 10:57:08,316 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:02:46,512 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:10:30,142 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:20:44,677 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:24:03,471 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:25:31,377 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,013 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,019 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,028 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,036 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,043 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,051 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,059 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,066 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,073 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:30:42,167 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,663 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,674 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,680 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,688 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,697 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,706 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,713 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,720 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,727 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 11:47:37,734 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:13:43,009 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:13:43,016 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:13:43,288 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:13:59,591 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:13:59,595 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:13:59,684 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,755 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,776 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,806 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,826 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,855 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,871 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,887 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,897 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,918 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:17:41,941 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:50:05,038 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:50:05,092 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 15:50:05,153 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,727 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,740 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,749 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,756 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,765 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,773 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,780 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,788 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,796 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-07 16:22:35,803 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 07:59:57,724 MSG: user.py:get_profile_link:126 in get profile link quimey +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 07:59:57,990 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 07:59:58,049 MSG: user.py:get_profile_link:126 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 07:59:58,086 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\views\commands.py TIME: 2010-04-08 08:03:38,085 MSG: commands.py:mark_tag:363 deleting tag bug +d:\osqa\dev\osqa\forum\views\commands.py TIME: 2010-04-08 08:14:24,385 MSG: commands.py:mark_tag:363 deleting tag bug +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:11,346 MSG: user.py:get_profile_link:126 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:11,506 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:11,543 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:11,551 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:20,471 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:20,526 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:20,578 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:20,601 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:20,622 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:12:20,648 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:52:34,486 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:52:34,545 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:52:34,594 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:52:34,615 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:52:34,635 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:52:34,657 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:53:45,220 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:53:45,276 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:53:45,322 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:53:45,344 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:53:45,365 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 10:53:45,400 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 11:31:01,854 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 11:31:01,898 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 11:31:01,928 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 11:31:01,947 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:29,992 MSG: user.py:get_profile_link:126 in get profile link adumlah +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:30,036 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:30,053 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:30,055 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:36,868 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:36,904 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:36,924 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:36,933 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:36,940 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:32:36,950 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,088 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,236 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,283 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,309 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,334 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,359 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,405 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,434 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,460 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:06,486 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,059 MSG: user.py:get_profile_link:126 in get profile link sorin +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,065 MSG: user.py:get_profile_link:126 in get profile link espennilsen +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,066 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,069 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,072 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,073 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,076 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,078 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,081 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-08 15:52:45,082 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 10:44:14,904 MSG: user.py:get_profile_link:126 in get profile link DealsVista_com +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 10:58:25,394 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 10:58:25,654 MSG: user.py:get_profile_link:126 in get profile link Joseph +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:03:27,150 MSG: user.py:get_profile_link:126 in get profile link nojo +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:03:27,154 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:03:27,193 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:36:00,869 MSG: user.py:get_profile_link:126 in get profile link nojo +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:36:00,878 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:36:00,933 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:36:21,516 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:36:21,522 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:36:21,559 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:36:21,585 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:36:21,588 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:36:21,627 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:11,069 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:11,073 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:11,111 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:11,137 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:11,138 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:11,177 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:23,997 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:24,003 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:24,045 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:24,071 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:24,072 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:24,114 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:31,058 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:31,062 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:31,101 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:31,130 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:31,131 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:31,170 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:36,878 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:36,884 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:36,941 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:36,947 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:36,994 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:37,010 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:51,305 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:51,311 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:51,348 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:51,375 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:51,378 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:37:51,417 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:06,976 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:06,982 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:07,019 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:07,046 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:07,046 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:07,085 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:14,346 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:14,351 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:14,391 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:14,417 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:14,417 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:14,457 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:27,365 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:27,371 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:27,411 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:27,438 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:27,440 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:27,480 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:35,733 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:35,739 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:35,776 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:35,782 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:35,828 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:35,844 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:45,831 MSG: user.py:get_profile_link:126 in get profile link tesyre +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:45,838 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:45,875 MSG: user.py:get_profile_link:126 in get profile link Hernani Cerqueira +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:45,881 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:45,927 MSG: user.py:get_profile_link:126 in get profile link rickross +d:\osqa\dev\osqa\forum\models\user.py TIME: 2010-04-09 11:39:45,943 MSG: user.py:get_profile_link:126 in get profile link Evgeny Fadeev diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..bcd2f8e --- /dev/null +++ b/manage.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python +from django.core.management import execute_manager +try: + import settings # Assumed to be in the same directory. +except ImportError, e: + import traceback + traceback.print_exc() + import sys + sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) + sys.exit(1) + +if __name__ == "__main__": + execute_manager(settings) diff --git a/osqa-requirements.txt b/osqa-requirements.txt new file mode 100644 index 0000000..ca64bd5 --- /dev/null +++ b/osqa-requirements.txt @@ -0,0 +1,4 @@ +django>=1.1 # Note: email subscription sender job requires Django 1.1, everything else works with 1.0 +python-openid +html5lib +markdown2 diff --git a/osqa.iml b/osqa.iml new file mode 100644 index 0000000..24046e3 --- /dev/null +++ b/osqa.iml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/osqa.wsgi.dist b/osqa.wsgi.dist new file mode 100644 index 0000000..c3a269d --- /dev/null +++ b/osqa.wsgi.dist @@ -0,0 +1,7 @@ +import os +import sys +sys.path.append('/path/to_dir_above') +sys.path.append('/path/to_dir_above/osqa') +os.environ['DJANGO_SETTINGS_MODULE'] = 'osqa.settings' +import django.core.handlers.wsgi +application = django.core.handlers.wsgi.WSGIHandler() diff --git a/pip-log.txt b/pip-log.txt new file mode 100644 index 0000000..68153ac --- /dev/null +++ b/pip-log.txt @@ -0,0 +1,11 @@ +Exception: +Traceback (most recent call last): + File "d:\env\lib\site-packages\pip-0.6.3-py2.6.egg\pip\basecommand.py", line 115, in main + self.run(options, args) + File "d:\env\lib\site-packages\pip-0.6.3-py2.6.egg\pip\commands\install.py", line 153, in run + for req in parse_requirements(filename, finder=finder, options=options): + File "d:\env\lib\site-packages\pip-0.6.3-py2.6.egg\pip\req.py", line 1274, in parse_requirements + filename, content = get_file_content(filename, comes_from=comes_from) + File "d:\env\lib\site-packages\pip-0.6.3-py2.6.egg\pip\util.py", line 300, in get_file_content + f = open(url) +IOError: [Errno 2] No such file or directory: 'osqa_requirements.txt' diff --git a/rmpyc b/rmpyc new file mode 100644 index 0000000..014575f --- /dev/null +++ b/rmpyc @@ -0,0 +1 @@ +rm `find . -name '*.pyc'` diff --git a/settings.py b/settings.py new file mode 100644 index 0000000..246c317 --- /dev/null +++ b/settings.py @@ -0,0 +1,88 @@ +# encoding:utf-8 +# Django settings for lanai project. +import os.path +import sys + +SITE_ID = 1 + +ADMIN_MEDIA_PREFIX = '/admin_media/' +SECRET_KEY = '$oo^&_m&qwbib=(_4m_n*zn-d=g#s0he5fx9xonnym#8p6yigm' +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.load_template_source', + 'django.template.loaders.app_directories.load_template_source', + 'forum.modules.module_templates_loader', + 'forum.skins.load_template_source', +# 'django.template.loaders.eggs.load_template_source', +) + +MIDDLEWARE_CLASSES = [ + #'django.middleware.gzip.GZipMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + #'django.middleware.locale.LocaleMiddleware', + #'django.middleware.cache.UpdateCacheMiddleware', + 'django.middleware.common.CommonMiddleware', + #'django.middleware.cache.FetchFromCacheMiddleware', + 'forum.middleware.extended_user.ExtendedUser', + #'django.middleware.sqlprint.SqlPrintingMiddleware', + 'forum.middleware.anon_user.ConnectToSessionMessagesMiddleware', + 'forum.middleware.request_utils.RequestUtils', + 'forum.middleware.cancel.CancelActionMiddleware', + #'recaptcha_django.middleware.ReCaptchaMiddleware', + 'django.middleware.transaction.TransactionMiddleware', +] + +TEMPLATE_CONTEXT_PROCESSORS = ( + 'django.core.context_processors.request', + 'forum.context.application_settings', + #'django.core.context_processors.i18n', + 'forum.user_messages.context_processors.user_messages',#must be before auth + 'django.core.context_processors.auth', #this is required for admin +) + +ROOT_URLCONF = 'urls' + +TEMPLATE_DIRS = ( + os.path.join(os.path.dirname(__file__),'forum','skins').replace('\\','/'), +) + +#UPLOAD SETTINGS +FILE_UPLOAD_TEMP_DIR = os.path.join(os.path.dirname(__file__), 'tmp').replace('\\','/') +FILE_UPLOAD_HANDLERS = ("django.core.files.uploadhandler.MemoryFileUploadHandler", + "django.core.files.uploadhandler.TemporaryFileUploadHandler",) +DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' +# for user upload +ALLOW_FILE_TYPES = ('.jpg', '.jpeg', '.gif', '.bmp', '.png', '.tiff') +# unit byte +ALLOW_MAX_FILE_SIZE = 1024 * 1024 + +# User settings +from settings_local import * + +INSTALLED_APPS = [ + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.admin', + 'django.contrib.humanize', + 'django.contrib.sitemaps', + #'django.contrib.markup', + 'forum', +] + +if DEBUG: + try: + import debug_toolbar + MIDDLEWARE_CLASSES.append('debug_toolbar.middleware.DebugToolbarMiddleware') + INSTALLED_APPS.append('debug_toolbar') + except: + pass + +try: + import south + INSTALLED_APPS.append('south') +except: + pass + +AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend',] diff --git a/settings_local.py.dist b/settings_local.py.dist new file mode 100644 index 0000000..34c706e --- /dev/null +++ b/settings_local.py.dist @@ -0,0 +1,78 @@ +# encoding:utf-8 +import os.path +from django.utils.translation import ugettext as _ + +def check_local_setting(name, value): + local_vars = locals() + if name in local_vars and local_vars[name] == value: + return True + else: + return False + +SITE_SRC_ROOT = os.path.dirname(__file__) +LOG_FILENAME = 'django.osqa.log' + +#for logging +import logging +logging.basicConfig( + filename=os.path.join(SITE_SRC_ROOT, 'log', LOG_FILENAME), + level=logging.DEBUG, + format='%(pathname)s TIME: %(asctime)s MSG: %(filename)s:%(funcName)s:%(lineno)d %(message)s', +) + +#ADMINS and MANAGERS +ADMINS = (('Forum Admin', 'forum@example.com'),) +MANAGERS = ADMINS + +DEBUG = True +DEBUG_TOOLBAR_CONFIG = { + 'INTERCEPT_REDIRECTS': True +} +TEMPLATE_DEBUG = DEBUG +INTERNAL_IPS = ('127.0.0.1',) + +DATABASE_NAME = '' # Or path to database file if using sqlite3. +DATABASE_USER = '' # Not used with sqlite3. +DATABASE_PASSWORD = '' # Not used with sqlite3. +DATABASE_ENGINE = '' #mysql, etc +DATABASE_HOST = '' +DATABASE_PORT = '' + +#CACHE_BACKEND = 'file://%s' % os.path.join(os.path.dirname(__file__),'cache').replace('\\','/') +CACHE_BACKEND = 'dummy://' +#SESSION_ENGINE = 'django.contrib.sessions.backends.cache' + +APP_URL = 'http://' #used by email notif system and RSS + +#LOCALIZATIONS +TIME_ZONE = 'America/New_York' + +########################### +# +# this will allow running your forum with url like http://site.com/forum +# +# FORUM_SCRIPT_ALIAS = 'forum/' +# +FORUM_SCRIPT_ALIAS = '' #no leading slash, default = '' empty string + + +#OTHER SETTINGS + +USE_I18N = True +LANGUAGE_CODE = 'en' +EMAIL_VALIDATION = 'off' #string - on|off +MIN_USERNAME_LENGTH = 1 +EMAIL_UNIQUE = False + +WIKI_ON = True +FEEDBACK_SITE_URL = None #None or url +EDITABLE_SCREEN_NAME = False #True or False - can user change screen name? + +DJANGO_VERSION = 1.1 +RESOURCE_REVISION=4 + +OSQA_DEFAULT_SKIN = 'default' + +DISABLED_MODULES = ['books', 'recaptcha', 'project_badges'] + +from forum.settings import * \ No newline at end of file diff --git a/sphinx/sphinx.conf b/sphinx/sphinx.conf new file mode 100644 index 0000000..bf4bdc8 --- /dev/null +++ b/sphinx/sphinx.conf @@ -0,0 +1,127 @@ +#if you have many posts, it's best to configure another index for new posts and +#periodically merge the diff index to the main +#this is not important until you get to hundreds of thousands posts + +source src_cnprog +{ + # data source + type = mysql + sql_host = localhost + sql_user = cnprog #replace with your db username + sql_pass = secret #replace with your db password + sql_db = cnprog #replace with your db name + # these two are optional + #sql_port = 3306 + #sql_sock = /var/lib/mysql/mysql.sock + + # pre-query, executed before the main fetch query + sql_query_pre = SET NAMES utf8 + + # main document fetch query - change the table names if you are using a prefix + # this query creates a flat document from each question that includes only latest + # revisions of the question and all of it's answers + sql_query = SELECT q.id as id, q.title AS title, q.tagnames as tags, qr.text AS text, answers_combined.text AS answers \ + FROM question AS q \ + INNER JOIN \ + ( \ + SELECT MAX(id) as id, question_id \ + FROM question_revision \ + GROUP BY question_id \ + ) \ + AS mqr \ + ON q.id=mqr.question_id \ + INNER JOIN question_revision AS qr ON qr.id=mqr.id \ + LEFT JOIN \ + ( \ + SELECT GROUP_CONCAT(answer_current.text SEPARATOR '. ') AS text, \ + question_id \ + FROM \ + ( \ + SELECT a.question_id as question_id, ar.text as text \ + FROM answer AS a \ + INNER JOIN \ + ( \ + SELECT MAX(id) as id, answer_id \ + FROM answer_revision \ + GROUP BY answer_id \ + ) \ + AS mar \ + ON mar.answer_id = a.id \ + INNER JOIN answer_revision AS ar ON ar.id=mar.id \ + WHERE a.deleted=0 \ + ) \ + AS answer_current \ + GROUP BY question_id \ + ) \ + AS answers_combined ON q.id=answers_combined.question_id \ + WHERE q.deleted=0; + + # optional - used by command-line search utility to display document information + sql_query_info = SELECT title, id FROM question WHERE id=$id +} + +index cnprog { + # which document source to index + source = src_cnprog + + # this is path and index file name without extension + # you may need to change this path or create this folder + path = /var/data/sphinx/cnprog_main + + # docinfo (ie. per-document attribute values) storage strategy + docinfo = extern + + # morphology + morphology = stem_en + + # stopwords file + #stopwords = /var/data/sphinx/stopwords.txt + + # minimum word length + min_word_len = 1 + + # uncomment next 2 lines to allow wildcard (*) searches + #min_infix_len = 1 + #enable_star = 1 + + # charset encoding type + charset_type = utf-8 +} + +# indexer settings +indexer +{ + # memory limit (default is 32M) + mem_limit = 64M +} + +# searchd settings +searchd +{ + # IP address on which search daemon will bind and accept + # optional, default is to listen on all addresses, + # ie. address = 0.0.0.0 + address = 127.0.0.1 + + # port on which search daemon will listen + port = 3312 + + # searchd run info is logged here - create or change the folder + log = /var/log/sphinx/searchd.log + + # all the search queries are logged here + query_log = /var/log/sphinx/query.log + + # client read timeout, seconds + read_timeout = 5 + + # maximum amount of children to fork + max_children = 30 + + # a file which will contain searchd process ID + pid_file = /var/log/sphinx/searchd.pid + + # maximum amount of matches this daemon would ever retrieve + # from each index and serve to client + max_matches = 1000 +} diff --git a/urls.py b/urls.py new file mode 100644 index 0000000..e929254 --- /dev/null +++ b/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls.defaults import * +from django.utils.translation import ugettext as _ +from django.conf import settings + +urlpatterns = patterns('', + (r'^%s' % settings.FORUM_SCRIPT_ALIAS, include('forum.urls')), +) + -- 2.45.1