replies from people you're not subscribed to over Jabber

darcs-hash:20080715195513-84dde-454419c971015be385d9c4c35f7acbee419031f9.gz
This commit is contained in:
Evan Prodromou 2008-07-15 15:55:13 -04:00
parent 3f59000e73
commit 499afd8c22
19 changed files with 79 additions and 46 deletions

View File

@ -73,6 +73,9 @@ class ImsettingsAction extends SettingsAction {
common_checkbox('updatefrompresence', common_checkbox('updatefrompresence',
_('Post a notice when my Jabber/GTalk status changes.'), _('Post a notice when my Jabber/GTalk status changes.'),
$user->updatefrompresence); $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_submit('save', _('Save'));
common_element_end('form'); common_element_end('form');
@ -110,6 +113,7 @@ class ImsettingsAction extends SettingsAction {
$jabbernotify = $this->boolean('jabbernotify'); $jabbernotify = $this->boolean('jabbernotify');
$updatefrompresence = $this->boolean('updatefrompresence'); $updatefrompresence = $this->boolean('updatefrompresence');
$jabberreplies = $this->boolean('jabberreplies');
$user = common_current_user(); $user = common_current_user();
@ -121,6 +125,7 @@ class ImsettingsAction extends SettingsAction {
$user->jabbernotify = $jabbernotify; $user->jabbernotify = $jabbernotify;
$user->updatefrompresence = $updatefrompresence; $user->updatefrompresence = $updatefrompresence;
$user->jabberreplies = $jabberreplies;
$result = $user->update($original); $result = $user->update($original);

View File

@ -4,18 +4,18 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Avatar extends DB_DataObject class Avatar extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* the code below is auto generated do not remove the above tag */
public $__table = 'avatar'; // table name public $__table = 'avatar'; // table name
public $profile_id; // int(4) primary_key not_null 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 $width; // int(4) primary_key not_null
public $height; // int(4) primary_key not_null public $height; // int(4) primary_key not_null
public $mediatype; // varchar(32) not_null public $mediatype; // varchar(32) not_null
public $filename; // varchar(255) public $filename; // varchar(255)
public $url; // varchar(255) unique_key public $url; // varchar(255) unique_key
public $created; // datetime() not_null public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP

View File

@ -4,7 +4,7 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Confirm_address extends DB_DataObject class Confirm_address extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* 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; // varchar(255) not_null
public $address_extra; // varchar(255) not_null public $address_extra; // varchar(255) not_null
public $address_type; // varchar(8) not_null public $address_type; // varchar(8) not_null
public $claimed; // datetime() public $claimed; // datetime()
public $sent; // datetime() public $sent; // datetime()
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
/* Static get */ /* Static get */

View File

@ -4,7 +4,7 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Consumer extends DB_DataObject class Consumer extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* the code below is auto generated do not remove the above tag */

View File

@ -4,7 +4,7 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Nonce extends DB_DataObject class Nonce extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* the code below is auto generated do not remove the above tag */

View File

@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); }
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Notice extends DB_DataObject class Notice extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* 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 $id; // int(4) primary_key not_null
public $profile_id; // int(4) not_null public $profile_id; // int(4) not_null
public $uri; // varchar(255) unique_key public $uri; // varchar(255) unique_key
public $content; // varchar(140) public $content; // varchar(140)
public $rendered; // text() public $rendered; // text()
public $url; // varchar(255) public $url; // varchar(255)
public $created; // datetime() not_null public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
public $reply_to; // int(4) public $reply_to; // int(4)
/* Static get */ /* Static get */
function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Notice',$k,$v); } function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Notice',$k,$v); }

View File

@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); }
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Profile extends DB_DataObject class Profile extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* 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 $id; // int(4) primary_key not_null
public $nickname; // varchar(64) multiple_key not_null public $nickname; // varchar(64) multiple_key not_null
public $fullname; // varchar(255) multiple_key public $fullname; // varchar(255) multiple_key
public $profileurl; // varchar(255) public $profileurl; // varchar(255)
public $homepage; // varchar(255) multiple_key public $homepage; // varchar(255) multiple_key
public $bio; // varchar(140) multiple_key public $bio; // varchar(140) multiple_key
public $location; // varchar(255) multiple_key public $location; // varchar(255) multiple_key

View File

@ -4,7 +4,7 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Queue_item extends DB_DataObject class Queue_item extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* 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 $__table = 'queue_item'; // table name
public $notice_id; // int(4) primary_key not_null public $notice_id; // int(4) primary_key not_null
public $created; // datetime() not_null public $created; // datetime() not_null
public $claimed; // datetime() public $claimed; // datetime()
/* Static get */ /* Static get */
function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Queue_item',$k,$v); } function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Queue_item',$k,$v); }

View File

@ -4,7 +4,7 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Remember_me extends DB_DataObject class Remember_me extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* the code below is auto generated do not remove the above tag */

View File

@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); }
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Remote_profile extends DB_DataObject class Remote_profile extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* 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 $__table = 'remote_profile'; // table name
public $id; // int(4) primary_key not_null public $id; // int(4) primary_key not_null
public $uri; // varchar(255) unique_key public $uri; // varchar(255) unique_key
public $postnoticeurl; // varchar(255) public $postnoticeurl; // varchar(255)
public $updateprofileurl; // varchar(255) public $updateprofileurl; // varchar(255)
public $created; // datetime() not_null public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP

