Merge branch 'testing' into 0.9.x

This commit is contained in:
Brion Vibber 2010-04-02 15:48:39 -07:00
commit e4d934827b
3 changed files with 55 additions and 13 deletions

View File

@ -184,13 +184,21 @@ class NewnoticeAction extends Action
$options = array('reply_to' => ($replyto == 'false') ? null : $replyto);
if ($user->shareLocation() && $this->arg('notice_data-geo')) {
$locOptions = Notice::locationOptions($this->trimmed('lat'),
$this->trimmed('lon'),
$this->trimmed('location_id'),
$this->trimmed('location_ns'),
$user->getProfile());
if ($user->shareLocation()) {
// use browser data if checked; otherwise profile data
if ($this->arg('notice_data-geo')) {
$locOptions = Notice::locationOptions($this->trimmed('lat'),
$this->trimmed('lon'),
$this->trimmed('location_id'),
$this->trimmed('location_ns'),
$user->getProfile());
} else {
$locOptions = Notice::locationOptions(null,
null,
null,
null,
$user->getProfile());
}
$options = array_merge($options, $locOptions);
}
@ -201,8 +209,6 @@ class NewnoticeAction extends Action
$upload->attachToNotice($notice);
}
if ($this->boolean('ajax')) {
header('Content-Type: text/xml;charset=utf-8');
$this->xw->startDocument('1.0', 'UTF-8');

View File

@ -96,12 +96,23 @@ class Inbox extends Memcached_DataObject
$inbox = new Inbox();
$inbox->user_id = $user_id;
$inbox->notice_ids = call_user_func_array('pack', array_merge(array('N*'), $ids));
$inbox->pack($ids);
$inbox->fake = true;
return $inbox;
}
/**
* Append the given notice to the given user's inbox.
* Caching updates are managed for the inbox itself.
*
* If the notice is already in this inbox, the second
* add will be silently dropped.
*
* @param int @user_id
* @param int $notice_id
* @return boolean success
*/
static function insertNotice($user_id, $notice_id)
{
$inbox = DB_DataObject::staticGet('inbox', 'user_id', $user_id);
@ -114,6 +125,13 @@ class Inbox extends Memcached_DataObject
return false;
}
$ids = $inbox->unpack();
if (in_array(intval($notice_id), $ids)) {
// Already in there, we probably re-ran some inbox adds
// due to an error. Skip the dupe silently.
return true;
}
$result = $inbox->query(sprintf('UPDATE inbox '.
'set notice_ids = concat(cast(0x%08x as binary(4)), '.
'substr(notice_ids, 1, %d)) '.
@ -150,7 +168,7 @@ class Inbox extends Memcached_DataObject
}
}
$ids = unpack('N*', $inbox->notice_ids);
$ids = $inbox->unpack();
if (!empty($since_id)) {
$newids = array();
@ -229,4 +247,21 @@ class Inbox extends Memcached_DataObject
}
return new ArrayWrapper($items);
}
/**
* Saves a list of integer notice_ids into a packed blob in this object.
* @param array $ids list of integer notice_ids
*/
protected function pack(array $ids)
{
$this->notice_ids = call_user_func_array('pack', array_merge(array('N*'), $ids));
}
/**
* @return array of integer notice_ids
*/
protected function unpack()
{
return unpack('N*', $this->notice_ids);
}
}

View File

@ -340,8 +340,9 @@ class NoticeListItem extends Widget
function showNickname()
{
$this->out->element('span', array('class' => 'nickname fn'),
$this->profile->nickname);
$this->out->raw('<span class="nickname fn">' .
htmlspecialchars($this->profile->nickname) .
'</span>');
}
/**