Skip to content
This repository has been archived by the owner on Dec 16, 2019. It is now read-only.

Commit

Permalink
script to use with errbot's exec plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
cweiske committed May 9, 2016
1 parent 8335376 commit e636523
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 0 deletions.
6 changes: 6 additions & 0 deletions data/config.default.php
Expand Up @@ -778,4 +778,10 @@
*/
$allowUnittestMode = false;

/**
* bookmark-bot email address mapping
* Input address as key, user email as target
*/
$botMailMap = array();

?>
125 changes: 125 additions & 0 deletions scripts/bookmark-bot.php
@@ -0,0 +1,125 @@
#!/usr/bin/env php
<?php
/**
* CLI tool to add bookmarks to SemanticScuttle.
* Intended as end point for a chat bot, e.g. "errbot-exec".
*
* Parameters:
* 1. Message with bookmark url and tags
* 2. E-Mail address of user
*
* You may map chat users to semanticscuttle email addresses
* with the $botMailMap config variable
*
* @author Christian Weiske <cweiske@cweiske.de>
* @link https://github.com/cweiske/errbot-exec
*/
require_once dirname(__FILE__) . '/../src/SemanticScuttle/header-standalone.php';

if ($argc < 3) {
err('No message and user', 1);
}
$msg = $argv[1];
$email = $argv[2];

if (preg_match('#(.+@.+)/.*#', $email, $matches)) {
//xmpp user name with resource: user@example.org/client
$email = $matches[1];
}
if (isset($botMailMap[$email])) {
$email = $botMailMap[$email];
}

function err($msg, $code)
{
echo $msg . "\n";
exit($code);
}

function getUserId($email)
{
$users = SemanticScuttle_Service_Factory::get('User');
if (!$users->isValidEmail($email)) {
err('Invalid e-mail address: ' . $email, 2);
}
$db = SemanticScuttle_Service_Factory::getDb();
$res = $db->sql_query(
'SELECT uId FROM '. $users->getTableName()
. ' WHERE email = "' . $db->sql_escape($email) . '"'
);
$row = $db->sql_fetchrow($res);
if (!is_array($row)) {
err('User not found: ' . $email, 3);
}
return intval($row['uId']);
}

function splitMsg($msg)
{
$bmUrl = $msg;
$rest = '';
if (strpos($msg, ' ') !== false) {
list($bmUrl, $rest) = explode(' ', $msg, 2);
}
$parts = parse_url($bmUrl);
if (!isset($parts['scheme'])) {
err('Scheme missing in URL', 2);
}
if (!SemanticScuttle_Model_Bookmark::isValidUrl($bmUrl)) {
err('Invalid bookmark URL', 2);
}

$bmTags = array();
$bmDesc = '';
$rest = trim($rest);
if (strlen($rest) && $rest{0} == '#') {
//tags begin with '#'
preg_match_all('/#([a-zA-Z0-9]+)/', $rest, $matches);
$bmTags = $matches[1];
foreach ($matches[0] as $tag) {
if (substr($rest, 0, strlen($tag)) == $tag) {
$rest = trim(substr($rest, strlen($tag)));
}
}
$bmDesc = $rest;
} else {
//use rest as tags
$bmTags = explode(' ', $rest);
$bmTags = array_map('trim', $bmTags);
}

return array($bmUrl, $bmTags, $bmDesc);
}

$userId = getUserId($email);
list($bmUrl, $bmTags, $bmDesc) = splitMsg($msg);

$bookmarks = SemanticScuttle_Service_Factory::get('Bookmark');
if ($bookmarks->bookmarkExists($bmUrl)) {
echo "URL already bookmarked.\n";
exit(0);
}

$urlhelper = new SemanticScuttle_UrlHelper();
$bmTitle = $urlhelper->getTitle($bmUrl);

$id = $bookmarks->addBookmark(
$bmUrl,
$bmTitle,
$bmDesc,
null,
SemanticScuttle_Model_Bookmark::SPUBLIC,
$bmTags,
null,
null,
true,
false,
$userId
);
if ($id === false) {
err('Error adding bookmark', 10);
} else {
echo "Bookmark created.\n";
exit(0);
}
?>
1 change: 1 addition & 0 deletions src/SemanticScuttle/header.php
Expand Up @@ -105,6 +105,7 @@
require_once 'SemanticScuttle/Model/Bookmark.php';
require_once 'SemanticScuttle/Model/UserArray.php';
require_once 'SemanticScuttle/Model/User/SslClientCert.php';
require_once 'SemanticScuttle/UrlHelper.php';

if (count($GLOBALS['serviceoverrides']) > 0
&& !defined('UNIT_TEST_MODE')
Expand Down

0 comments on commit e636523

Please sign in to comment.