Better detial in connected OAuth applications list

This commit is contained in:
Zach Copley 2010-01-11 14:11:43 -08:00
parent 11bd98025c
commit c78937537e
3 changed files with 82 additions and 33 deletions

View File

@ -48,6 +48,16 @@ require_once INSTALLDIR . '/lib/applicationlist.php';
class OauthconnectionssettingsAction extends ConnectSettingsAction class OauthconnectionssettingsAction extends ConnectSettingsAction
{ {
var $page = null;
function prepare($args)
{
parent::prepare($args);
$this->page = ($this->arg('page')) ? ($this->arg('page') + 0) : 1;
return true;
}
/** /**
* Title of the page * Title of the page
* *
@ -59,6 +69,11 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
return _('Connected Applications'); return _('Connected Applications');
} }
function isReadOnly($args)
{
return true;
}
/** /**
* Instructions for use * Instructions for use
* *
@ -86,13 +101,16 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
$application = $profile->getApplications($offset, $limit); $application = $profile->getApplications($offset, $limit);
if ($application) { $cnt == 0;
$al = new ApplicationList($application, $this->user, $this);
$cnt = $al->show(); if (!empty($application)) {
if (0 == $cnt) { $al = new ApplicationList($application, $user, $this, true);
$this->showEmptyListMessage(); $cnt = $al->show();
} }
}
if ($cnt == 0) {
$this->showEmptyListMessage();
}
$this->pagination($this->page > 1, $cnt > APPS_PER_PAGE, $this->pagination($this->page > 1, $cnt > APPS_PER_PAGE,
$this->page, 'connectionssettings', $this->page, 'connectionssettings',

View File

@ -355,10 +355,11 @@ class Profile extends Memcached_DataObject
function getApplications($offset = 0, $limit = null) function getApplications($offset = 0, $limit = null)
{ {
$qry = $qry =
'SELECT oauth_application_user.* ' . 'SELECT a.* ' .
'FROM oauth_application_user ' . 'FROM oauth_application_user u, oauth_application a ' .
'WHERE profile_id = %d ' . 'WHERE u.profile_id = %d ' .
'ORDER BY created DESC '; 'AND a.id = u.application_id ' .
'ORDER BY u.created DESC ';
if ($offset > 0) { if ($offset > 0) {
if (common_config('db','type') == 'pgsql') { if (common_config('db','type') == 'pgsql') {

View File

@ -57,13 +57,14 @@ class ApplicationList extends Widget
/** Action object using us. */ /** Action object using us. */
var $action = null; var $action = null;
function __construct($application, $owner=null, $action=null) function __construct($application, $owner=null, $action=null, $connections = false)
{ {
parent::__construct($action); parent::__construct($action);
$this->application = $application; $this->application = $application;
$this->owner = $owner; $this->owner = $owner;
$this->action = $action; $this->action = $action;
$this->connections = $connections;
} }
function show() function show()
@ -97,36 +98,65 @@ class ApplicationList extends Widget
$this->out->element('img', array('src' => $this->application->icon)); $this->out->element('img', array('src' => $this->application->icon));
} }
$this->out->elementStart('a', if (!$this->connections) {
array('href' => common_local_url(
'showapplication', $this->out->elementStart('a',
array( array('href' =>
'nickname' => $user->nickname, common_local_url('showapplication',
'id' => $this->application->id array('nickname' => $user->nickname,
) 'id' => $this->application->id)),
), 'class' => 'url')
'class' => 'url') );
);
$this->out->raw($this->application->name); $this->out->raw($this->application->name);
$this->out->elementEnd('a'); $this->out->elementEnd('a');
} else {
$this->out->raw(' by ');
$this->out->elementStart('a', $this->out->elementStart('a',
array( array('href' => $this->application->source_url,
'href' => $this->application->homepage, 'class' => 'url'));
'class' => 'url'
)
);
$this->out->raw($this->application->organization);
$this->out->elementEnd('a');
$this->out->elementStart('p', 'note'); $this->out->raw($this->application->name);
$this->out->elementEnd('a');
}
$this->out->raw(' by ');
$this->out->elementStart('a',
array(
'href' => $this->application->homepage,
'class' => 'url'
)
);
$this->out->raw($this->application->organization);
$this->out->elementEnd('a');
$this->out->elementStart('p', 'note');
$this->out->raw($this->application->description); $this->out->raw($this->application->description);
$this->out->elementEnd('p'); $this->out->elementEnd('p');
$this->out->elementEnd('li');
if ($this->connections) {
$appUser = Oauth_application_user::getByKeys($this->owner, $this->application);
if (empty($appUser)) {
common_debug("empty appUser!");
}
$this->out->elementStart('li');
$access = ($this->application->access_type & Oauth_application::$writeAccess)
? 'read-write' : 'read-only';
$txt = 'Approved ' . common_exact_date($appUser->modified) .
" $access for access.";
$this->out->raw($txt);
$this->out->elementEnd('li'); $this->out->elementEnd('li');
// XXX: Add revoke access button
}
} }
/* Override this in subclasses. */ /* Override this in subclasses. */