* Email is sent upon saving from the admin. * Announcements from the future are queued to be emailed around the time they become visible. * Also do some try/finally as safety for threadlocale default language activation.
… [bug 647449]
* Announcements are per group, independent of user's groups. * Tabs are all about user's groups. Tab titles are group names. * Add migration for unique group id in GroupDashboard because of OneToOneField. * Create utils.py to avoid circular imports.
* Post-rebase, added with_save to announcements app as well.
…r for putting it in context. [bug 649992]
Message storage based on separate models for Inbox and Outbox.
* [bug 623431] Remove ImageUploadAsync, VideoUploadAsync - they're not necessary. * Also subclass them both from MediaForm, sharing some code to make this more maintanable. * Add GalleryUpload object with plenty of comments and separation of concerns. * Use jinja macros heavily to make the upload form's HTML more readable * Consistency in error messages. * Preliminary File API client-side validation (extension and file size) * Stub for client side form validation (TODO) * Need to test for IE (TODO) * Set-up for CSS transitions, not implemented (TODO)
sumo.views.deprecated_redirect shows a message informing the user that the URL has changed and they should update their bookmarks. It takes one required argument, `url` which is passed directly to `reverse()`. Any additional kwargs are also passed to `reverse()` as the `kwargs` argument.
* Dashboard views are now responsible for passing the active dashboard signature into the template, since only they know the params (like the locale of a LocaleDashboard). * Tolerate non-dict Dashboard.params values to make views simpler in the common case. * When choosing active tab, compare the whole "signature" of a dashboard, not just the slug. IOW, take params into account. * Use class name instead of title in admin menu, since title is only defined on parametrized instances. * Hash slug instead of class, for consistency with signatures. * Make Dashboard._params private. * Get rid of signature_from_params(). We don't need it since I decided it would take the original string-params format. This also lets us make _digest_params() private and an instance method.
* Added file with topic strings for l10n, and a command to generate this file. * Article page now links to article lists by topic (instead of category). * All non-default locales use their parent's topics for listing. [bug 623160]
…ups. * Add GroupDashboard model * Change dashboard_tabs from a macro to a helper so it can get at dashboards(). Rename it "user_dashboard_tabs". Remove explicit references to tabs; look them up from dashboards.user instead. * Enable Questions dashboard.
Django's HttpRequest.is_secure() depends on an environment variable, which is great when we're running with mod_wsgi inside the Apache process and can rely on SetEnv HTTPS on, but when we're running as an isolated process (via gunicorn or uWSGI or what have you) that doesn't work. One of the upstream proxy servers (maybe even Zeus) will set an X-Scheme header to 'https' or 'http'. With this middleware, we check the header in is_secure() instead of relying on the environment variable. I'm leaving this to be installed in settings_local for now, since this is only for a test.