insert profile flags more or less correctly

This commit is contained in:
Evan Prodromou 2009-11-01 23:25:30 -05:00
parent 70e4580c3f
commit f2b642ce82
5 changed files with 97 additions and 2 deletions

View File

@ -39,6 +39,8 @@ class Profile_flag extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
const DEFAULTFLAG = 'review'; // default flag
function table() {
return array(
'flag' => DB_DATAOBJECT_STR,

View File

@ -128,9 +128,20 @@ class UserFlagPlugin extends Plugin
if (!empty($user)) {
$form = new FlagProfileForm($action, $profile);
$action->elementStart('li', 'entity_flag');
$form->show();
if (User_flag_profile::exists($profile->id, $user->id,
Profile_flag::DEFAULTFLAG)) {
$action->element('span',
_('Flagged for review'));
} else {
$form = new FlagProfileForm($action, $profile,
array('action' => 'showstream',
'nickname' => $profile->nickname));
$form->show();
}
$action->elementEnd('li');
}
return true;

View File

@ -57,4 +57,12 @@ class User_flag_profile extends Memcached_DataObject
{
return Memcached_DataObject::pkeyGet('User_flag_profile', $kv);
}
static function exists($profile_id, $user_id, $flag)
{
$ufp = User_flag_profile::pkeyGet(array('profile_id' => $profile_id,
'user_id' => $user_id));
return !empty($ufp);
}
}

View File

@ -44,6 +44,7 @@ if (!defined('STATUSNET')) {
class FlagprofileAction extends Action
{
var $profile = null;
var $flag = null;
/**
* Take arguments for running
@ -55,10 +56,49 @@ class FlagprofileAction extends Action
function prepare($args)
{
parent::prepare($args);
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
throw new ClientException(_('Action only accepts POST'));
}
if (!common_logged_in()) {
$this->clientError(_('Not logged in.'));
return false;
}
$id = $this->trimmed('flagprofileto');
if (!$id) {
$this->clientError(_('No profile specified.'));
return false;
}
$this->profile = Profile::staticGet('id', $id);
if (empty($this->profile)) {
$this->clientError(_('No profile with that ID.'));
return false;
}
$this->flag = $this->trimmed('flag');
if (empty($this->flag)) {
$this->flag = Profile_flag::DEFAULTFLAG;
}
$user = common_current_user();
assert(!empty($user)); // checked above
if (User_flag_profile::exists($this->profile->id,
$user->id,
$this->flag))
{
$this->clientError(_('Flag already exists.'));
return false;
}
return true;
}
@ -90,6 +130,39 @@ class FlagprofileAction extends Action
function flagProfile()
{
$user = common_current_user();
assert(!empty($user));
assert(!empty($this->profile));
assert(!empty($this->flag));
$ufp = new User_flag_profile();
$ufp->profile_id = $this->profile->id;
$ufp->user_id = $user->id;
$ufp->flag = $this->flag;
$ufp->created = common_sql_now();
if (!$ufp->insert()) {
throw new ServerException(sprintf(_("Couldn't flag profile '%s' with flag '%s'."),
$this->profile->nickname, $this->flag));
}
$ufp->free();
}
function returnTo()
{
// Now, gotta figure where we go back to
foreach ($this->args as $k => $v) {
if ($k == 'returnto-action') {
$action = $v;
} elseif (substr($k, 0, 9) == 'returnto-') {
$args[substr($k, 9)] = $v;
}
}
common_redirect(common_local_url($action, $args), 303);
}
}

View File

@ -131,6 +131,7 @@ class FlagProfileForm extends Form
$this->out->hidden('flagprofileto-' . $this->profile->id,
$this->profile->id,
'flagprofileto');
if ($this->args) {
foreach ($this->args as $k => $v) {
$this->out->hidden('returnto-' . $k, $v);