| 
									
										
										
										
											2011-02-02 16:23:24 -08:00
										 |  |  | <?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); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Class to represent extended profile data | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2011-02-02 16:23:24 -08:00
										 |  |  | class ExtendedProfile | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-03-09 19:27:21 -08:00
										 |  |  |     protected $fields; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Constructor | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Profile $profile | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2011-02-02 17:29:34 -08:00
										 |  |  |     function __construct(Profile $profile) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  |         $this->profile  = $profile; | 
					
						
							|  |  |  |         $this->user     = $profile->getUser(); | 
					
						
							|  |  |  |         $this->fields   = $this->loadFields(); | 
					
						
							| 
									
										
										
										
											2011-03-10 16:57:41 -08:00
										 |  |  |         $this->sections = $this->getSections(); | 
					
						
							|  |  |  |         //common_debug(var_export($this->sections, true));
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-10 14:14:21 -08:00
										 |  |  |         //common_debug(var_export($this->fields, true));
 | 
					
						
							| 
									
										
										
										
											2011-02-02 17:29:34 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Load extended profile fields | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return array $fields the list of fields | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2011-02-02 17:29:34 -08:00
										 |  |  |     function loadFields() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $detail = new Profile_detail(); | 
					
						
							|  |  |  |         $detail->profile_id = $this->profile->id; | 
					
						
							|  |  |  |         $detail->find(); | 
					
						
							| 
									
										
										
										
											2011-03-07 21:34:57 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $fields = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         while ($detail->fetch()) { | 
					
						
							| 
									
										
										
										
											2011-03-09 18:00:24 -08:00
										 |  |  |             $fields[$detail->field_name][] = clone($detail); | 
					
						
							| 
									
										
										
										
											2011-02-02 17:29:34 -08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-02 17:29:34 -08:00
										 |  |  |         return $fields; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Get a the self-tags associated with this profile | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string the concatenated string of tags | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function getTags() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return implode(' ', $this->user->getSelfTags()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Return a simple string value. Checks for fields that should | 
					
						
							|  |  |  |      * be stored in the regular profile and returns values from it | 
					
						
							|  |  |  |      * if appropriate. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string $name name of the detail field to get the | 
					
						
							|  |  |  |      *                     value from | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string the value | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function getTextValue($name) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-03-09 19:27:21 -08:00
										 |  |  |         $key           = strtolower($name); | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  |         $profileFields = array('fullname', 'location', 'bio'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-09 19:27:21 -08:00
										 |  |  |         if (in_array($key, $profileFields)) { | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  |             return $this->profile->$name; | 
					
						
							| 
									
										
										
										
											2011-03-09 19:27:21 -08:00
										 |  |  |         } else if (array_key_exists($key, $this->fields)) { | 
					
						
							|  |  |  |             return $this->fields[$key][0]->field_value; | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             return null; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-10 14:14:21 -08:00
										 |  |  |     function getPhones() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-03-14 01:49:46 -07:00
										 |  |  |         $phones = (isset($this->fields['phone'])) ? $this->fields['phone'] : null; | 
					
						
							| 
									
										
										
										
											2011-03-10 16:57:41 -08:00
										 |  |  |         $pArrays = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (empty($phones)) { | 
					
						
							|  |  |  |             $pArrays[] = array( | 
					
						
							| 
									
										
										
										
											2011-03-10 14:14:21 -08:00
										 |  |  |                 'label' => _m('Phone'), | 
					
						
							| 
									
										
										
										
											2011-03-13 16:32:13 -07:00
										 |  |  |                 'index' => 0, | 
					
						
							| 
									
										
										
										
											2011-03-10 14:14:21 -08:00
										 |  |  |                 'type'  => 'phone', | 
					
						
							| 
									
										
										
										
											2011-03-10 16:57:41 -08:00
										 |  |  |                 'vcard' => 'tel', | 
					
						
							| 
									
										
										
										
											2011-03-14 01:49:46 -07:00
										 |  |  |                 'rel'   => 'office', | 
					
						
							|  |  |  |                 'value' => null | 
					
						
							| 
									
										
										
										
											2011-03-10 16:57:41 -08:00
										 |  |  |             ); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             for ($i = 0; $i < sizeof($phones); $i++) { | 
					
						
							|  |  |  |                 $pa = array( | 
					
						
							|  |  |  |                     'label' => _m('Phone'), | 
					
						
							|  |  |  |                     'type'  => 'phone', | 
					
						
							| 
									
										
										
										
											2011-03-14 01:49:46 -07:00
										 |  |  |                     'index' => intval($phones[$i]->value_index), | 
					
						
							| 
									
										
										
										
											2011-03-10 16:57:41 -08:00
										 |  |  |                     'rel'   => $phones[$i]->rel, | 
					
						
							|  |  |  |                     'value' => $phones[$i]->field_value, | 
					
						
							|  |  |  |                     'vcard' => 'tel' | 
					
						
							|  |  |  |                 ); | 
					
						
							| 
									
										
										
										
											2011-03-14 01:49:46 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-10 16:57:41 -08:00
										 |  |  |                $pArrays[] = $pa; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $pArrays; | 
					
						
							| 
									
										
										
										
											2011-03-10 14:14:21 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-14 15:29:11 -07:00
										 |  |  |     function getExperiences() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $companies = (isset($this->fields['companies'])) ? $this->fields['company'] : null; | 
					
						
							|  |  |  |         $start = (isset($this->fields['start'])) ? $this->fields['start'] : null; | 
					
						
							|  |  |  |         $end   = (isset($this->fields['end'])) ? $this->fields['end'] : null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $cArrays = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (empty($experiences)) { | 
					
						
							|  |  |  |             $eArrays[] = array( | 
					
						
							|  |  |  |                 'label'   => _m('Employer'), | 
					
						
							|  |  |  |                 'type'    => 'experience', | 
					
						
							|  |  |  |                 'company' => "Bozotronix", | 
					
						
							|  |  |  |                 'start'   => '1/5/10', | 
					
						
							|  |  |  |                 'end'     => '2/3/11', | 
					
						
							|  |  |  |                 'current' => true, | 
					
						
							|  |  |  |                 'index'   => 0 | 
					
						
							|  |  |  |             ); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $eArrays; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-08 19:20:43 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      *  Return all the sections of the extended profile | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return array the big list of sections and fields | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2011-02-02 16:23:24 -08:00
										 |  |  |     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( | 
					
						
							| 
									
										
										
										
											2011-03-10 14:14:21 -08:00
										 |  |  |                     'phone' => $this->getPhones(), | 
					
						
							| 
									
										
										
										
											2011-02-02 16:23:24 -08:00
										 |  |  |                     '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( | 
					
						
							| 
									
										
										
										
											2011-03-14 15:29:11 -07:00
										 |  |  |                     'experience' => $this->getExperiences(), | 
					
						
							| 
									
										
										
										
											2011-02-02 16:23:24 -08:00
										 |  |  |                 ), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'education' => array( | 
					
						
							|  |  |  |                 'label' => _m('Education'), | 
					
						
							|  |  |  |                 'fields' => array( | 
					
						
							|  |  |  |                     'education' => array( | 
					
						
							|  |  |  |                         'type' => 'education', | 
					
						
							|  |  |  |                         'label' => _m('Institution'), | 
					
						
							|  |  |  |                     ), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |