Add 'restricted' option to NoticeTitle; if set, only users with 'richedit' role get the fancy extra title field.

This commit is contained in:
Brion Vibber 2010-09-30 13:30:39 -07:00
parent d7f03dab9e
commit 8ad933c86f
1 changed files with 38 additions and 10 deletions

View File

@ -51,6 +51,12 @@ define('NOTICE_TITLE_PLUGIN_VERSION', '0.1');
class NoticeTitlePlugin extends Plugin class NoticeTitlePlugin extends Plugin
{ {
// By default, notice-title widget will be available to all users.
// With restricted on, only users who have been granted the
// "richedit" role get it.
public $restricted = false;
/** /**
* Database schema setup * Database schema setup
* *
@ -137,6 +143,7 @@ class NoticeTitlePlugin extends Plugin
function onStartShowNoticeFormData($form) function onStartShowNoticeFormData($form)
{ {
if ($this->isAllowedRichEdit()) {
$form->out->element('style', $form->out->element('style',
null, null,
'label#notice_data-text-label { display: none }'); 'label#notice_data-text-label { display: none }');
@ -145,6 +152,7 @@ class NoticeTitlePlugin extends Plugin
'name' => 'notice_title', 'name' => 'notice_title',
'size' => 40, 'size' => 40,
'maxlength' => Notice_title::MAXCHARS)); 'maxlength' => Notice_title::MAXCHARS));
}
return true; return true;
} }
@ -162,7 +170,7 @@ class NoticeTitlePlugin extends Plugin
function onStartNoticeSaveWeb($action, &$authorId, &$text, &$options) function onStartNoticeSaveWeb($action, &$authorId, &$text, &$options)
{ {
$title = $action->trimmed('notice_title'); $title = $action->trimmed('notice_title');
if (!empty($title)) { if (!empty($title) && $this->isAllowedRichEdit()) {
if (mb_strlen($title) > Notice_title::MAXCHARS) { if (mb_strlen($title) > Notice_title::MAXCHARS) {
throw new Exception(sprintf(_m("The notice title is too long (max %d characters).", throw new Exception(sprintf(_m("The notice title is too long (max %d characters).",
Notice_title::MAXCHARS))); Notice_title::MAXCHARS)));
@ -186,7 +194,7 @@ class NoticeTitlePlugin extends Plugin
$title = $action->trimmed('notice_title'); $title = $action->trimmed('notice_title');
if (!empty($title)) { if (!empty($title) && $this->isAllowedRichEdit()) {
$nt = new Notice_title(); $nt = new Notice_title();
@ -327,4 +335,24 @@ class NoticeTitlePlugin extends Plugin
return true; return true;
} }
/**
* Does the current user have permission to use the notice-title widget?
* 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;
}
}
} }