X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FNoticeTitle%2FNoticeTitlePlugin.php;h=1b910cc4084045c5f1718fcfb02780a9ac5ab40b;hb=6e481d35edf41fbce4ba0d8247f7c17b6369de1f;hp=f7fb1e4d00129aa0883f62c4fe4959f3cbf64d4c;hpb=11661e62dfebf8702b63a159161c618ba8707ef3;p=quix0rs-gnu-social.git diff --git a/plugins/NoticeTitle/NoticeTitlePlugin.php b/plugins/NoticeTitle/NoticeTitlePlugin.php index f7fb1e4d00..1b910cc408 100644 --- a/plugins/NoticeTitle/NoticeTitlePlugin.php +++ b/plugins/NoticeTitle/NoticeTitlePlugin.php @@ -48,9 +48,14 @@ define('NOTICE_TITLE_PLUGIN_VERSION', '0.1'); * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - 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 * @@ -61,49 +66,15 @@ class NoticeTitlePlugin extends Plugin * * @return boolean hook value; true means continue processing, false means stop. */ - function onCheckSchema() { $schema = Schema::get(); // For storing titles for notices - - $schema->ensureTable('notice_title', - array(new ColumnDef('notice_id', - 'integer', - null, - true, - 'PRI'), - new ColumnDef('title', - 'varchar', - Notice_title::MAXCHARS, - false))); - + $schema->ensureTable('notice_title', Notice_title::schemaDef()); return true; } - /** - * Load related modules when needed - * - * @param string $cls Name of the class to be loaded - * - * @return boolean hook value; true means continue processing, false means stop. - */ - - function onAutoload($cls) - { - $dir = dirname(__FILE__); - - switch ($cls) - { - case 'Notice_title': - include_once $dir . '/'.$cls.'.php'; - return false; - default: - return true; - } - } - /** * Provide plugin version information. * @@ -113,7 +84,6 @@ class NoticeTitlePlugin extends Plugin * * @return boolean hook value */ - function onPluginVersion(&$versions) { $url = 'http://status.net/wiki/Plugin:NoticeTitle'; @@ -123,7 +93,8 @@ class NoticeTitlePlugin extends Plugin 'author' => 'Evan Prodromou', 'homepage' => $url, 'rawdescription' => - _m('Adds optional titles to notices')); + // TRANS: Plugin description. + _m('Adds optional titles to notices.')); return true; } @@ -134,17 +105,18 @@ class NoticeTitlePlugin extends Plugin * * @return boolean hook value */ - function onStartShowNoticeFormData($form) { - $form->out->element('style', - null, - 'label#notice_data-text-label { display: none }'); - $form->out->element('input', array('type' => 'text', - 'id' => 'notice_title', - 'name' => 'notice_title', - 'size' => 40, - 'maxlength' => Notice_title::MAXCHARS)); + if ($this->isAllowedRichEdit()) { + $form->out->element('style', + null, + 'label#notice_data-text-label { display: none }'); + $form->out->element('input', array('type' => 'text', + 'id' => 'notice_title', + 'name' => 'notice_title', + 'size' => 40, + 'maxlength' => Notice_title::MAXCHARS)); + } return true; } @@ -158,14 +130,17 @@ class NoticeTitlePlugin extends Plugin * * @return boolean hook value */ - function onStartNoticeSaveWeb($action, &$authorId, &$text, &$options) { $title = $action->trimmed('notice_title'); - if (!empty($title)) { + if (!empty($title) && $this->isAllowedRichEdit()) { if (mb_strlen($title) > Notice_title::MAXCHARS) { - throw new Exception(sprintf(_m("Notice title too long (max %d)", - Notice_title::MAXCHARS))); + // TRANS: Exception thrown when a notice title is too long. + // TRANS: %d is the maximum number of characters allowed in a title (used for plural). + throw new Exception(sprintf(_m('The notice title is too long (maximum %d character).', + 'The notice title is too long (maximum %d characters).', + Notice_title::MAXCHARS), + Notice_title::MAXCHARS)); } } return true; @@ -179,14 +154,13 @@ class NoticeTitlePlugin extends Plugin * * @return boolean hook value */ - function onEndNoticeSaveWeb($action, $notice) { if (!empty($notice)) { $title = $action->trimmed('notice_title'); - if (!empty($title)) { + if (!empty($title) && $this->isAllowedRichEdit()) { $nt = new Notice_title(); @@ -207,13 +181,15 @@ class NoticeTitlePlugin extends Plugin * * @return boolean hook value */ - - function onStartShowNoticeItem($nli) + function onStartShowNoticeTitle(NoticeListItem $nli) { $title = Notice_title::fromNotice($nli->notice); if (!empty($title)) { - $nli->out->element('h4', array('class' => 'notice_title'), $title); + $nli->elementStart('h4', array('class' => 'p-name')); + $nli->element('a', array('href' => $nli->notice->getUrl()), $title); + $nli->elementEnd('h4'); + return false; } return true; @@ -227,7 +203,6 @@ class NoticeTitlePlugin extends Plugin * * @return boolean hook value */ - function onEndRssEntryArray($notice, &$entry) { $title = Notice_title::fromNotice($notice); @@ -242,19 +217,23 @@ class NoticeTitlePlugin extends Plugin /** * Show the notice title in Atom output * - * @param Notice &$notice Notice being shown - * @param XMLStringer &$xs output context - * @param string &$output string to be output as title + * @param Notice $notice Notice being shown + * @param Activity $act Activity object to be modified + * @param Profile $scoped Currently logged in/scoped profile * * @return boolean hook value */ - - function onStartActivityTitle(&$notice, &$xs, &$output) + function onEndNoticeAsActivity(Notice $stored, Activity $act, Profile $scoped=null) { - $title = Notice_title::fromNotice($notice); + $title = Notice_title::fromNotice($stored); if (!empty($title)) { - $output = $title; + foreach ($act->objects as $obj) { + if ($obj->id == $stored->getUri()) { + $obj->title = $title; + break; + } + } } return true; @@ -267,10 +246,9 @@ class NoticeTitlePlugin extends Plugin * * @return boolean hook value */ - function onNoticeDeleteRelated($notice) { - $nt = Notice_title::staticGet('notice_id', $notice->id); + $nt = Notice_title::getKV('notice_id', $notice->id); if (!empty($nt)) { $nt->delete(); @@ -278,5 +256,66 @@ class NoticeTitlePlugin extends Plugin return true; } -} + /** + * If a notice has a title, show it in the element + * + * @param Action $action Action being executed + * + * @return boolean hook value + */ + function onStartShowHeadTitle($action) + { + $actionName = $action->trimmed('action'); + + if ($actionName == 'shownotice') { + $title = Notice_title::fromNotice($action->notice); + if (!empty($title)) { + $action->element('title', null, + // TRANS: Page title. %1$s is the title, %2$s is the site name. + sprintf(_m("%1\$s - %2\$s"), + $title, + common_config('site', 'name'))); + } + } + + return true; + } + + /** + * If a notice has a title, show it in the <h1> element + * + * @param Notice $notice Notice we're getting the title for + * @param string $title Reference to the variable which we set to the notice's title + * + * @return boolean hook value + */ + function onGetNoticeTitle(Notice $notice, &$title) + { + $title = Notice_title::fromNotice($notice); + if (!is_null($title)) { + return false; + } + + 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. + * + * @todo 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; + } + } +}