From 499afd8c22fa7b14c5d757f52b1e8e6a91bbaf30 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 15 Jul 2008 15:55:13 -0400 Subject: [PATCH] replies from people you're not subscribed to over Jabber darcs-hash:20080715195513-84dde-454419c971015be385d9c4c35f7acbee419031f9.gz --- actions/imsettings.php | 5 +++++ classes/Avatar.php | 6 ++--- classes/Confirm_address.php | 6 ++--- classes/Consumer.php | 2 +- classes/Nonce.php | 2 +- classes/Notice.php | 10 ++++----- classes/Profile.php | 4 ++-- classes/Queue_item.php | 4 ++-- classes/Remember_me.php | 2 +- classes/Remote_profile.php | 6 ++--- classes/Reply.php | 4 ++-- classes/Sms_carrier.php | 2 +- classes/Subscription.php | 6 ++--- classes/Token.php | 4 ++-- classes/User.php | 13 ++++++----- classes/User_openid.php | 2 +- classes/stoica.ini | 1 + db/laconica.sql | 1 + lib/jabber.php | 45 ++++++++++++++++++++++++++++--------- 19 files changed, 79 insertions(+), 46 deletions(-) diff --git a/actions/imsettings.php b/actions/imsettings.php index f85d9f887b..9e483d0632 100644 --- a/actions/imsettings.php +++ b/actions/imsettings.php @@ -73,6 +73,9 @@ class ImsettingsAction extends SettingsAction { common_checkbox('updatefrompresence', _('Post a notice when my Jabber/GTalk status changes.'), $user->updatefrompresence); + common_checkbox('jabberreplies', + _('Send me replies through Jabber/GTalk from people I\'m not subscribed to.'), + $user->jabberreplies); common_submit('save', _('Save')); common_element_end('form'); @@ -110,6 +113,7 @@ class ImsettingsAction extends SettingsAction { $jabbernotify = $this->boolean('jabbernotify'); $updatefrompresence = $this->boolean('updatefrompresence'); + $jabberreplies = $this->boolean('jabberreplies'); $user = common_current_user(); @@ -121,6 +125,7 @@ class ImsettingsAction extends SettingsAction { $user->jabbernotify = $jabbernotify; $user->updatefrompresence = $updatefrompresence; + $user->jabberreplies = $jabberreplies; $result = $user->update($original); diff --git a/classes/Avatar.php b/classes/Avatar.php index 9d7d7f7703..7aaf787b2e 100644 --- a/classes/Avatar.php +++ b/classes/Avatar.php @@ -4,18 +4,18 @@ */ require_once 'DB/DataObject.php'; -class Avatar extends DB_DataObject +class Avatar extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ public $__table = 'avatar'; // table name public $profile_id; // int(4) primary_key not_null - public $original; // tinyint(1) + public $original; // tinyint(1) public $width; // int(4) primary_key not_null public $height; // int(4) primary_key not_null public $mediatype; // varchar(32) not_null - public $filename; // varchar(255) + public $filename; // varchar(255) public $url; // varchar(255) unique_key public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP diff --git a/classes/Confirm_address.php b/classes/Confirm_address.php index 7b2962925c..f18d554a36 100644 --- a/classes/Confirm_address.php +++ b/classes/Confirm_address.php @@ -4,7 +4,7 @@ */ require_once 'DB/DataObject.php'; -class Confirm_address extends DB_DataObject +class Confirm_address extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -15,8 +15,8 @@ class Confirm_address extends DB_DataObject public $address; // varchar(255) not_null public $address_extra; // varchar(255) not_null public $address_type; // varchar(8) not_null - public $claimed; // datetime() - public $sent; // datetime() + public $claimed; // datetime() + public $sent; // datetime() public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP /* Static get */ diff --git a/classes/Consumer.php b/classes/Consumer.php index 4b7cb414b3..6f4513f332 100644 --- a/classes/Consumer.php +++ b/classes/Consumer.php @@ -4,7 +4,7 @@ */ require_once 'DB/DataObject.php'; -class Consumer extends DB_DataObject +class Consumer extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ diff --git a/classes/Nonce.php b/classes/Nonce.php index 1a3f358689..987e8d1e85 100644 --- a/classes/Nonce.php +++ b/classes/Nonce.php @@ -4,7 +4,7 @@ */ require_once 'DB/DataObject.php'; -class Nonce extends DB_DataObject +class Nonce extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ diff --git a/classes/Notice.php b/classes/Notice.php index 0ea9763cba..a00114f95d 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); } */ require_once 'DB/DataObject.php'; -class Notice extends DB_DataObject +class Notice extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -33,12 +33,12 @@ class Notice extends DB_DataObject public $id; // int(4) primary_key not_null public $profile_id; // int(4) not_null public $uri; // varchar(255) unique_key - public $content; // varchar(140) - public $rendered; // text() - public $url; // varchar(255) + public $content; // varchar(140) + public $rendered; // text() + public $url; // varchar(255) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP - public $reply_to; // int(4) + public $reply_to; // int(4) /* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Notice',$k,$v); } diff --git a/classes/Profile.php b/classes/Profile.php index d482e8d283..5f88caf2c4 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); } */ require_once 'DB/DataObject.php'; -class Profile extends DB_DataObject +class Profile extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -33,7 +33,7 @@ class Profile extends DB_DataObject public $id; // int(4) primary_key not_null public $nickname; // varchar(64) multiple_key not_null public $fullname; // varchar(255) multiple_key - public $profileurl; // varchar(255) + public $profileurl; // varchar(255) public $homepage; // varchar(255) multiple_key public $bio; // varchar(140) multiple_key public $location; // varchar(255) multiple_key diff --git a/classes/Queue_item.php b/classes/Queue_item.php index 4a7aeebe28..48dd2b443c 100644 --- a/classes/Queue_item.php +++ b/classes/Queue_item.php @@ -4,7 +4,7 @@ */ require_once 'DB/DataObject.php'; -class Queue_item extends DB_DataObject +class Queue_item extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -12,7 +12,7 @@ class Queue_item extends DB_DataObject public $__table = 'queue_item'; // table name public $notice_id; // int(4) primary_key not_null public $created; // datetime() not_null - public $claimed; // datetime() + public $claimed; // datetime() /* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Queue_item',$k,$v); } diff --git a/classes/Remember_me.php b/classes/Remember_me.php index 31a09ab413..c84668c46b 100644 --- a/classes/Remember_me.php +++ b/classes/Remember_me.php @@ -4,7 +4,7 @@ */ require_once 'DB/DataObject.php'; -class Remember_me extends DB_DataObject +class Remember_me extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ diff --git a/classes/Remote_profile.php b/classes/Remote_profile.php index 216c989e7d..e5613125dc 100644 --- a/classes/Remote_profile.php +++ b/classes/Remote_profile.php @@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); } */ require_once 'DB/DataObject.php'; -class Remote_profile extends DB_DataObject +class Remote_profile extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -32,8 +32,8 @@ class Remote_profile extends DB_DataObject public $__table = 'remote_profile'; // table name public $id; // int(4) primary_key not_null public $uri; // varchar(255) unique_key - public $postnoticeurl; // varchar(255) - public $updateprofileurl; // varchar(255) + public $postnoticeurl; // varchar(255) + public $updateprofileurl; // varchar(255) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP diff --git a/classes/Reply.php b/classes/Reply.php index 2fb7a99f4a..8e26f1684e 100644 --- a/classes/Reply.php +++ b/classes/Reply.php @@ -4,7 +4,7 @@ */ require_once 'DB/DataObject.php'; -class Reply extends DB_DataObject +class Reply extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -12,8 +12,8 @@ class Reply extends DB_DataObject public $__table = 'reply'; // table name public $notice_id; // int(4) primary_key not_null public $profile_id; // int(4) primary_key not_null - public $replied_id; // int(4) public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP + public $replied_id; // int(4) /* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Reply',$k,$v); } diff --git a/classes/Sms_carrier.php b/classes/Sms_carrier.php index 45bb29cffa..5fb7417317 100644 --- a/classes/Sms_carrier.php +++ b/classes/Sms_carrier.php @@ -4,7 +4,7 @@ */ require_once 'DB/DataObject.php'; -class Sms_carrier extends DB_DataObject +class Sms_carrier extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ diff --git a/classes/Subscription.php b/classes/Subscription.php index dd7b0f3dbb..2a1037d2bc 100644 --- a/classes/Subscription.php +++ b/classes/Subscription.php @@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); } */ require_once 'DB/DataObject.php'; -class Subscription extends DB_DataObject +class Subscription extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -32,8 +32,8 @@ class Subscription extends DB_DataObject public $__table = 'subscription'; // table name public $subscriber; // int(4) primary_key not_null public $subscribed; // int(4) primary_key not_null - public $token; // varchar(255) - public $secret; // varchar(255) + public $token; // varchar(255) + public $secret; // varchar(255) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP diff --git a/classes/Token.php b/classes/Token.php index cd14fbffff..a91b19f8e7 100644 --- a/classes/Token.php +++ b/classes/Token.php @@ -4,7 +4,7 @@ */ require_once 'DB/DataObject.php'; -class Token extends DB_DataObject +class Token extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -14,7 +14,7 @@ class Token extends DB_DataObject public $tok; // char(32) primary_key not_null public $secret; // char(32) not_null public $type; // tinyint(1) not_null - public $state; // tinyint(1) + public $state; // tinyint(1) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP diff --git a/classes/User.php b/classes/User.php index b928b69cac..e5046a394f 100644 --- a/classes/User.php +++ b/classes/User.php @@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); } require_once 'DB/DataObject.php'; require_once 'Validate.php'; -class User extends DB_DataObject +class User extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -32,14 +32,15 @@ class User extends DB_DataObject public $__table = 'user'; // table name public $id; // int(4) primary_key not_null public $nickname; // varchar(64) unique_key - public $password; // varchar(255) + public $password; // varchar(255) public $email; // varchar(255) unique_key public $jabber; // varchar(255) unique_key - public $jabbernotify; // tinyint(1) - public $updatefrompresence; // tinyint(1) + public $jabbernotify; // tinyint(1) + public $jabberreplies; // tinyint(1) + public $updatefrompresence; // tinyint(1) public $sms; // varchar(64) unique_key - public $carrier; // int(4) - public $smsnotify; // tinyint(1) + public $carrier; // int(4) + public $smsnotify; // tinyint(1) public $uri; // varchar(255) unique_key public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP diff --git a/classes/User_openid.php b/classes/User_openid.php index b199685f8e..67f6f3b2ef 100644 --- a/classes/User_openid.php +++ b/classes/User_openid.php @@ -4,7 +4,7 @@ */ require_once 'DB/DataObject.php'; -class User_openid extends DB_DataObject +class User_openid extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ diff --git a/classes/stoica.ini b/classes/stoica.ini index d03a3ffa04..8b1708afbc 100644 --- a/classes/stoica.ini +++ b/classes/stoica.ini @@ -159,6 +159,7 @@ password = 2 email = 2 jabber = 2 jabbernotify = 17 +jabberreplies = 17 updatefrompresence = 17 sms = 2 carrier = 1 diff --git a/db/laconica.sql b/db/laconica.sql index 42a00da3f0..4115b84ec5 100644 --- a/db/laconica.sql +++ b/db/laconica.sql @@ -47,6 +47,7 @@ create table user ( email varchar(255) unique key comment 'email address for password recovery etc.', jabber varchar(255) unique key comment 'jabber ID for notices', jabbernotify tinyint default 0 comment 'whether to send notices to jabber', + jabberreplies tinyint default 0 comment 'whether to send notices to jabber on replies', updatefrompresence tinyint default 0 comment 'whether to record updates from Jabber presence notices', sms varchar(64) unique key comment 'sms phone number', carrier integer comment 'foreign key to sms_carrier' references sms_carrier (id), diff --git a/lib/jabber.php b/lib/jabber.php index bd04edc63e..b0dc24bd0d 100644 --- a/lib/jabber.php +++ b/lib/jabber.php @@ -194,8 +194,6 @@ function jabber_special_presence($type, $to=NULL, $show=NULL, $status=NULL) { } function jabber_broadcast_notice($notice) { - # First, get users subscribed to this profile - # XXX: use a join here rather than looping through results $profile = Profile::staticGet($notice->profile_id); if (!$profile) { common_log(LOG_WARNING, 'Refusing to broadcast notice with ' . @@ -203,23 +201,50 @@ function jabber_broadcast_notice($notice) { __FILE__); return false; } - $sub = new Subscription(); - $sub->subscribed = $notice->profile_id; - if ($sub->find()) { - while ($sub->fetch()) { - $user = User::staticGet($sub->subscriber); - if ($user && $user->jabber && $user->jabbernotify) { + $sent_to = array(); + # First, get users who this is a direct reply to + $reply = new Reply(); + $reply->notice_id = $notice->id; + if ($reply->find()) { + while ($reply->fetch()) { + $user = User::staticGet($reply->profile_id); + if ($user && $user->jabber && $user->jabbernotify && $user->jabberreplies) { common_log(LOG_INFO, - 'Sending notice ' . $notice->id . ' to ' . $user->jabber, + 'Sending reply notice ' . $notice->id . ' to ' . $user->jabber, __FILE__); $success = jabber_send_notice($user->jabber, $notice); - if (!$success) { + if ($success) { + # Remember so we don't send twice + $sent_to[$user->id] = true; + } else { # XXX: Not sure, but I think that's the right thing to do return false; } } } } + # Now, get users subscribed to this profile + # XXX: use a join here rather than looping through results + $sub = new Subscription(); + $sub->subscribed = $notice->profile_id; + + if ($sub->find()) { + while ($sub->fetch()) { + $user = User::staticGet($sub->subscriber); + if ($user && $user->jabber && $user->jabbernotify && !$sent_to[$user->id]) { + common_log(LOG_INFO, + 'Sending notice ' . $notice->id . ' to ' . $user->jabber, + __FILE__); + $success = jabber_send_notice($user->jabber, $notice); + if ($success) { + $sent_to[$user->id] = true; + # XXX: Not sure, but I think that's the right thing to do + return false; + } + } + } + } + return true; }