Merge branch 'extprofile' into 0.9.x
This commit is contained in:
commit
061c8d959b
121
plugins/ExtendedProfile/ExtendedProfilePlugin.php
Normal file
121
plugins/ExtendedProfile/ExtendedProfilePlugin.php
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2011, StatusNet, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('STATUSNET')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extra profile bio-like fields
|
||||||
|
*
|
||||||
|
* @package ExtendedProfilePlugin
|
||||||
|
* @maintainer Brion Vibber <brion@status.net>
|
||||||
|
*/
|
||||||
|
class ExtendedProfilePlugin extends Plugin
|
||||||
|
{
|
||||||
|
|
||||||
|
function onPluginVersion(&$versions)
|
||||||
|
{
|
||||||
|
$versions[] = array('name' => 'ExtendedProfile',
|
||||||
|
'version' => STATUSNET_VERSION,
|
||||||
|
'author' => 'Brion Vibber',
|
||||||
|
'homepage' => 'http://status.net/wiki/Plugin:ExtendedProfile',
|
||||||
|
'rawdescription' =>
|
||||||
|
_m('UI extensions for additional profile fields.'));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Autoloader
|
||||||
|
*
|
||||||
|
* Loads our classes if they're requested.
|
||||||
|
*
|
||||||
|
* @param string $cls Class requested
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*/
|
||||||
|
function onAutoload($cls)
|
||||||
|
{
|
||||||
|
$lower = strtolower($cls);
|
||||||
|
switch ($lower)
|
||||||
|
{
|
||||||
|
case 'extendedprofile':
|
||||||
|
case 'extendedprofilewidget':
|
||||||
|
case 'profiledetailaction':
|
||||||
|
case 'profiledetailsettingsaction':
|
||||||
|
require_once dirname(__FILE__) . '/' . $lower . '.php';
|
||||||
|
return false;
|
||||||
|
case 'profile_detail':
|
||||||
|
require_once dirname(__FILE__) . '/' . ucfirst($lower) . '.php';
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add paths to the router table
|
||||||
|
*
|
||||||
|
* Hook for RouterInitialized event.
|
||||||
|
*
|
||||||
|
* @param Net_URL_Mapper $m URL mapper
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*/
|
||||||
|
function onStartInitializeRouter($m)
|
||||||
|
{
|
||||||
|
$m->connect(':nickname/detail',
|
||||||
|
array('action' => 'profiledetail'),
|
||||||
|
array('nickname' => Nickname::DISPLAY_FMT));
|
||||||
|
$m->connect('settings/profile/detail',
|
||||||
|
array('action' => 'profiledetailsettings'));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onCheckSchema()
|
||||||
|
{
|
||||||
|
$schema = Schema::get();
|
||||||
|
$schema->ensureTable('profile_detail', Profile_detail::schemaDef());
|
||||||
|
|
||||||
|
// @hack until key definition support is merged
|
||||||
|
Profile_detail::fixIndexes($schema);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onEndAccountSettingsProfileMenuItem($widget, $menu)
|
||||||
|
{
|
||||||
|
// TRANS: Link title attribute in user account settings menu.
|
||||||
|
$title = _('Change additional profile settings');
|
||||||
|
// TRANS: Link description in user account settings menu.
|
||||||
|
$widget->showMenuItem('profiledetailsettings',_m('Details'),$title);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onEndProfilePageProfileElements(HTMLOutputter $out, Profile $profile) {
|
||||||
|
$user = User::staticGet('id', $profile->id);
|
||||||
|
if ($user) {
|
||||||
|
$url = common_local_url('profiledetail', array('nickname' => $user->nickname));
|
||||||
|
$out->element('a', array('href' => $url), _m('More details...'));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
150
plugins/ExtendedProfile/Profile_detail.php
Normal file
150
plugins/ExtendedProfile/Profile_detail.php
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2011, StatusNet, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('STATUSNET')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Profile_detail extends Memcached_DataObject
|
||||||
|
{
|
||||||
|
public $__table = 'submirror';
|
||||||
|
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
public $profile_id;
|
||||||
|
public $field;
|
||||||
|
public $field_index; // relative ordering of multiple values in the same field
|
||||||
|
|
||||||
|
public $value; // primary text value
|
||||||
|
public $rel; // detail for some field types; eg "home", "mobile", "work" for phones or "aim", "irc", "xmpp" for IM
|
||||||
|
public $ref_profile; // for people types, allows pointing to a known profile in the system
|
||||||
|
|
||||||
|
public $created;
|
||||||
|
public $modified;
|
||||||
|
|
||||||
|
public /*static*/ function staticGet($k, $v=null)
|
||||||
|
{
|
||||||
|
return parent::staticGet(__CLASS__, $k, $v);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return table definition for DB_DataObject
|
||||||
|
*
|
||||||
|
* DB_DataObject needs to know something about the table to manipulate
|
||||||
|
* instances. This method provides all the DB_DataObject needs to know.
|
||||||
|
*
|
||||||
|
* @return array array of column definitions
|
||||||
|
*/
|
||||||
|
|
||||||
|
function table()
|
||||||
|
{
|
||||||
|
return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
|
||||||
|
|
||||||
|
'profile_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
|
||||||
|
'field' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
|
||||||
|
'field_index' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
|
||||||
|
|
||||||
|
'value' => DB_DATAOBJECT_STR,
|
||||||
|
'rel' => DB_DATAOBJECT_STR,
|
||||||
|
'ref_profile' => DB_DATAOBJECT_ID,
|
||||||
|
|
||||||
|
'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
|
||||||
|
'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static function schemaDef()
|
||||||
|
{
|
||||||
|
// @fixme need a reverse key on (subscribed, subscriber) as well
|
||||||
|
return array(new ColumnDef('id', 'integer',
|
||||||
|
null, false, 'PRI'),
|
||||||
|
|
||||||
|
// @fixme need a unique index on these three
|
||||||
|
new ColumnDef('profile_id', 'integer',
|
||||||
|
null, false),
|
||||||
|
new ColumnDef('field', 'varchar',
|
||||||
|
16, false),
|
||||||
|
new ColumnDef('field_index', 'integer',
|
||||||
|
null, false),
|
||||||
|
|
||||||
|
new ColumnDef('value', 'text',
|
||||||
|
null, true),
|
||||||
|
new ColumnDef('rel', 'varchar',
|
||||||
|
16, true),
|
||||||
|
new ColumnDef('ref_profile', 'integer',
|
||||||
|
null, true),
|
||||||
|
|
||||||
|
new ColumnDef('created', 'datetime',
|
||||||
|
null, false),
|
||||||
|
new ColumnDef('modified', 'datetime',
|
||||||
|
null, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Temporary hack to set up the compound index, since we can't do
|
||||||
|
* it yet through regular Schema interface. (Coming for 1.0...)
|
||||||
|
*
|
||||||
|
* @param Schema $schema
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
static function fixIndexes($schema)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
// @fixme this won't be a unique index... SIGH
|
||||||
|
$schema->createIndex('profile_detail', array('profile_id', 'field', 'field_index'));
|
||||||
|
} catch (Exception $e) {
|
||||||
|
common_log(LOG_ERR, __METHOD__ . ': ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return key definitions for DB_DataObject
|
||||||
|
*
|
||||||
|
* DB_DataObject needs to know about keys that the table has; this function
|
||||||
|
* defines them.
|
||||||
|
*
|
||||||
|
* @return array key definitions
|
||||||
|
*/
|
||||||
|
|
||||||
|
function keys()
|
||||||
|
{
|
||||||
|
return array_keys($this->keyTypes());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return key definitions for Memcached_DataObject
|
||||||
|
*
|
||||||
|
* Our caching system uses the same key definitions, but uses a different
|
||||||
|
* method to get them.
|
||||||
|
*
|
||||||
|
* @return array key definitions
|
||||||
|
*/
|
||||||
|
|
||||||
|
function keyTypes()
|
||||||
|
{
|
||||||
|
// @fixme keys
|
||||||
|
// need a sane key for reverse lookup too
|
||||||
|
return array('id' => 'K');
|
||||||
|
}
|
||||||
|
|
||||||
|
function sequenceKey()
|
||||||
|
{
|
||||||
|
return array('id', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
139
plugins/ExtendedProfile/extendedprofile.php
Normal file
139
plugins/ExtendedProfile/extendedprofile.php
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2011, StatusNet, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('STATUSNET')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ExtendedProfile
|
||||||
|
{
|
||||||
|
function __construct(Profile $profile)
|
||||||
|
{
|
||||||
|
$this->profile = $profile;
|
||||||
|
$this->sections = $this->getSections();
|
||||||
|
$this->fields = $this->loadFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadFields()
|
||||||
|
{
|
||||||
|
$detail = new Profile_detail();
|
||||||
|
$detail->profile_id = $this->profile->id;
|
||||||
|
$detail->find();
|
||||||
|
|
||||||
|
while ($detail->get()) {
|
||||||
|
$fields[$detail->field][] = clone($detail);
|
||||||
|
}
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSections()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'basic' => array(
|
||||||
|
'label' => _m('Personal'),
|
||||||
|
'fields' => array(
|
||||||
|
'fullname' => array(
|
||||||
|
'label' => _m('Full name'),
|
||||||
|
'profile' => 'fullname',
|
||||||
|
'vcard' => 'fn',
|
||||||
|
),
|
||||||
|
'title' => array(
|
||||||
|
'label' => _m('Title'),
|
||||||
|
'vcard' => 'title',
|
||||||
|
),
|
||||||
|
'manager' => array(
|
||||||
|
'label' => _m('Manager'),
|
||||||
|
'type' => 'person',
|
||||||
|
'vcard' => 'x-manager',
|
||||||
|
),
|
||||||
|
'location' => array(
|
||||||
|
'label' => _m('Location'),
|
||||||
|
'profile' => 'location'
|
||||||
|
),
|
||||||
|
'bio' => array(
|
||||||
|
'label' => _m('Bio'),
|
||||||
|
'type' => 'textarea',
|
||||||
|
'profile' => 'bio',
|
||||||
|
),
|
||||||
|
'tags' => array(
|
||||||
|
'label' => _m('Tags'),
|
||||||
|
'type' => 'tags',
|
||||||
|
'profile' => 'tags',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'contact' => array(
|
||||||
|
'label' => _m('Contact'),
|
||||||
|
'fields' => array(
|
||||||
|
'phone' => array(
|
||||||
|
'label' => _m('Phone'),
|
||||||
|
'type' => 'phone',
|
||||||
|
'multi' => true,
|
||||||
|
'vcard' => 'tel',
|
||||||
|
),
|
||||||
|
'im' => array(
|
||||||
|
'label' => _m('IM'),
|
||||||
|
'type' => 'im',
|
||||||
|
'multi' => true,
|
||||||
|
),
|
||||||
|
'website' => array(
|
||||||
|
'label' => _m('Websites'),
|
||||||
|
'type' => 'website',
|
||||||
|
'multi' => true,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'personal' => array(
|
||||||
|
'label' => _m('Personal'),
|
||||||
|
'fields' => array(
|
||||||
|
'birthday' => array(
|
||||||
|
'label' => _m('Birthday'),
|
||||||
|
'type' => 'date',
|
||||||
|
'vcard' => 'bday',
|
||||||
|
),
|
||||||
|
'spouse' => array(
|
||||||
|
'label' => _m('Spouse\'s name'),
|
||||||
|
'vcard' => 'x-spouse',
|
||||||
|
),
|
||||||
|
'kids' => array(
|
||||||
|
'label' => _m('Kids\' names')
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'experience' => array(
|
||||||
|
'label' => _m('Work experience'),
|
||||||
|
'fields' => array(
|
||||||
|
'experience' => array(
|
||||||
|
'type' => 'experience',
|
||||||
|
'label' => _m('Employer'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'education' => array(
|
||||||
|
'label' => _m('Education'),
|
||||||
|
'fields' => array(
|
||||||
|
'education' => array(
|
||||||
|
'type' => 'education',
|
||||||
|
'label' => _m('Institution'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
102
plugins/ExtendedProfile/extendedprofilewidget.php
Normal file
102
plugins/ExtendedProfile/extendedprofilewidget.php
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2011, StatusNet, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('STATUSNET')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ExtendedProfileWidget extends Widget
|
||||||
|
{
|
||||||
|
const EDITABLE=true;
|
||||||
|
|
||||||
|
protected $profile;
|
||||||
|
protected $ext;
|
||||||
|
|
||||||
|
public function __construct(XMLOutputter $out=null, Profile $profile=null, $editable=false)
|
||||||
|
{
|
||||||
|
parent::__construct($out);
|
||||||
|
|
||||||
|
$this->profile = $profile;
|
||||||
|
$this->ext = new ExtendedProfile($this->profile);
|
||||||
|
|
||||||
|
$this->editable = $editable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function show()
|
||||||
|
{
|
||||||
|
$sections = $this->ext->getSections();
|
||||||
|
foreach ($sections as $name => $section) {
|
||||||
|
$this->showExtendedProfileSection($name, $section);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function showExtendedProfileSection($name, $section)
|
||||||
|
{
|
||||||
|
$this->out->element('h3', null, $section['label']);
|
||||||
|
$this->out->elementStart('table', array('class' => 'extended-profile'));
|
||||||
|
foreach ($section['fields'] as $fieldName => $field) {
|
||||||
|
$this->showExtendedProfileField($fieldName, $field);
|
||||||
|
}
|
||||||
|
$this->out->elementEnd('table');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function showExtendedProfileField($name, $field)
|
||||||
|
{
|
||||||
|
$this->out->elementStart('tr');
|
||||||
|
|
||||||
|
$this->out->element('th', null, $field['label']);
|
||||||
|
|
||||||
|
$this->out->elementStart('td');
|
||||||
|
if ($this->editable) {
|
||||||
|
$this->showEditableField($name, $field);
|
||||||
|
} else {
|
||||||
|
$this->showFieldValue($name, $field);
|
||||||
|
}
|
||||||
|
$this->out->elementEnd('td');
|
||||||
|
|
||||||
|
$this->out->elementEnd('tr');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function showFieldValue($name, $field)
|
||||||
|
{
|
||||||
|
$this->out->text($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function showEditableField($name, $field)
|
||||||
|
{
|
||||||
|
$out = $this->out;
|
||||||
|
//$out = new HTMLOutputter();
|
||||||
|
// @fixme
|
||||||
|
$type = strval(@$field['type']);
|
||||||
|
$id = "extprofile-" . $name;
|
||||||
|
$value = 'placeholder';
|
||||||
|
|
||||||
|
switch ($type) {
|
||||||
|
case '':
|
||||||
|
case 'text':
|
||||||
|
$out->input($id, null, $value);
|
||||||
|
break;
|
||||||
|
case 'textarea':
|
||||||
|
$out->textarea($id, null, $value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$out->input($id, null, "TYPE: $type");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
22
plugins/ExtendedProfile/profiledetail.css
Normal file
22
plugins/ExtendedProfile/profiledetail.css
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/* Note the #content is only needed to override weird crap in default styles */
|
||||||
|
|
||||||
|
#content table.extended-profile {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: separate;
|
||||||
|
border-spacing: 8px;
|
||||||
|
}
|
||||||
|
#content table.extended-profile th {
|
||||||
|
color: #777;
|
||||||
|
background-color: #eee;
|
||||||
|
width: 150px;
|
||||||
|
|
||||||
|
padding-top: 0; /* override bizarre theme defaults */
|
||||||
|
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 8px;
|
||||||
|
}
|
||||||
|
#content table.extended-profile td {
|
||||||
|
padding: 0; /* override bizarre theme defaults */
|
||||||
|
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
71
plugins/ExtendedProfile/profiledetailaction.php
Normal file
71
plugins/ExtendedProfile/profiledetailaction.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2011, StatusNet, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('STATUSNET')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ProfileDetailAction extends ProfileAction
|
||||||
|
{
|
||||||
|
function isReadOnly($args)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function title()
|
||||||
|
{
|
||||||
|
return $this->profile->getFancyName();
|
||||||
|
}
|
||||||
|
|
||||||
|
function showLocalNav()
|
||||||
|
{
|
||||||
|
$nav = new PersonalGroupNav($this);
|
||||||
|
$nav->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
function showStylesheets() {
|
||||||
|
parent::showStylesheets();
|
||||||
|
$this->cssLink('plugins/ExtendedProfile/profiledetail.css');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function handle($args)
|
||||||
|
{
|
||||||
|
$this->showPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
function showContent()
|
||||||
|
{
|
||||||
|
$cur = common_current_user();
|
||||||
|
if ($cur && $cur->id == $this->profile->id) { // your own page
|
||||||
|
$this->elementStart('div', 'entity_actions');
|
||||||
|
$this->elementStart('li', 'entity_edit');
|
||||||
|
$this->element('a', array('href' => common_local_url('profiledetailsettings'),
|
||||||
|
// TRANS: Link title for link on user profile.
|
||||||
|
'title' => _m('Edit extended profile settings')),
|
||||||
|
// TRANS: Link text for link on user profile.
|
||||||
|
_m('Edit'));
|
||||||
|
$this->elementEnd('li');
|
||||||
|
$this->elementEnd('div');
|
||||||
|
}
|
||||||
|
|
||||||
|
$widget = new ExtendedProfileWidget($this, $this->profile);
|
||||||
|
$widget->show();
|
||||||
|
}
|
||||||
|
}
|
63
plugins/ExtendedProfile/profiledetailsettingsaction.php
Normal file
63
plugins/ExtendedProfile/profiledetailsettingsaction.php
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2011, StatusNet, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('STATUSNET')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ProfileDetailSettingsAction extends AccountSettingsAction
|
||||||
|
{
|
||||||
|
|
||||||
|
function title()
|
||||||
|
{
|
||||||
|
return _m('Extended profile settings');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructions for use
|
||||||
|
*
|
||||||
|
* @return instructions for use
|
||||||
|
*/
|
||||||
|
function getInstructions()
|
||||||
|
{
|
||||||
|
// TRANS: Usage instructions for profile settings.
|
||||||
|
return _('You can update your personal profile info here '.
|
||||||
|
'so people know more about you.');
|
||||||
|
}
|
||||||
|
|
||||||
|
function showStylesheets() {
|
||||||
|
parent::showStylesheets();
|
||||||
|
$this->cssLink('plugins/ExtendedProfile/profiledetail.css');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function handle($args)
|
||||||
|
{
|
||||||
|
$this->showPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
function showContent()
|
||||||
|
{
|
||||||
|
$cur = common_current_user();
|
||||||
|
$profile = $cur->getProfile();
|
||||||
|
|
||||||
|
$widget = new ExtendedProfileWidget($this, $profile, ExtendedProfileWidget::EDITABLE);
|
||||||
|
$widget->show();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user