--- /dev/null
+<?php
+/**
+ * GNU Social
+ * Copyright (C) 2010, Free Software Foundation, Inc.
+ *
+ * PHP version 5
+ *
+ * LICENCE:
+ * 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/>.
+ *
+ * @category Widget
+ * @package GNU Social
+ * @author Max Shinn <trombonechamp@gmail.com>
+ * @copyright 2010 Free Software Foundation, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class GNUsocialProfileExtensionsPlugin extends Plugin
+{
+
+ function onAutoload($cls)
+ {
+ $dir = dirname(__FILE__);
+
+ switch ($cls)
+ {
+ case 'BioAction':
+ include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php';
+ break;
+ case 'ProfilefieldsAdminPanelAction':
+ include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -16)) . '.php';
+ break;
+ default:
+ break;
+ }
+ include_once $dir . '/classes/GNUsocialProfileExtensionField.php';
+ include_once $dir . '/classes/GNUsocialProfileExtensionResponse.php';
+ include_once $dir . '/lib/profiletools.php';
+ return true;
+ }
+
+ function onCheckSchema()
+ {
+ $schema = Schema::get();
+ $schema->ensureTable('GNUsocialProfileExtensionField',
+ array(new ColumnDef('id', 'int(11)', null, false, 'PRI', null, null, true),
+ new ColumnDef('systemname', 'varchar(64)', null, false),
+ new ColumnDef('title', 'varchar(256)', null, false),
+ new ColumnDef('description', 'text', null, false),
+ new ColumnDef('type', 'varchar(256)', null, false)));
+ $schema->ensureTable('GNUsocialProfileExtensionResponse',
+ array(new ColumnDef('id', 'int(11)', null, false, 'PRI', null, null, true),
+ new ColumnDef('extension_id', 'int(11)', null, false),
+ new ColumnDef('profile_id', 'int(11)', null, false),
+ new ColumnDef('value', 'text', null, false)));
+
+ }
+
+ function onRouterInitialized($m)
+ {
+ $m->connect(':nickname/bio', array('action' => 'bio'));
+ $m->connect('admin/profilefields', array('action' => 'profilefieldsAdminPanel'));
+ return true;
+ }
+
+ function onEndProfileFormData($action)
+ {
+ $fields = GNUsocialProfileExtensionField::allFields();
+ $user = common_current_user();
+ $profile = $user->getProfile();
+ gnusocial_profile_merge($profile);
+ foreach ($fields as $field) {
+ $action->elementStart('li');
+ $fieldname = $field->systemname;
+ if ($field->type == 'str') {
+ $action->input($fieldname, $field->title,
+ ($action->arg($fieldname)) ? $action->arg($fieldname) : $profile->$fieldname,
+ $field->description);
+ }
+ else if ($field->type == 'text') {
+ $action->textarea($fieldname, $field->title,
+ ($action->arg($fieldname)) ? $action->arg($fieldname) : $profile->$fieldname,
+ $field->description);
+ }
+ $action->elementEnd('li');
+ }
+ }
+
+ function onEndProfileSaveForm($action)
+ {
+ $fields = GNUsocialProfileExtensionField::allFields();
+ $user = common_current_user();
+ $profile = $user->getProfile();
+ foreach ($fields as $field) {
+ $val = $action->trimmed($field->systemname);
+
+ $response = new GNUsocialProfileExtensionResponse();
+ $response->profile_id = $profile->id;
+ $response->extension_id = $field->id;
+
+ if ($response->find()) {
+ $response->fetch();
+ $response->value = $val;
+ if ($response->validate()) {
+ if (empty($val))
+ $response->delete();
+ else
+ $response->update();
+ }
+ }
+ else {
+ $response->value = $val;
+ $response->insert();
+ }
+ }
+ }
+
+ function onEndShowStyles($action)
+ {
+ $action->cssLink('/plugins/GNUsocialProfileExtensions/res/style.css');
+ }
+
+ function onEndAdminPanelNav($nav)
+ {
+ if (AdminPanelAction::canAdmin('profilefields')) {
+
+ $action_name = $nav->action->trimmed('action');
+
+ $nav->out->menuItem(
+ '/admin/profilefields',
+ _m('Profile Fields'),
+ _m('Custom profile fields'),
+ $action_name == 'profilefieldsadminpanel',
+ 'nav_profilefields_admin_panel'
+ );
+ }
+
+ return true;
+ }
+
+ function onStartPersonalGroupNav($nav)
+ {
+ $nav->out->menuItem(common_local_url('bio',
+ array('nickname' => $nav->action->trimmed('nickname'))), _('Bio'),
+ _('The user\'s extended profile'), $nav->action->trimmed('action') == 'bio', 'nav_bio');
+ }
+
+}
+
--- /dev/null
+<?php
+/**
+ * GNU Social
+ * Copyright (C) 2010, Free Software Foundation, Inc.
+ *
+ * PHP version 5
+ *
+ * LICENCE:
+ * 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/>.
+ *
+ * @category Widget
+ * @package GNU Social
+ * @author Max Shinn <trombonechamp@gmail.com>
+ * @copyright 2010 Free Software Foundation, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+require_once INSTALLDIR . '/lib/personalgroupnav.php';
+require_once INSTALLDIR . '/classes/Profile.php';
+require_once INSTALLDIR . '/lib/profilelist.php';
+
+class BioAction extends Action
+{
+ var $user = null;
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ $args = $this->returnToArgs();
+ $this->profile = Profile::staticGet('nickname', $args[1]['nickname']);
+ //die(print_r($this->profile));
+ gnusocial_profile_merge($this->profile);
+ $this->avatar = $this->profile->getAvatar(96);
+
+ return true;
+
+ }
+
+ function handle($args)
+ {
+ parent::handle($args);
+ $this->showPage();
+ }
+
+ function title()
+ {
+ return sprintf(_m("%s's Bio."), $this->profile->nickname);
+ }
+
+ function showLocalNav()
+ {
+ $nav = new PersonalGroupNav($this);
+ $nav->show();
+ }
+
+ function showContent()
+ {
+ if(empty($this->profile)) {
+ return;
+ }
+
+ $profilelistitem = new ProfileListItem($this->profile, $this);
+ $profilelistitem->show();
+ $this->elementStart('ul');
+ $fields = GNUsocialProfileExtensionField::allFields();
+ foreach ($fields as $field) {
+ $fieldname = $field->systemname;
+ if (!empty($this->profile->$fieldname)) {
+ $this->elementStart('li', array('class' => 'biolistitem'));
+ $this->elementStart('div', array('class' => 'biolistitemcontainer'));
+ if ($field->type == 'text') {
+ $this->element('h3', array(), $field->title);
+ $this->element('p', array('class' => 'biovalue'), $this->profile->$fieldname);
+ }
+ else {
+ $this->element('span', array('class' => 'biotitle'), $field->title);
+ $this->text(' ');
+ $this->element('span', array('class' => 'biovalue'), $this->profile->$fieldname);
+ }
+ $this->elementEnd('div');
+ $this->elementEnd('li');
+ }
+ }
+ $this->elementEnd('ul');
+ }
+
+}
--- /dev/null
+<?php
+/**
+ * GNU Social
+ * Copyright (C) 2010, Free Software Foundation, Inc.
+ *
+ * PHP version 5
+ *
+ * LICENCE:
+ * 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/>.
+ *
+ * @category Widget
+ * @package GNU Social
+ * @author Max Shinn <trombonechamp@gmail.com>
+ * @copyright 2010 Free Software Foundation, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+require_once INSTALLDIR . '/lib/adminpanelaction.php';
+
+class ProfilefieldsAdminPanelAction extends AdminPanelAction
+{
+
+ function title()
+ {
+ return _('Profile fields');
+ }
+
+ function getInstructions()
+ {
+ return _('GNU Social custom profile fields');
+ }
+
+ function showForm()
+ {
+ $form = new ProfilefieldsAdminForm($this);
+ $form->show();
+ return;
+ }
+
+ function saveSettings()
+ {
+ $title = $this->trimmed('title');
+ $description = $this->trimmed('description');
+ $type = $this->trimmed('type');
+ $systemname = $this->trimmed('systemname');
+
+ $field = GNUsocialProfileExtensionField::newField($title, $description, $type, $systemname);
+
+ return;
+ }
+
+}
+
+class ProfilefieldsAdminForm extends AdminForm
+{
+
+ function id()
+ {
+ return 'form_profilefields_admin_panel';
+ }
+
+ function formClass()
+ {
+ return 'form_settings';
+ }
+
+ function action()
+ {
+ return '/admin/profilefields';
+ }
+
+ function formData()
+ {
+ //Listing all fields
+ $this->out->elementStart('fieldset');
+ $this->out->element('legend', null, _('Existing Custom Profile Fields'));
+ $this->out->elementStart('ul', 'form_data');
+ $fields = GNUsocialProfileExtensionField::allFields();
+ foreach ($fields as $field) {
+ $this->li();
+ $this->out->element('div', array(), $field->title . ' (' .
+ $field->type . '): ' . $field->description);
+ $this->unli();
+ }
+ $this->out->elementEnd('ul');
+ $this->out->elementEnd('fieldset');
+
+ //New fields
+ $this->out->elementStart('fieldset');
+ $this->out->element('legend', null, _('New Profile Field'));
+ $this->out->elementStart('ul', 'form_data');
+
+ $this->li();
+ $this->input('title', _('Title'),
+ _('The title of the field'));
+ $this->unli();
+ $this->li();
+ $this->input('systemname', _('Internal name'),
+ _('The name used internally for this field. Also the key used in OStatus user info. (optional)'));
+ $this->unli();
+ $this->li();
+ $this->input('description', _('Description'),
+ _('An optional more detailed description of the field'));
+ $this->unli();
+ $this->li();
+ $this->out->dropdown('type', _('Type'), array('text' => _("Text"),
+ 'str' => _("String")),
+ _('The type of the datafield'));
+ $this->unli();
+ $this->out->elementEnd('ul');
+ $this->out->elementEnd('fieldset');
+ }
+
+ /**
+ * Action elements
+ *
+ * @return void
+ */
+
+ function formActions()
+ {
+ $this->out->submit('submit', _('Save'), 'submit', null, _('Save new field'));
+ }
+}
--- /dev/null
+<?php
+/**
+ * GNU Social
+ * Copyright (C) 2010, Free Software Foundation, Inc.
+ *
+ * PHP version 5
+ *
+ * LICENCE:
+ * 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/>.
+ *
+ * @category Widget
+ * @package GNU Social
+ * @author Max Shinn <trombonechamp@gmail.com>
+ * @copyright 2010 Free Software Foundation, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
+
+class GNUsocialProfileExtensionField extends Memcached_DataObject
+{
+ public $__table = 'GNUsocialProfileExtensionField';
+ public $id; // int(11)
+ public $systemname; // varchar(64)
+ public $title; // varchar(256)
+ public $description; // text
+ public $type; // varchar(256)
+
+ /**
+ *
+ * k key
+ * v value
+ */
+ function staticGet($k,$v=NULL)
+ {
+ return Memcached_DataObject::staticGet('GNUsocialProfileExtensionField',$k,$v);
+ }
+
+
+ function table()
+ {
+ return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'systemname' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'title' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'description' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'type' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL);
+ }
+
+ function keys()
+ {
+ return array_keys($this->keyTypes());
+ }
+
+ function keyTypes()
+ {
+ return array('id' => 'K');
+ }
+
+ function sequenceKey()
+ {
+ return array(false, false, false);
+ }
+
+ static function newField($title, $description=null, $type='str', $systemname=null)
+ {
+ $field = new GNUsocialProfileExtensionField();
+ $field->title = $title;
+ $field->description = $description;
+ $field->type = $type;
+ if (empty($systemname))
+ $field->systemname = 'field' + $field->id;
+ else
+ $field->systemname = $systemname;
+
+ $field->id = $field->insert();
+ if (!$field->id){
+ common_log_db_error($field, 'INSERT', __FILE__);
+ throw new ServerException(_m('Error creating new field.'));
+ }
+ return $field;
+ }
+
+ static function allFields()
+ {
+ $field = new GNUsocialProfileExtensionField();
+ $fields = array();
+ if ($field->find()) {
+ while($field->fetch()) {
+ $fields[] = clone($field);
+ }
+ }
+ return $fields;
+ }
+}
--- /dev/null
+<?php
+/**
+ * GNU Social
+ * Copyright (C) 2010, Free Software Foundation, Inc.
+ *
+ * PHP version 5
+ *
+ * LICENCE:
+ * 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/>.
+ *
+ * @category Widget
+ * @package GNU Social
+ * @author Max Shinn <trombonechamp@gmail.com>
+ * @copyright 2010 Free Software Foundation, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
+
+class GNUsocialProfileExtensionResponse extends Memcached_DataObject
+{
+ public $__table = 'GNUsocialProfileExtensionResponse';
+ public $id; // int(11)
+ public $extension_id; // int(11)
+ public $profile_id; // int(11)
+ public $value; // text
+
+ /**
+ *
+ * k key
+ * v value
+ */
+ function staticGet($k,$v=NULL)
+ {
+ return Memcached_DataObject::staticGet('GNUsocialProfileExtensionResponse',$k,$v);
+ }
+
+
+ function table()
+ {
+ return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'extension_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'profile_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'value' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL);
+ }
+
+ function keys()
+ {
+ return array_keys($this->keyTypes());
+ }
+
+ function keyTypes()
+ {
+ return array('id' => 'K');
+ }
+
+ function sequenceKey()
+ {
+ return array(false, false, false);
+ }
+
+ static function newResponse($extension_id, $profile_id, $value)
+ {
+
+ $response = new GNUsocialProfileExtensionResponse();
+ $response->extension_id = $extension_id;
+ $response->profile_id = $profile_id;
+ $response->value = $value;
+
+ $response->id = $response->insert();
+ if (!$response->id){
+ common_log_db_error($response, 'INSERT', __FILE__);
+ throw new ServerException(_m('Error creating new response.'));
+ }
+ return $response;
+ }
+
+ static function findResponsesByProfile($id)
+ {
+ $extf = 'GNUsocialProfileExtensionField';
+ $extr = 'GNUsocialProfileExtensionResponse';
+ $sql = "SELECT $extr.*, $extf.title, $extf.description, $extf.type, $extf.systemname FROM $extr JOIN $extf ON $extr.extension_id=$extf.id WHERE $extr.profile_id = $id";
+ $response = new GNUsocialProfileExtensionResponse();
+ $response->query($sql);
+ $responses = array();
+
+ while ($response->fetch()) {
+ $responses[] = clone($response);
+ }
+
+ return $responses;
+ }
+
+}
--- /dev/null
+<?php
+/**
+ * GNU Social
+ * Copyright (C) 2010, Free Software Foundation, Inc.
+ *
+ * PHP version 5
+ *
+ * LICENCE:
+ * 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/>.
+ *
+ * @category Widget
+ * @package GNU Social
+ * @author Max Shinn <trombonechamp@gmail.com>
+ * @copyright 2010 Free Software Foundation, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
+
+class GNUsocialPhoto extends Memcached_DataObject
+{
+ public $__table = 'GNUsocialPhoto';
+ public $id; // int(11)
+ public $_id; // int(11)
+ public $album_id; // int(11)
+ public $uri; // varchar(512)
+ public $thumb_uri; // varchar(512)
+ public $title; // varchar(512)
+ public $photo_description; // text
+
+
+ /**
+ *
+ * k key
+ * v value
+ */
+ function staticGet($k,$v=NULL)
+ {
+ return Memcached_DataObject::staticGet('GNUsocialPhoto',$k,$v);
+ }
+
+/* function delete()
+ {
+ if(!unlink(INSTALLDIR . $this->thumb_uri)) {
+ return false;
+ }
+ if(!unlink(INSTALLDIR . $this->path)) {
+ return false;
+ }
+ return parent::delete();
+ } */
+
+
+ /*
+ * TODO: Foriegn key on album_id.
+ */
+ function table()
+ {
+ return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'notice_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'album_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'uri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'thumb_uri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'title' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'photo_description' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL);
+ }
+
+ function keys()
+ {
+ return array_keys($this->keyTypes());
+ }
+
+ function keyTypes()
+ {
+ return array('notice_id' => 'K');
+ }
+
+ function sequenceKey()
+ {
+ return array(false, false, false);
+ }
+
+ function saveNew($profile_id, $album_id, $thumb_uri, $uri, $source, $insert_now, $title = null, $photo_description = null)
+ {
+ $photo = new GNUsocialPhoto();
+ $photo->thumb_uri = $thumb_uri;
+ $photo->uri = $uri;
+ $photo->album_id = $album_id;
+ if(!empty($title)) $photo->title = $title;
+ if(!empty($photo_description)) $photo->photo_description = (string)$photo_description;
+
+ if($insert_now) {
+ $notice = Notice::saveNew($profile_id, $uri, $source);
+ $photo->notice_id = $notice->id;
+ $photo_id = $photo->insert();
+ if (!$photo_id) {
+ common_log_db_error($photo, 'INSERT', __FILE__);
+ throw new ServerException(_m('Problem Saving Photo.'));
+ }
+ } else {
+ GNUsocialPhotoTemp::$tmp = $photo;
+ Notice::saveNew($profile_id, $uri, $source);
+ }
+ }
+
+ function getPageLink()
+ {
+ return '/photo/' . $this->id;
+ }
+
+ /*
+ * TODO: -Sanitize input
+ * @param int page_id The desired page of the gallery to show.
+ * @param int album_id The id of the album to get photos from.
+ * @param int gallery_size The number of thumbnails to show per page in the gallery.
+ * @return array Array of GNUsocialPhotos for this gallery page.
+ */
+ static function getGalleryPage($page_id, $album_id, $gallery_size)
+ {
+ $page_offset = ($page_id-1) * $gallery_size;
+ $sql = 'SELECT * FROM GNUsocialPhoto WHERE album_id = ' . $album_id .
+ ' ORDER BY notice_id LIMIT ' . $page_offset . ',' . $gallery_size;
+ $photo = new GNUsocialPhoto();
+ $photo->query($sql);
+ $photos = array();
+
+ while ($photo->fetch()) {
+ $photos[] = clone($photo);
+ }
+
+ return $photos;
+ }
+}
--- /dev/null
+<?php
+/**
+ * GNU Social
+ * Copyright (C) 2010, Free Software Foundation, Inc.
+ *
+ * PHP version 5
+ *
+ * LICENCE:
+ * 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/>.
+ *
+ * @category Widget
+ * @package GNU Social
+ * @author Max Shinn <trombonechamp@gmail.com>
+ * @copyright 2010 Free Software Foundation, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ */
+
+function gnusocial_profile_merge(&$profile)
+{
+ $responses = GNUsocialProfileExtensionResponse::findResponsesByProfile($profile->id);
+ $profile->customfields = array();
+ foreach ($responses as $response) {
+ $title = $response->systemname;
+ $profile->$title = $response->value;
+ $profile->customfields[] = $title;
+ }
+}
+
+
--- /dev/null
+.biotitle {
+ font-weight: bold;
+}
+.biovalue {
+ font-style: italic;
+}
\ No newline at end of file