summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Prodromou <evan@prodromou.name>2008-07-15 15:55:13 -0400
committerEvan Prodromou <evan@prodromou.name>2008-07-15 15:55:13 -0400
commit499afd8c22fa7b14c5d757f52b1e8e6a91bbaf30 (patch)
tree43c07d8135200200c7c53c92693aa6d3305b7c16
parent3f59000e73f8e80d833963445e7581c3a21f0dc7 (diff)
replies from people you're not subscribed to over Jabber
darcs-hash:20080715195513-84dde-454419c971015be385d9c4c35f7acbee419031f9.gz
-rw-r--r--actions/imsettings.php5
-rw-r--r--classes/Avatar.php6
-rw-r--r--classes/Confirm_address.php6
-rw-r--r--classes/Consumer.php2
-rw-r--r--classes/Nonce.php2
-rw-r--r--classes/Notice.php10
-rw-r--r--classes/Profile.php4
-rw-r--r--classes/Queue_item.php4
-rw-r--r--classes/Remember_me.php2
-rw-r--r--classes/Remote_profile.php6
-rw-r--r--classes/Reply.php4
-rw-r--r--classes/Sms_carrier.php2
-rw-r--r--classes/Subscription.php6
-rw-r--r--classes/Token.php4
-rw-r--r--classes/User.php13
-rw-r--r--classes/User_openid.php2
-rw-r--r--classes/stoica.ini1
-rw-r--r--db/laconica.sql1
-rw-r--r--lib/jabber.php33
19 files changed, 73 insertions, 40 deletions
diff --git a/actions/imsettings.php b/actions/imsettings.php
index f85d9f887..9e483d063 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 9d7d7f770..7aaf787b2 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 7b2962925..f18d554a3 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 4b7cb414b..6f4513f33 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 1a3f35868..987e8d1e8 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 0ea9763cb..a00114f95 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 d482e8d28..5f88caf2c 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 4a7aeebe2..48dd2b443 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 31a09ab41..c84668c46 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 216c989e7..e5613125d 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 2fb7a99f4..8e26f1684 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 45bb29cff..5fb741731 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 dd7b0f3db..2a1037d2b 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 cd14fbfff..a91b19f8e 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 b928b69ca..e5046a394 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 b199685f8..67f6f3b2e 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 d03a3ffa0..8b1708afb 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 42a00da3f..4115b84ec 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 bd04edc63..b0dc24bd0 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;
}
+ $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 reply notice ' . $notice->id . ' to ' . $user->jabber,
+ __FILE__);
+ $success = jabber_send_notice($user->jabber, $notice);
+ 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) {
+ 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) {
+ if ($success) {
+ $sent_to[$user->id] = true;
# XXX: Not sure, but I think that's the right thing to do
return false;
}
}
}
}
+
return true;
}