enable block API

darcs-hash:20081208185728-5ed1f-8d5f6be6decfbb50deb4ca50bee13404d0c51b72.gz
This commit is contained in:
Evan Prodromou 2008-12-08 13:57:28 -05:00
parent cd5eec767a
commit ef3d487ae0
4 changed files with 93 additions and 45 deletions

View File

@ -118,41 +118,13 @@ class BlockAction extends Action {
return; return;
} }
# Add a new block record $result = $cur->block($this->profile);
$block = new Profile_block();
# Begin a transaction
$block->query('BEGIN');
$block->blocker = $cur->id;
$block->blocked = $this->profile->id;
$result = $block->insert();
if (!$result) { if (!$result) {
common_log_db_error($block, 'INSERT', __FILE__); $this->server_error(_('Failed to save block information.'));
$this->server_error(_('Could not save new block record.'));
return; return;
} }
# Cancel their subscription, if it exists
$sub = Subscription::pkeyGet(array('subscriber' => $this->profile->id,
'subscribed' => $cur->id));
if ($sub) {
$result = $sub->delete();
if (!$result) {
common_log_db_error($sub, 'DELETE', __FILE__);
$this->server_error(_('Could not delete subscription.'));
return;
}
}
$block->query('COMMIT');
# Now, gotta figure where we go back to # Now, gotta figure where we go back to
foreach ($this->args as $k => $v) { foreach ($this->args as $k => $v) {

View File

@ -24,13 +24,40 @@ require_once(INSTALLDIR.'/lib/twitterapi.php');
class TwitapiblocksAction extends TwitterapiAction { class TwitapiblocksAction extends TwitterapiAction {
function create($args, $apidata) { function create($args, $apidata) {
parent::handle($args); parent::handle($args);
common_server_error(_('API method under construction.'), $code=501);
$blockee = $this->get_user($apidata['api_arg'], $apidata);
if (!$blockee) {
$this->client_error('Not Found', 404, $apidata['content-type']);
return;
}
$user = $apidata['user'];
if ($user->hasBlocked($blockee) || $user->block($blockee)) {
$this->show_profile($blockee, $apidata['content-type']);
} else {
common_server_error(_('Block user failed.'));
}
} }
function destroy($args, $apidata) { function destroy($args, $apidata) {
parent::handle($args); parent::handle($args);
common_server_error(_('API method under construction.'), $code=501); $blockee = $this->get_user($apidata['api_arg'], $apidata);
if (!$blockee) {
$this->client_error('Not Found', 404, $apidata['content-type']);
return;
} }
$user = $apidata['user'];
if (!$user->hasBlocked($blockee) || $user->unblock($blockee)) {
$this->show_profile($blockee, $apidata['content-type']);
} else {
common_server_error(_('Unblock user failed.'));
}
}
} }

View File

@ -67,20 +67,10 @@ class UnblockAction extends Action {
$cur = common_current_user(); $cur = common_current_user();
# Get the block record $result = $cur->unblock($this->profile);
$block = Profile_block::get($cur->id, $this->profile->id);
if (!$block) {
$this->client_error(_('That user is not blocked!'));
return;
}
$result = $block->delete();
if (!$result) { if (!$result) {
common_log_db_error($block, 'DELETE', __FILE__); $this->server_error(_('Error removing the block.'));
$this->server_error(_('Could not delete block record.'));
return; return;
} }

View File

@ -422,4 +422,63 @@ class User extends Memcached_DataObject
function setSelfTags($newtags) { function setSelfTags($newtags) {
return Profile_tag::setTags($this->id, $this->id, $newtags); return Profile_tag::setTags($this->id, $this->id, $newtags);
} }
function block($other) {
# Add a new block record
$block = new Profile_block();
# Begin a transaction
$block->query('BEGIN');
$block->blocker = $this->id;
$block->blocked = $other->id;
$result = $block->insert();
if (!$result) {
common_log_db_error($block, 'INSERT', __FILE__);
return false;
}
# Cancel their subscription, if it exists
$sub = Subscription::pkeyGet(array('subscriber' => $other->id,
'subscribed' => $this->id));
if ($sub) {
$result = $sub->delete();
if (!$result) {
common_log_db_error($sub, 'DELETE', __FILE__);
return false;
}
}
$block->query('COMMIT');
return true;
}
function unblock($other) {
# Get the block record
$block = Profile_block::get($this->id, $other->id);
if (!$block) {
return false;
}
$result = $block->delete();
if (!$result) {
common_log_db_error($block, 'DELETE', __FILE__);
return false;
}
return true;
}
} }