We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

Commit bfb22a99 authored by CiaranG's avatar CiaranG

XMPP daemon updates including help, sub and subsub commands, plus...

XMPP daemon updates including help, sub and subsub commands, plus subscribe/unsubcribe logic broken out into standalone module for sharing

darcs-hash:20080816083422-f6e2c-fb8b4e0581719bd8c3f433e661ec9742e1b84cbc.gz
parent a0b6ebdd
......@@ -47,14 +47,45 @@ class SubscribeAction extends Action {
$other_nickname = $this->arg('subscribeto');
$result=subs_subscribe_user($user, $other_nickname);
if($result != true) {
common_user_error($result);
$other = User::staticGet('nickname', $other_nickname);
if (!$other) {
common_user_error(_('No such user.'));
return;
}
if ($user->isSubscribed($other)) {
common_user_error(_('Already subscribed!.'));
return;
}
if (!$user->subscribeTo($other)) {
$this->server_error(_('Could not subscribe.'));
return;
}
$this->notify($other, $user);
if ($other->autosubscribe && !$other->isSubscribed($user)) {
if (!$other->subscribeTo($user)) {
$this->server_error(_('Could not subscribe other to you.'));
return;
}
$this->notify($user, $other);
}
common_redirect(common_local_url('subscriptions', array('nickname' =>
$user->nickname)));
}
function notify($listenee, $listener) {
# XXX: add other notifications (Jabber, SMS) here
# XXX: queue this and handle it offline
# XXX: Whatever happens, do it in Twitter-like API, too
$this->notify_email($listenee, $listener);
}
function notify_email($listenee, $listener) {
mail_subscribe_notify($listenee, $listener);
}
}
\ No newline at end of file
......@@ -43,9 +43,27 @@ class UnsubscribeAction extends Action {
}
$other_nickname = $this->arg('unsubscribeto');
$result=subs_unsubscribe_user($user,$other_nickname);
if($result!=true) {
common_user_error($result);
$other = User::staticGet('nickname', $other_nickname);
if (!$other) {
common_user_error(_('No such user.'));
return;
}
if (!$user->isSubscribed($other)) {
common_server_error(_('Not subscribed!.'));
}
$sub = DB_DataObject::factory('subscription');
$sub->subscriber = $user->id;
$sub->subscribed = $other->id;
$sub->find(true);
// note we checked for existence above
if (!$sub->delete()) {
common_server_error(_('Couldn\'t delete subscription.'));
return;
}
......
......@@ -130,7 +130,6 @@ require_once(INSTALLDIR.'/lib/util.php');
require_once(INSTALLDIR.'/lib/action.php');
require_once(INSTALLDIR.'/lib/theme.php');
require_once(INSTALLDIR.'/lib/mail.php');
require_once(INSTALLDIR.'/lib/subs.php');
function __autoload($class) {
if ($class == 'OAuthRequest') {
......
......@@ -18,6 +18,35 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
function xmppdaemon_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
switch ($errno) {
case E_USER_ERROR:
echo "ERROR: [$errno] $errstr ($errfile:$errline)\n";
echo " Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")\n";
echo "Aborting...\n";
exit(1);
break;
case E_USER_WARNING:
echo "WARNING [$errno] $errstr ($errfile:$errline)\n";
break;
case E_USER_NOTICE:
echo "NOTICE [$errno] $errstr ($errfile:$errline)\n";
break;
default:
echo "Unknown error type: [$errno] $errstr ($errfile:$errline)\n";
break;
}
/* Don't execute PHP internal error handler */
return true;
}
set_error_handler('xmppdaemon_error_handler');
# Abort if called from a web server
if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
print "This script must be run from the command line\n";
......@@ -206,49 +235,15 @@ class XMPPDaemon extends Daemon {
function handle_command($user, $body) {
# XXX: localise
$p=explode(' ',$body);
if(count($p)>2)
return false;
switch($p[0]) {
case 'help':
if(count($p)!=1)
return false;
$this->from_site($user->jabber, "Commands:\n on - turn on notifications\n off - turn off notifications\n help - show this help \n sub - subscribe to user\n unsub - unsubscribe from user");
return true;
switch(trim($body)) {
case 'on':
if(count($p)!=1)
return false;
$this->set_notify($user, true);
$this->from_site($user->jabber, 'notifications on');
return true;
case 'off':
if(count($p)!=1)
return false;
$this->set_notify($user, false);
$this->from_site($user->jabber, 'notifications off');
return true;
case 'sub':
if(count($p)==1) {
$this->from_site($user->jabber, 'Specify the name of the user to subscribe to');
return true;
}
$result=subs_subscribe_user($user, $p[1]);
if($result=='true')
$this->from_site($user->jabber, 'Subscribed to ' . $p[1]);
else
$this->from_site($user->jabber, $result);
return true;
case 'unsub':
if(count($p)==1) {
$this->from_site($user->jabber, 'Specify the name of the user to unsubscribe from');
return true;
}
$result=subs_unsubscribe_user($user, $p[1]);
if($result=='true')
$this->from_site($user->jabber, 'Unsubscribed from ' . $p[1]);
else
$this->from_site($user->jabber, $result);
return true;
default:
return false;
}
......@@ -258,7 +253,7 @@ class XMPPDaemon extends Daemon {
$orig = clone($user);
$user->jabbernotify = $notify;
$result = $user->update($orig);
if (!$result) {
if (!$id) {
$last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
$this->log(LOG_ERR,
'Could not set notify flag to ' . $notify .
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment