* The LMS now also monkey-patches
xmodule.x_module.descriptor_global_handler_url and
xmodule.x_module.descriptor_global_local_resource_url so that we can
get LMS XBlock URLs from the DescriptorSystem. That functionality is
needed in the block transforms collect() phase for certain XModules
like Video. For instance, say we want to generate the transcripts
URLs. The collect phase is run asynchronously, without a user context.
* The URL handler monkey-patching is now done in the startup.py files
for LMS and Studio. Studio used to do this in the import of
cms/djangoapps/contentstore/views/item.py. This was mostly just
because it seemed like a sane and consistent place to put it.
* LmsHandlerUrls was removed, its handler_url and local_resource_url
methods were moved to be top level functions. The only reason that
class existed seems to be to give a place to store course_id state,
and that can now be derived from the block location.
* To avoid the Module -> Descriptor ProxyAttribute magic that we do
(which explodes with an UndefinedContext error because there is no
user involved), when examining the block's handler method in
handler_url, I made a few changes:
** Check the .__class__ to see if the handler was defined, instead of the
block itself.
** The above required me to relax the check for _is_xblock_handler on the
function, since that will no longer be defined.
90% of this goes away when we kill XModules and do the refactoring we've
wanted to do for a while.
This commit pulls in changes from #4487 that implements keyword
substitution for bulk emails. With these changes, an instructor can
include keywords in their bulk emails which will be automatically substituted
with the corresponding value for the recepient of the email. Keywords are
of the form %%keyword%%, and the keywords implemented in this commit include:
%%USER_ID%% => anonymous_user_id
%%USER_FULLNAME%% => user profile name
%%COURSE_DISPLAY_NAME%% => display name of the course
%%COURSE_END_DATE%% => end date of the course
Client-side validations have also been implemented to ensure that only emails
with well-formed keywords can be sent.
The architecture is designed such that adding in new keywords in the future
would be relatively straight-forward.
Also, removed the client-side analytics for logging in.
Ensures that analytics are collected for third-party-auth logins.
Fixed failing tests related to third-party-auth.
Modify Django's translation library, such that the gettext family of
functions return an empty string when attempting to translate a
falsey value. This overrides the default behavior [0]:
> It is convention with GNU gettext to include meta-data as the
> translation for the empty string.
This patch provides a holistic solution to replace the current piecemeal
approach [1][2].
Affected Methods:
- gettext
- ugettext
[0] https://docs.python.org/2.7/library/gettext.html#the-gnutranslations-class
[1] bad803e451
[2] https://github.com/edx/edx-platform/pull/4653
Pluggable InputTypes use edxmako.paths.add_lookup to inject new
mako template directories. Those were getting clobbered by microsites
(and by theming), which were completely rebuilding the mako template
lookup list from scratch.
This commit switches those two features to use the same add_lookup
function as pluggable InputTypes.
[LMS-2489]
third_party_auth contains a working settings mechanism, the start of the provider interface + 3 implementations (Google, Mozilla Persona, LinkedIn), and a stub for the auth pipeline. Modified existing lms settings files to use but deactivate the module.
There's no need to display a traceback for every failed content load,
the comment before the log line even says so.
The exceptions shown before tests are run are because of the eager
initialization of the modulestores. They don't need to be initialized
then, that just speeds the responsiveness of servers. Putting off the
initialization means they get inited as needed, and the log lines get