X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Faction.php;h=fc7f0a06dde20954d7ff68cc19e5d4a9f206d927;hb=5e7a7701b94ee63927750064a39b188d9e17164a;hp=29fadbf8836894c989064860000652653788fbd5;hpb=e6507a0f180bfe70d36599c4c269eb3b08b9f61d;p=quix0rs-gnu-social.git diff --git a/lib/action.php b/lib/action.php index 29fadbf883..fc7f0a06dd 100644 --- a/lib/action.php +++ b/lib/action.php @@ -95,9 +95,22 @@ class Action extends HTMLOutputter // lawsuit return $this->msg; } + public function handleError($e) + { + if ($e instanceof ClientException) { + $this->clientError($e->getMessage(), $e->getCode()); + } elseif ($e instanceof ServerException) { + $this->serverError($e->getMessage(), $e->getCode()); + } else { + // If it wasn't specified more closely which kind of exception it was + $this->serverError($e->getMessage(), 500); + } + } + static public function run(array $args=array(), $output='php://output', $indent=null) { $class = get_called_class(); $action = new $class($output, $indent); + set_exception_handler(array($action, 'handleError')); $action->execute($args); return $action; } @@ -205,7 +218,7 @@ class Action extends HTMLOutputter // lawsuit * * @return nothing */ - function showPage() + public function showPage() { if (GNUsocial::isAjax()) { self::showAjax(); @@ -381,8 +394,7 @@ class Action extends HTMLOutputter // lawsuit { $theme = new Theme($mainTheme); - // Some themes may have external stylesheets, such as using the - // Google Font APIs to load webfonts. + // Some themes may have external stylesheets foreach ($theme->getExternals() as $url) { $this->cssLink($url, $mainTheme, $media); } @@ -416,14 +428,12 @@ class Action extends HTMLOutputter // lawsuit $this->script('extlib/jquery.form.js'); $this->script('extlib/jquery-ui/jquery-ui.js'); $this->script('extlib/jquery.cookie.js'); - $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/extlib/json2.js', GNUsocial::isHTTPS()).'"); }'); Event::handle('EndShowJQueryScripts', array($this)); } if (Event::handle('StartShowStatusNetScripts', array($this))) { $this->script('util.js'); $this->script('xbImportNode.js'); - $this->script('geometa.js'); // This route isn't available in single-user mode. // Not sure why, but it causes errors here. @@ -460,6 +470,7 @@ class Action extends HTMLOutputter // lawsuit // TRANS: Localized tooltip for '...' expansion button on overlong remote messages. $messages['showmore_tooltip'] = _m('TOOLTIP', 'Show more'); + $messages['popup_close_button'] = _m('TOOLTIP', 'Close popup'); $messages = array_merge($messages, $this->getScriptMessages()); @@ -1153,7 +1164,7 @@ class Action extends HTMLOutputter // lawsuit $url = $sslimage; } else if (preg_match('#^http://i.creativecommons.org/#', $image)) { // CC support HTTPS on their images - $url = preg_replace('/^http/', 'https', $image); + $url = preg_replace('/^http/', 'https', $image, 1); } else { // Better to show mixed content than no content $url = $image; @@ -1442,7 +1453,9 @@ class Action extends HTMLOutputter // lawsuit $this->endDocument('json'); break; default: - throw new ServerException($msg, $code); + common_log(LOG_ERR, 'Handled serverError ('._ve($code).') but cannot output into desired format ('._ve($this->format).'): '._ve($msg)); + $action = new ServerErrorAction($msg, $code); + $action->execute(); } exit((int)$code); @@ -1470,7 +1483,7 @@ class Action extends HTMLOutputter // lawsuit if (!array_key_exists($code, ClientErrorAction::$status)) { $code = 400; } - + $status_string = ClientErrorAction::$status[$code]; switch ($format) { @@ -1489,7 +1502,7 @@ class Action extends HTMLOutputter // lawsuit } $this->initDocument('json'); $error_array = array('error' => $msg, 'request' => $_SERVER['REQUEST_URI']); - $this->text(json_encode($error_array)); + print(json_encode($error_array)); $this->endDocument('json'); break; case 'text': @@ -1498,7 +1511,9 @@ class Action extends HTMLOutputter // lawsuit echo $msg; break; default: - throw new ClientException($msg, $code); + common_log(LOG_ERR, 'Handled clientError ('._ve($code).') but cannot output into desired format ('._ve($this->format).'): '._ve($msg)); + $action = new ClientErrorAction($msg, $code); + $action->execute(); } exit((int)$code); }