diff options
27 files changed, 881 insertions, 246 deletions
diff --git a/.idea/workspace.xml b/.idea/workspace.xml index c89ca12b..996b9a8b 100755 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -22,47 +22,46 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/close.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/close.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/facebook.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/facebook.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/openid-inputicon.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/openid-inputicon.gif" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/wmd.css" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/wmd.css" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/facebookauth/templates/xd_receiver.html" afterPath="$PROJECT_DIR$/forum_modules/facebookauth/templates/xd_receiver.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/wmd.css" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/wmd.css" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/views/auth.py" afterPath="$PROJECT_DIR$/forum/views/auth.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/vote-favorite-on.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/vote-favorite-on.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/technorati.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/technorati.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.flot.pack.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.flot.pack.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/feedback_email.txt" afterPath="$PROJECT_DIR$/forum/skins/default/templates/feedback_email.txt" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/books/views.py" afterPath="$PROJECT_DIR$/forum_modules/books/views.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/osqa.iml" afterPath="$PROJECT_DIR$/osqa.iml" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/books/views.py" afterPath="$PROJECT_DIR$/forum_modules/books/views.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/tags.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/tags.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/tag.py" afterPath="$PROJECT_DIR$/forum/models/tag.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/pgfulltext/__init__.py" afterPath="$PROJECT_DIR$/forum_modules/pgfulltext/__init__.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/compress.bat" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/compress.bat" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/sphinxfulltext/dependencies.py" afterPath="$PROJECT_DIR$/forum_modules/sphinxfulltext/dependencies.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/ask.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/ask.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/compress.bat" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/compress.bat" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/users_questions.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/users_questions.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/ask.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/ask.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/vote-favorite-off.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/vote-favorite-off.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/cron/multi_award_badges_virtualenv" afterPath="$PROJECT_DIR$/cron/multi_award_badges_virtualenv" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/subscribe_everyone.py" afterPath="$PROJECT_DIR$/forum/management/commands/subscribe_everyone.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/medala.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/medala.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/question_edit.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/question_edit.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.tag_selector.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.tag_selector.js" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/claimid.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/claimid.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.i18n.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.i18n.js" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/claimid.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/claimid.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/utils/decorators.py" afterPath="$PROJECT_DIR$/forum/utils/decorators.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/cc-88x31.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/cc-88x31.png" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/logo.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/logo.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/pgfulltext/handlers.py" afterPath="$PROJECT_DIR$/forum_modules/pgfulltext/handlers.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/logo.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/logo.gif" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/cc-88x31.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/cc-88x31.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/openidauth/consumer.py" afterPath="$PROJECT_DIR$/forum_modules/openidauth/consumer.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_edit.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_edit.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/footer.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/footer.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/revisions_answer.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/revisions_answer.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/footer.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/footer.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/vote-arrow-up-on.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/vote-arrow-up-on.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/openid.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/openid.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/localauth/authentication.py" afterPath="$PROJECT_DIR$/forum_modules/localauth/authentication.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/__init__.py" afterPath="$PROJECT_DIR$/forum/skins/__init__.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/changepw.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/changepw.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/vote-arrow-up.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/vote-arrow-up.png" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/aol.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/aol.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/account_settings.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/account_settings.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/aol.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/aol.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/pgfulltext/pg_fts_install.sql" afterPath="$PROJECT_DIR$/forum_modules/pgfulltext/pg_fts_install.sql" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/compiler.xml" afterPath="$PROJECT_DIR$/.idea/compiler.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/500.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/500.html" />
@@ -72,55 +71,55 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/livejournal.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/livejournal.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/views/commands.py" afterPath="$PROJECT_DIR$/forum/views/commands.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.utils.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.utils.js" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/sitemap.py" afterPath="$PROJECT_DIR$/forum/sitemap.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/wordpress.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/wordpress.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/wmd-min.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/wmd-min.js" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/wordpress.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/wordpress.ico" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/sitemap.py" afterPath="$PROJECT_DIR$/forum/sitemap.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/question_summary_list_roll.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/question_summary_list_roll.html" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/blogger-1.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/blogger-1.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/privacy.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/privacy.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/sphinxfulltext/__init__.py" afterPath="$PROJECT_DIR$/forum_modules/sphinxfulltext/__init__.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/blogger-1.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/blogger-1.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/reopen.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/reopen.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/send_email_alerts.py" afterPath="$PROJECT_DIR$/forum/management/commands/send_email_alerts.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/livejournal.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/livejournal.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/fbconnect/xd_receiver.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/fbconnect/xd_receiver.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/edit.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/edit.png" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/blue-up-arrow-h18px.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/blue-up-arrow-h18px.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/user_messages/context_processors.py" afterPath="$PROJECT_DIR$/forum/user_messages/context_processors.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/blue-up-arrow-h18px.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/blue-up-arrow-h18px.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/wmd.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/wmd.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/style/auth.css" afterPath="$PROJECT_DIR$/forum/skins/default/media/style/auth.css" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/__init__.py" afterPath="$PROJECT_DIR$/forum/management/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/user_messages/__init__.py" afterPath="$PROJECT_DIR$/forum/user_messages/__init__.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/__init__.py" afterPath="$PROJECT_DIR$/forum/management/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/se_hilite.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/se_hilite.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/bullet_green.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/bullet_green.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/middleware/__init__.py" afterPath="$PROJECT_DIR$/forum/middleware/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/yahoo.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/yahoo.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/utils/forms.py" afterPath="$PROJECT_DIR$/forum/utils/forms.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/sample_command.py" afterPath="$PROJECT_DIR$/forum/management/commands/sample_command.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/answer.py" afterPath="$PROJECT_DIR$/forum/models/answer.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/sample_command.py" afterPath="$PROJECT_DIR$/forum/management/commands/sample_command.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/middleware/anon_user.py" afterPath="$PROJECT_DIR$/forum/middleware/anon_user.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/logo.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/logo.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/style/openid.css" afterPath="$PROJECT_DIR$/forum/skins/default/media/style/openid.css" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/logo.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/logo.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/showdown.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/showdown.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/localauth/views.py" afterPath="$PROJECT_DIR$/forum_modules/localauth/views.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/auth/signup.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/auth/signup.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.validate.pack.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.validate.pack.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/views/users.py" afterPath="$PROJECT_DIR$/forum/views/users.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/localauth/urls.py" afterPath="$PROJECT_DIR$/forum_modules/localauth/urls.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/grippie.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/grippie.png" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/style/prettify.css" afterPath="$PROJECT_DIR$/forum/skins/default/media/style/prettify.css" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/faq.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/faq.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/style/prettify.css" afterPath="$PROJECT_DIR$/forum/skins/default/media/style/prettify.css" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/grippie.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/grippie.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/tag_selector.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/tag_selector.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/aol.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/aol.gif" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/flickr.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/flickr.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/openid.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/openid.gif" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/images/wmd-buttons.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/images/wmd-buttons.png" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/flickr.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/flickr.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_footer.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_footer.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/images/wmd-buttons.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/wmd/images/wmd-buttons.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/vote-accepted-on.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/vote-accepted-on.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/encodings.xml" afterPath="$PROJECT_DIR$/.idea/encodings.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/auth/complete.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/auth/complete.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/flot-build.bat" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/flot-build.bat" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/user.py" afterPath="$PROJECT_DIR$/forum/models/user.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/vote-arrow-down-on.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/vote-arrow-down-on.png" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/user.py" afterPath="$PROJECT_DIR$/forum/models/user.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/new.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/new.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/claimid-0.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/claimid-0.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/sphinxfulltext/models.py" afterPath="$PROJECT_DIR$/forum_modules/sphinxfulltext/models.py" />
@@ -131,38 +130,40 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/openidauth/templates/openidurl.html" afterPath="$PROJECT_DIR$/forum_modules/openidauth/templates/openidurl.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/localauth/__init__.py" afterPath="$PROJECT_DIR$/forum_modules/localauth/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/utils/lists.py" afterPath="$PROJECT_DIR$/forum/utils/lists.py" />
+ <change type="DELETED" beforePath="C:\osqadev\100302\osqa\forum\skins\default\templates\changepw.html" afterPath="" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/vidoop.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/vidoop.png" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/clean_award_badges.py" afterPath="$PROJECT_DIR$/forum/management/commands/clean_award_badges.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/openid-inputicon.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/openid-inputicon.gif" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/vidoop.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/vidoop.ico" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/clean_award_badges.py" afterPath="$PROJECT_DIR$/forum/management/commands/clean_award_badges.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/facebookauth/views.py" afterPath="$PROJECT_DIR$/forum_modules/facebookauth/views.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/djangomade124x25_grey.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/djangomade124x25_grey.gif" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/vidoop.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/vidoop.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/twitter.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/twitter.png" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/djangomade124x25_grey.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/djangomade124x25_grey.gif" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/google.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/google.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/authentication/__init__.py" afterPath="$PROJECT_DIR$/forum/authentication/__init__.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/base.py" afterPath="$PROJECT_DIR$/forum/models/base.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/oauthauth/lib/__init__.py" afterPath="$PROJECT_DIR$/forum_modules/oauthauth/lib/__init__.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/base.py" afterPath="$PROJECT_DIR$/forum/models/base.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/templatetags/extra_tags.py" afterPath="$PROJECT_DIR$/forum/templatetags/extra_tags.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/openidauth/models.py" afterPath="$PROJECT_DIR$/forum_modules/openidauth/models.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/feed-icon-small.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/feed-icon-small.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/style/style.css" afterPath="$PROJECT_DIR$/forum/skins/default/media/style/style.css" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/feed-icon-small.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/feed-icon-small.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/close-small.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/close-small.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/modules.xml" afterPath="$PROJECT_DIR$/.idea/modules.xml" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/authentication/base.py" afterPath="$PROJECT_DIR$/forum/authentication/base.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/index.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/index.html" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/quest-bg.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/quest-bg.gif" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/authentication/base.py" afterPath="$PROJECT_DIR$/forum/authentication/base.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/facebookauth/__init__.py" afterPath="$PROJECT_DIR$/forum_modules/facebookauth/__init__.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/message_to_everyone.py" afterPath="$PROJECT_DIR$/forum/management/commands/message_to_everyone.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/quest-bg.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/quest-bg.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/base.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/base.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/message_to_everyone.py" afterPath="$PROJECT_DIR$/forum/management/commands/message_to_everyone.py" />
+ <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/forum/skins/default/templates/auth/email_validation.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/question_edit_tips.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/question_edit_tips.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/const.py" afterPath="$PROJECT_DIR$/forum/const.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/cron/once_award_badges_virtualenv" afterPath="$PROJECT_DIR$/cron/once_award_badges_virtualenv" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/question.py" afterPath="$PROJECT_DIR$/forum/models/question.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/cron/once_award_badges_virtualenv" afterPath="$PROJECT_DIR$/cron/once_award_badges_virtualenv" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/logo1.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/logo1.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/livejournal-1.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/livejournal-1.png" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery-1.2.6.min.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery-1.2.6.min.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/books/urls.py" afterPath="$PROJECT_DIR$/forum_modules/books/urls.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery-1.2.6.min.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery-1.2.6.min.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_favorites.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_favorites.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/__init__.py" afterPath="$PROJECT_DIR$/forum/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/repute.py" afterPath="$PROJECT_DIR$/forum/models/repute.py" />
@@ -175,35 +176,34 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/technorati-1.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/technorati-1.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/modules.py" afterPath="$PROJECT_DIR$/forum/modules.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/common/media/README" afterPath="$PROJECT_DIR$/forum/skins/common/media/README" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/dash.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/dash.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/openidauth/authentication.py" afterPath="$PROJECT_DIR$/forum_modules/openidauth/authentication.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/authentication/forms.py" afterPath="$PROJECT_DIR$/forum/authentication/forms.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/dash.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/dash.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/close-small-hover.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/close-small-hover.png" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/authentication/forms.py" afterPath="$PROJECT_DIR$/forum/authentication/forms.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/views/writers.py" afterPath="$PROJECT_DIR$/forum/views/writers.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/books/__init__.py" afterPath="$PROJECT_DIR$/forum_modules/books/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/verisign.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/verisign.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/myopenid.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/myopenid.ico" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/openidico16.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/openidico16.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/badges.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/badges.html" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/verisign.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/verisign.ico" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/openidico16.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/openidico16.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/views/__init__.py" afterPath="$PROJECT_DIR$/forum/views/__init__.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/verisign.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/verisign.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/se_hilite_src.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/se_hilite_src.js" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/expander-arrow-show.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/expander-arrow-show.gif" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/style/jquery.autocomplete.css" afterPath="$PROJECT_DIR$/forum/skins/default/media/style/jquery.autocomplete.css" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/answer_edit_tips.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/answer_edit_tips.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/style/jquery.autocomplete.css" afterPath="$PROJECT_DIR$/forum/skins/default/media/style/jquery.autocomplete.css" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/expander-arrow-show.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/expander-arrow-show.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/verisign-2.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/verisign-2.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/utils/odict.py" afterPath="$PROJECT_DIR$/forum/utils/odict.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/logo2.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/logo2.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/claimid.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/claimid.ico" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/base_command.py" afterPath="$PROJECT_DIR$/forum/management/commands/base_command.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/upfiles/README" afterPath="$PROJECT_DIR$/forum/upfiles/README" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/base_command.py" afterPath="$PROJECT_DIR$/forum/management/commands/base_command.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/once_award_badges.py" afterPath="$PROJECT_DIR$/forum/management/commands/once_award_badges.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/openidauth/store.py" afterPath="$PROJECT_DIR$/forum_modules/openidauth/store.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/context.py" afterPath="$PROJECT_DIR$/context.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/favicon.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/favicon.gif" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/nophoto.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/nophoto.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/pgfulltext/management.py" afterPath="$PROJECT_DIR$/forum_modules/pgfulltext/management.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/nophoto.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/nophoto.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/views/README" afterPath="$PROJECT_DIR$/forum/views/README" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/question.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/question.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/oauthauth/authentication.py" afterPath="$PROJECT_DIR$/forum_modules/oauthauth/authentication.py" />
@@ -213,22 +213,23 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/myopenid-2.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/myopenid-2.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_stats.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_stats.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/medala_on.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/medala_on.gif" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/question_retag.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/question_retag.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_votes.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_votes.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/question_retag.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/question_retag.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/yuicompressor-2.4.2.jar" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/yuicompressor-2.4.2.jar" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/blogger.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/blogger.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.i18n.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.i18n.js" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/sphinxfulltext/handlers.py" afterPath="$PROJECT_DIR$/forum_modules/sphinxfulltext/handlers.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/blogger.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/blogger.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/sql_scripts/update_2010_01_23.sql" afterPath="$PROJECT_DIR$/sql_scripts/update_2010_01_23.sql" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/sphinxfulltext/handlers.py" afterPath="$PROJECT_DIR$/forum_modules/sphinxfulltext/handlers.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/meta.py" afterPath="$PROJECT_DIR$/forum/models/meta.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/authopenid/signin.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/authopenid/signin.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/google.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/google.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/utils/diff.py" afterPath="$PROJECT_DIR$/forum/utils/diff.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/sphinxfulltext/DISABLED" afterPath="$PROJECT_DIR$/forum_modules/sphinxfulltext/DISABLED" />
+ <change type="MOVED" beforePath="C:\osqadev\100302\osqa\context.py" afterPath="$PROJECT_DIR$/forum/context.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user.html" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/expander-arrow-hide.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/expander-arrow-hide.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/feeds/rss_description.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/feeds/rss_description.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/facebookauth/templates/button.html" afterPath="$PROJECT_DIR$/forum_modules/facebookauth/templates/button.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/expander-arrow-hide.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/expander-arrow-hide.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/wordpress.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/wordpress.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/oauthauth/consumer.py" afterPath="$PROJECT_DIR$/forum_modules/oauthauth/consumer.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/copyright/profiles_settings.xml" afterPath="$PROJECT_DIR$/.idea/copyright/profiles_settings.xml" />
@@ -239,16 +240,17 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/facebookauth/urls.py" afterPath="$PROJECT_DIR$/forum_modules/facebookauth/urls.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/notarobot.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/notarobot.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/localauth/forms.py" afterPath="$PROJECT_DIR$/forum_modules/localauth/forms.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.form.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.form.js" />
+ <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/forum/skins/default/templates/auth/temp_login_request.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_tabs.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_tabs.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.form.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.form.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/dot-list.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/dot-list.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/oauthauth/__init__.py" afterPath="$PROJECT_DIR$/forum_modules/oauthauth/__init__.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/facebook.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/facebook.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/blogger.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/blogger.ico" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/openid/facebook.gif" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/openid/facebook.gif" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/answer_edit.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/answer_edit.html" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.post.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.post.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_responses.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_responses.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/oauthauth/lib/oauth.py" afterPath="$PROJECT_DIR$/forum_modules/oauthauth/lib/oauth.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.post.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.post.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/jquery.openid.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/jquery.openid.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/feedback.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/feedback.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/__init__.py" afterPath="$PROJECT_DIR$/forum_modules/__init__.py" />
@@ -260,12 +262,13 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/vcs.xml" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/models/__init__.py" afterPath="$PROJECT_DIR$/forum/models/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/settings.py" afterPath="$PROJECT_DIR$/settings.py" />
+ <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/forum/skins/default/templates/auth/temp_login_email.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/excanvas.pack.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/excanvas.pack.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/about.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/about.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/openidauth/settings.py" afterPath="$PROJECT_DIR$/forum_modules/openidauth/settings.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/cron/once_award_badges" afterPath="$PROJECT_DIR$/cron/once_award_badges" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/__init__.py" afterPath="$PROJECT_DIR$/forum/management/commands/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/sphinxfulltext/settings.py" afterPath="$PROJECT_DIR$/forum_modules/sphinxfulltext/settings.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/management/commands/__init__.py" afterPath="$PROJECT_DIR$/forum/management/commands/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/README" afterPath="$PROJECT_DIR$/forum/skins/README" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/templatetags/__init__.py" afterPath="$PROJECT_DIR$/forum/templatetags/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_email_subscriptions.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_email_subscriptions.html" />
@@ -274,8 +277,8 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/middleware/cancel.py" afterPath="$PROJECT_DIR$/forum/middleware/cancel.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/books/models.py" afterPath="$PROJECT_DIR$/forum_modules/books/models.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/cron/multi_award_badges" afterPath="$PROJECT_DIR$/cron/multi_award_badges" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery-1.2.6.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery-1.2.6.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/oauthauth/settings.py" afterPath="$PROJECT_DIR$/forum_modules/oauthauth/settings.py" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery-1.2.6.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery-1.2.6.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/rmpyc" afterPath="$PROJECT_DIR$/rmpyc" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_reputation.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_reputation.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/admin.py" afterPath="$PROJECT_DIR$/forum/admin.py" />
@@ -286,17 +289,17 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/logout.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/logout.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/urls.py" afterPath="$PROJECT_DIR$/forum/urls.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/edit_user_email_feeds_form.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/edit_user_email_feeds_form.html" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/feeds/rss_title.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/feeds/rss_title.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/header.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/header.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/feeds/rss_title.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/feeds/rss_title.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/pgfulltext/DISABLED" afterPath="$PROJECT_DIR$/forum_modules/pgfulltext/DISABLED" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/gray-up-arrow-h18px.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/gray-up-arrow-h18px.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/wordpress.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/wordpress.png" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/gray-up-arrow-h18px.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/gray-up-arrow-h18px.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum_modules/openidauth/__init__.py" afterPath="$PROJECT_DIR$/forum_modules/openidauth/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.openid.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.openid.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/templatetags/extra_filters.py" afterPath="$PROJECT_DIR$/forum/templatetags/extra_filters.py" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/WISH_LIST" afterPath="$PROJECT_DIR$/WISH_LIST" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/myopenid.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/myopenid.ico" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.flot.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.flot.js" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/myopenid.ico" afterPath="$PROJECT_DIR$/forum/skins/default/media/jquery-openid/images/myopenid.ico" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/WISH_LIST" afterPath="$PROJECT_DIR$/WISH_LIST" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/base_content.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/base_content.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/auth/signin.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/auth/signin.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/feed.py" afterPath="$PROJECT_DIR$/forum/feed.py" />
@@ -305,9 +308,10 @@ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_info.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_info.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.editor.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/com.cnprog.editor.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.ajaxfileupload.js" afterPath="$PROJECT_DIR$/forum/skins/default/media/js/jquery.ajaxfileupload.js" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/middleware/pagesize.py" afterPath="$PROJECT_DIR$/forum/middleware/pagesize.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/revisions_question.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/revisions_question.html" />
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/middleware/pagesize.py" afterPath="$PROJECT_DIR$/forum/middleware/pagesize.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/close-small-dark.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/close-small-dark.png" />
+ <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/forum/skins/default/templates/auth/auth_settings.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/templates/user_recent.html" afterPath="$PROJECT_DIR$/forum/skins/default/templates/user_recent.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/skins/default/media/images/cc-wiki.png" afterPath="$PROJECT_DIR$/forum/skins/default/media/images/cc-wiki.png" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/forum/utils/__init__.py" afterPath="$PROJECT_DIR$/forum/utils/__init__.py" />
@@ -374,34 +378,52 @@ <file leaf-file-name="auth.py" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/forum/views/auth.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="23" column="84" selection-start="915" selection-end="915" vertical-scroll-proportion="0.0">
+ <state line="342" column="77" selection-start="13293" selection-end="13293" vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file leaf-file-name="signin.html" pinned="false" current="true" current-in-tab="true">
+ <entry file="file://$PROJECT_DIR$/forum/skins/default/templates/auth/signin.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state line="81" column="49" selection-start="3591" selection-end="3591" vertical-scroll-proportion="0.53731346">
+ <folding />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file leaf-file-name="loginform.html" pinned="false" current="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/forum_modules/localauth/templates/loginform.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state line="26" column="14" selection-start="825" selection-end="883" vertical-scroll-proportion="-18.416666">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="urls.py" pinned="false" current="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/forum/urls.py">
+ <file leaf-file-name="base.html" pinned="false" current="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/forum/skins/default/templates/base.html">
<provider selected="true" editor-type-id="text-editor">
- <state line="94" column="113" selection-start="6062" selection-end="6080" vertical-scroll-proportion="0.0">
+ <state line="45" column="114" selection-start="2062" selection-end="2062" vertical-scroll-proportion="-11.333333">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="settings_local.py" pinned="false" current="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/settings_local.py">
+ <file leaf-file-name="base_content.html" pinned="false" current="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/forum/skins/default/templates/base_content.html">
<provider selected="true" editor-type-id="text-editor">
- <state line="16" column="86" selection-start="381" selection-end="381" vertical-scroll-proportion="0.0">
+ <state line="46" column="43" selection-start="2208" selection-end="2208" vertical-scroll-proportion="-14.166667">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="settings_local.py.dist" pinned="false" current="true" current-in-tab="true">
- <entry file="file://$PROJECT_DIR$/settings_local.py.dist">
+ <file leaf-file-name="anon_user.py" pinned="false" current="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/forum/middleware/anon_user.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="80" column="14" selection-start="2301" selection-end="2301" vertical-scroll-proportion="0.5356601">
+ <state line="14" column="8" selection-start="525" selection-end="525" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -410,25 +432,25 @@ <file leaf-file-name="settings.py" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/settings.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="75" column="0" selection-start="2671" selection-end="2671" vertical-scroll-proportion="0.0">
+ <state line="26" column="113" selection-start="1036" selection-end="1036" vertical-scroll-proportion="-8.52">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="question.py" pinned="false" current="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/forum/models/question.py">
+ <file leaf-file-name="context_processors.py" pinned="false" current="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/forum/user_messages/context_processors.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="329" column="24" selection-start="12820" selection-end="12820" vertical-scroll-proportion="0.0">
+ <state line="21" column="5" selection-start="534" selection-end="534" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="answer.py" pinned="false" current="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/forum/models/answer.py">
+ <file leaf-file-name="__init__.py" pinned="false" current="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/forum/user_messages/__init__.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="129" column="40" selection-start="4498" selection-end="4498" vertical-scroll-proportion="-20.0">
+ <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -444,22 +466,22 @@ <component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
- <option value="$PROJECT_DIR$/forum/views/meta.py" />
- <option value="$PROJECT_DIR$/forum/views/books.py" />
- <option value="$PROJECT_DIR$/forum/views/readers.py" />
- <option value="$PROJECT_DIR$/forum/__init__.py" />
+ <option value="$PROJECT_DIR$/forum/forms.py" />
+ <option value="$PROJECT_DIR$/forum/authentication/forms.py" />
+ <option value="$PROJECT_DIR$/forum/models/user.py" />
+ <option value="$PROJECT_DIR$/forum/skins/default/templates/user_info.html" />
+ <option value="$PROJECT_DIR$/forum/authentication/base.py" />
+ <option value="$PROJECT_DIR$/forum/utils/forms.py" />
+ <option value="$PROJECT_DIR$/forum/urls.py" />
+ <option value="$PROJECT_DIR$/forum/skins/default/templates/auth/auth_settings.html" />
+ <option value="$PROJECT_DIR$/settings_local.py" />
<option value="$PROJECT_DIR$/forum/middleware/anon_user.py" />
- <option value="$PROJECT_DIR$/forum/user_messages/context_processors.py" />
<option value="$PROJECT_DIR$/settings.py" />
- <option value="$PROJECT_DIR$/context.py" />
- <option value="$PROJECT_DIR$/forum/models/base.py" />
- <option value="$PROJECT_DIR$/forum_modules/sphinxfulltext/models.py" />
- <option value="$PROJECT_DIR$/forum/authentication/__init__.py" />
- <option value="$PROJECT_DIR$/settings_local.py" />
- <option value="$PROJECT_DIR$/forum/models/question.py" />
- <option value="$PROJECT_DIR$/forum/models/answer.py" />
+ <option value="$PROJECT_DIR$/forum/user_messages/context_processors.py" />
+ <option value="$PROJECT_DIR$/forum/skins/default/templates/base_content.html" />
+ <option value="$PROJECT_DIR$/forum/skins/default/templates/base.html" />
<option value="$PROJECT_DIR$/forum/views/auth.py" />
- <option value="$PROJECT_DIR$/settings_local.py.dist" />
+ <option value="$PROJECT_DIR$/forum/skins/default/templates/auth/signin.html" />
</list>
</option>
</component>
@@ -560,6 +582,82 @@ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
+ <option name="myItemId" value="forum_modules" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="openidauth" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum_modules" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="localauth" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum_modules" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="localauth" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="templates" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum_modules" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="facebookauth" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
<option name="myItemId" value="forum" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
@@ -596,6 +694,156 @@ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
+ <option name="myItemId" value="utils" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="user_messages" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="templatetags" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="skins" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="skins" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="default" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="templates" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="skins" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="default" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="templates" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="auth" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="skins" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="default" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="osqa" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="forum" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
<option name="myItemId" value="models" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
@@ -620,8 +868,8 @@ </PATH>
</subPane>
</pane>
- <pane id="PackagesPane" />
<pane id="Scope" />
+ <pane id="PackagesPane" />
<pane id="Favorites" />
</panes>
</component>
@@ -638,13 +886,17 @@ <property name="WebServerToolWindowFactoryState" value="false" />
<property name="MemberChooser.showClasses" value="true" />
<property name="GoToClass.includeLibraries" value="false" />
- <property name="options.splitter.details.proportions" value="0.2" />
<property name="options.searchVisible" value="true" />
+ <property name="options.splitter.details.proportions" value="0.2" />
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\osqadev\100302\osqa" />
</key>
+ <key name="MoveFile.RECENT_KEYS">
+ <recent name="C:\osqadev\100302\osqa\forum" />
+ <recent name="C:\osqadev\100302\osqa\forum\skins\default\templates\auth" />
+ </key>
</component>
<component name="Regex">
<option name="pos1" value="218" />
@@ -765,6 +1017,17 @@ <option name="Maven.BeforeRunTask" enabled="false" />
</method>
</configuration>
+ <configuration default="true" type="JavascriptDebugSession" factoryName="Local">
+ <JSDebuggerConfigurationSettings>
+ <option name="engineId" />
+ <option name="fileUrl" />
+ </JSDebuggerConfigurationSettings>
+ <method>
+ <option name="AntTarget" enabled="false" />
+ <option name="BuildArtifacts" enabled="false" />
+ <option name="Maven.BeforeRunTask" enabled="false" />
+ </method>
+ </configuration>
<configuration default="true" type="JUnit" factoryName="JUnit">
<extension name="coverage" enabled="false" merge="false" />
<extension name="snapshooter" />
@@ -860,22 +1123,22 @@ <window_info id="Archetypes" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+ <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.329927" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+ <window_info id="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
+ <window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+ <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.329927" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
- <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+ <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24939074" sideWeight="0.659854" order="0" side_tool="false" content_ui="tabs" />
+ <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
+ <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.26969942" sideWeight="0.659854" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Regex" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+ <window_info id="Regex" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.329927" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
</layout>
@@ -911,108 +1174,114 @@ <breakpoint-manager />
</component>
<component name="editorHistoryManager">
- <entry file="file://$PROJECT_DIR$/forum/middleware/__init__.py">
+ <entry file="file://$PROJECT_DIR$/forum/urls.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
+ <state line="101" column="104" selection-start="6942" selection-end="6959" vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum/user_messages/__init__.py">
+ <entry file="file://$PROJECT_DIR$/forum/views/readers.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
+ <state line="79" column="4" selection-start="2779" selection-end="2779" vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum/__init__.py">
+ <entry file="file://$PROJECT_DIR$/settings_local.py.dist">
<provider selected="true" editor-type-id="text-editor">
- <state line="0" column="34" selection-start="34" selection-end="34" vertical-scroll-proportion="0.0" />
+ <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum/views/readers.py">
+ <entry file="file://$PROJECT_DIR$/forum/context.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="23" column="38" selection-start="913" selection-end="913" vertical-scroll-proportion="0.026397515">
+ <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum/user_messages/context_processors.py">
+ <entry file="file://$PROJECT_DIR$/forum/skins/default/templates/auth/auth_settings.html">
<provider selected="true" editor-type-id="text-editor">
- <state line="25" column="90" selection-start="694" selection-end="694" vertical-scroll-proportion="0.30955994">
+ <state line="26" column="18" selection-start="1393" selection-end="1393" vertical-scroll-proportion="-18.416666">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum_modules/sphinxfulltext/models.py">
+ <entry file="file://$PROJECT_DIR$/settings_local.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="4" column="44" selection-start="158" selection-end="158" vertical-scroll-proportion="0.103186645">
+ <state line="29" column="32" selection-start="747" selection-end="747" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum/authentication/__init__.py">
+ <entry file="file://$PROJECT_DIR$/forum/middleware/anon_user.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="15" column="74" selection-start="583" selection-end="583" vertical-scroll-proportion="0.38694993">
+ <state line="14" column="8" selection-start="525" selection-end="525" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum/models/base.py">
+ <entry file="file://$PROJECT_DIR$/forum/user_messages/__init__.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="7" column="99" selection-start="330" selection-end="330" vertical-scroll-proportion="0.18057664">
+ <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/context.py">
+ <entry file="file://$PROJECT_DIR$/settings.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="25" column="87" selection-start="1095" selection-end="1095" vertical-scroll-proportion="0.64491653">
+ <state line="26" column="113" selection-start="1036" selection-end="1036" vertical-scroll-proportion="-8.52">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum/models/question.py">
+ <entry file="file://$PROJECT_DIR$/forum/user_messages/context_processors.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="329" column="24" selection-start="12820" selection-end="12820" vertical-scroll-proportion="0.0">
+ <state line="21" column="5" selection-start="534" selection-end="534" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum/models/answer.py">
+ <entry file="file://$PROJECT_DIR$/forum/skins/default/templates/base_content.html">
<provider selected="true" editor-type-id="text-editor">
- <state line="129" column="40" selection-start="4498" selection-end="4498" vertical-scroll-proportion="-20.0">
+ <state line="46" column="43" selection-start="2208" selection-end="2208" vertical-scroll-proportion="-14.166667">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/forum/urls.py">
+ <entry file="file://$PROJECT_DIR$/forum/skins/default/templates/base.html">
<provider selected="true" editor-type-id="text-editor">
- <state line="94" column="113" selection-start="6062" selection-end="6080" vertical-scroll-proportion="0.0">
+ <state line="45" column="114" selection-start="2062" selection-end="2062" vertical-scroll-proportion="-11.333333">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/forum/views/auth.py">
<provider selected="true" editor-type-id="text-editor">
- <state line="23" column="84" selection-start="915" selection-end="915" vertical-scroll-proportion="0.0">
+ <state line="342" column="77" selection-start="13293" selection-end="13293" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/settings_local.py">
+ <entry file="file://$PROJECT_DIR$/forum_modules/localauth/templates/loginform.html">
<provider selected="true" editor-type-id="text-editor">
- <state line="16" column="86" selection-start="381" selection-end="381" vertical-scroll-proportion="0.0">
+ <state line="26" column="14" selection-start="825" selection-end="883" vertical-scroll-proportion="-18.416666">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/settings.py">
+ <entry file="file://$PROJECT_DIR$/forum/skins/default/templates/auth/temp_login_email.html">
<provider selected="true" editor-type-id="text-editor">
- <state line="75" column="0" selection-start="2671" selection-end="2671" vertical-scroll-proportion="0.0">
+ <state line="18" column="42" selection-start="738" selection-end="757" vertical-scroll-proportion="0.5074627">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/settings_local.py.dist">
+ <entry file="file://$PROJECT_DIR$/forum/skins/default/templates/auth/signin.html">
<provider selected="true" editor-type-id="text-editor">
- <state line="80" column="14" selection-start="2301" selection-end="2301" vertical-scroll-proportion="0.5356601">
+ <state line="81" column="49" selection-start="3591" selection-end="3591" vertical-scroll-proportion="0.53731346">
<folding />
</state>
</provider>
diff --git a/forum/authentication/base.py b/forum/authentication/base.py index 08534adc..99005866 100755 --- a/forum/authentication/base.py +++ b/forum/authentication/base.py @@ -33,6 +33,10 @@ class ConsumerTemplateContext(object): 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 diff --git a/forum/authentication/forms.py b/forum/authentication/forms.py index 019c85f3..7fa06b01 100755 --- a/forum/authentication/forms.py +++ b/forum/authentication/forms.py @@ -1,7 +1,8 @@ -from forum.utils.forms import NextUrlField, UserNameField, UserEmailField -from forum.models import EmailFeedSetting, Question +from forum.utils.forms import NextUrlField, UserNameField, UserEmailField, SetPasswordForm +from forum.models import EmailFeedSetting, 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 from forum.forms import EditUserEmailFeedsForm import logging @@ -11,6 +12,29 @@ class SimpleRegistrationForm(forms.Form): 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 = ( @@ -29,3 +53,21 @@ class SimpleEmailSubscribeForm(forms.Form): else: email_settings_form = EFF(initial=EFF.NO_EMAIL_INITIAL) email_settings_form.save(user,save_unbound=True) + +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/context.py b/forum/context.py index b33a1760..b33a1760 100644 --- a/context.py +++ b/forum/context.py diff --git a/forum/forms.py b/forum/forms.py index 5d4fb516..2260bfe5 100755 --- a/forum/forms.py +++ b/forum/forms.py @@ -261,25 +261,7 @@ class TagFilterSelectionForm(forms.ModelForm): if before != after: return True return False - - -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'] + class EditUserEmailFeedsForm(forms.Form): WN = (('w',_('weekly')),('n',_('no email'))) diff --git a/forum/models/__init__.py b/forum/models/__init__.py index db66a227..fee52447 100755 --- a/forum/models/__init__.py +++ b/forum/models/__init__.py @@ -2,7 +2,7 @@ from question import Question ,QuestionRevision, QuestionView, AnonymousQuestion from answer import Answer, AnonymousAnswer, AnswerRevision from tag import Tag, MarkedTag from meta import Vote, Comment, FlaggedItem -from user import Activity, AnonymousEmail, EmailFeedSetting, AuthKeyUserAssociation +from user import Activity, ValidationHash, EmailFeedSetting, AuthKeyUserAssociation from repute import Badge, Award, Repute import re @@ -34,6 +34,9 @@ def user_get_q_sel_email_feed_frequency(self): #print 'have freq=%s' % feed_setting.frequency return feed_setting.frequency +def user_get_absolute_url(self): + return "/users/%d/%s/" % (self.id, (self.username)) + User.add_to_class('is_approved', models.BooleanField(default=False)) User.add_to_class('email_isvalid', models.BooleanField(default=False)) User.add_to_class('email_key', models.CharField(max_length=32, null=True)) @@ -68,6 +71,7 @@ User.add_to_class('tag_filter_setting', default='ignored' ) ) +User.add_to_class('get_absolute_url', user_get_absolute_url) # custom signal tags_updated = django.dispatch.Signal(providing_args=["question"]) @@ -294,7 +298,6 @@ def post_stored_anonymous_content(sender,user,session_key,signal,*args,**kwargs) aa.publish(user) #signal for User modle save changes - pre_save.connect(calculate_gravatar_hash, sender=User) post_save.connect(record_ask_event, sender=Question) post_save.connect(record_answer_event, sender=Answer) @@ -338,7 +341,7 @@ Repute = Repute Activity = Activity EmailFeedSetting = EmailFeedSetting -AnonymousEmail = AnonymousEmail +ValidationHash = ValidationHash AuthKeyUserAssociation = AuthKeyUserAssociation __all__ = [ @@ -364,7 +367,7 @@ __all__ = [ 'Activity', 'EmailFeedSetting', - 'AnonymousEmail', + 'ValidationHash', 'AuthKeyUserAssociation', 'User' diff --git a/forum/models/user.py b/forum/models/user.py index bed6f55e..ff0af7fa 100755 --- a/forum/models/user.py +++ b/forum/models/user.py @@ -1,6 +1,9 @@ from base import * from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import User +from hashlib import md5 +import string +from random import Random from django.utils.translation import ugettext as _ @@ -57,19 +60,72 @@ class EmailFeedSetting(models.Model): class Meta: app_label = 'forum' -class AnonymousEmail(models.Model): - #validation key, if used - key = models.CharField(max_length=32) - email = models.EmailField(null=False,unique=True) - isvalid = models.BooleanField(default=False) +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=256,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) + user = models.ForeignKey(User, related_name="auth_keys") added_at = models.DateTimeField(default=datetime.datetime.now) class Meta: diff --git a/forum/skins/default/templates/auth/auth_settings.html b/forum/skins/default/templates/auth/auth_settings.html new file mode 100755 index 00000000..051fb6ba --- /dev/null +++ b/forum/skins/default/templates/auth/auth_settings.html @@ -0,0 +1,35 @@ +{% extends "base.html" %} +<!-- changepw.html --> +{% load i18n %} +{% block head %}{% endblock %} +{% block title %}{% spaceless %}{% trans "Authentication settings" %}{% endspaceless %}{% endblock %} +{% block content %} +<div class="headNormal">{% trans "Authentication settings" %}</div> +{% if auth_keys %} + <p class="message">{% blocktrans %}These are the external authentication providers currently associated with your account.{% endblocktrans %}</p> + <div> + {% for key in auth_keys %} + <p>{{ key.name }} (<a href="{% url user_remove_external_provider id=key.id %}">{% trans "remove" %}</a>)</p> + {% endfor %} + </div> +{% endif %} +{% if not auth_keys %} + <p class="message">{% blocktrans %}You currently have no external authentication provider associated with your account.{% endblocktrans %}</p> +{% endif %} +<input type="button" class="submit" value="{% trans "Add new provider" %}" onclick="window.location='{% url user_add_external_provider %}'" /> +{% if has_password %} + <p class="message">{% blocktrans %}This is where you can change your password. Make sure you remember it!{% endblocktrans %}</p> +{% endif %} +{% if not has_password %} + <p class="message">{% blocktrans %}You can set up a password for your account, so you can login using standard username and password!{% endblocktrans %}</p> +{% endif %} +<div class="aligned"> + <form action="" method="post" accept-charset="utf-8"> + <ul id="changepw-form" class="form-horizontal-rows"> + {{form.as_ul}} + </ul> + <div class="submit-row"><input type="submit" class="submit" value="{% if has_password %}{% trans "Change password" %}{% endif %}{% if not has_password %}{% trans "Create password" %}{% endif %}" /></div> + </form> + </div> +{% endblock %} +<!-- end changepw.html --> diff --git a/forum/skins/default/templates/auth/email_validation.html b/forum/skins/default/templates/auth/email_validation.html new file mode 100755 index 00000000..a4126a69 --- /dev/null +++ b/forum/skins/default/templates/auth/email_validation.html @@ -0,0 +1,20 @@ +{% extends "email_base.html" %}
+{% load i18n %}
+{% load extra_tags %}
+
+{% block content %}
+ <p>{% trans "Greetings from the Q&A forum" %},</p>
+
+ <p>{% trans "To make use of the Forum, please follow the link below:" %}</p>
+
+ <a href="{% fullurl auth_validate_email user=user.id,code=validation_code %}">{% fullurl auth_validate_email user=user.id,code=validation_code %}</a>
+
+ <p>{% trans "Following the link above will help us verify your email address." %}</p>
+
+ <p>{% blocktrans %}If you beleive that this message was sent in mistake -
+ no further action is needed. Just ingore this email, we apologize
+ for any inconvenience{% endblocktrans %}</p>
+
+ <p>{% blocktrans %}Sincerely,<br />
+ Forum Administrator{% endblocktrans %}</p>
+{% endblock %}
diff --git a/forum/skins/default/templates/auth/signin.html b/forum/skins/default/templates/auth/signin.html index d4ee9fc1..478de4a8 100755 --- a/forum/skins/default/templates/auth/signin.html +++ b/forum/skins/default/templates/auth/signin.html @@ -73,12 +73,16 @@ <input type="hidden" class="validate_email" name="validate_email" value="yes" />
</form>
{% for provider in stackitem_providers %}
- <h3 class="or_label">Or...</h3>
+ <h3 class="or_label">{% trans 'Or...' %}</h3>
<form class="signin_form" method="POST" action="{% url auth_provider_signin provider=provider.id %}">
{% include provider.stack_item_template %}
<input type="hidden" class="validate_email" name="validate_email" value="yes" />
</form>
{% endfor %}
+ <h3 class="or_label">{% trans 'Or...' %}</h3>
+ <fieldset>
+ {% trans 'Click' %} <a href="{% url auth_local_register %}">here</a> {% trans "if you're having troubles signing in." %}
+ </fieldset>
<script type="text/html" id="simple_form_template">
<fieldset id="slot_form">
<p id="provider_name_slot">{% trans 'Enter your ' %}%%YOUR_WHAT%%</p>
diff --git a/forum/skins/default/templates/auth/temp_login_email.html b/forum/skins/default/templates/auth/temp_login_email.html new file mode 100755 index 00000000..063608fe --- /dev/null +++ b/forum/skins/default/templates/auth/temp_login_email.html @@ -0,0 +1,20 @@ +{% extends "email_base.html" %}
+{% load i18n %}
+{% load extra_tags %}
+
+{% block content %}
+ <p>{% trans "Greetings from the Q&A forum" %},</p>
+
+ <p>{% trans "You're seeing this because someone requested a temporary login link" %}</p>
+
+ <a href="{% fullurl auth_tempsignin user=user.id,code=temp_login_code %}">{% fullurl auth_tempsignin user=user.id,code=temp_login_code %}</a>
+
+ <p>{% trans "Following the link above will give you access to your account." %}</p>
+
+ <p>{% blocktrans %}If you beleive that this message was sent in mistake -
+ no further action is needed. Just ingore this email, we apologize
+ for any inconvenience{% endblocktrans %}</p>
+
+ <p>{% blocktrans %}Sincerely,<br />
+ Forum Administrator{% endblocktrans %}</p>
+{% endblock %}
diff --git a/forum/skins/default/templates/auth/temp_login_request.html b/forum/skins/default/templates/auth/temp_login_request.html new file mode 100755 index 00000000..772f18fb --- /dev/null +++ b/forum/skins/default/templates/auth/temp_login_request.html @@ -0,0 +1,28 @@ +{% extends "base.html" %}
+
+{% load i18n %}
+{% block head %}{% endblock %}
+{% block title %}{% spaceless %}{% trans "Request temporary login key" %}{% endspaceless %}{% endblock %}
+{% block content %}
+<div class="headNormal">{% trans "Account: request temporary login key" %}</div>
+<p class="message">{% blocktrans %}
+ If you're experiencing problems accessing your account, or if you forgot your password,
+ here you can request a temporary login key. Fill out your account email and we'll send you a temporary access link that
+ will enable you to access your account. This token is valid only once and for a limited period of time.
+ {% endblocktrans %}</p>
+<div class="aligned">
+ {% if form.errors %}
+ <ul class="errorlist">
+ {% for error in form.errors %}
+ <li>{{ error }}</li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+ <form action="" method="post" accept-charset="utf-8">
+ <ul id="changepw-form" class="form-horizontal-rows">
+ {{form.as_ul}}
+ </ul>
+ <div class="submit-row"><input type="submit" class="submit" value="{% trans "Send link" %}" /></div>
+ </form>
+ </div>
+{% endblock %}
\ No newline at end of file diff --git a/forum/skins/default/templates/base.html b/forum/skins/default/templates/base.html index 3a1848ef..884551e3 100755 --- a/forum/skins/default/templates/base.html +++ b/forum/skins/default/templates/base.html @@ -3,7 +3,7 @@ {% load extra_filters %} {% load extra_tags %} {% load i18n %} -<html xmlns="http://www.w3.org/1999/xhtml"{% if fb_api_key %} xmlns:fb="http://www.facebook.com/2008/fbml"{% endif %}> +<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{% block title %}{% endblock %} - {{ settings.APP_TITLE }}</title> {% spaceless %} diff --git a/forum/skins/default/templates/changepw.html b/forum/skins/default/templates/changepw.html deleted file mode 100755 index 7b4cf801..00000000 --- a/forum/skins/default/templates/changepw.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "base.html" %} -<!-- changepw.html --> -{% load i18n %} -{% block head %}{% endblock %} -{% block title %}{% spaceless %}{% trans "Change password" %}{% endspaceless %}{% endblock %} -{% block content %} -<div class="headNormal">{% trans "Account: change password" %}</div> -<p class="message">{% blocktrans %}This is where you can change your password. Make sure you remember it!{% endblocktrans %}</p> -<div class="aligned"> - <form action="" method="post" accept-charset="utf-8"> - <ul id="changepw-form" class="form-horizontal-rows"> - {{form.as_ul}} - </ul> - <div class="submit-row"><input type="submit" class="submit" value="{% trans "Change password" %}" /></div> - </form> - </div> -{% endblock %} -<!-- end changepw.html --> diff --git a/forum/skins/default/templates/email_base.html b/forum/skins/default/templates/email_base.html new file mode 100755 index 00000000..b74741e3 --- /dev/null +++ b/forum/skins/default/templates/email_base.html @@ -0,0 +1,26 @@ +{% load extra_filters %}
+{% load extra_tags %}
+{% load i18n %}
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <link href="{% fullmedia "/media/style/style.css" %}" rel="stylesheet" type="text/css" />
+ </head>
+ <body>
+ <a href="{% fullurl index %}">
+ <img src="{% fullmedia "/media/images/logo.png" %}" title="{% trans "home" %}" alt="{{settings.APP_TITLE}} logo"/>
+ </a>
+ <br />
+ <p>{{ settings.APP_TITLE }}</p>
+ <br /><br />
+ <div id="wrapper">
+ <div id="room">
+ <div id="CALeft">
+ {% block content%}
+ {% endblock%}
+ </div>
+ </div>
+ <div class="spacer3"></div>
+ </div>
+ </body>
+</html>
\ No newline at end of file diff --git a/forum/skins/default/templates/user_info.html b/forum/skins/default/templates/user_info.html index 0ce4e77a..b0fd246a 100755 --- a/forum/skins/default/templates/user_info.html +++ b/forum/skins/default/templates/user_info.html @@ -46,12 +46,8 @@ {% endif %} {% separator %} {% ifequal request.user view_user %} - <a href="{% url auth_signin %}">add authentication method</a> + <a href="{% url user_authsettings %}">authentication settings</a> {% endifequal %} - {% separator %} - {% if request.user.has_usable_password %} - <a href="{% url user_changepw %}">change password</a> - {% endif %} {% endjoinitems %} </td> </tr> diff --git a/forum/templatetags/extra_tags.py b/forum/templatetags/extra_tags.py index 26c52b8d..8fa01629 100755 --- a/forum/templatetags/extra_tags.py +++ b/forum/templatetags/extra_tags.py @@ -13,6 +13,7 @@ from forum.models import Question, Answer, QuestionRevision, AnswerRevision from django.utils.translation import ugettext as _ from django.utils.translation import ungettext from django.conf import settings +from django.template.defaulttags import url as default_url from forum import skins register = template.Library() @@ -355,3 +356,27 @@ def blockmedia(parser,token): if next.contents == 'endblockmedia': break return BlockMediaUrlNode(nodelist) + +class FullUrlNode(template.Node): + def __init__(self, default_node): + self.default_node = default_node + + def render(self, context): + domain = settings.APP_URL + protocol = getattr(settings, "PROTOCOL", "http") + path = self.default_node.render(context) + return "%s://%s%s" % (protocol, domain, path) + +@register.tag(name='fullurl') +def fullurl(parser, token): + default_node = default_url(parser, token) + return FullUrlNode(default_node) + +@register.simple_tag +def fullmedia(url): + domain = settings.APP_URL + protocol = getattr(settings, "PROTOCOL", "http") + path = media(url) + return "%s://%s%s" % (protocol, domain, path) + + diff --git a/forum/urls.py b/forum/urls.py index f81bad69..59693be7 100755 --- a/forum/urls.py +++ b/forum/urls.py @@ -76,7 +76,7 @@ urlpatterns = patterns('', url(r'^%s$' % _('users/'),app.users.users, name='users'), url(r'^%s(?P<id>\d+)/$' % _('moderate-user/'), app.users.moderate_user, name='moderate_user'), url(r'^%s(?P<id>\d+)/%s$' % (_('users/'), _('edit/')), app.users.edit_user, name='edit_user'), - url(r'^%s(?P<id>\d+)//*' % _('users/'), app.users.user, name='user'), + url(r'^%s(?P<id>\d+)/(?P<slug>\w+)/$' % _('users/'), app.users.user, name='user'), url(r'^%s$' % _('badges/'),app.meta.badges, name='badges'), url(r'^%s(?P<id>\d+)//*' % _('badges/'), app.meta.badge, name='badge'), url(r'^%s%s$' % (_('messages/'), _('markread/')),app.commands.read_message, name='read_message'), @@ -96,10 +96,15 @@ urlpatterns = patterns('', url(r'^%s(?P<provider>\w+)/%s$' % (_('account/'), _('signin/')), app.auth.prepare_provider_signin, name='auth_provider_signin'), url(r'^%s(?P<provider>\w+)/%s$' % (_('account/'), _('done/')), app.auth.process_provider_signin, name='auth_provider_done'), url(r'^%s%s$' % (_('account/'), _('register/')), app.auth.external_register, name='auth_external_register'), + url(r'^%s%s(?P<user>\d+)/(?P<code>.+)/$' % (_('account/'), _('validate/')), app.auth.validate_email, name="auth_validate_email"), + url(r'^%s%s$' % (_('account/'), _('tempsignin/')), app.auth.request_temp_login, name="auth_request_tempsignin"), + url(r'^%s%s(?P<user>\d+)/(?P<code>.+)/$' % (_('account/'), _('tempsignin/')), app.auth.temp_signin, name="auth_tempsignin"), + url(r'^%s%s$' % (_('account/'), _('authsettings/')), app.auth.auth_settings, name='user_authsettings'), + url(r'^%s%s(?P<id>\d+)/%s$' % (_('account/'), _('providers/'), _('remove/')), app.auth.remove_external_provider, name='user_remove_external_provider'), + url(r'^%s%s%s$' % (_('account/'), _('providers/'), _('add/')), app.auth.signin_page, name='user_add_external_provider'), - url(r'^%s%s$' % (_('account/'), _('password/')), app.users.changepw, name='user_changepw'), #url(r'^%s%s%s$' % (_('accounts/'), _('password/'), _('confirm/')), app.user.confirmchangepw, name='user_confirmchangepw'), - url(r'^%s$' % _('account/'), app.users.account_settings, name='user_account_settings'), + #url(r'^%s$' % _('account/'), app.users.account_settings, name='user_account_settings'), #url(r'^%s$' % _('delete/'), app.users.delete, name='user_delete'), ) diff --git a/forum/user_messages/context_processors.py b/forum/user_messages/context_processors.py index 2bf26269..5f7b857c 100755 --- a/forum/user_messages/context_processors.py +++ b/forum/user_messages/context_processors.py @@ -17,6 +17,9 @@ def user_messages (request): #if request.user.is_authenticated(): #else: # messages = LazyMessages(request) + #import inspect + #print inspect.stack()[1] + #print messages return { 'user_messages': messages } class LazyMessages (StrAndUnicode): diff --git a/forum/utils/email.py b/forum/utils/email.py new file mode 100755 index 00000000..a6ea1087 --- /dev/null +++ b/forum/utils/email.py @@ -0,0 +1,21 @@ +from django.core.mail import send_mail, EmailMultiAlternatives
+from django.conf import settings
+from django.template import loader, Context
+from django.utils.html import strip_tags
+from threading import Thread
+
+def send_email(subject, recipients, template, context={}, sender=settings.DEFAULT_FROM_EMAIL, txt_template=None):
+ context['settings'] = settings
+ html_body = loader.get_template(template).render(Context(context))
+
+ if txt_template is None:
+ txt_body = strip_tags(html_body)
+ else:
+ txt_body = loader.get_template(txt_template).render(Context(context))
+
+ msg = EmailMultiAlternatives(subject, txt_body, sender, recipients)
+ msg.attach_alternative(html_body, "text/html")
+
+ thread = Thread(target=EmailMultiAlternatives.send, args=[msg])
+ thread.setDaemon(True)
+ thread.start()
diff --git a/forum/utils/forms.py b/forum/utils/forms.py index c54056ca..c8305c7c 100755 --- a/forum/utils/forms.py +++ b/forum/utils/forms.py @@ -133,6 +133,10 @@ class SetPasswordForm(forms.Form): error_messages={'required':_('please, retype your password'), 'nomatch':_('sorry, entered passwords did not match, please try again')}, ) + + def __init__(self, data=None, user=None, *args, **kwargs): + super(SetPasswordForm, self).__init__(data, *args, **kwargs) + def clean_password2(self): """ Validates that the two password inputs match. diff --git a/forum/utils/time.py b/forum/utils/time.py new file mode 100755 index 00000000..5fd15e24 --- /dev/null +++ b/forum/utils/time.py @@ -0,0 +1,4 @@ +import datetime
+
+def one_day_from_now():
+ return datetime.datetime.now() + datetime.timedelta(days=1)
diff --git a/forum/views/auth.py b/forum/views/auth.py index 6fe184a8..20e208ae 100755 --- a/forum/views/auth.py +++ b/forum/views/auth.py @@ -1,17 +1,21 @@ -from django.shortcuts import render_to_response +from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.core.urlresolvers import reverse from django.contrib.auth.models import User -from django.http import HttpResponseRedirect +from django.http import HttpResponseRedirect, Http404 from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ +from django.utils.http import urlquote_plus from django.contrib.auth.decorators import login_required from django.contrib.auth import login, logout from django.http import get_host import types +import datetime -from forum.models import AuthKeyUserAssociation -from forum.authentication.forms import SimpleRegistrationForm, SimpleEmailSubscribeForm +from forum.models import AuthKeyUserAssociation, ValidationHash +from forum.authentication.forms import SimpleRegistrationForm, SimpleEmailSubscribeForm, \ + TemporaryLoginRequestForm, ChangePasswordForm, SetPasswordForm +from forum.utils.email import send_email from forum.authentication.base import InvalidAuthentication from forum.authentication import AUTH_PROVIDERS @@ -105,8 +109,13 @@ def process_provider_signin(request, provider): except: uassoc = AuthKeyUserAssociation(user=request.user, key=assoc_key, provider=provider) uassoc.save() - request.session['auth_error'] = _("These new credentials are now associated with your account.") + request.user.message_set.create(message=_('The new credentials are now associated with your account')) + return HttpResponseRedirect(reverse('user_authsettings')) + return HttpResponseRedirect(reverse('auth_signin')) + else: + if isinstance(assoc_key, (type, User)): + return login_and_forward(request, assoc_key) try: assoc = AuthKeyUserAssociation.objects.get(key=assoc_key) @@ -125,12 +134,15 @@ def external_register(request): email_feeds_form = SimpleEmailSubscribeForm(request.POST) if (form1.is_valid() and email_feeds_form.is_valid()): - tmp_pwd = User.objects.make_random_password() - user_ = User.objects.create_user(form1.cleaned_data['username'], - form1.cleaned_data['email'], tmp_pwd) - + user_ = User(username=form1.cleaned_data['username'], email=form1.cleaned_data['email']) + user_.email_isvalid = request.session.get('auth_validated_email', '') == form1.cleaned_data['email'] user_.set_unusable_password() + user_.save() + + if not user_.email_isvalid: + send_validation_email(user_) + try: assoc_key = request.session['assoc_key'] auth_provider = request.session['auth_provider'] @@ -145,7 +157,11 @@ def external_register(request): del request.session['assoc_key'] del request.session['auth_provider'] - return login_and_forward(request, user_) + + if user_.email_isvalid: + return login_and_forward(request, user_) + else: + return HttpResponseRedirect(reverse('index')) else: provider_class = AUTH_PROVIDERS[request.session['auth_provider']].consumer user_data = provider_class.get_user_data(request.session['assoc_key']) @@ -156,6 +172,9 @@ def external_register(request): if not email: email = request.session.get('auth_email_request', '') + if email: + request.session['auth_validated_email'] = email + form1 = SimpleRegistrationForm(initial={ 'next': '/', 'username': username, @@ -173,6 +192,119 @@ def external_register(request): 'gravatar_faq_url':reverse('faq') + '#gravatar', }, context_instance=RequestContext(request)) +def request_temp_login(request): + if request.method == 'POST': + form = TemporaryLoginRequestForm(request.POST) + + if form.is_valid(): + user = form.user_cache + + try: + hash = get_object_or_404(ValidationHash, user=user, type='templogin') + if hash.expiration < datetime.datetime.now(): + hash.delete() + return request_temp_login(request) + except: + hash = ValidationHash.objects.create_new(user, 'templogin', [user.id]) + + send_email(_("Temporary login link"), [user.email], "auth/temp_login_email.html", { + 'temp_login_code': hash, + 'user': user + }) + + return HttpResponseRedirect(reverse('index')) + else: + form = TemporaryLoginRequestForm() + + return render_to_response( + 'auth/temp_login_request.html', {'form': form}, + context_instance=RequestContext(request)) + +def temp_signin(request, user, code): + user = get_object_or_404(User, id=user) + + if (ValidationHash.objects.validate(code, user, 'templogin', [user.id])): + print user.get_absolute_url() + return login_and_forward(request, user, reverse('user_authsettings'), + _("You are logged in with a temporary access key, please take the time to fix your issue with authentication.")) + else: + raise Http404() + +def send_validation_email(user): + hash = ValidationHash.objects.create_new(user, 'email', [user.email]) + send_email(_("Email Validation"), [user.email], "auth/email_validation.html", { + 'validation_code': hash, + 'user': user + }) + +def validate_email(request, user, code): + user = get_object_or_404(User, id=user) + + if (ValidationHash.objects.validate(code, user, 'email', [user.email])): + user.email_isvalid = True + user.save() + return login_and_forward(request, user, None, _("Thank you, your email is now validated.")) + else: + raise Http404() + +@login_required +def auth_settings(request): + """ + change password view. + + url : /changepw/ + template: authopenid/changepw.html + """ + user_ = request.user + auth_keys = user_.auth_keys.all() + + if user_.has_usable_password(): + FormClass = ChangePasswordForm + else: + FormClass = SetPasswordForm + + if request.POST: + form = FormClass(request.POST, user=user_) + if form.is_valid(): + if user_.has_usable_password(): + request.user.message_set.create(message=_("Your password was changed")) + else: + request.user.message_set.create(message=_("New password set")) + + user_.set_password(form.cleaned_data['password1']) + user_.save() + return HttpResponseRedirect(reverse('user_authsettings')) + else: + form = FormClass(user=user_) + + auth_keys_list = [] + + for k in auth_keys: + provider = AUTH_PROVIDERS.get(k.provider, None) + + if provider is not None: + name = "%s: %s" % (provider.context.human_name, provider.context.readable_key(k)) + else: + from forum.authentication.base import ConsumerTemplateContext + "unknown: %s" % ConsumerTemplateContext.readable_key(k) + + auth_keys_list.append({ + 'name': name, + 'id': k.id + }) + + return render_to_response('auth/auth_settings.html', { + 'form': form, + 'has_password': user_.has_usable_password(), + 'auth_keys': auth_keys_list, + }, context_instance=RequestContext(request)) + +def remove_external_provider(request, id): + association = get_object_or_404(AuthKeyUserAssociation, id=id) + request.user.message_set.create(message=_("You removed the association with %s") % association.provider) + association.delete() + return HttpResponseRedirect(reverse('user_authsettings')) + def newquestion_signin_action(user): question = Question.objects.filter(author=user).order_by('-added_at')[0] return question.get_absolute_url() @@ -186,7 +318,7 @@ POST_SIGNIN_ACTIONS = { 'newanswer': newanswer_signin_action, } -def login_and_forward(request, user): +def login_and_forward(request, user, forward=None, message=None): old_session = request.session.session_key user.backend = "django.contrib.auth.backends.ModelBackend" login(request, user) @@ -194,19 +326,24 @@ def login_and_forward(request, user): from forum.models import user_logged_in user_logged_in.send(user=user,session_key=old_session,sender=None) - signin_action = request.session.get('on_signin_action', None) - if not signin_action: - redirect = request.session.get('on_signin_url', None) + if not forward: + signin_action = request.session.get('on_signin_action', None) + if not signin_action: + forward = request.session.get('on_signin_url', None) - if not redirect: - redirect = reverse('index') - else: - try: - redirect = POST_SIGNIN_ACTIONS[signin_action](user) - except: - redirect = reverse('index') + if not forward: + forward = reverse('index') + else: + try: + forward = POST_SIGNIN_ACTIONS[signin_action](user) + except: + forward = reverse('index') + + if message is None: + message = _("Welcome back %s, you are now logged in") % user.username - return HttpResponseRedirect(redirect) + request.user.message_set.create(message=message) + return HttpResponseRedirect(forward) @login_required def signout(request): diff --git a/forum/views/users.py b/forum/views/users.py index baa8090b..ff92803c 100755 --- a/forum/views/users.py +++ b/forum/views/users.py @@ -947,44 +947,13 @@ USER_TEMPLATE_VIEWS = ( ) ) -def user(request, id): +def user(request, id, slug=None): sort = request.GET.get('sort', 'stats') user_view = dict((v.id, v) for v in USER_TEMPLATE_VIEWS).get(sort, USER_TEMPLATE_VIEWS[0]) from forum.views import users func = user_view.view_func return func(request, id, user_view) - -@login_required -def changepw(request): - """ - change password view. - - url : /changepw/ - template: authopenid/changepw.html - """ - logging.debug('') - user_ = request.user - - if not user_.has_usable_password(): - raise Http404 - - if request.POST: - form = ChangePasswordForm(request.POST, user=user_) - if form.is_valid(): - user_.set_password(form.cleaned_data['password1']) - user_.save() - msg = _("Password changed.") - redirect = "%s?msg=%s" % ( - reverse('user_account_settings'), - urlquote_plus(msg)) - return HttpResponseRedirect(redirect) - else: - form = ChangePasswordForm(user=user_) - - return render_to_response('changepw.html', {'form': form }, - context_instance=RequestContext(request)) - @login_required def account_settings(request): """ diff --git a/forum_modules/localauth/templates/loginform.html b/forum_modules/localauth/templates/loginform.html index 0d95a2f2..b1784fb6 100755 --- a/forum_modules/localauth/templates/loginform.html +++ b/forum_modules/localauth/templates/loginform.html @@ -24,7 +24,7 @@ <input id="blogin" name="blogin" type="submit" value="Login" />
</td>
<td>
- <a href="{% url auth_local_register %}">Create account</a><span> | </span><a href="{% url auth_local_register %}">Forgot your password?</a>
+ <a href="{% url auth_local_register %}">Create account</a><span> | </span><a href="{% url auth_request_tempsignin %}">Forgot your password?</a>
</td>
</tr>
</table>
diff --git a/forum_modules/localauth/views.py b/forum_modules/localauth/views.py index 1d1e0b3d..1ad9a2d3 100755 --- a/forum_modules/localauth/views.py +++ b/forum_modules/localauth/views.py @@ -4,7 +4,7 @@ from django.template import RequestContext from forms import ClassicRegisterForm from forum.authentication.forms import SimpleEmailSubscribeForm -from forum.views.auth import login_and_forward +from forum.views.auth import login_and_forward, send_validation_email def register(request): if request.method == 'POST': @@ -17,8 +17,8 @@ def register(request): email = form.cleaned_data['email'] user_ = User.objects.create_user( username,email,password ) + send_validation_email(user_) email_feeds_form.save(user_) - #todo: email validation return login_and_forward(request, user_) else: form = ClassicRegisterForm(initial={'next':'/'}) diff --git a/settings.py b/settings.py index db5d8172..cee1c5c1 100644 --- a/settings.py +++ b/settings.py @@ -28,14 +28,14 @@ MIDDLEWARE_CLASSES = [ 'forum.middleware.anon_user.ConnectToSessionMessagesMiddleware', 'forum.middleware.pagesize.QuestionsPageSizeMiddleware', 'forum.middleware.cancel.CancelActionMiddleware', - 'debug_toolbar.middleware.DebugToolbarMiddleware', - 'recaptcha_django.middleware.ReCaptchaMiddleware', + #'debug_toolbar.middleware.DebugToolbarMiddleware', + #'recaptcha_django.middleware.ReCaptchaMiddleware', 'django.middleware.transaction.TransactionMiddleware', ] TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.request', - 'context.application_settings', + '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 |