. * * @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 = null; protected $oembed = null; protected $thumbnail = null; protected $title = null; /** * For initializing members of the class. * * @param array $args misc. arguments * * @return boolean true */ function prepare(array $args=array()) { 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 (!common_valid_http_url($this->url)) { throw new ClientException(_('Invalid URL.'), 400); } try { // processNew will first try to fetch a locally stored File entry $f = File::processNew($this->url); } catch (ServerException $e) { $f = null; } // How about now? if ($f instanceof File) { // FIXME: Use some File metadata Event instead $this->oembed = File_oembed::getKV('file_id', $f->id); if ($this->oembed instanceof File_oembed) { $this->title = $this->oembed->title; } $this->thumbnail = File_thumbnail::getKV('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(array $args=array()) { $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->endHTML(); } /** * Return true if read only. * * MAY override * * @param array $args other arguments * @return boolean is read only action? */ function isReadOnly(array $args=array()) { return false; } }