[bug 737210] Limit the Question topic to 160 characters.
[bug 740902] Discount questions from inactive users from KPI metrics.

* Verified with updated tests.
Update deployment docs
[bug 712069] Add logarithmic retry to indexing

This adds logarithmic retry to index/unindex_task. If they fail, they'll
get retried periodically rather than just fail and die like they do now.
[bug 726037] Combined solved and responded graphs.

* Refactored 2 API calls into 1.
* Added a series for # of questions to the chart.
[bug 726037] Combined contributor count graphs.

* Refactored 3 API calls into 1.
* Now graphing KB, AoA and Support Forum contributors in the same graph.
[bug 743995] Fix READ/WRITE in es search admin

If an index was both the read and write index, the search admin page
wouldn't state as such.

Now it does.

Plus I fixed the logic so it's clearer in the land of Django templates
where there is no elif. Looking forward to 1.4.
[bug 739794] Fix index prefix

So... -dev and -stage share an ES cluster and the problem that creates
is that it makes it impossible for us to test production deployments
on -stage without also hosing -dev.

What this does is changes the nature of ES_INDEX_PREFIX. Instead of
using it to filter out which indexes are pertinent to SUMO on a given
server, we now prepend the prefix to the index name. This allows us
to have two servers with different prefixes with the same ES_INDEXES
and ES_WRITE_INDEXES and the resulting index names will be different.
It also allows us to change the ES_INDEXES and ES_WRITE_INDEXES for
a deployment that requires a reindexing and everything should work
on both -stage and -prod.

This also moves the Sphilastic code from oedipus to kitsune because
I was sick of changing it in oedipus and then updating kitsune with the
new commit.

This also includes a new version of elasticutils that allows us to change
the way the index name is calculated for an S.

Also, I did some paragraph wrapping by accident and that's part of this
commit, too.

As a side note, instead of fiddling with this and working around the fact
that elasticutils wants to be clever about index names, I wish I had reworked
elasticutils so it was less clever and more useful. But that is a story for
another time.
Tweak search admin page

This does three things:

1. pulls Records from uncached because when they were cached, then from
   the admin page you couldn't tell if the task didn't kick off or if
   you were getting cached data.

2. moves Record creating out of the try/except block.

3. if the process fails, it updates the Record so we know it failed. we'll
   get an email with the real data, but this is very nice for historical
   reasons.
[bug 745473] Fix typo

pyes switched from indices to indexes (or vice versa--I can't remember).
Point being that we were using the wrong one the result of which being
that it used the default index created with the ES object which calculates
the index name differently. Ugh.

This fixes that by changing the argument from indices to indexes. Now it
uses the one calculated in get_documents and all is well.

This also adds a test for get_documents.

And while doing that, I tidied up the import statements.
[bug 735750] Update font styles.
[bug 699239] Bubble "update needed" to top of list

Fixes Template readout on the localization dashboard such that templates
that need translations get bubbled to the top of the list. Previously,
you'd have to click on the "All templates..." link to see them all to
see whether any translations needed updating. Lame.
Tweak template translation status sorting

This sorts by whether it needs a translation as well as the status
class. Thus the important stuff is on top, the less important stuff
is next, and the stuff that's all fine shows up last.
[bug 690610] Fixes faux "fine" fact

This fixes the edge case where a translated document only has revisions
that were reviewed and rejected. Previously, that translated document
would show up as the "hey--everything's super!" green circle. Now it
shows up as the daunting "yo! i'm untranslated!" red triangle.
[bug 727714] Discount askers replies when counting contributors (KPI).

* When an asker replies to own question, the reply will not count towards contributions.
Refactor API calls in tests. DRYer
[bug 746611] Reminders signup page for MozCamp.
[741801] Update test_json

* fixes the client stuff which removes some repeated lines
* switches from SphinxTestCase to ElasticTestCase
[741801] Create test_sphinx, move tests over

I moved a bunch of tests over to test_sphinx which still uses fixtures,
but when we're done with Sphinx we delete the file and we're golden.

There were a handful of tests that tested the search view and were
search system agnostic. So I kept these in test_search and tweaked
them so they didn't use fixtures.

So now we have test_search.py which is search system agmostic,
test_sphinx.py which has Sphinx-specific things, and test_es.py which
has ES-specific things.
[741801] Fix Sphinx and ES tests to skip

If sphinx isn't installed or configured, then this will skip tests that
require it.

Previously, it would only skip tests if SPHINX_SEARCHD or SPHINX_INDEXER
weren't defined in settings, but since they are defined in settings.py, that
was never the case unless you explicitly undefine them in settings_test.py.

Now it also looks to see if the set paths exist and if not, it skips them.

This fixes the ES test case, too. Moves the ElasticTestCase class it from
the sumo app to the search app and fixes it so it checks to see if ES is
running and if not, skips ES related tests.