From a72dbc1aff774446c0c31bb219d748484453b59e Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 10:58:19 -0500 Subject: [PATCH] add a profile block to left column --- lib/action.php | 16 ++++++ lib/defaultprofileblock.php | 112 ++++++++++++++++++++++++++++++++++++ lib/profileblock.php | 109 +++++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+) create mode 100644 lib/defaultprofileblock.php create mode 100644 lib/profileblock.php diff --git a/lib/action.php b/lib/action.php index 12464c2c68..aa85c40f22 100644 --- a/lib/action.php +++ b/lib/action.php @@ -716,10 +716,26 @@ class Action extends HTMLOutputter // lawsuit // Need to have this ID for CSS; I'm too lazy to add it to // all menus $this->elementStart('div', array('id' => 'site_nav_local_views')); + // Cheat cheat cheat! + $this->showProfileBlock(); $this->showLocalNav(); $this->elementEnd('div'); } + /** + * If there's a logged-in user, show a bit of login context + * + * @return nothing + */ + + function showProfileBlock() + { + if (common_logged_in()) { + $block = new DefaultProfileBlock($this); + $block->show(); + } + } + /** * Show local navigation. * diff --git a/lib/defaultprofileblock.php b/lib/defaultprofileblock.php new file mode 100644 index 0000000000..a072b56f16 --- /dev/null +++ b/lib/defaultprofileblock.php @@ -0,0 +1,112 @@ +. + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Default profile block + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class DefaultProfileBlock extends ProfileBlock +{ + protected $profile = null; + + function __construct($out) + { + parent::__construct($out); + $user = common_current_user(); + if (empty($user)) { + throw new Exception("DefaultProfileBlock with no user."); + } + $this->profile = $user->getProfile(); + } + + function avatar() + { + $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); + if (empty($avatar)) { + $avatar = $this->profile->getAvatar(73); + } + return (!empty($avatar)) ? + $avatar->displayUrl() : + Avatar::defaultImage(AVATAR_PROFILE_SIZE); + } + + function name() + { + return $this->profile->getBestName(); + } + + function url() + { + return $this->profile->profileurl; + } + + function canEdit() + { + return true; + } + + function editUrl() + { + return common_local_url('profilesettings'); + } + + function editText() + { + return _('Edit'); + } + + function location() + { + return $this->profile->location; + } + + function homepage() + { + return $this->profile->homepage; + } + + function description() + { + return $this->profile->bio; + } +} \ No newline at end of file diff --git a/lib/profileblock.php b/lib/profileblock.php new file mode 100644 index 0000000000..3e8e929821 --- /dev/null +++ b/lib/profileblock.php @@ -0,0 +1,109 @@ +. + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Class comment + * + * @category General + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +abstract class ProfileBlock extends Widget +{ + abstract function avatar(); + abstract function name(); + abstract function url(); + abstract function canEdit(); + abstract function editUrl(); + abstract function editText(); + abstract function location(); + abstract function homepage(); + abstract function description(); + + function show() + { + $this->out->elementStart('div', 'profile_block'); + + $this->out->element('img', array('src' => $this->avatar(), + 'class' => 'profile_block_avatar', + 'alt' => $this->name(), + 'width' => AVATAR_PROFILE_SIZE, + 'height' => AVATAR_PROFILE_SIZE)); + + if ($this->canEdit()) { + $this->out->element('a', array('href' => $this->editUrl()), + $this->editText()); + } + + $name = $this->name(); + + if (!empty($name)) { + $url = $this->url(); + if (!empty($url)) { + $this->out->element('a', array('href' => $url), + $name); + } else { + $this->out->element('span', 'profile_block_name', $name); + } + } + + $location = $this->location(); + + if (!empty($location)) { + $this->out->element('span', 'profile_block_location', $location); + } + + $homepage = $this->homepage(); + + if (!empty($homepage)) { + $this->out->element('a', 'profile_block_homepage', $homepage); + } + + $description = $this->description(); + + if (!empty($description)) { + $this->out->element('p', + 'profile_block_description', + $description); + } + + $this->out->elementEnd('div'); + } +}