Error handling cleanup on backup/restore:

* avoid PHP notice from using wrong variable
* show a visible error instead of blank screen if no file submitted with restore form
* avoid PHP strict warning from using calling "non-static" DOMDocument::loadXML statically
* suppress PHP warning from XML parse errors
This commit is contained in:
Brion Vibber 2010-12-22 11:13:57 -08:00
parent 5abd2b7d0c
commit 754bc1b616

View File

@ -95,7 +95,7 @@ class RestoreaccountAction extends Action
function handle($argarray=null) function handle($argarray=null)
{ {
parent::handle($args); parent::handle($argarray);
if ($this->isPost()) { if ($this->isPost()) {
$this->restoreAccount(); $this->restoreAccount();
@ -143,6 +143,7 @@ class RestoreaccountAction extends Action
return; return;
case UPLOAD_ERR_NO_FILE: case UPLOAD_ERR_NO_FILE:
// No file; probably just a non-AJAX submission. // No file; probably just a non-AJAX submission.
throw new ClientException(_('No uploaded file.'));
return; return;
case UPLOAD_ERR_NO_TMP_DIR: case UPLOAD_ERR_NO_TMP_DIR:
// TRANS: Client exception thrown when a temporary folder is not present to store a file upload. // TRANS: Client exception thrown when a temporary folder is not present to store a file upload.
@ -185,12 +186,19 @@ class RestoreaccountAction extends Action
// This check is costly but we should probably give // This check is costly but we should probably give
// the user some info ahead of time. // the user some info ahead of time.
$doc = new DOMDocument();
$doc = DOMDocument::loadXML($xml); // Disable PHP warnings so we don't spew low-level XML errors to output...
// would be nice if we can just get exceptions instead.
$old_err = error_reporting();
error_reporting($old_err & ~E_WARNING);
$doc->loadXML($xml);
error_reporting($old_err);
$feed = $doc->documentElement; $feed = $doc->documentElement;
if ($feed->namespaceURI != Activity::ATOM || if (!$feed ||
$feed->namespaceURI != Activity::ATOM ||
$feed->localName != 'feed') { $feed->localName != 'feed') {
throw new ClientException(_("Not an atom feed.")); throw new ClientException(_("Not an atom feed."));
} }