Static file mangling now renames files to their mangled form and
symlinks the original name. This cleanup rule deleted only the mangled
names, leaving broken symlinks. The quick'n'dirty solution is to clear
out all of the mangled and unmangled filenames so we don't leave things
in an inconsistent state.
Loading plugin controller modules at the bottom of
controllers/__init__.py led to a circular dependency. Registering
controllers via decorator allows controllers/__init__.py to load
completely before plugin controllers are loaded.
Now, in addition to checking that the date has the correct format (YYYY-MM)
we also check to make sure the date is in the future and the month is in
the range 01 to 12.
This fixes the problem where users were seeing a 500 server error after
entering invalid values for the month when entering their credit card info.
This change also fixes a problem where the form was redirecting even if there
were validation errors, leading the user to believe their authorization was
successful when it wasn't.
This will replace the current stuff in thing_utils.py. The idea is that
by storing the various last modified timestamps for a thing in a single
row together, we can save Cassandra round trips and seeks per request.
This has a couple of advantages:
* interoperability with Cassandra tools (cassandra-cli / cqlsh)
* smaller by 5-6 bytes on every column
From here on out, date columns will be written in the Cassandra
standard 8-byte integer (number of milliseconds since epoch) format.
Old-style stringified epoch seconds will be read properly.
This relies on Pycassa's new UTC-based behaviour in 1.7.
Previously, invoice number was [user_id]T[link_id]C[campaign_id].
Since campaigns are represented as Things now, their ids are longer, putting
us over the 20 char limit for invoice numbers defined in the authorize.net
xml api.
(see https://api.authorize.net/xml/v1/schema/AnetApiSchema.xsd )
Now invoice number will be T[link_id]C[campaign_id], which is still unique
across campaigns since a link is always associated with only one user