Restore the extensions documentation for 1.7.

We moved the extensions docs out of the codebase docs, but this left 1.7
users with no way to get to the new docs. This restores the old docs,
but under the 1.7 manual.
Implement drag and drop on admin site (back end)

The user can now customize their dashboard by dragging and dropping widgets to
move them around.

Testing Done:
I opened Review Board on two different browsers, Chrome and Firefox, and logged
in as the same user on both browsers. On the Chrome browser, I visited the
admin dashboard and changed the ordering of the widgets with drag-and-drop. On
the Firefox browser, I also visited the admin dashboard, and I checked to make
sure that the positions of the widgets were the same on both browsers,
indicating that the positions had been saved on the back end side.

Reviewed at https://reviews.reviewboard.org/r/5528/
LDAP: Handle upgrades from 1.7.x

The new LDAP configuration is much better, but it broke when upgrading existing
configurations from 1.7.x. This change adds some migration for old settings.

Testing Done:
Configured LDAP with ReviewBoard 1.7.21, then upgraded to ReviewBoard 2.0rc1
with this patch.

Also tested manually editing the siteconfig_sitconfiguration database table to
verify that it was properly updated on ReviewBoard start-up.

Reviewed at https://reviews.reviewboard.org/r/5605/
Handle the inability to load the siteconfig better.

My changes to automatically apply https based on the siteconfig made the
experience a bit worse when there was a problem loading said siteconfig. The
major problem was that load_siteconfig() would return silently if there was
some unexpected error. This wasn't a huge issue before, but now that we have
middleware that needs the siteconfig to load, it was showing me at
AttributeError for NoneType.

I've added some logging to load_siteconfig, and changed the middleware to pass
through if it couldn't load.

Testing done:
Tried to run my devserver against a mysql server which wasn't running. Saw the
error in the log about loading siteconfig, and saw that instead of getting a
weird AttributeError in my browser, I saw an error about the sql server.

Reviewed at https://reviews.reviewboard.org/r/5604/
Improve testing infrastructure reusability for the web API.

The testing infrastructure was fine for the Review Board API tests, but
wasn't as nice to work with for anything else that wanted to reuse the
test infrastructure. In particular, the assumption was made that all
APIs can be bound to a Local Site, but this isn't always true.

This assumption has been removed. The default is still to test APIs
against a Local Site, but by setting `test_local_sites = False`, this
will be turned off.

Along with this, create_repository() can now accept a `local_site=`
parameter, and subclasses of BaseWebAPITestCase can now override the
mimetype for expected errors.
Pass **kwargs to get_href_parent_ids in WebAPIResource.

This is a trivial counterpart to a new change in Djblets for passing the
list of keyword arguments to get_href_parent_ids. This allows subclasses
to have more information when overriding this function.
Allow overriding of the ID attribute in JavaScript API resource URLs.

When computing the URL of a resource, we assumed the object's standard
ID was used to represent that resource in the URL. This isn't always the
case, such as for users and groups.

Resources can now set 'urlIDAttr' to a value representing the attribute
that contains the ID used for the URL.
Merge branch 'release-2.0.x'
Switch the My Account page to use the new Djblets Config Forms code.

This places the My Account page classes on top of the Config Forms
codebase. Config Forms takes care of all the actual rendering and
management of pages. The My Account classes handle the registration and
additional work needed by the page. No functionality or presentation
has changed.
Fix one more unicode issue in diffs.

Most of our unicode issues have been fixed, but there was one lingering in the
interdiff code. Trivial fix.

Fixes bug 3291.
Fix some bugs with post-commit creation with subvertpy.

The subvertpy backend for post-commit review request creation had a bug where
it was passing in a string for the base revision to the diff method. This is
fixed easily enough by ensuring that revisions are ints.

While I was doing this, I found that trying to create post-commit review
requests for commits which are in a protected part of the repository (such as
security fixes in the ASF repo) would show the user a dialog that says "HTTP
Error 500". I've converted exceptions in the diff method to SCMError, which
will at least log and return something slightly less ugly to the user.

Testing done:
Created some post-commit review requests for commits in the WordPress and ASF
repositories.

Reviewed at https://reviews.reviewboard.org/r/5623/
Add "Show SSH Public Key" to new repository form (1.7)

The admin templates are kind of annoying in that if the object doesn't exist
yet, they don't include the object-tools-items block. This meant that the "Show
SSH Public Key" link wasn't shown for the "Add Repository" form.

This change overrides the object-tools block (instead of object-tools-items) to
unconditionally include the <ul>.

Testing done:
Looked at both the "Add Repository" and "Change Repository" forms. Saw that the
SSH key link was present and functional for both.

Fixes bug 3262.

Reviewed at https://reviews.reviewboard.org/r/5626/
Add "Show SSH Public Key" to new repository form (2.0)

The admin templates are kind of annoying in that if the object doesn't exist
yet, they don't include the object-tools-items block. This meant that the "Show
SSH Public Key" link wasn't shown for the "Add Repository" form.

This change overrides the object-tools block (instead of object-tools-items) to
unconditionally include the <ul>.

Testing done:
Looked at both the "Add Repository" and "Change Repository" forms. Saw that the
SSH key link was present and functional for both.

Fixes bug 3262.

Reviewed at https://reviews.reviewboard.org/r/5627/
Update Review Board for the DataGrid state changes.

Datagrids now have a separation of state and definition. This requires
some changes in Column subclasses to make use of the new state
parameters.

As part of the new fixes, we're also able to fix sorting of the review
request ID column, which broke in RC 1.
Merge branch 'release-1.7.x' into release-2.0.x
Merge remote-tracking branch 'origin/release-2.0.x' into release-2.0.x
Merge branch 'release-2.0.x'