summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/showstream.php7
-rw-r--r--actions/twitapifriendships.php6
-rw-r--r--classes/Profile.php5
-rw-r--r--db/notice_source.sql1
-rw-r--r--extlib/Stomp.php124
-rw-r--r--extlib/Stomp/Frame.php87
-rw-r--r--extlib/Stomp/Message.php6
-rw-r--r--lib/action.php2
-rw-r--r--lib/stompqueuemanager.php5
-rw-r--r--plugins/Autocomplete/autocomplete.php2
-rw-r--r--plugins/PiwikAnalyticsPlugin.php6
-rw-r--r--plugins/Realtime/realtimeupdate.js42
12 files changed, 126 insertions, 167 deletions
diff --git a/actions/showstream.php b/actions/showstream.php
index 4d3067eed..89285b13c 100644
--- a/actions/showstream.php
+++ b/actions/showstream.php
@@ -380,8 +380,13 @@ class ShowstreamAction extends ProfileAction
$this->showEmptyListMessage();
}
+ $args = array('nickname' => $this->user->nickname);
+ if (!empty($this->tag))
+ {
+ $args['tag'] = $this->tag;
+ }
$this->pagination($this->page>1, $cnt>NOTICES_PER_PAGE, $this->page,
- 'showstream', array('nickname' => $this->user->nickname));
+ 'showstream', $args);
}
function showAnonymousMessage()
diff --git a/actions/twitapifriendships.php b/actions/twitapifriendships.php
index f2ea46910..eea8945c3 100644
--- a/actions/twitapifriendships.php
+++ b/actions/twitapifriendships.php
@@ -99,6 +99,12 @@ class TwitapifriendshipsAction extends TwitterapiAction
$other = $this->get_profile($id);
$user = $apidata['user']; // Alwyas the auth user
+ if ($user->id == $other->id) {
+ $this->clientError(_("You cannot unfollow yourself!"),
+ 403, $apidata['content-type']);
+ return;
+ }
+
$sub = new Subscription();
$sub->subscriber = $user->id;
$sub->subscribed = $other->id;
diff --git a/classes/Profile.php b/classes/Profile.php
index c4fb3a543..6ad0e7a3a 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -47,11 +47,6 @@ class Profile extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
- function &pkeyGet($kv)
- {
- return Memcached_DataObject::pkeyGet('Profile', $kv);
- }
-
function getAvatar($width, $height=null)
{
if (is_null($height)) {
diff --git a/db/notice_source.sql b/db/notice_source.sql
index f590d1b97..2657763f4 100644
--- a/db/notice_source.sql
+++ b/db/notice_source.sql
@@ -21,6 +21,7 @@ VALUES
('identichat','identichat','http://identichat.prosody.im/', now()),
('IdentiFox','IdentiFox','http://www.bitbucket.org/uncryptic/identifox/', now()),
('identitwitch','IdentiTwitch','http://richfish.org/identitwitch/', now()),
+ ('Jiminy','Jiminy','http://code.google.com/p/jiminy/', now()),
('LaTwit','LaTwit','http://latwit.mac65.com/', now()),
('LiveTweeter', 'LiveTweeter', 'http://addons.songbirdnest.com/addon/1204', now()),
('livetweeter', 'livetweeter', 'http://addons.songbirdnest.com/addon/1204', now()),
diff --git a/extlib/Stomp.php b/extlib/Stomp.php
index c9e90629c..abd9cba62 100644
--- a/extlib/Stomp.php
+++ b/extlib/Stomp.php
@@ -26,7 +26,7 @@ require_once 'Stomp/Frame.php';
*
* @package Stomp
* @author Hiram Chirino <hiram@hiramchirino.com>
- * @author Dejan Bosanac <dejan@nighttale.net>
+ * @author Dejan Bosanac <dejan@nighttale.net>
* @author Michael Caplan <mcaplan@labnet.net>
* @version $Revision: 43 $
*/
@@ -44,15 +44,15 @@ class Stomp
*
* @var int
*/
- public $prefetchSize = 1;
-
- /**
+ public $prefetchSize = 1;
+
+ /**
* Client id used for durable subscriptions
*
* @var string
*/
- public $clientId = null;
-
+ public $clientId = null;
+
protected $_brokerUri = null;
protected $_socket = null;
protected $_hosts = array();
@@ -66,7 +66,7 @@ class Stomp
protected $_sessionId;
protected $_read_timeout_seconds = 60;
protected $_read_timeout_milliseconds = 0;
-
+
/**
* Constructor
*
@@ -134,10 +134,10 @@ class Stomp
require_once 'Stomp/Exception.php';
throw new Stomp_Exception("No broker defined");
}
-
+
// force disconnect, if previous established connection exists
$this->disconnect();
-
+
$i = $this->_currentHost;
$att = 0;
$connected = false;
@@ -190,11 +190,11 @@ class Stomp
if ($password != '') {
$this->_password = $password;
}
- $headers = array('login' => $this->_username , 'passcode' => $this->_password);
- if ($this->clientId != null) {
- $headers["client-id"] = $this->clientId;
- }
- $frame = new Stomp_Frame("CONNECT", $headers);
+ $headers = array('login' => $this->_username , 'passcode' => $this->_password);
+ if ($this->clientId != null) {
+ $headers["client-id"] = $this->clientId;
+ }
+ $frame = new Stomp_Frame("CONNECT", $headers);
$this->_writeFrame($frame);
$frame = $this->readFrame();
if ($frame instanceof Stomp_Frame && $frame->command == 'CONNECTED') {
@@ -209,7 +209,7 @@ class Stomp
}
}
}
-
+
/**
* Check if client session has ben established
*
@@ -229,7 +229,7 @@ class Stomp
return $this->_sessionId;
}
/**
- * Send a message to a destination in the messaging system
+ * Send a message to a destination in the messaging system
*
* @param string $destination Destination queue
* @param string|Stomp_Frame $msg Message
@@ -237,7 +237,7 @@ class Stomp
* @param boolean $sync Perform request synchronously
* @return boolean
*/
- public function send ($destination, $msg, $properties = array(), $sync = null)
+ public function send ($destination, $msg, $properties = null, $sync = null)
{
if ($msg instanceof Stomp_Frame) {
$msg->headers['destination'] = $destination;
@@ -319,12 +319,10 @@ class Stomp
public function subscribe ($destination, $properties = null, $sync = null)
{
$headers = array('ack' => 'client');
- // FIXME: this seems to be activemq specific, but not hurting rabbitmq?
- $headers['activemq.prefetchSize'] = $this->prefetchSize;
- if ($this->clientId != null) {
- // FIXME: this seems to be activemq specific, but not hurting rabbitmq?
- $headers["activemq.subcriptionName"] = $this->clientId;
- }
+ $headers['activemq.prefetchSize'] = $this->prefetchSize;
+ if ($this->clientId != null) {
+ $headers["activemq.subcriptionName"] = $this->clientId;
+ }
if (isset($properties)) {
foreach ($properties as $name => $value) {
$headers[$name] = $value;
@@ -426,7 +424,7 @@ class Stomp
}
/**
* Acknowledge consumption of a message from a subscription
- * Note: This operation is always asynchronous
+ * Note: This operation is always asynchronous
*
* @param string|Stomp_Frame $messageMessage ID
* @param string $transactionId
@@ -435,26 +433,20 @@ class Stomp
*/
public function ack ($message, $transactionId = null)
{
- // Handle the headers,
- $headers = array();
-
if ($message instanceof Stomp_Frame) {
- // Copy headers from the object
- // FIXME: at least content-length can be wrong here (set to 3 sometimes).
- $headers = $message->headers;
+ $frame = new Stomp_Frame('ACK', $message->headers);
+ $this->_writeFrame($frame);
+ return true;
} else {
+ $headers = array();
if (isset($transactionId)) {
$headers['transaction'] = $transactionId;
}
$headers['message-id'] = $message;
+ $frame = new Stomp_Frame('ACK', $headers);
+ $this->_writeFrame($frame);
+ return true;
}
- // An ACK has no content
- $headers['content-length'] = 0;
-
- // Create it and write it out
- $frame = new Stomp_Frame('ACK', $headers);
- $this->_writeFrame($frame);
- return true;
}
/**
* Graceful disconnect from the server
@@ -462,11 +454,11 @@ class Stomp
*/
public function disconnect ()
{
- $headers = array();
+ $headers = array();
- if ($this->clientId != null) {
- $headers["client-id"] = $this->clientId;
- }
+ if ($this->clientId != null) {
+ $headers["client-id"] = $this->clientId;
+ }
if (is_resource($this->_socket)) {
$this->_writeFrame(new Stomp_Frame('DISCONNECT', $headers));
@@ -498,19 +490,19 @@ class Stomp
$this->_writeFrame($stompFrame);
}
}
-
+
/**
* Set timeout to wait for content to read
*
* @param int $seconds_to_wait Seconds to wait for a frame
* @param int $milliseconds Milliseconds to wait for a frame
*/
- public function setReadTimeout($seconds, $milliseconds = 0)
+ public function setReadTimeout($seconds, $milliseconds = 0)
{
$this->_read_timeout_seconds = $seconds;
$this->_read_timeout_milliseconds = $milliseconds;
}
-
+
/**
* Read responce frame from server
*
@@ -521,29 +513,19 @@ class Stomp
if (!$this->hasFrameToRead()) {
return false;
}
-
+
$rb = 1024;
$data = '';
- do {
- $read = fread($this->_socket, $rb);
- if ($read === false) {
- $this->_reconnect();
- return $this->readFrame();
- }
- $data .= $read;
- $len = strlen($data);
-
- $continue = true;
- // ActiveMq apparently add \n after 0 char
- if($data[$len - 2] == "\x00" && $data[$len - 1] == "\n") {
- $continue = false;
- }
-
- // RabbitMq does not
- if($data[$len - 1] == "\x00") {
- $continue = false;
- }
- } while ( $continue );
+ do {
+ $read = fgets($this->_socket, $rb);
+ if ($read === false) {
+ $this->_reconnect();
+ return $this->readFrame();
+ }
+ $data .= $read;
+ $len = strlen($data);
+ } while (($len < 2 || ! ($data[$len - 2] == "\x00" && $data[$len - 1] == "\n")));
+
list ($header, $body) = explode("\n\n", $data, 2);
$header = explode("\n", $header);
$headers = array();
@@ -564,7 +546,7 @@ class Stomp
return $frame;
}
}
-
+
/**
* Check if there is a frame to read
*
@@ -575,7 +557,7 @@ class Stomp
$read = array($this->_socket);
$write = null;
$except = null;
-
+
$has_frame_to_read = stream_select($read, $write, $except, $this->_read_timeout_seconds, $this->_read_timeout_milliseconds);
if ($has_frame_to_read === false) {
@@ -583,18 +565,18 @@ class Stomp
} else if ($has_frame_to_read > 0) {
return true;
} else {
- return false;
+ return false;
}
}
-
+
/**
* Reconnects and renews subscriptions (if there were any)
- * Call this method when you detect connection problems
+ * Call this method when you detect connection problems
*/
protected function _reconnect ()
{
$subscriptions = $this->_subscriptions;
-
+
$this->connect($this->_username, $this->_password);
foreach ($subscriptions as $dest => $properties) {
$this->subscribe($dest, $properties);
diff --git a/extlib/Stomp/Frame.php b/extlib/Stomp/Frame.php
index 9fd97b4f5..dc59c1cb7 100644
--- a/extlib/Stomp/Frame.php
+++ b/extlib/Stomp/Frame.php
@@ -17,46 +17,46 @@
*/
/* vim: set expandtab tabstop=3 shiftwidth=3: */
-
-/**
- * Stomp Frames are messages that are sent and received on a StompConnection.
- *
- * @package Stomp
- * @author Hiram Chirino <hiram@hiramchirino.com>
- * @author Dejan Bosanac <dejan@nighttale.net>
- * @author Michael Caplan <mcaplan@labnet.net>
- * @version $Revision: 36 $
- */
-class Stomp_Frame
-{
- public $command;
- public $headers = array();
- public $body;
-
- /**
- * Constructor
- *
- * @param string $command
- * @param array $headers
- * @param string $body
- */
- public function __construct ($command = null, $headers = null, $body = null)
- {
- $this->_init($command, $headers, $body);
- }
-
- protected function _init ($command = null, $headers = null, $body = null)
- {
- $this->command = $command;
- if ($headers != null) {
- $this->headers = $headers;
- }
- $this->body = $body;
-
- if ($this->command == 'ERROR') {
- require_once 'Stomp/Exception.php';
- throw new Stomp_Exception($this->headers['message'], 0, $this->body);
- }
+
+/**
+ * Stomp Frames are messages that are sent and received on a StompConnection.
+ *
+ * @package Stomp
+ * @author Hiram Chirino <hiram@hiramchirino.com>
+ * @author Dejan Bosanac <dejan@nighttale.net>
+ * @author Michael Caplan <mcaplan@labnet.net>
+ * @version $Revision: 36 $
+ */
+class Stomp_Frame
+{
+ public $command;
+ public $headers = array();
+ public $body;
+
+ /**
+ * Constructor
+ *
+ * @param string $command
+ * @param array $headers
+ * @param string $body
+ */
+ public function __construct ($command = null, $headers = null, $body = null)
+ {
+ $this->_init($command, $headers, $body);
+ }
+
+ protected function _init ($command = null, $headers = null, $body = null)
+ {
+ $this->command = $command;
+ if ($headers != null) {
+ $this->headers = $headers;
+ }
+ $this->body = $body;
+
+ if ($this->command == 'ERROR') {
+ require_once 'Stomp/Exception.php';
+ throw new Stomp_Exception($this->headers['message'], 0, $this->body);
+ }
}
/**
@@ -74,8 +74,7 @@ class Stomp_Frame
$data .= "\n";
$data .= $this->body;
- $data .= "\x00\n"; // Should there really be a linefeed here?
- return $data;
- }
-}
+ return $data .= "\x00\n";
+ }
+}
?> \ No newline at end of file
diff --git a/extlib/Stomp/Message.php b/extlib/Stomp/Message.php
index 055662133..6bcad3efd 100644
--- a/extlib/Stomp/Message.php
+++ b/extlib/Stomp/Message.php
@@ -29,12 +29,8 @@ require_once 'Stomp/Frame.php';
*/
class Stomp_Message extends Stomp_Frame
{
- public function __construct ($body, $headers = array())
+ public function __construct ($body, $headers = null)
{
- if(!isset($headers['content-length'])) {
- // TODO: log this, to see if this is correct
- $headers['content-length'] = strlen($body);
- }
$this->_init("SEND", $headers, $body);
}
}
diff --git a/lib/action.php b/lib/action.php
index 06cdbdfe0..ebef4f9e4 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -900,7 +900,6 @@ class Action extends HTMLOutputter // lawsuit
!$etag ||
$this->_hasEtag($etag, $if_none_match)) {
header('HTTP/1.1 304 Not Modified');
- header('Content-Length: 0');
// Better way to do this?
exit(0);
}
@@ -919,7 +918,6 @@ class Action extends HTMLOutputter // lawsuit
header('ETag: ' . $etag);
if($if_none_match && $this->_hasEtag($etag, $if_none_match)) {
header('HTTP/1.1 304 Not Modified');
- header('Content-Length: 0');
// Better way to do this?
exit(0);
}
diff --git a/lib/stompqueuemanager.php b/lib/stompqueuemanager.php
index 5d8b2996b..f059b42f0 100644
--- a/lib/stompqueuemanager.php
+++ b/lib/stompqueuemanager.php
@@ -141,11 +141,10 @@ class StompQueueManager
$this->con->ack($frame);
} else {
if ($handler->handle_notice($notice)) {
- $this->_log(LOG_INFO, 'Successfully handled notice '. $notice->id .' originally posted at ' . $notice->created . ' in queue '. $queue);
-
+ $this->_log(LOG_INFO, 'Successfully handled notice '. $notice->id .' posted at ' . $frame->headers['created'] . ' in queue '. $queue);
$this->con->ack($frame);
} else {
- $this->_log(LOG_WARNING, 'Failed handling notice '. $notice->id .' originally posted at ' . $notice->created . ' in queue '. $queue);
+ $this->_log(LOG_WARNING, 'Failed handling notice '. $notice->id .' posted at ' . $frame->headers['created'] . ' in queue '. $queue);
// FIXME we probably shouldn't have to do
// this kind of queue management ourselves
$this->con->ack($frame);
diff --git a/plugins/Autocomplete/autocomplete.php b/plugins/Autocomplete/autocomplete.php
index 96d54af8d..4379a86f2 100644
--- a/plugins/Autocomplete/autocomplete.php
+++ b/plugins/Autocomplete/autocomplete.php
@@ -62,7 +62,7 @@ class AutocompleteAction extends Action
$user->whereAdd('nickname like \'' . trim($user->escape($q), '\'') . '%\'');
$user->find();
while($user->fetch()) {
- $profile = Profile::pkeyGet(array('id' => $user->id));
+ $profile = Profile::staticGet($user->id);
$this->results[]=array('nickname' => $user->nickname, 'fullname'=> $profile->fullname, 'type'=>'user');
}
}
diff --git a/plugins/PiwikAnalyticsPlugin.php b/plugins/PiwikAnalyticsPlugin.php
index 45a11dfe4..e36bd1c5c 100644
--- a/plugins/PiwikAnalyticsPlugin.php
+++ b/plugins/PiwikAnalyticsPlugin.php
@@ -59,9 +59,9 @@ if (!defined('STATUSNET')) {
class PiwikAnalyticsPlugin extends Plugin
{
/** the base of your Piwik installation */
- var $piwikroot = null;
+ public $piwikroot = null;
/** the Piwik Id of your statusnet installation */
- var $piwikId = null;
+ public $piwikId = null;
/**
* constructor
@@ -96,7 +96,7 @@ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/ja
</script>
<script type="text/javascript">
try {
- var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", $this->piwikId);
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {$this->piwikId});
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js
index d55db5859..faec8d89c 100644
--- a/plugins/Realtime/realtimeupdate.js
+++ b/plugins/Realtime/realtimeupdate.js
@@ -1,8 +1,8 @@
// add a notice encoded as JSON into the current timeline
//
+// TODO: i18n
RealtimeUpdate = {
-
_userid: 0,
_replyurl: '',
_favorurl: '',
@@ -50,26 +50,15 @@ RealtimeUpdate = {
"<p class=\"entry-content\">"+html+"</p>"+
"</div>"+
"<div class=\"entry-content\">"+
- "<dl class=\"timestamp\">"+
- "<dt>Published</dt>"+
- "<dd>"+
- "<a rel=\"bookmark\" href=\""+data['url']+"\" >"+
+ "<a class=\"timestamp\" rel=\"bookmark\" href=\""+data['url']+"\" >"+
"<abbr class=\"published\" title=\""+data['created_at']+"\">a few seconds ago</abbr>"+
"</a> "+
- "</dd>"+
- "</dl>"+
- "<dl class=\"device\">"+
- "<dt>From</dt> "+
- "<dd>"+source+"</dd>"+ // may have a link, I think
- "</dl>";
-
+ "<span class=\"source\">"+
+ "from "+
+ "<span class=\"device\">"+source+"</span>"+ // may have a link
+ "</span>";
if (data['in_reply_to_status_id']) {
- ni = ni+" <dl class=\"response\">"+
- "<dt>To</dt>"+
- "<dd>"+
- "<a href=\""+data['in_reply_to_status_url']+"\" rel=\"in-reply-to\">in reply to</a>"+
- "</dd>"+
- "</dl>";
+ ni = ni+" <a class=\"response\" href=\""+data['in_reply_to_status_url']+"\">in context</a>";
}
ni = ni+"</div>"+
@@ -96,7 +85,7 @@ RealtimeUpdate = {
ff = "<form id=\"favor-"+id+"\" class=\"form_favor\" method=\"post\" action=\""+RealtimeUpdate._favorurl+"\">"+
"<fieldset>"+
- "<legend>Favor this notice</legend>"+ // XXX: i18n
+ "<legend>Favor this notice</legend>"+
"<input name=\"token-"+id+"\" type=\"hidden\" id=\"token-"+id+"\" value=\""+session_key+"\"/>"+
"<input name=\"notice\" type=\"hidden\" id=\"notice-n"+id+"\" value=\""+id+"\"/>"+
"<input type=\"submit\" id=\"favor-submit-"+id+"\" name=\"favor-submit-"+id+"\" class=\"submit\" value=\"Favor\" title=\"Favor this notice\"/>"+
@@ -108,13 +97,7 @@ RealtimeUpdate = {
makeReplyLink: function(id, nickname)
{
var rl;
- rl = "<dl class=\"notice_reply\">"+
- "<dt>Reply to this notice</dt>"+
- "<dd>"+
- "<a href=\""+RealtimeUpdate._replyurl+"?replyto="+nickname+"\" title=\"Reply to this notice\">Reply <span class=\"notice_id\">"+id+"</span>"+
- "</a>"+
- "</dd>"+
- "</dl>";
+ rl = "<a class=\"notice_reply\" href=\""+RealtimeUpdate._replyurl+"?replyto="+nickname+"\" title=\"Reply to this notice\">Reply <span class=\"notice_id\">"+id+"</span></a>";
return rl;
},
@@ -123,12 +106,7 @@ RealtimeUpdate = {
var dl, delurl;
delurl = RealtimeUpdate._deleteurl.replace("0000000000", id);
- dl = "<dl class=\"notice_delete\">"+
- "<dt>Delete this notice</dt>"+
- "<dd>"+
- "<a href=\""+delurl+"\" title=\"Delete this notice\">Delete</a>"+
- "</dd>"+
- "</dl>";
+ dl = "<a class=\"notice_delete\" href=\""+delurl+"\" title=\"Delete this notice\">Delete</a>";
return dl;
},