123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- <?php
- if (!defined('STATUSNET')) {
-
-
- exit(1);
- }
- define('NOTICE_TITLE_PLUGIN_VERSION', '0.1');
- class NoticeTitlePlugin extends Plugin
- {
-
-
-
- public $restricted = false;
-
- function onCheckSchema()
- {
- $schema = Schema::get();
-
- $schema->ensureTable('notice_title', Notice_title::schemaDef());
- return true;
- }
-
- function onPluginVersion(array &$versions)
- {
- $url = 'https://git.gnu.io/gnu/gnu-social/tree/master/plugins/NoticeTitle';
- $versions[] = array('name' => 'NoticeTitle',
- 'version' => NOTICE_TITLE_PLUGIN_VERSION,
- 'author' => 'Evan Prodromou',
- 'homepage' => $url,
- 'rawdescription' =>
-
- _m('Adds optional titles to notices.'));
- return true;
- }
-
- function onStartShowNoticeFormData($form)
- {
- 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;
- }
-
- function onStartNoticeSaveWeb(Action $action, Profile $author, &$content, &$options)
- {
- $title = $action->trimmed('notice_title');
- if (!empty($title) && $this->isAllowedRichEdit()) {
- if (mb_strlen($title) > Notice_title::MAXCHARS) {
-
-
- 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;
- }
-
- function onEndNoticeSaveWeb($action, $notice)
- {
- if (!empty($notice)) {
- $title = $action->trimmed('notice_title');
- if (!empty($title) && $this->isAllowedRichEdit()) {
- $nt = new Notice_title();
- $nt->notice_id = $notice->id;
- $nt->title = $title;
- $nt->insert();
- }
- }
- return true;
- }
-
- function onStartShowNoticeTitle(NoticeListItem $nli)
- {
- $title = Notice_title::fromNotice($nli->notice);
- if (!empty($title)) {
- $nli->elementStart('h4', array('class' => 'p-name'));
- $nli->element('a', array('href' => $nli->notice->getUrl()), $title);
- $nli->elementEnd('h4');
- return false;
- }
- return true;
- }
-
- function onEndRssEntryArray($notice, &$entry)
- {
- $title = Notice_title::fromNotice($notice);
- if (!empty($title)) {
- $entry['title'] = $title;
- }
- return true;
- }
-
- function onEndNoticeAsActivity(Notice $stored, Activity $act, Profile $scoped=null)
- {
- $title = Notice_title::fromNotice($stored);
- if (!empty($title)) {
- foreach ($act->objects as $obj) {
- if ($obj->id == $stored->getUri()) {
- $obj->title = $title;
- break;
- }
- }
- }
- return true;
- }
-
- function onNoticeDeleteRelated($notice)
- {
- $nt = Notice_title::getKV('notice_id', $notice->id);
- if (!empty($nt)) {
- $nt->delete();
- }
- return true;
- }
-
- function onStartShowHeadTitle($action)
- {
- $actionName = $action->trimmed('action');
- if ($actionName == 'shownotice') {
- $title = Notice_title::fromNotice($action->notice);
- if (!empty($title)) {
- $action->element('title', null,
-
- sprintf(_m("%1\$s - %2\$s"),
- $title,
- common_config('site', 'name')));
- }
- }
- return true;
- }
-
- function onGetNoticeTitle(Notice $notice, &$title)
- {
- $title = Notice_title::fromNotice($notice);
- if (!is_null($title)) {
- return false;
- }
- return true;
- }
-
- private function isAllowedRichEdit()
- {
- if ($this->restricted) {
- $user = common_current_user();
- return !empty($user) && $user->hasRole('richedit');
- } else {
- return true;
- }
- }
- }
|