]> git.mxchange.org Git - friendica.git/blob - mod/profiles.php
Merge commit 'mike/master'
[friendica.git] / mod / profiles.php
1 <?php
2
3
4 function profiles_post(&$a) {
5
6         if(! local_user()) {
7                 notice( t('Permission denied.') . EOL);
8                 return;
9         }
10
11         $namechanged = false;
12
13         call_hooks('profile_post', $_POST);
14
15         if(($a->argc > 1) && ($a->argv[1] !== "new") && intval($a->argv[1])) {
16                 $orig = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1",
17                         intval($a->argv[1]),
18                         intval(local_user())
19                 );
20                 if(! count($orig)) {
21                         notice( t('Profile not found.') . EOL);
22                         return;
23                 }
24                 $is_default = (($orig[0]['is-default']) ? 1 : 0);
25
26                 $profile_name = notags(trim($_POST['profile_name']));
27                 if(! strlen($profile_name)) {
28                         notify( t('Profile Name is required.') . EOL);
29                         return;
30                 }
31         
32                 $year = intval($_POST['year']);
33                 if($year < 1900 || $year > 2100 || $year < 0)
34                         $year = 0;
35                 $month = intval($_POST['month']);
36                         if(($month > 12) || ($month < 0))
37                                 $month = 0;
38                 $mtab = array(0,31,29,31,30,31,30,31,31,30,31,30,31);
39                 $day = intval($_POST['day']);
40                         if(($day > $mtab[$month]) || ($day < 0))
41                                 $day = 0;
42                 $dob = '0000-00-00';
43                 $dob = sprintf('%04d-%02d-%02d',$year,$month,$day);
44
45                         
46                 $name = notags(trim($_POST['name']));
47
48                 if($orig[0]['name'] != $name)
49                         $namechanged = true;
50
51                 $pdesc = notags(trim($_POST['pdesc']));
52                 $gender = notags(trim($_POST['gender']));
53                 $address = notags(trim($_POST['address']));
54                 $locality = notags(trim($_POST['locality']));
55                 $region = notags(trim($_POST['region']));
56                 $postal_code = notags(trim($_POST['postal_code']));
57                 $country_name = notags(trim($_POST['country_name']));
58                 $keywords = notags(trim($_POST['keywords']));
59                 $marital = notags(trim($_POST['marital']));
60                 if($marital != $orig[0]['marital'])
61                         $maritalchanged = true;
62
63                 $with = ((x($_POST,'with')) ? notags(trim($_POST['with'])) : '');
64
65                 // linkify the relationship target if applicable
66
67                 if(strlen($with)) {
68                         if($with != strip_tags($orig[0]['with'])) {
69                                 $prf = '';
70                                 $lookup = $with;
71                                 if((strpos($lookup,'@')) || (strpos($lookup,'http://'))) {
72                                         $newname = $lookup;
73                                         $links = @lrdd($lookup);
74                                         if(count($links)) {
75                                                 foreach($links as $link) {
76                                                         if($link['@attributes']['rel'] === 'http://webfinger.net/rel/profile-page') {
77                                         $prf = $link['@attributes']['href'];
78                                                         }
79                                                 }
80                                         }
81                                 }
82                                 else {
83                                         $newname = $lookup;
84                                         if(strstr($lookup,' ')) {
85                                                 $r = q("SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1",
86                                                         dbesc($newname),
87                                                         intval(local_user())
88                                                 );
89                                         }
90                                         else {
91                                                 $r = q("SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1",
92                                                         dbesc($lookup),
93                                                         intval(local_user())
94                                                 );
95                                         }
96                                         if(count($r)) {
97                                                 $prf = $r[0]['url'];
98                                                 $newname = $r[0]['name'];
99                                         }
100                                 }
101         
102                                 if($prf) {
103                                         $with = str_replace($lookup,'<a href="' . $prf . '">' . $newname        . '</a>', $with);
104                                 }
105                         }
106                         else
107                                 $with = $orig[0]['with'];
108                 }
109
110                 $sexual = notags(trim($_POST['sexual']));
111                 $homepage = notags(trim($_POST['homepage']));
112                 $politic = notags(trim($_POST['politic']));
113                 $religion = notags(trim($_POST['religion']));
114
115                 $about = escape_tags(trim($_POST['about']));
116                 $interest = escape_tags(trim($_POST['interest']));
117                 $contact = escape_tags(trim($_POST['contact']));
118                 $music = escape_tags(trim($_POST['music']));
119                 $book = escape_tags(trim($_POST['book']));
120                 $tv = escape_tags(trim($_POST['tv']));
121                 $film = escape_tags(trim($_POST['film']));
122                 $romance = escape_tags(trim($_POST['romance']));
123                 $work = escape_tags(trim($_POST['work']));
124                 $education = escape_tags(trim($_POST['education']));
125                 $hide_friends = (($_POST['hide-friends'] == 1) ? 1: 0);
126
127
128                 $r = q("UPDATE `profile` 
129                         SET `profile-name` = '%s',
130                         `name` = '%s',
131                         `pdesc` = '%s',
132                         `gender` = '%s',
133                         `dob` = '%s',
134                         `address` = '%s',
135                         `locality` = '%s',
136                         `region` = '%s',
137                         `postal-code` = '%s',
138                         `country-name` = '%s',
139                         `marital` = '%s',
140                         `with` = '%s',
141                         `sexual` = '%s',
142                         `homepage` = '%s',
143                         `politic` = '%s',
144                         `religion` = '%s',
145                         `keywords` = '%s',
146                         `about` = '%s',
147                         `interest` = '%s',
148                         `contact` = '%s',
149                         `music` = '%s',
150                         `book` = '%s',
151                         `tv` = '%s',
152                         `film` = '%s',
153                         `romance` = '%s',
154                         `work` = '%s',
155                         `education` = '%s',
156                         `hide-friends` = %d
157                         WHERE `id` = %d AND `uid` = %d LIMIT 1",
158                         dbesc($profile_name),
159                         dbesc($name),
160                         dbesc($pdesc),
161                         dbesc($gender),
162                         dbesc($dob),
163                         dbesc($address),
164                         dbesc($locality),
165                         dbesc($region),
166                         dbesc($postal_code),
167                         dbesc($country_name),
168                         dbesc($marital),
169                         dbesc($with),
170                         dbesc($sexual),
171                         dbesc($homepage),
172                         dbesc($politic),
173                         dbesc($religion),
174                         dbesc($keywords),
175                         dbesc($about),
176                         dbesc($interest),
177                         dbesc($contact),
178                         dbesc($music),
179                         dbesc($book),
180                         dbesc($tv),
181                         dbesc($film),
182                         dbesc($romance),
183                         dbesc($work),
184                         dbesc($education),
185                         intval($hide_friends),
186                         intval($a->argv[1]),
187                         intval($_SESSION['uid'])
188                 );
189
190                 if($r)
191                         notice( t('Profile updated.') . EOL);
192
193
194                 if($namechanged && $is_default) {
195                         $r = q("UPDATE `contact` SET `name-date` = '%s' WHERE `self` = 1 AND `uid` = %d LIMIT 1",
196                                 dbesc(datetime_convert()),
197                                 intval(local_user())
198                         );
199                 }
200
201                 if($is_default) {
202                         // Update global directory in background
203                         $url = $_SESSION['my_url'];
204                         if($url && strlen(get_config('system','directory_submit_url')))
205                                 proc_run('php',"include/directory.php","$url");
206                 }
207         }
208 }
209
210
211
212
213 function profiles_content(&$a) {
214
215         $o = '';
216         $o .= '<script> $(document).ready(function() { $(\'#nav-profiles-link\').addClass(\'nav-selected\'); });</script>';
217
218         if(! local_user()) {
219                 notice( t('Permission denied.') . EOL);
220                 return;
221         }
222
223         if(($a->argc > 2) && ($a->argv[1] === "drop") && intval($a->argv[2])) {
224                 $r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d AND `is-default` = 0 AND `self` = 0 LIMIT 1",
225                         intval($a->argv[2]),
226                         intval(local_user())
227                 );
228                 if(! count($r)) {
229                         notice( t('Profile not found.') . EOL);
230                         goaway($a->get_baseurl() . '/profiles');
231                         return; // NOTREACHED
232                 }
233
234                 // move every contact using this profile as their default to the user default
235
236                 $r = q("UPDATE `contact` SET `profile-id` = (SELECT `profile`.`id` AS `profile-id` FROM `profile` WHERE `profile`.`is-default` = 1 AND `profile`.`uid` = %d LIMIT 1) WHERE `profile-id` = %d AND `uid` = %d ",
237                         intval(local_user()),
238                         intval($a->argv[2]),
239                         intval(local_user())
240                 );
241                 $r = q("DELETE FROM `profile` WHERE `id` = %d LIMIT 1",
242                         intval($a->argv[2])
243                 );
244                 if($r)
245                         notice( t('Profile deleted.') . EOL);
246
247                 goaway($a->get_baseurl() . '/profiles');
248                 return; // NOTREACHED
249         }
250
251
252
253
254
255         if(($a->argc > 1) && ($a->argv[1] === 'new')) {
256
257                 $r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d",
258                         intval(local_user()));
259                 $num_profiles = count($r0);
260
261                 $name = t('Profile-') . ($num_profiles + 1);
262
263                 $r1 = q("SELECT `name`, `photo`, `thumb` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1",
264                         intval(local_user()));
265                 
266                 $r2 = q("INSERT INTO `profile` (`uid` , `profile-name` , `name`, `photo`, `thumb`)
267                         VALUES ( %d, '%s', '%s', '%s', '%s' )",
268                         intval(local_user()),
269                         dbesc($name),
270                         dbesc($r1[0]['name']),
271                         dbesc($r1[0]['photo']),
272                         dbesc($r1[0]['thumb'])
273                 );
274
275                 $r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1",
276                         intval(local_user()),
277                         dbesc($name)
278                 );
279
280                 notice( t('New profile created.') . EOL);
281                 if(count($r3) == 1)
282                         goaway($a->get_baseurl() . '/profiles/' . $r3[0]['id']);
283                 goaway($a->get_baseurl() . '/profiles');
284         }                
285
286         if(($a->argc > 2) && ($a->argv[1] === 'clone')) {
287
288                 $r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d",
289                         intval(local_user()));
290                 $num_profiles = count($r0);
291
292                 $name = t('Profile-') . ($num_profiles + 1);
293                 $r1 = q("SELECT * FROM `profile` WHERE `uid` = %d AND `id` = %d LIMIT 1",
294                         intval(local_user()),
295                         intval($a->argv[2])
296                 );
297                 if(! count($r1)) {
298                         notice( t('Profile unavailable to clone.') . EOL);
299                         return;
300                 }
301                 unset($r1[0]['id']);
302                 $r1[0]['is-default'] = 0;
303                 $r1[0]['publish'] = 0;  
304                 $r1[0]['net-publish'] = 0;      
305                 $r1[0]['profile-name'] = dbesc($name);
306
307                 dbesc_array($r1[0]);
308
309                 $r2 = dbq("INSERT INTO `profile` (`" 
310                         . implode("`, `", array_keys($r1[0])) 
311                         . "`) VALUES ('" 
312                         . implode("', '", array_values($r1[0])) 
313                         . "')" );
314
315                 $r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1",
316                         intval(local_user()),
317                         dbesc($name)
318                 );
319                 notice( t('New profile created.') . EOL);
320                 if(count($r3) == 1)
321                         goaway($a->get_baseurl() . '/profiles/' . $r3[0]['id']);
322         goaway($a->get_baseurl() . '/profiles');
323         return; // NOTREACHED
324         }                
325
326
327         if(($a->argc > 1) && (intval($a->argv[1]))) {
328                 $r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1",
329                         intval($a->argv[1]),
330                         intval(local_user())
331                 );
332                 if(! count($r)) {
333                         notice( t('Profile not found.') . EOL);
334                         return;
335                 }
336
337                 profile_load($a,$a->user['nickname'],$r[0]['id']);
338
339                 require_once('include/profile_selectors.php');
340
341                 $tpl = load_view_file('view/profed_head.tpl');
342
343                 $opt_tpl = load_view_file("view/profile-hide-friends.tpl");
344                 $hide_friends = replace_macros($opt_tpl,array(
345                         '$yes_selected' => (($r[0]['hide-friends']) ? " checked=\"checked\" " : ""),
346                         '$no_selected' => (($r[0]['hide-friends'] == 0) ? " checked=\"checked\" " : "")
347                 ));
348
349
350                 $a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl()));
351                 $a->page['htmlhead'] .= "<script type=\"text/javascript\" src=\"include/country.js\" ></script>";
352
353
354                 $is_default = (($r[0]['is-default']) ? 1 : 0);
355                 $tpl = load_view_file("view/profile_edit.tpl");
356                 $o .= replace_macros($tpl,array(
357                         '$disabled' => (($is_default) ? 'onclick="return false;" style="color: #BBBBFF;"' : ''),
358                         '$baseurl' => $a->get_baseurl(),
359                         '$profile_id' => $r[0]['id'],
360                         '$profile_name' => $r[0]['profile-name'],
361                         '$default' => (($is_default) ? '<p id="profile-edit-default-desc">' . t('This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.') . '</p>' : ""),
362                         '$name' => $r[0]['name'],
363                         '$pdesc' => $r[0]['pdesc'],
364                         '$dob' => dob($r[0]['dob']),
365                         '$hide_friends' => $hide_friends,
366                         '$address' => $r[0]['address'],
367                         '$locality' => $r[0]['locality'],
368                         '$region' => $r[0]['region'],
369                         '$postal_code' => $r[0]['postal-code'],
370                         '$country_name' => $r[0]['country-name'],
371                         '$age' => ((intval($r[0]['dob'])) ? '(' . t('Age: ') . age($r[0]['dob'],$a->user['timezone'],$a->user['timezone']) . ')' : ''),
372                         '$gender' => gender_selector($r[0]['gender']),
373                         '$marital' => marital_selector($r[0]['marital']),
374                         '$with' => strip_tags($r[0]['with']),
375                         '$sexual' => sexpref_selector($r[0]['sexual']),
376                         '$about' => $r[0]['about'],
377                         '$homepage' => $r[0]['homepage'],
378                         '$politic' => $r[0]['politic'],
379                         '$religion' => $r[0]['religion'],
380                         '$keywords' => $r[0]['keywords'],
381                         '$music' => $r[0]['music'],
382                         '$book' => $r[0]['book'],
383                         '$tv' => $r[0]['tv'],
384                         '$film' => $r[0]['film'],
385                         '$interest' => $r[0]['interest'],
386                         '$romance' => $r[0]['romance'],
387                         '$work' => $r[0]['work'],
388                         '$education' => $r[0]['education'],
389                         '$contact' => $r[0]['contact']
390                 ));
391
392                 $arr = array('profile' => $r[0], 'entry' => $o);
393                 call_hooks('profile_edit', $arr);
394
395                 return $o;
396         }
397         else {
398
399                 $r = q("SELECT * FROM `profile` WHERE `uid` = %d",
400                         local_user());
401                 if(count($r)) {
402
403                         $o .= load_view_file('view/profile_listing_header.tpl');
404                         $tpl_default = load_view_file('view/profile_entry_default.tpl');
405                         $tpl = load_view_file('view/profile_entry.tpl');
406
407                         foreach($r as $rr) {
408                                 $template = (($rr['is-default']) ? $tpl_default : $tpl);
409                                 $o .= replace_macros($template, array(
410                                         '$photo' => $rr['thumb'],
411                                         '$id' => $rr['id'],
412                                         '$alt' => t('Profile Image'),
413                                         '$profile_name' => $rr['profile-name']
414                                 ));
415                         }
416                 }
417                 return $o;
418         }
419
420 }