New plugin: GNUsocialProfileExtensions! Profiles can be extended with administrator-defined fields.
This commit is contained in:
		| @@ -0,0 +1,164 @@ | ||||
| <?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'); | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										103
									
								
								plugins/GNUsocialProfileExtensions/actions/bio.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								plugins/GNUsocialProfileExtensions/actions/bio.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | ||||
| <?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'); | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										139
									
								
								plugins/GNUsocialProfileExtensions/actions/profilefields.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								plugins/GNUsocialProfileExtensions/actions/profilefields.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,139 @@ | ||||
| <?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')); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,109 @@ | ||||
| <?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; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,109 @@ | ||||
| <?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; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,148 @@ | ||||
| <?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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										40
									
								
								plugins/GNUsocialProfileExtensions/lib/profiletools.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								plugins/GNUsocialProfileExtensions/lib/profiletools.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| <?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; | ||||
|     } | ||||
| } | ||||
|      | ||||
|  | ||||
							
								
								
									
										6
									
								
								plugins/GNUsocialProfileExtensions/res/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								plugins/GNUsocialProfileExtensions/res/style.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| .biotitle { | ||||
|     font-weight: bold; | ||||
| } | ||||
| .biovalue { | ||||
|     font-style: italic; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user