diff --git a/data/config.default.php b/data/config.default.php
index 2f32df7..5e560a7 100644
--- a/data/config.default.php
+++ b/data/config.default.php
@@ -542,35 +542,27 @@ $defaults['privacy'] = 0;
*/
/**
- * Enable bookmark website thumbnails.
+ * Which thumbnail service type to use.
*
- * According to artviper.net license, buy a license if you
- * gain profit with your pages.
- *
- * @var boolean
- * @link http://www.websitethumbnail.de/
- */
-$enableWebsiteThumbnails = false;
-
-/**
- * User ID from websitethumbnail.de
- *
- * You need to register on
- * http://www.artviper.net/registerapi.php
- * in order to use thumbnails on your domain
- *
- * @var string
- * @link http://www.artviper.net/registerapi.php
- */
-$thumbnailsUserId = null;
-
-/**
- * API key.
- * Sent to you by artviper.net after registration.
+ * Currently supported:
+ * - null (no screenshots)
+ * - 'phancap', see http://cweiske.de/phancap.htm
*
* @var string
*/
-$thumbnailsKey = null;
+$thumbnailsType = null;
+
+/**
+ * Configuration for thumbnail service.
+ *
+ * Phancap requires an array with the following keys:
+ * - url: URL to phancap's get.php file
+ * - token: user name (if access protected)
+ * - secret: password for the user (if access protected)
+ *
+ * @var array
+ */
+$thumbnailsConfig = array();
diff --git a/data/templates/default/bookmarks-thumbnail.inc.tpl.php b/data/templates/default/bookmarks-thumbnail.inc.tpl.php
index 77cc67f..b8770dc 100644
--- a/data/templates/default/bookmarks-thumbnail.inc.tpl.php
+++ b/data/templates/default/bookmarks-thumbnail.inc.tpl.php
@@ -5,14 +5,14 @@
*
* Expects a $row variable with bookmark data.
*/
-if (!$GLOBALS['enableWebsiteThumbnails']) {
- return;
+
+$thumbnailer = SemanticScuttle_Service_Factory::get('Thumbnails')->getThumbnailer();
+$imgUrl = $thumbnailer->getThumbnailUrl($address, 120, 90);
+if ($imgUrl !== false) {
+ echo ''
+ . ''
+ . '';
}
-
-$thumbnailHash = md5(
- $address . $GLOBALS['thumbnailsUserId'] . $GLOBALS['thumbnailsKey']
-);
-//echo '';
-echo '';
-
?>
\ No newline at end of file
diff --git a/data/templates/default/bottom.inc.php b/data/templates/default/bottom.inc.php
index e48f593..9e4014c 100644
--- a/data/templates/default/bottom.inc.php
+++ b/data/templates/default/bottom.inc.php
@@ -6,11 +6,6 @@ echo ''.T_('About').'';
echo ' - ';
echo T_("Propulsed by ");
echo " SemanticScuttle";
-
-if($GLOBALS['enableWebsiteThumbnails']) {
- // Licence to the thumbnails provider (OBLIGATORY IF YOU USE ARTVIPER SERVICE)
- echo ' (Thumbnails by webdesign)';
-}
?>
diff --git a/src/SemanticScuttle/Service.php b/src/SemanticScuttle/Service.php
index 1afb353..cd79f2c 100644
--- a/src/SemanticScuttle/Service.php
+++ b/src/SemanticScuttle/Service.php
@@ -51,7 +51,7 @@ class SemanticScuttle_Service
{
static $instance;
if (!isset($instance)) {
- $instance = new self($db);
+ $instance = new static($db);
}
return $instance;
}
diff --git a/src/SemanticScuttle/Service/Thumbnails.php b/src/SemanticScuttle/Service/Thumbnails.php
new file mode 100644
index 0000000..6151254
--- /dev/null
+++ b/src/SemanticScuttle/Service/Thumbnails.php
@@ -0,0 +1,59 @@
+
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+
+/**
+ * Instantiates the configured website thumbnailer object.
+ *
+ * @category Bookmarking
+ * @package SemanticScuttle
+ * @author Christian Weiske
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+class SemanticScuttle_Service_Thumbnails extends SemanticScuttle_Service
+{
+ /**
+ * Instantiates the configured website thumbnailer object.
+ *
+ * @return object Website thumbnailer
+ */
+ public function getThumbnailer()
+ {
+ if (!isset($GLOBALS['thumbnailsType'])
+ || $GLOBALS['thumbnailsType'] == ''
+ ) {
+ $class = 'SemanticScuttle_Thumbnailer_Null';
+ } else {
+ $class = 'SemanticScuttle_Thumbnailer_'
+ . ucfirst($GLOBALS['thumbnailsType']);
+ }
+ if (!class_exists($class)) {
+ //PEAR classname to filename rule
+ $file = str_replace('_', '/', $class) . '.php';
+ include_once $file;
+ }
+
+ $thumbnailer = new $class();
+
+ if (!isset($GLOBALS['thumbnailsConfig'])
+ || $GLOBALS['thumbnailsConfig'] == ''
+ ) {
+ $thumbnailer->setConfig(null);
+ } else {
+ $thumbnailer->setConfig($GLOBALS['thumbnailsConfig']);
+ }
+
+ return $thumbnailer;
+ }
+}
+?>
diff --git a/src/SemanticScuttle/Thumbnailer/Null.php b/src/SemanticScuttle/Thumbnailer/Null.php
new file mode 100644
index 0000000..ec12135
--- /dev/null
+++ b/src/SemanticScuttle/Thumbnailer/Null.php
@@ -0,0 +1,52 @@
+
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+
+/**
+ * Dummy thumbnailer that never returns a thumbnail URL
+ *
+ * @category Bookmarking
+ * @package SemanticScuttle
+ * @author Christian Weiske
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+class SemanticScuttle_Thumbnailer_Null
+{
+ /**
+ * Set dummy configuration
+ *
+ * @param array $config Dummy configuration
+ *
+ * @return void
+ */
+ public function setConfig($config)
+ {
+ }
+
+ /**
+ * Get the URL for a website thumbnail.
+ * Always returns false.
+ *
+ * @param string $bookmarkUrl URL of website to create thumbnail for
+ * @param integer $width Screenshot width
+ * @param integer $height Screenshot height
+ *
+ * @return mixed FALSE when no screenshot could be obtained,
+ * string with the URL otherwise
+ */
+ public function getThumbnailUrl($bookmarkUrl, $width, $height)
+ {
+ return false;
+ }
+}
+?>
diff --git a/src/SemanticScuttle/Thumbnailer/Phancap.php b/src/SemanticScuttle/Thumbnailer/Phancap.php
new file mode 100644
index 0000000..1b76849
--- /dev/null
+++ b/src/SemanticScuttle/Thumbnailer/Phancap.php
@@ -0,0 +1,92 @@
+
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+
+/**
+ * Show website thumbnails/screenshots using phancap
+ *
+ * @category Bookmarking
+ * @package SemanticScuttle
+ * @author Christian Weiske
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ * @see http://cweiske.de/phancap.htm
+ */
+class SemanticScuttle_Thumbnailer_Phancap
+{
+ /**
+ * Configuration array.
+ * Required keys:
+ * - url
+ * - token
+ * - secret
+ */
+ protected $config = array();
+
+ /**
+ * Set phancap configuration
+ *
+ * @param array $config Phancap configuration
+ *
+ * @return void
+ */
+ public function setConfig($config)
+ {
+ $this->config = $config;
+ }
+
+ /**
+ * Get the URL for a website thumbnail
+ *
+ * @param string $bookmarkUrl URL of website to create thumbnail for
+ * @param integer $width Screenshot width
+ * @param integer $height Screenshot height
+ *
+ * @return mixed FALSE when no screenshot could be obtained,
+ * string with the URL otherwise
+ */
+ public function getThumbnailUrl($bookmarkUrl, $width, $height)
+ {
+ //default parameters for the phancap service
+ $parameters = array(
+ 'url' => $bookmarkUrl,
+ 'swidth' => $width,
+ 'sheight' => $height,
+ 'sformat' => 'jpg',
+ );
+
+ if (isset($this->config['token']) && $this->config['token'] != '') {
+ $parameters['atoken'] = $this->config['token'];
+ $parameters['atimestamp'] = time();
+
+ //create signature
+ ksort($parameters);
+ foreach ($parameters as $key => $value) {
+ $encparams[] = $key . '=' . rawurlencode($value);
+ }
+ $encstring = implode('&', $encparams);
+ $signature = hash_hmac('sha1', $encstring, $this->config['secret']);
+ //append signature to parameters
+ $parameters['asignature'] = $signature;
+ }
+
+ //url-encode the parameters
+ $urlParams = array();
+ foreach ($parameters as $key => $value) {
+ $urlParams[] = $key . '=' . urlencode($value);
+ }
+
+ //final URL
+ return $this->config['url'] . '?' . implode('&', $urlParams);
+ }
+}
+?>
diff --git a/www/themes/default/scuttle.css b/www/themes/default/scuttle.css
index f37377d..12a88fc 100644
--- a/www/themes/default/scuttle.css
+++ b/www/themes/default/scuttle.css
@@ -195,7 +195,6 @@ img.thumbnail {
padding: 1px;
margin-right: 6px;
margin-bottom:4px;
- cursor:pointer;
border:1px solid #AAA;
}
div.link a {