X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FTinyMCE%2FTinyMCEPlugin.php;h=08da1048fc12f282fee1cac7988c904bd13b6836;hb=1111187d845ecd34eba1c03473f6adbc08f6ca15;hp=ca16f60591de8ef42b7cc17a14a5bfb6a6648123;hpb=7407754c2714248eebc995412a3aee881df2a238;p=quix0rs-gnu-social.git diff --git a/plugins/TinyMCE/TinyMCEPlugin.php b/plugins/TinyMCE/TinyMCEPlugin.php index ca16f60591..08da1048fc 100644 --- a/plugins/TinyMCE/TinyMCEPlugin.php +++ b/plugins/TinyMCE/TinyMCEPlugin.php @@ -1,5 +1,4 @@ @@ -48,12 +51,16 @@ if (!defined('STATUSNET')) { */ class TinyMCEPlugin extends Plugin { - var $html; + // By default, TinyMCE editor will be available to all users. + // With restricted on, only users who have been granted the + // "richedit" role get it. + public $restricted = false; + function onEndShowScripts($action) { - if (common_logged_in ()) { + if (common_logged_in() && $this->isAllowedRichEdit()) { $action->script(common_path('plugins/TinyMCE/js/jquery.tinymce.js')); $action->inlineScript($this->_inlineScript()); } @@ -63,18 +70,21 @@ class TinyMCEPlugin extends Plugin function onEndShowStyles($action) { - $action->style('span#notice_data-text_container, span#notice_data-text_parent { float: left }'); + if ($this->isAllowedRichEdit()) { + $action->style('span#notice_data-text_container, span#notice_data-text_parent { float: left }'); + } return true; } function onPluginVersion(&$versions) { $versions[] = array('name' => 'TinyMCE', - 'version' => STATUSNET_VERSION, + 'version' => GNUSOCIAL_VERSION, 'author' => 'Evan Prodromou', 'homepage' => 'http://status.net/wiki/Plugin:TinyMCE', 'rawdescription' => - _m('Use TinyMCE library to allow rich text editing in the browser')); + // TRANS: Plugin description. + _m('Use TinyMCE library to allow rich text editing in the browser.')); return true; } @@ -94,21 +104,10 @@ class TinyMCEPlugin extends Plugin return htmLawed($raw, $config); } - /** - * Strip HTML to plaintext string - * - * @param string $html HTML - * @return string plaintext, single line - */ - private function stripHtml($html) - { - return str_replace("\n", " ", html_entity_decode(strip_tags($html), ENT_QUOTES, 'UTF-8')); - } - /** * 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 @@ -117,10 +116,10 @@ class TinyMCEPlugin extends Plugin */ function onStartSaveNewNoticeWeb($action, $user, &$content, &$options) { - if ($action->arg('richedit')) { + if ($action->arg('richedit') && $this->isAllowedRichEdit()) { $html = $this->sanitizeHtml($content); $options['rendered'] = $html; - $content = $this->stripHtml($html); + $content = common_strip_html($html); } return true; } @@ -136,7 +135,7 @@ class TinyMCEPlugin extends Plugin */ function onStartSaveNewNoticeAppendAttachment($action, $media, &$content, &$options) { - if ($action->arg('richedit')) { + if ($action->arg('richedit') && $this->isAllowedRichEdit()) { // See if we've got a placeholder inline image; if so, fill it! $dom = new DOMDocument(); @@ -159,9 +158,9 @@ class TinyMCEPlugin extends Plugin /** * Format the attachment placeholder img with the final version. - * + * * @param DOMElement $img - * @param MediaFile $media + * @param MediaFile $media */ private function formatAttachment($img, $media) { @@ -280,9 +279,14 @@ class TinyMCEPlugin extends Plugin // our AJAX form submission. Manually moving it to trigger // on our send button click. $scr = <<'); - $('#notice_action-submit').click(function() { + form.find('.submit:first').click(function() { tinymce.triggerSave(); }); @@ -309,17 +313,36 @@ class TinyMCEPlugin extends Plugin SN.U.Counter(noticeForm); }); - $('#'+SN.C.S.NoticeDataAttach).change(function() { + form.find('input[type=file]').change(function() { var img = ''; var html = tinyMCE.activeEditor.getContent(); ed.setContent(html + img); }); } }); - }); + }; + })(); END_OF_SCRIPT; return $scr; } + /** + * Does the current user have permission to use the rich-text editor? + * Always true unless the plugin's "restricted" setting is on, in which + * case it's limited to users with the "richedit" role. + * + * @fixme make that more sanely configurable :) + * + * @return boolean + */ + private function isAllowedRichEdit() + { + if ($this->restricted) { + $user = common_current_user(); + return !empty($user) && $user->hasRole('richedit'); + } else { + return true; + } + } }