]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/action.php
Remove Google References
[quix0rs-gnu-social.git] / lib / action.php
index 14d0fe80579f70eab7915ce7ff31635b93736d66..284f160e676da39b52247af353d1b90297cd6636 100644 (file)
@@ -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;
     }
@@ -125,11 +138,10 @@ class Action extends HTMLOutputter // lawsuit
             } else {
                 common_debug('Prepare failed for Action.');
             }
-        }
 
-        $this->flush();
-
-        Event::handle('EndActionExecute', array($this));
+            $this->flush();
+            Event::handle('EndActionExecute', array($this));
+        }
     }
 
     /**
@@ -206,7 +218,7 @@ class Action extends HTMLOutputter // lawsuit
      *
      * @return nothing
      */
-    function showPage()
+    public function showPage()
     {
         if (GNUsocial::isAjax()) {
             self::showAjax();
@@ -382,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);
         }
@@ -417,7 +428,6 @@ 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));
             }
@@ -431,6 +441,7 @@ class Action extends HTMLOutputter // lawsuit
                 $this->inlineScript('var _peopletagAC = "' .
                                     common_local_url('peopletagautocomplete') . '";');
                 $this->showScriptMessages();
+                $this->showScriptVariables();
                 // Anti-framing code to avoid clickjacking attacks in older browsers.
                 // This will show a blank page if the page is being framed, which is
                 // consistent with the behavior of the 'X-Frame-Options: SAMEORIGIN'
@@ -460,6 +471,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());
 
@@ -473,6 +485,19 @@ class Action extends HTMLOutputter // lawsuit
         return $messages;
     }
 
+    protected function showScriptVariables()
+    {
+        $vars = array();
+
+        if (Event::handle('StartScriptVariables', array($this, &$vars))) {
+            $vars['urlNewNotice'] = common_local_url('newnotice');
+        }
+        if (!empty($vars)) {
+            $this->inlineScript('SN.V = ' . json_encode($vars));
+        }
+        return $vars;
+    }
+
     /**
      * If the action will need localizable text strings, export them here like so:
      *
@@ -521,15 +546,11 @@ class Action extends HTMLOutputter // lawsuit
      */
     function showFeeds()
     {
-        $feeds = $this->getFeeds();
-
-        if ($feeds) {
-            foreach ($feeds as $feed) {
-                $this->element('link', array('rel' => $feed->rel(),
-                                             'href' => $feed->url,
-                                             'type' => $feed->mimeType(),
-                                             'title' => $feed->title));
-            }
+        foreach ($this->getFeeds() as $feed) {
+            $this->element('link', array('rel' => $feed->rel(),
+                                         'href' => $feed->url,
+                                         'type' => $feed->mimeType(),
+                                         'title' => $feed->title));
         }
     }
 
@@ -1022,9 +1043,9 @@ class Action extends HTMLOutputter // lawsuit
     function showExportData()
     {
         $feeds = $this->getFeeds();
-        if ($feeds) {
-            $fl = new FeedList($this);
-            $fl->show($feeds);
+        if (!empty($feeds)) {
+            $fl = new FeedList($this, $feeds);
+            $fl->show();
         }
     }
 
@@ -1144,7 +1165,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;
@@ -1357,7 +1378,7 @@ class Action extends HTMLOutputter // lawsuit
      * Upstream bug is::
      * https://pear.php.net/bugs/bug.php?id=20291
      */
-    function booleanintstring($key, $def)
+    function booleanintstring($key, $def=false)
     {
         return $this->boolean($key, $def) ? '1' : '0';
     }
@@ -1433,7 +1454,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);
@@ -1461,7 +1484,7 @@ class Action extends HTMLOutputter // lawsuit
         if (!array_key_exists($code, ClientErrorAction::$status)) {
             $code = 400;
         }
-        
+
         $status_string = ClientErrorAction::$status[$code];
 
         switch ($format) {
@@ -1480,7 +1503,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':
@@ -1489,7 +1512,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);
     }
@@ -1645,7 +1670,7 @@ class Action extends HTMLOutputter // lawsuit
      */
     function getFeeds()
     {
-        return null;
+        return array();
     }
 
     /**