From 821770966bc6f2c36ad27b65a5e6eed212c64267 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 28 Dec 2010 12:58:10 -0800 Subject: [PATCH] Page with a list of notices that link to an URL --- plugins/Bookmark/BookmarkPlugin.php | 8 +- plugins/Bookmark/noticebyurl.php | 163 ++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 plugins/Bookmark/noticebyurl.php diff --git a/plugins/Bookmark/BookmarkPlugin.php b/plugins/Bookmark/BookmarkPlugin.php index a5ec0f098a..a6ee92f026 100644 --- a/plugins/Bookmark/BookmarkPlugin.php +++ b/plugins/Bookmark/BookmarkPlugin.php @@ -157,6 +157,7 @@ class BookmarkPlugin extends Plugin case 'ShowbookmarkAction': case 'NewbookmarkAction': case 'BookmarkpopupAction': + case 'NoticebyurlAction': include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; case 'Bookmark': @@ -186,7 +187,8 @@ class BookmarkPlugin extends Plugin array('action' => 'newbookmark'), array('id' => '[0-9]+')); - $m->connect('main/bookmark/popup', array('action' => 'bookmarkpopup')); + $m->connect('main/bookmark/popup', + array('action' => 'bookmarkpopup')); $m->connect('bookmark/:user/:created/:crc32', array('action' => 'showbookmark'), @@ -194,6 +196,10 @@ class BookmarkPlugin extends Plugin 'created' => '[0-9]{14}', 'crc32' => '[0-9a-f]{8}')); + $m->connect('notice/by-url/:id', + array('action' => 'noticebyurl'), + array('id' => '[0-9]+')); + return true; } diff --git a/plugins/Bookmark/noticebyurl.php b/plugins/Bookmark/noticebyurl.php new file mode 100644 index 0000000000..9fc480b62d --- /dev/null +++ b/plugins/Bookmark/noticebyurl.php @@ -0,0 +1,163 @@ +. + * + * @category Bookmark + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * List notices that contain/link to/use a given URL + * + * @category Bookmark + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class NoticebyurlAction extends Action +{ + protected $url = null; + protected $file = null; + protected $notices = null; + protected $page = null; + + /** + * For initializing members of the class. + * + * @param array $argarray misc. arguments + * + * @return boolean true + */ + + function prepare($argarray) + { + parent::prepare($argarray); + + $this->file = File::staticGet('id', $this->trimmed('id')); + + if (empty($this->file)) { + throw new ClientException(_('Unknown URL')); + } + + $pageArg = $this->trimmed('page'); + + $this->page = (empty($pageArg)) ? 1 : intval($pageArg); + + $this->notices = $this->file->stream(($this->page - 1) * NOTICES_PER_PAGE, + NOTICES_PER_PAGE + 1); + + return true; + } + + function title() + { + if ($this->page == 1) { + return sprintf(_("Notices linking to %s"), $this->file->url); + } else { + return sprintf(_("Notices linking to %s, page %d"), + $this->file->url, + $this->page); + } + } + + /** + * Handler method + * + * @param array $argarray is ignored since it's now passed in in prepare() + * + * @return void + */ + + function handle($argarray=null) + { + $this->showPage(); + } + + function showContent() + { + $nl = new NoticeList($this->notices, $this); + + $nl->show(); + + $cnt = $nl->show(); + + $this->pagination($this->page > 1, + $cnt > NOTICES_PER_PAGE, + $this->page, + 'noticebyurl', + array('id' => $this->file->id)); + } + + /** + * Return true if read only. + * + * MAY override + * + * @param array $args other arguments + * + * @return boolean is read only action? + */ + + function isReadOnly($args) + { + return true; + } + + /** + * Return last modified, if applicable. + * + * MAY override + * + * @return string last modified http header + */ + function lastModified() + { + // For comparison with If-Last-Modified + // If not applicable, return null + return null; + } + + /** + * Return etag, if applicable. + * + * MAY override + * + * @return string etag http header + */ + + function etag() + { + return null; + } +}