View File

@ -4,7 +4,7 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Reply extends DB_DataObject class Reply extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* 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 $__table = 'reply'; // table name
public $notice_id; // int(4) primary_key not_null public $notice_id; // int(4) primary_key not_null
public $profile_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 $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
public $replied_id; // int(4)
/* Static get */ /* Static get */
function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Reply',$k,$v); } function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Reply',$k,$v); }

View File

@ -4,7 +4,7 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Sms_carrier extends DB_DataObject class Sms_carrier extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* the code below is auto generated do not remove the above tag */

View File

@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); }
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Subscription extends DB_DataObject class Subscription extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* 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 $__table = 'subscription'; // table name
public $subscriber; // int(4) primary_key not_null public $subscriber; // int(4) primary_key not_null
public $subscribed; // int(4) primary_key not_null public $subscribed; // int(4) primary_key not_null
public $token; // varchar(255) public $token; // varchar(255)
public $secret; // varchar(255) public $secret; // varchar(255)
public $created; // datetime() not_null public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP

View File

@ -4,7 +4,7 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class Token extends DB_DataObject class Token extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* 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 $tok; // char(32) primary_key not_null
public $secret; // char(32) not_null public $secret; // char(32) not_null
public $type; // tinyint(1) not_null public $type; // tinyint(1) not_null
public $state; // tinyint(1) public $state; // tinyint(1)
public $created; // datetime() not_null public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP

View File

@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); }
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
require_once 'Validate.php'; require_once 'Validate.php';
class User extends DB_DataObject class User extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* 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 $__table = 'user'; // table name
public $id; // int(4) primary_key not_null public $id; // int(4) primary_key not_null
public $nickname; // varchar(64) unique_key public $nickname; // varchar(64) unique_key
public $password; // varchar(255) public $password; // varchar(255)
public $email; // varchar(255) unique_key public $email; // varchar(255) unique_key
public $jabber; // varchar(255) unique_key public $jabber; // varchar(255) unique_key
public $jabbernotify; // tinyint(1) public $jabbernotify; // tinyint(1)
public $updatefrompresence; // tinyint(1) public $jabberreplies; // tinyint(1)
public $updatefrompresence; // tinyint(1)
public $sms; // varchar(64) unique_key public $sms; // varchar(64) unique_key
public $carrier; // int(4) public $carrier; // int(4)
public $smsnotify; // tinyint(1) public $smsnotify; // tinyint(1)
public $uri; // varchar(255) unique_key public $uri; // varchar(255) unique_key
public $created; // datetime() not_null public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP

View File

@ -4,7 +4,7 @@
*/ */
require_once 'DB/DataObject.php'; require_once 'DB/DataObject.php';
class User_openid extends DB_DataObject class User_openid extends DB_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* the code below is auto generated do not remove the above tag */

View File

@ -159,6 +159,7 @@ password = 2
email = 2 email = 2
jabber = 2 jabber = 2
jabbernotify = 17 jabbernotify = 17
jabberreplies = 17
updatefrompresence = 17 updatefrompresence = 17
sms = 2 sms = 2
carrier = 1 carrier = 1

View File

@ -47,6 +47,7 @@ create table user (
email varchar(255) unique key comment 'email address for password recovery etc.', email varchar(255) unique key comment 'email address for password recovery etc.',
jabber varchar(255) unique key comment 'jabber ID for notices', jabber varchar(255) unique key comment 'jabber ID for notices',
jabbernotify tinyint default 0 comment 'whether to send notices to jabber', 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', updatefrompresence tinyint default 0 comment 'whether to record updates from Jabber presence notices',
sms varchar(64) unique key comment 'sms phone number', sms varchar(64) unique key comment 'sms phone number',
carrier integer comment 'foreign key to sms_carrier' references sms_carrier (id), carrier integer comment 'foreign key to sms_carrier' references sms_carrier (id),

View File

@ -194,8 +194,6 @@ function jabber_special_presence($type, $to=NULL, $show=NULL, $status=NULL) {
} }
function jabber_broadcast_notice($notice) { 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); $profile = Profile::staticGet($notice->profile_id);
if (!$profile) { if (!$profile) {
common_log(LOG_WARNING, 'Refusing to broadcast notice with ' . common_log(LOG_WARNING, 'Refusing to broadcast notice with ' .
@ -203,23 +201,50 @@ function jabber_broadcast_notice($notice) {
__FILE__); __FILE__);
return false; return false;
} }
$sub = new Subscription(); $sent_to = array();
$sub->subscribed = $notice->profile_id; # First, get users who this is a direct reply to
if ($sub->find()) { $reply = new Reply();
while ($sub->fetch()) { $reply->notice_id = $notice->id;
$user = User::staticGet($sub->subscriber); if ($reply->find()) {
if ($user && $user->jabber && $user->jabbernotify) { while ($reply->fetch()) {
$user = User::staticGet($reply->profile_id);
if ($user && $user->jabber && $user->jabbernotify && $user->jabberreplies) {
common_log(LOG_INFO, common_log(LOG_INFO,
'Sending notice ' . $notice->id . ' to ' . $user->jabber, 'Sending reply notice ' . $notice->id . ' to ' . $user->jabber,
__FILE__); __FILE__);
$success = jabber_send_notice($user->jabber, $notice); $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 # XXX: Not sure, but I think that's the right thing to do
return false; 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; return true;
} }