]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
First stab redoing argument loading for TinyMCE (to avoid hacking checks for all...
authorBrion Vibber <brion@status.net>
Tue, 10 Aug 2010 23:55:03 +0000 (16:55 -0700)
committerBrion Vibber <brion@status.net>
Tue, 10 Aug 2010 23:55:03 +0000 (16:55 -0700)
actions/newnotice.php
plugins/TinyMCE/TinyMCEPlugin.php

index 748d104ff9391de95bd017d1014dc2eb311a5e23..5e682ffd0577908c0f4e57bb70a7be0d420a4898 100644 (file)
@@ -203,6 +203,7 @@ class NewnoticeAction extends Action
             $options = array_merge($options, $locOptions);
         }
 
+        Event::handle('SaveNewNoticeWeb', array($this, $user, &$content_shortened, &$options));
         $notice = Notice::saveNew($user->id, $content_shortened, 'web', $options);
 
         if (isset($upload)) {
index 3a7656d32c862c1f1edd3b73b952c2869f811757..8dc1d8a5829f0c7437378c50ce8f49b53b231a8e 100644 (file)
@@ -78,36 +78,48 @@ class TinyMCEPlugin extends Plugin
         return true;
     }
 
-    function onArgsInitialize(&$args)
+    /**
+     * Sanitize HTML input and strip out potentially dangerous bits.
+     *
+     * @param string $raw HTML
+     * @return string HTML
+     */
+    private function sanitizeHtml($raw)
     {
-        if (!array_key_exists('action', $args) ||
-            $args['action'] != 'newnotice') {
-            return true;
-        }
-
-        $raw = $this->_scrub($args['status_textarea']);
-
         require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
 
         $config = array('safe' => 1,
                         'deny_attribute' => 'id,style,on*');
 
-        $this->html = htmLawed($raw, $config);
-
-        $text = html_entity_decode(strip_tags($this->html));
-
-        $args['status_textarea'] = $text;
-
-        return true;
+        return htmLawed($raw, $config);
     }
 
-    function onStartNoticeSave($notice)
+    /**
+     * Strip HTML to plaintext string
+     *
+     * @param string $html HTML
+     * @return string plaintext, single line
+     */
+    private function stripHtml($html)
     {
-        if (!empty($this->html)) {
-            // Stomp on any rendering
-            $notice->rendered = $this->html;
-        }
+        return str_replace("\n", " ", html_entity_decode(strip_tags($html)));
+    }
 
+    /**
+     * Hook for new-notice form processing to take our HTML goodies;
+     * won't affect API posting etc.
+     * 
+     * @param NewNoticeAction $action
+     * @param User $user
+     * @param string $content
+     * @param array $options
+     * @return boolean hook return
+     */
+    function onSaveNewNoticeWeb($action, $user, &$content, &$options)
+    {
+        $html = $this->sanitizeHtml($action->arg('status_textarea'));
+        $options['rendered'] = $html;
+        $content = $this->stripHtml($html);
         return true;
     }
 
@@ -135,15 +147,5 @@ END_OF_SCRIPT;
 
         return $scr;
     }
-
-    function _scrub($txt)
-    {
-        $strip = get_magic_quotes_gpc();
-        if ($strip) {
-            return stripslashes($txt);
-        } else {
-            return $txt;
-        }
-    }
 }