]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
auto-fill bookmark data
authorEvan Prodromou <evan@status.net>
Fri, 15 Apr 2011 03:44:01 +0000 (23:44 -0400)
committerEvan Prodromou <evan@status.net>
Fri, 15 Apr 2011 03:44:01 +0000 (23:44 -0400)
plugins/Bookmark/BookmarkPlugin.php
plugins/Bookmark/bookmarkform.php
plugins/Bookmark/bookmarkforurl.php [new file with mode: 0644]
plugins/Bookmark/initialbookmarkform.php [new file with mode: 0644]

index d23e26697a1b3010b9a2918faa2f4bda6122ec82..c6fe987dc75d943e813bb8a4b4aa5eb692f04990 100644 (file)
@@ -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()
index b1321a994b3480fc3c0ed4270314311768a9970c..ffeba312ea080712c34012ac4ad041c91414958e 100644 (file)
@@ -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('url',
+                          // TRANS: Field label on form for adding a new bookmark.
+                          _m('LABEL','URL'),
+                          $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,
-                          // TRANS: Field title on form for adding a new bookmark.
-                          _m('Title of the bookmark.'));
+                          $this->_title);
         $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->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 (file)
index 0000000..cff6408
--- /dev/null
@@ -0,0 +1,129 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Returns a pre-filled bookmark form for a given URL
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Bookmark
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @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 <evan@status.net>
+ * @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 (file)
index 0000000..f747e05
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * First bookmark form, with just the URL
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Form
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @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 <evan@status.net>
+ * @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'));
+    }
+}