diff --git a/plugins/Bookmark/BookmarkPlugin.php b/plugins/Bookmark/BookmarkPlugin.php index d23e26697a..c6fe987dc7 100644 --- a/plugins/Bookmark/BookmarkPlugin.php +++ b/plugins/Bookmark/BookmarkPlugin.php @@ -147,6 +147,7 @@ class BookmarkPlugin extends MicroAppPlugin case 'NewbookmarkAction': case 'BookmarkpopupAction': case 'NoticebyurlAction': + case 'BookmarkforurlAction': case 'ImportdeliciousAction': include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; @@ -183,6 +184,9 @@ class BookmarkPlugin extends MicroAppPlugin $m->connect('main/bookmark/import', array('action' => 'importdelicious')); + $m->connect('main/bookmark/forurl', + array('action' => 'bookmarkforurl')); + $m->connect('bookmark/:id', array('action' => 'showbookmark'), array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')); @@ -629,7 +633,7 @@ class BookmarkPlugin extends MicroAppPlugin function entryForm($out) { - return new BookmarkForm($out); + return new InitialBookmarkForm($out); } function tag() diff --git a/plugins/Bookmark/bookmarkform.php b/plugins/Bookmark/bookmarkform.php index b1321a994b..ffeba312ea 100644 --- a/plugins/Bookmark/bookmarkform.php +++ b/plugins/Bookmark/bookmarkform.php @@ -50,6 +50,7 @@ class BookmarkForm extends Form private $_url = null; private $_tags = null; private $_description = null; + private $_thumbnail = null; /** * Construct a bookmark form @@ -63,7 +64,7 @@ class BookmarkForm extends Form * @return void */ function __construct($out=null, $title=null, $url=null, $tags=null, - $description=null) + $description=null, $thumbnail=null) { parent::__construct($out); @@ -71,6 +72,7 @@ class BookmarkForm extends Form $this->_url = $url; $this->_tags = $tags; $this->_description = $description; + $this->_thumbnail = $thumbnail; } /** @@ -113,22 +115,32 @@ class BookmarkForm extends Form $this->out->elementStart('fieldset', array('id' => 'new_bookmark_data')); $this->out->elementStart('ul', 'form_data'); - $this->li(); - $this->out->input('title', - // TRANS: Field label on form for adding a new bookmark. - _m('LABEL','Title'), - $this->_title, - // TRANS: Field title on form for adding a new bookmark. - _m('Title of the bookmark.')); - $this->unli(); - $this->li(); $this->out->input('url', // TRANS: Field label on form for adding a new bookmark. _m('LABEL','URL'), - $this->_url, - // TRANS: Field title on form for adding a new bookmark. - _m('URL to bookmark.')); + $this->_url); + $this->unli(); + + if (!empty($this->_thumbnail)) { + $this->out->element('img', + array('src' => $this->_thumbnail->url, + 'width' => $this->_thumbnail->width, + 'height' => $this->_thumbnail->height)); + } + + $this->li(); + $this->out->input('title', + // TRANS: Field label on form for adding a new bookmark. + _m('LABEL','Title'), + $this->_title); + $this->unli(); + + $this->li(); + $this->out->textarea('description', + // TRANS: Field label on form for adding a new bookmark. + _m('LABEL','Notes'), + $this->_description); $this->unli(); $this->li(); @@ -140,15 +152,6 @@ class BookmarkForm extends Form _m('Comma- or space-separated list of tags.')); $this->unli(); - $this->li(); - $this->out->input('description', - // TRANS: Field label on form for adding a new bookmark. - _m('LABEL','Description'), - $this->_description, - // TRANS: Field title on form for adding a new bookmark. - _m('Description of the URL.')); - $this->unli(); - $this->out->elementEnd('ul'); $toWidget = new ToSelector($this->out, diff --git a/plugins/Bookmark/bookmarkforurl.php b/plugins/Bookmark/bookmarkforurl.php new file mode 100644 index 0000000000..cff6408191 --- /dev/null +++ b/plugins/Bookmark/bookmarkforurl.php @@ -0,0 +1,129 @@ +. + * + * @category Bookmark + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 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); +} + +/** + * Returns a prefilled bookmark form for a given URL + * + * @category Bookmark + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class BookmarkforurlAction extends Action +{ + protected $url; + protected $oembed; + protected $thumbnail; + + /** + * For initializing members of the class. + * + * @param array $args misc. arguments + * + * @return boolean true + */ + function prepare($args) + { + parent::prepare($args); + + if (!$this->isPost()) { + throw new ClientException(_('POST only'), 405); + } + + $this->checkSessionToken(); + + $this->url = $this->trimmed('url'); + + if (empty($this->url)) { + throw new ClientException(_('URL is required.'), 400); + } + + if (!Validate::uri($this->url, array('allowed_schemes' => array('http', 'https')))) { + throw new ClientException(_('Invalid URL.'), 400); + } + + $f = File::processNew($this->url); + + if (!empty($f)) { + $this->oembed = File_oembed::staticGet('file_id', $f->id); + if (!empty($this->oembed)) { + $this->title = $this->oembed->title; + } + $this->thumbnail = File_thumbnail::staticGet('file_id', $f->id); + } + + return true; + } + + /** + * Handler method + * + * @param array $args is ignored since it's now passed in in prepare() + * + * @return void + */ + + function handle($args=null) + { + $this->startHTML('text/xml;charset=utf-8'); + $this->elementStart('head'); + $this->element('title', null, _('Bookmark form')); + $this->elementEnd('head'); + $this->elementStart('body'); + $bf = new BookmarkForm($this, $this->title, $this->url, null, null, $this->thumbnail); + $bf->show(); + $this->elementEnd('body'); + $this->elementEnd('html'); + } + + /** + * Return true if read only. + * + * MAY override + * + * @param array $args other arguments + * + * @return boolean is read only action? + */ + + function isReadOnly($args) + { + return false; + } +} diff --git a/plugins/Bookmark/initialbookmarkform.php b/plugins/Bookmark/initialbookmarkform.php new file mode 100644 index 0000000000..f747e05075 --- /dev/null +++ b/plugins/Bookmark/initialbookmarkform.php @@ -0,0 +1,91 @@ +. + * + * @category Form + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 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); +} + +/** + * First bookmark form, with just the URL + * + * @category General + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class InitialBookmarkForm extends Form +{ + function __construct($out=null) + { + parent::__construct($out); + } + + function id() + { + return 'form_initial_bookmark'; + } + + function formClass() + { + return 'form_settings ajax'; + } + + function action() + { + return common_local_url('bookmarkforurl'); + } + + function formData() + { + $this->out->elementStart('fieldset', array('id' => 'initial_bookmark_data')); + $this->out->elementStart('ul', 'form_data'); + + $this->li(); + $this->out->input('url', + // TRANS: Field label on form for adding a new bookmark. + _m('LABEL','URL'), + null); + $this->unli(); + + $this->out->elementEnd('ul'); + $this->out->elementEnd('fieldset'); + } + + function formActions() + { + // TRANS: Button text for action to save a new bookmark. + $this->out->submit('submit', _m('BUTTON', 'Add')); + } +}