Together with this, refactoring and cleanup of search_references() and
similar methods was done. SQL was improved to use the INNER JOIN instead
of the LEFT JOIN as we are really interested in records that have a
reference. Also, joining the {repository_instances} table assures that
only references with valid repository_instance are returned (the check
against is_external_file() can't be applied to the methods that return
the count of references so I dropped it completely).
The combination of repositoryid and reference field is supposed to be a
unique identification of an external file. Because the reference is a
TEXT field, we can't use it to compose the index. So we use the
referencehash instead and the file API is responsible to keep it
up-to-date.
This patch unifies the way how records in {files_reference} get created.
Previously, each reference file (i.e. a file with referencefileid set)
created its own record in {files_reference}. This patch makes sure that
existing record is reused if possible.
Bye bye 1:1 relationships, you suck!
This replaces the previously defined external_file_exception that was
not used anywhere in the code. The new exception will be thrown in
situations where there is some unexpected problem detected with the
records in the {files_reference} table (e.g. unable to find a record
referenced by some file from {file}, invalid reference value etc.)
- changed function repository::copy_to_area so it accepts more file attributes, pass changed attributes to it
- changed file_info::copy_to_storage and file_info_stored::copy_to_storage to accept more file attributes
- simplified file size check for moodle files in repository/repository_ajax.php
- removed unused code in repository/repository_ajax.php
This commit moves from the batch SCOPE_IDENTITY() way to return
the inserted ids to the OUTPUT alternative (supported and
recommended since 2005). Also the handling of possible return
values is improved, with all the alternatives leading to expected results.
Updated the various plugins to use OAuth 2.0 for authentication
against google apis. Google are phasing out AuthSub and pushing OAuth as
the replacement.
This changes repository_googledocs, repository_picasa,
portfolio_googledocs and portfolio_picasa
The token for requests is now stored in session rather than a user
prefence and it persists less but doesn't bother the user more than
necessary.
The google docs portfolio plugin is converted to use resumable upload
API as this appears to be what Google have replaced this with.
Unfortunately unlike authsub OAuth will require some setup by admins,
this is linked as a docs page.
A generic OAuth 2.0 for the web application flow, tested against
microsoft and google apis.
Added a callback endpoint for requests so that clients can use a single
endpoint (without GET params). I put this in /admin/ as I expect some
sites will have .htaccess denying access to /lib/.