]> git.mxchange.org Git - friendica.git/blob - mod/settings.php
Bugfix: The contact names had to be escaped
[friendica.git] / mod / settings.php
1 <?php
2
3
4 function get_theme_config_file($theme){
5         $a = get_app();
6         $base_theme = $a->theme_info['extends'];
7
8         if (file_exists("view/theme/$theme/config.php")){
9                 return "view/theme/$theme/config.php";
10         }
11         if (file_exists("view/theme/$base_theme/config.php")){
12                 return "view/theme/$base_theme/config.php";
13         }
14         return null;
15 }
16
17 function settings_init(&$a) {
18
19         if(! local_user()) {
20                 notice( t('Permission denied.') . EOL );
21                 return;
22         }
23
24         // APC deactivated, since there are problems with PHP 5.5
25         //if (function_exists("apc_delete")) {
26         //      $toDelete = new APCIterator('user', APC_ITER_VALUE);
27         //      apc_delete($toDelete);
28         //}
29
30         // These lines provide the javascript needed by the acl selector
31
32         $tpl = get_markup_template("settings-head.tpl");
33         $a->page['htmlhead'] .= replace_macros($tpl,array(
34                 '$ispublic' => t('everybody')
35         ));
36
37
38
39         $tabs = array(
40                 array(
41                         'label' => t('Account'),
42                         'url'   => $a->get_baseurl(true).'/settings',
43                         'selected'      =>  (($a->argc == 1) && ($a->argv[0] === 'settings')?'active':''),
44                         'accesskey' => 'o',
45                 ),
46                 array(
47                         'label' => t('Additional features'),
48                         'url'   => $a->get_baseurl(true).'/settings/features',
49                         'selected'      => (($a->argc > 1) && ($a->argv[1] === 'features') ? 'active' : ''),
50                         'accesskey' => 't',
51                 ),
52                 array(
53                         'label' => t('Display'),
54                         'url'   => $a->get_baseurl(true).'/settings/display',
55                         'selected'      => (($a->argc > 1) && ($a->argv[1] === 'display')?'active':''),
56                         'accesskey' => 'i',
57                 ),
58
59                 array(
60                         'label' => t('Social Networks'),
61                         'url'   => $a->get_baseurl(true).'/settings/connectors',
62                         'selected'      => (($a->argc > 1) && ($a->argv[1] === 'connectors')?'active':''),
63                         'accesskey' => 'w',
64                 ),
65                 array(
66                         'label' => t('Plugins'),
67                         'url'   => $a->get_baseurl(true).'/settings/addon',
68                         'selected'      => (($a->argc > 1) && ($a->argv[1] === 'addon')?'active':''),
69                         'accesskey' => 'l',
70                 ),
71                 array(
72                         'label' => t('Delegations'),
73                         'url'   => $a->get_baseurl(true).'/delegate',
74                         'selected'      => (($a->argc == 1) && ($a->argv[0] === 'delegate')?'active':''),
75                         'accesskey' => 'd',
76                 ),
77                 array(
78                         'label' => t('Connected apps'),
79                         'url' => $a->get_baseurl(true) . '/settings/oauth',
80                         'selected' => (($a->argc > 1) && ($a->argv[1] === 'oauth')?'active':''),
81                         'accesskey' => 'b',
82                 ),
83                 array(
84                         'label' => t('Export personal data'),
85                         'url' => $a->get_baseurl(true) . '/uexport',
86                         'selected' => (($a->argc == 1) && ($a->argv[0] === 'uexport')?'active':''),
87                         'accesskey' => 'e',
88                 ),
89                 array(
90                         'label' => t('Remove account'),
91                         'url' => $a->get_baseurl(true) . '/removeme',
92                         'selected' => (($a->argc == 1) && ($a->argv[0] === 'removeme')?'active':''),
93                         'accesskey' => 'r',
94                 )
95         );
96
97         $tabtpl = get_markup_template("generic_links_widget.tpl");
98         $a->page['aside'] = replace_macros($tabtpl, array(
99                 '$title' => t('Settings'),
100                 '$class' => 'settings-widget',
101                 '$items' => $tabs,
102         ));
103
104 }
105
106
107 function settings_post(&$a) {
108
109         if(! local_user())
110                 return;
111
112         if(x($_SESSION,'submanage') && intval($_SESSION['submanage']))
113                 return;
114
115         if(count($a->user) && x($a->user,'uid') && $a->user['uid'] != local_user()) {
116                 notice( t('Permission denied.') . EOL);
117                 return;
118         }
119
120         $old_page_flags = $a->user['page-flags'];
121
122         if(($a->argc > 1) && ($a->argv[1] === 'oauth') && x($_POST,'remove')){
123                 check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth');
124
125                 $key = $_POST['remove'];
126                 q("DELETE FROM tokens WHERE id='%s' AND uid=%d",
127                         dbesc($key),
128                         local_user());
129                 goaway($a->get_baseurl(true)."/settings/oauth/");
130                 return;
131         }
132
133         if(($a->argc > 2) && ($a->argv[1] === 'oauth')  && ($a->argv[2] === 'edit'||($a->argv[2] === 'add')) && x($_POST,'submit')) {
134
135                 check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth');
136
137                 $name           = ((x($_POST,'name')) ? $_POST['name'] : '');
138                 $key            = ((x($_POST,'key')) ? $_POST['key'] : '');
139                 $secret         = ((x($_POST,'secret')) ? $_POST['secret'] : '');
140                 $redirect       = ((x($_POST,'redirect')) ? $_POST['redirect'] : '');
141                 $icon           = ((x($_POST,'icon')) ? $_POST['icon'] : '');
142                 if ($name=="" || $key=="" || $secret==""){
143                         notice(t("Missing some important data!"));
144
145                 } else {
146                         if ($_POST['submit']==t("Update")){
147                                 $r = q("UPDATE clients SET
148                                                         client_id='%s',
149                                                         pw='%s',
150                                                         name='%s',
151                                                         redirect_uri='%s',
152                                                         icon='%s',
153                                                         uid=%d
154                                                 WHERE client_id='%s'",
155                                                 dbesc($key),
156                                                 dbesc($secret),
157                                                 dbesc($name),
158                                                 dbesc($redirect),
159                                                 dbesc($icon),
160                                                 local_user(),
161                                                 dbesc($key));
162                         } else {
163                                 $r = q("INSERT INTO clients
164                                                         (client_id, pw, name, redirect_uri, icon, uid)
165                                                 VALUES ('%s','%s','%s','%s','%s',%d)",
166                                                 dbesc($key),
167                                                 dbesc($secret),
168                                                 dbesc($name),
169                                                 dbesc($redirect),
170                                                 dbesc($icon),
171                                                 local_user());
172                         }
173                 }
174                 goaway($a->get_baseurl(true)."/settings/oauth/");
175                 return;
176         }
177
178         if(($a->argc > 1) && ($a->argv[1] == 'addon')) {
179                 check_form_security_token_redirectOnErr('/settings/addon', 'settings_addon');
180
181                 call_hooks('plugin_settings_post', $_POST);
182                 return;
183         }
184
185         if(($a->argc > 1) && ($a->argv[1] == 'connectors')) {
186
187                 check_form_security_token_redirectOnErr('/settings/connectors', 'settings_connectors');
188
189                 if(x($_POST, 'general-submit')) {
190                         set_pconfig(local_user(), 'system', 'no_intelligent_shortening', intval($_POST['no_intelligent_shortening']));
191                         set_pconfig(local_user(), 'system', 'ostatus_autofriend', intval($_POST['snautofollow']));
192                         set_pconfig(local_user(), 'ostatus', 'legacy_contact', $_POST['legacy_contact']);
193                 } elseif(x($_POST, 'imap-submit')) {
194
195                         $mail_server       = ((x($_POST,'mail_server')) ? $_POST['mail_server'] : '');
196                         $mail_port         = ((x($_POST,'mail_port')) ? $_POST['mail_port'] : '');
197                         $mail_ssl          = ((x($_POST,'mail_ssl')) ? strtolower(trim($_POST['mail_ssl'])) : '');
198                         $mail_user         = ((x($_POST,'mail_user')) ? $_POST['mail_user'] : '');
199                         $mail_pass         = ((x($_POST,'mail_pass')) ? trim($_POST['mail_pass']) : '');
200                         $mail_action       = ((x($_POST,'mail_action')) ? trim($_POST['mail_action']) : '');
201                         $mail_movetofolder = ((x($_POST,'mail_movetofolder')) ? trim($_POST['mail_movetofolder']) : '');
202                         $mail_replyto      = ((x($_POST,'mail_replyto')) ? $_POST['mail_replyto'] : '');
203                         $mail_pubmail      = ((x($_POST,'mail_pubmail')) ? $_POST['mail_pubmail'] : '');
204
205
206                         $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
207                         if(get_config('system','dfrn_only'))
208                                 $mail_disabled = 1;
209
210                         if(! $mail_disabled) {
211                                 $failed = false;
212                                 $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
213                                         intval(local_user())
214                                 );
215                                 if(! count($r)) {
216                                         q("INSERT INTO `mailacct` (`uid`) VALUES (%d)",
217                                                 intval(local_user())
218                                         );
219                                 }
220                                 if(strlen($mail_pass)) {
221                                         $pass = '';
222                                         openssl_public_encrypt($mail_pass,$pass,$a->user['pubkey']);
223                                         q("UPDATE `mailacct` SET `pass` = '%s' WHERE `uid` = %d",
224                                                 dbesc(bin2hex($pass)),
225                                                 intval(local_user())
226                                         );
227                                 }
228                                 $r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s',
229                                         `action` = %d, `movetofolder` = '%s',
230                                         `mailbox` = 'INBOX', `reply_to` = '%s', `pubmail` = %d WHERE `uid` = %d",
231                                         dbesc($mail_server),
232                                         intval($mail_port),
233                                         dbesc($mail_ssl),
234                                         dbesc($mail_user),
235                                         intval($mail_action),
236                                         dbesc($mail_movetofolder),
237                                         dbesc($mail_replyto),
238                                         intval($mail_pubmail),
239                                         intval(local_user())
240                                 );
241                                 logger("mail: updating mailaccount. Response: ".print_r($r, true));
242                                 $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
243                                         intval(local_user())
244                                 );
245                                 if(count($r)) {
246                                         $eacct = $r[0];
247                                         require_once('include/email.php');
248                                         $mb = construct_mailbox_name($eacct);
249                                         if(strlen($eacct['server'])) {
250                                                 $dcrpass = '';
251                                                 openssl_private_decrypt(hex2bin($eacct['pass']),$dcrpass,$a->user['prvkey']);
252                                                 $mbox = email_connect($mb,$mail_user,$dcrpass);
253                                                 unset($dcrpass);
254                                                 if(! $mbox) {
255                                                         $failed = true;
256                                                         notice( t('Failed to connect with email account using the settings provided.') . EOL);
257                                                 }
258                                         }
259                                 }
260                                 if(! $failed)
261                                         info( t('Email settings updated.') . EOL);
262                         }
263                 }
264
265                 call_hooks('connector_settings_post', $_POST);
266                 return;
267         }
268
269         if(($a->argc > 1) && ($a->argv[1] === 'features')) {
270                 check_form_security_token_redirectOnErr('/settings/features', 'settings_features');
271                 foreach($_POST as $k => $v) {
272                         if(strpos($k,'feature_') === 0) {
273                                 set_pconfig(local_user(),'feature',substr($k,8),((intval($v)) ? 1 : 0));
274                         }
275                 }
276                 info( t('Features updated') . EOL);
277                 return;
278         }
279
280         if(($a->argc > 1) && ($a->argv[1] === 'display')) {
281
282                 check_form_security_token_redirectOnErr('/settings/display', 'settings_display');
283
284                 $theme = ((x($_POST,'theme')) ? notags(trim($_POST['theme']))  : $a->user['theme']);
285                 $mobile_theme = ((x($_POST,'mobile_theme')) ? notags(trim($_POST['mobile_theme']))  : '');
286                 $nosmile = ((x($_POST,'nosmile')) ? intval($_POST['nosmile'])  : 0);
287                 $first_day_of_week = ((x($_POST,'first_day_of_week')) ? intval($_POST['first_day_of_week'])  : 0);
288                 $noinfo = ((x($_POST,'noinfo')) ? intval($_POST['noinfo'])  : 0);
289                 $infinite_scroll = ((x($_POST,'infinite_scroll')) ? intval($_POST['infinite_scroll'])  : 0);
290                 $no_auto_update = ((x($_POST,'no_auto_update')) ? intval($_POST['no_auto_update'])  : 0);
291                 $browser_update   = ((x($_POST,'browser_update')) ? intval($_POST['browser_update']) : 0);
292                 $browser_update   = $browser_update * 1000;
293                 if($browser_update < 10000)
294                         $browser_update = 10000;
295
296                 $itemspage_network   = ((x($_POST,'itemspage_network')) ? intval($_POST['itemspage_network']) : 40);
297                 if($itemspage_network > 100)
298                         $itemspage_network = 100;
299                 $itemspage_mobile_network   = ((x($_POST,'itemspage_mobile_network')) ? intval($_POST['itemspage_mobile_network']) : 20);
300                 if($itemspage_mobile_network > 100)
301                         $itemspage_mobile_network = 100;
302
303
304                 if($mobile_theme !== '') {
305                         set_pconfig(local_user(),'system','mobile_theme',$mobile_theme);
306                 }
307
308                 set_pconfig(local_user(),'system','update_interval', $browser_update);
309                 set_pconfig(local_user(),'system','itemspage_network', $itemspage_network);
310                 set_pconfig(local_user(),'system','itemspage_mobile_network', $itemspage_mobile_network);
311                 set_pconfig(local_user(),'system','no_smilies',$nosmile);
312                 set_pconfig(local_user(),'system','first_day_of_week',$first_day_of_week);
313                 set_pconfig(local_user(),'system','ignore_info',$noinfo);
314                 set_pconfig(local_user(),'system','infinite_scroll',$infinite_scroll);
315                 set_pconfig(local_user(),'system','no_auto_update',$no_auto_update);
316
317
318                 if ($theme == $a->user['theme']){
319                         // call theme_post only if theme has not been changed
320                         if( ($themeconfigfile = get_theme_config_file($theme)) != null){
321                                 require_once($themeconfigfile);
322                                 theme_post($a);
323                         }
324                 }
325
326
327                 $r = q("UPDATE `user` SET `theme` = '%s' WHERE `uid` = %d",
328                                 dbesc($theme),
329                                 intval(local_user())
330                 );
331
332                 call_hooks('display_settings_post', $_POST);
333                 goaway($a->get_baseurl(true) . '/settings/display' );
334                 return; // NOTREACHED
335         }
336
337         check_form_security_token_redirectOnErr('/settings', 'settings');
338
339         if (x($_POST,'resend_relocate')) {
340                 proc_run('php', 'include/notifier.php', 'relocate', local_user());
341                 info(t("Relocate message has been send to your contacts"));
342                 goaway($a->get_baseurl(true) . '/settings');
343         }
344
345         call_hooks('settings_post', $_POST);
346
347         if((x($_POST,'password')) || (x($_POST,'confirm'))) {
348
349                 $newpass = $_POST['password'];
350                 $confirm = $_POST['confirm'];
351                 $oldpass = hash('whirlpool', $_POST['opassword']);
352
353                 $err = false;
354                 if($newpass != $confirm ) {
355                         notice( t('Passwords do not match. Password unchanged.') . EOL);
356                         $err = true;
357                 }
358
359                 if((! x($newpass)) || (! x($confirm))) {
360                         notice( t('Empty passwords are not allowed. Password unchanged.') . EOL);
361                         $err = true;
362         }
363
364         //  check if the old password was supplied correctly before
365         //  changing it to the new value
366         $r = q("SELECT `password` FROM `user`WHERE `uid` = %d LIMIT 1", intval(local_user()));
367         if( $oldpass != $r[0]['password'] ) {
368             notice( t('Wrong password.') . EOL);
369             $err = true;
370         }
371
372                 if(! $err) {
373                         $password = hash('whirlpool',$newpass);
374                         $r = q("UPDATE `user` SET `password` = '%s' WHERE `uid` = %d",
375                                 dbesc($password),
376                                 intval(local_user())
377                         );
378                         if($r)
379                                 info( t('Password changed.') . EOL);
380                         else
381                                 notice( t('Password update failed. Please try again.') . EOL);
382                 }
383         }
384
385
386         $username         = ((x($_POST,'username'))   ? notags(trim($_POST['username']))     : '');
387         $email            = ((x($_POST,'email'))      ? notags(trim($_POST['email']))        : '');
388         $timezone         = ((x($_POST,'timezone'))   ? notags(trim($_POST['timezone']))     : '');
389         $defloc           = ((x($_POST,'defloc'))     ? notags(trim($_POST['defloc']))       : '');
390         $openid           = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url']))   : '');
391         $maxreq           = ((x($_POST,'maxreq'))     ? intval($_POST['maxreq'])             : 0);
392         $expire           = ((x($_POST,'expire'))     ? intval($_POST['expire'])             : 0);
393         $def_gid          = ((x($_POST,'group-selection')) ? intval($_POST['group-selection']) : 0);
394
395
396         $expire_items     = ((x($_POST,'expire_items')) ? intval($_POST['expire_items'])         : 0);
397         $expire_notes     = ((x($_POST,'expire_notes')) ? intval($_POST['expire_notes'])         : 0);
398         $expire_starred   = ((x($_POST,'expire_starred')) ? intval($_POST['expire_starred']) : 0);
399         $expire_photos    = ((x($_POST,'expire_photos'))? intval($_POST['expire_photos'])        : 0);
400         $expire_network_only    = ((x($_POST,'expire_network_only'))? intval($_POST['expire_network_only'])      : 0);
401
402         $allow_location   = (((x($_POST,'allow_location')) && (intval($_POST['allow_location']) == 1)) ? 1: 0);
403         $publish          = (((x($_POST,'profile_in_directory')) && (intval($_POST['profile_in_directory']) == 1)) ? 1: 0);
404         $net_publish      = (((x($_POST,'profile_in_netdirectory')) && (intval($_POST['profile_in_netdirectory']) == 1)) ? 1: 0);
405         $old_visibility   = (((x($_POST,'visibility')) && (intval($_POST['visibility']) == 1)) ? 1 : 0);
406         $page_flags       = (((x($_POST,'page-flags')) && (intval($_POST['page-flags']))) ? intval($_POST['page-flags']) : 0);
407         $blockwall        = (((x($_POST,'blockwall')) && (intval($_POST['blockwall']) == 1)) ? 0: 1); // this setting is inverted!
408         $blocktags        = (((x($_POST,'blocktags')) && (intval($_POST['blocktags']) == 1)) ? 0: 1); // this setting is inverted!
409         $unkmail          = (((x($_POST,'unkmail')) && (intval($_POST['unkmail']) == 1)) ? 1: 0);
410         $cntunkmail       = ((x($_POST,'cntunkmail')) ? intval($_POST['cntunkmail']) : 0);
411         $suggestme        = ((x($_POST,'suggestme')) ? intval($_POST['suggestme'])  : 0);
412         $hide_friends     = (($_POST['hide-friends'] == 1) ? 1: 0);
413         $hidewall         = (($_POST['hidewall'] == 1) ? 1: 0);
414         $post_newfriend   = (($_POST['post_newfriend'] == 1) ? 1: 0);
415         $post_joingroup   = (($_POST['post_joingroup'] == 1) ? 1: 0);
416         $post_profilechange   = (($_POST['post_profilechange'] == 1) ? 1: 0);
417
418         $email_textonly   = (($_POST['email_textonly'] == 1) ? 1 : 0);
419
420         $notify = 0;
421
422         if(x($_POST,'notify1'))
423                 $notify += intval($_POST['notify1']);
424         if(x($_POST,'notify2'))
425                 $notify += intval($_POST['notify2']);
426         if(x($_POST,'notify3'))
427                 $notify += intval($_POST['notify3']);
428         if(x($_POST,'notify4'))
429                 $notify += intval($_POST['notify4']);
430         if(x($_POST,'notify5'))
431                 $notify += intval($_POST['notify5']);
432         if(x($_POST,'notify6'))
433                 $notify += intval($_POST['notify6']);
434         if(x($_POST,'notify7'))
435                 $notify += intval($_POST['notify7']);
436         if(x($_POST,'notify8'))
437                 $notify += intval($_POST['notify8']);
438
439         $email_changed = false;
440
441         $err = '';
442
443         $name_change = false;
444
445         if($username != $a->user['username']) {
446                 $name_change = true;
447                 if(strlen($username) > 40)
448                         $err .= t(' Please use a shorter name.');
449                 if(strlen($username) < 3)
450                         $err .= t(' Name too short.');
451         }
452
453         if($email != $a->user['email']) {
454                 $email_changed = true;
455                 //  check for the correct password
456                 $r = q("SELECT `password` FROM `user`WHERE `uid` = %d LIMIT 1", intval(local_user()));
457                 $password = hash('whirlpool', $_POST['mpassword']);
458                 if ($password != $r[0]['password']) {
459                         $err .= t('Wrong Password') . EOL;
460                         $email = $a->user['email'];
461                 }
462                 //  check the email is valid
463                 if(! valid_email($email))
464                         $err .= t(' Not valid email.');
465                 //  ensure new email is not the admin mail
466                 //if((x($a->config,'admin_email')) && (strcasecmp($email,$a->config['admin_email']) == 0)) {
467                 if(x($a->config,'admin_email')) {
468                         $adminlist = explode(",", str_replace(" ", "", strtolower($a->config['admin_email'])));
469                         if (in_array(strtolower($email), $adminlist)) {
470                                 $err .= t(' Cannot change to that email.');
471                                 $email = $a->user['email'];
472                         }
473                 }
474         }
475
476         if(strlen($err)) {
477                 notice($err . EOL);
478                 return;
479         }
480
481         if($timezone != $a->user['timezone']) {
482                 if(strlen($timezone))
483                         date_default_timezone_set($timezone);
484         }
485
486         $str_group_allow   = perms2str($_POST['group_allow']);
487         $str_contact_allow = perms2str($_POST['contact_allow']);
488         $str_group_deny    = perms2str($_POST['group_deny']);
489         $str_contact_deny  = perms2str($_POST['contact_deny']);
490
491         $openidserver = $a->user['openidserver'];
492         //$openid = normalise_openid($openid);
493
494         // If openid has changed or if there's an openid but no openidserver, try and discover it.
495
496         if($openid != $a->user['openid'] || (strlen($openid) && (! strlen($openidserver)))) {
497                 $tmp_str = $openid;
498                 if(strlen($tmp_str) && validate_url($tmp_str)) {
499                         logger('updating openidserver');
500                         require_once('library/openid.php');
501                         $open_id_obj = new LightOpenID;
502                         $open_id_obj->identity = $openid;
503                         $openidserver = $open_id_obj->discover($open_id_obj->identity);
504                 }
505                 else
506                         $openidserver = '';
507         }
508
509         set_pconfig(local_user(),'expire','items', $expire_items);
510         set_pconfig(local_user(),'expire','notes', $expire_notes);
511         set_pconfig(local_user(),'expire','starred', $expire_starred);
512         set_pconfig(local_user(),'expire','photos', $expire_photos);
513         set_pconfig(local_user(),'expire','network_only', $expire_network_only);
514
515         set_pconfig(local_user(),'system','suggestme', $suggestme);
516         set_pconfig(local_user(),'system','post_newfriend', $post_newfriend);
517         set_pconfig(local_user(),'system','post_joingroup', $post_joingroup);
518         set_pconfig(local_user(),'system','post_profilechange', $post_profilechange);
519
520         set_pconfig(local_user(),'system','email_textonly', $email_textonly);
521
522         if($page_flags == PAGE_PRVGROUP) {
523                 $hidewall = 1;
524                 if((! $str_contact_allow) && (! $str_group_allow) && (! $str_contact_deny) && (! $str_group_deny)) {
525                         if($def_gid) {
526                                 info( t('Private forum has no privacy permissions. Using default privacy group.'). EOL);
527                                 $str_group_allow = '<' . $def_gid . '>';
528                         }
529                         else {
530                                 notice( t('Private forum has no privacy permissions and no default privacy group.') . EOL);
531                         }
532                 }
533         }
534
535         $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s',  `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `maxreq` = %d, `expire` = %d, `openidserver` = '%s', `def_gid` = %d, `blockwall` = %d, `hidewall` = %d, `blocktags` = %d, `unkmail` = %d, `cntunkmail` = %d  WHERE `uid` = %d",
536                         dbesc($username),
537                         dbesc($email),
538                         dbesc($openid),
539                         dbesc($timezone),
540                         dbesc($str_contact_allow),
541                         dbesc($str_group_allow),
542                         dbesc($str_contact_deny),
543                         dbesc($str_group_deny),
544                         intval($notify),
545                         intval($page_flags),
546                         dbesc($defloc),
547                         intval($allow_location),
548                         intval($maxreq),
549                         intval($expire),
550                         dbesc($openidserver),
551                         intval($def_gid),
552                         intval($blockwall),
553                         intval($hidewall),
554                         intval($blocktags),
555                         intval($unkmail),
556                         intval($cntunkmail),
557                         intval(local_user())
558         );
559         if($r)
560                 info( t('Settings updated.') . EOL);
561
562         $r = q("UPDATE `profile`
563                 SET `publish` = %d,
564                 `name` = '%s',
565                 `net-publish` = %d,
566                 `hide-friends` = %d
567                 WHERE `is-default` = 1 AND `uid` = %d",
568                 intval($publish),
569                 dbesc($username),
570                 intval($net_publish),
571                 intval($hide_friends),
572                 intval(local_user())
573         );
574
575
576         if($name_change) {
577                 q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `self` = 1",
578                         dbesc($username),
579                         dbesc(datetime_convert()),
580                         intval(local_user())
581                 );
582         }
583
584         if(($old_visibility != $net_publish) || ($page_flags != $old_page_flags)) {
585                 // Update global directory in background
586                 $url = $_SESSION['my_url'];
587                 if($url && strlen(get_config('system','directory')))
588                         proc_run('php',"include/directory.php","$url");
589
590         }
591
592
593         require_once('include/profile_update.php');
594         profile_change();
595
596         //$_SESSION['theme'] = $theme;
597         if($email_changed && $a->config['register_policy'] == REGISTER_VERIFY) {
598
599                 // FIXME - set to un-verified, blocked and redirect to logout
600                 // Why? Are we verifying people or email addresses?
601
602         }
603
604         goaway($a->get_baseurl(true) . '/settings' );
605         return; // NOTREACHED
606 }
607
608
609 if(! function_exists('settings_content')) {
610 function settings_content(&$a) {
611
612         $o = '';
613         nav_set_selected('settings');
614
615         if(! local_user()) {
616                 #notice( t('Permission denied.') . EOL );
617                 return;
618         }
619
620         if(x($_SESSION,'submanage') && intval($_SESSION['submanage'])) {
621                 notice( t('Permission denied.') . EOL );
622                 return;
623         }
624
625
626
627         if(($a->argc > 1) && ($a->argv[1] === 'oauth')) {
628
629                 if(($a->argc > 2) && ($a->argv[2] === 'add')) {
630                         $tpl = get_markup_template("settings_oauth_edit.tpl");
631                         $o .= replace_macros($tpl, array(
632                                 '$form_security_token' => get_form_security_token("settings_oauth"),
633                                 '$title'        => t('Add application'),
634                                 '$submit'       => t('Save Settings'),
635                                 '$cancel'       => t('Cancel'),
636                                 '$name'         => array('name', t('Name'), '', ''),
637                                 '$key'          => array('key', t('Consumer Key'), '', ''),
638                                 '$secret'       => array('secret', t('Consumer Secret'), '', ''),
639                                 '$redirect'     => array('redirect', t('Redirect'), '', ''),
640                                 '$icon'         => array('icon', t('Icon url'), '', ''),
641                         ));
642                         return $o;
643                 }
644
645                 if(($a->argc > 3) && ($a->argv[2] === 'edit')) {
646                         $r = q("SELECT * FROM clients WHERE client_id='%s' AND uid=%d",
647                                         dbesc($a->argv[3]),
648                                         local_user());
649
650                         if (!count($r)){
651                                 notice(t("You can't edit this application."));
652                                 return;
653                         }
654                         $app = $r[0];
655
656                         $tpl = get_markup_template("settings_oauth_edit.tpl");
657                         $o .= replace_macros($tpl, array(
658                                 '$form_security_token' => get_form_security_token("settings_oauth"),
659                                 '$title'        => t('Add application'),
660                                 '$submit'       => t('Update'),
661                                 '$cancel'       => t('Cancel'),
662                                 '$name'         => array('name', t('Name'), $app['name'] , ''),
663                                 '$key'          => array('key', t('Consumer Key'), $app['client_id'], ''),
664                                 '$secret'       => array('secret', t('Consumer Secret'), $app['pw'], ''),
665                                 '$redirect'     => array('redirect', t('Redirect'), $app['redirect_uri'], ''),
666                                 '$icon'         => array('icon', t('Icon url'), $app['icon'], ''),
667                         ));
668                         return $o;
669                 }
670
671                 if(($a->argc > 3) && ($a->argv[2] === 'delete')) {
672                         check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth', 't');
673
674                         $r = q("DELETE FROM clients WHERE client_id='%s' AND uid=%d",
675                                         dbesc($a->argv[3]),
676                                         local_user());
677                         goaway($a->get_baseurl(true)."/settings/oauth/");
678                         return;
679                 }
680
681
682                 $r = q("SELECT clients.*, tokens.id as oauth_token, (clients.uid=%d) AS my
683                                 FROM clients
684                                 LEFT JOIN tokens ON clients.client_id=tokens.client_id
685                                 WHERE clients.uid IN (%d,0)",
686                                 local_user(),
687                                 local_user());
688
689
690                 $tpl = get_markup_template("settings_oauth.tpl");
691                 $o .= replace_macros($tpl, array(
692                         '$form_security_token' => get_form_security_token("settings_oauth"),
693                         '$baseurl'      => $a->get_baseurl(true),
694                         '$title'        => t('Connected Apps'),
695                         '$add'          => t('Add application'),
696                         '$edit'         => t('Edit'),
697                         '$delete'               => t('Delete'),
698                         '$consumerkey' => t('Client key starts with'),
699                         '$noname'       => t('No name'),
700                         '$remove'       => t('Remove authorization'),
701                         '$apps'         => $r,
702                 ));
703                 return $o;
704
705         }
706
707         if(($a->argc > 1) && ($a->argv[1] === 'addon')) {
708                 $settings_addons = "";
709
710                 $r = q("SELECT * FROM `hook` WHERE `hook` = 'plugin_settings' ");
711                 if(! count($r))
712                         $settings_addons = t('No Plugin settings configured');
713
714                 call_hooks('plugin_settings', $settings_addons);
715
716
717                 $tpl = get_markup_template("settings_addons.tpl");
718                 $o .= replace_macros($tpl, array(
719                         '$form_security_token' => get_form_security_token("settings_addon"),
720                         '$title'        => t('Plugin Settings'),
721                         '$settings_addons' => $settings_addons
722                 ));
723                 return $o;
724         }
725
726         if(($a->argc > 1) && ($a->argv[1] === 'features')) {
727
728                 $arr = array();
729                 $features = get_features();
730                 foreach($features as $fname => $fdata) {
731                         $arr[$fname] = array();
732                         $arr[$fname][0] = $fdata[0];
733                         foreach(array_slice($fdata,1) as $f) {
734                                 $arr[$fname][1][] = array('feature_' .$f[0],$f[1],((intval(get_pconfig(local_user(),'feature',$f[0]))) ? "1" : ''),$f[2],array(t('Off'),t('On')));
735                         }
736                 }
737
738
739                 $tpl = get_markup_template("settings_features.tpl");
740                 $o .= replace_macros($tpl, array(
741                         '$form_security_token' => get_form_security_token("settings_features"),
742                         '$title'        => t('Additional Features'),
743                         '$features' => $arr,
744                         '$submit'   => t('Save Settings'),
745                 ));
746                 return $o;
747         }
748
749         if(($a->argc > 1) && ($a->argv[1] === 'connectors')) {
750
751                 $settings_connectors = '<span id="settings_general_inflated" class="settings-block fakelink" style="display: block;" onclick="openClose(\'settings_general_expanded\'); openClose(\'settings_general_inflated\');">';
752                 $settings_connectors .= '<h3 class="connector">'. t('General Social Media Settings').'</h3>';
753                 $settings_connectors .= '</span>';
754                 $settings_connectors .= '<div id="settings_general_expanded" class="settings-block" style="display: none;">';
755                 $settings_connectors .= '<span class="fakelink" onclick="openClose(\'settings_general_expanded\'); openClose(\'settings_general_inflated\');">';
756                 $settings_connectors .= '<h3 class="connector">'. t('General Social Media Settings').'</h3>';
757                 $settings_connectors .= '</span>';
758
759                 $checked = ((get_pconfig(local_user(), 'system', 'no_intelligent_shortening')) ? ' checked="checked" ' : '');
760
761                 $settings_connectors .= '<div id="no_intelligent_shortening" class="field checkbox">';
762                 $settings_connectors .= '<label id="no_intelligent_shortening-label" for="shortening-checkbox">'. t('Disable intelligent shortening'). '</label>';
763                 $settings_connectors .= '<input id="shortening-checkbox" type="checkbox" name="no_intelligent_shortening" value="1" ' . $checked . '/>';
764                 $settings_connectors .= '<span class="field_help">'.t('Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post.').'</span>';
765                 $settings_connectors .= '</div>';
766
767                 $checked = ((get_pconfig(local_user(), 'system', 'ostatus_autofriend')) ? ' checked="checked" ' : '');
768
769                 $settings_connectors .= '<div id="snautofollow-wrapper" class="field checkbox">';
770                 $settings_connectors .= '<label id="snautofollow-label" for="snautofollow-checkbox">'. t('Automatically follow any GNU Social (OStatus) followers/mentioners'). '</label>';
771                 $settings_connectors .= '<input id="snautofollow-checkbox" type="checkbox" name="snautofollow" value="1" ' . $checked . '/>';
772                 $settings_connectors .= '<span class="field_help">'.t('If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user.').'</span>';
773                 $settings_connectors .= '</div>';
774
775                 $legacy_contact = get_pconfig(local_user(), 'ostatus', 'legacy_contact');
776
777                 if ($legacy_contact != "")
778                         $a->page['htmlhead'] = '<meta http-equiv="refresh" content="0; URL='.$a->get_baseurl().'/ostatus_subscribe?url='.urlencode($legacy_contact).'">';
779
780                 $settings_connectors .= '<div id="legacy-contact-wrapper" class="field input">';
781                 $settings_connectors .= '<label id="legacy-contact-label" for="snautofollow-checkbox">'. t('Your legacy GNU Social account'). '</label>';
782                 $settings_connectors .= '<input id="legacy-contact-checkbox" name="legacy_contact" value="'.$legacy_contact.'"/>';
783                 $settings_connectors .= '<span class="field_help">'.t('If you enter your old GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done.').'</span>';
784                 $settings_connectors .= '</div>';
785
786                 $settings_connectors .= '<p><a href="'.$a->get_baseurl().'/repair_ostatus">'.t("Repair OStatus subscriptions").'</a></p>';
787
788                 $settings_connectors .= '<div class="settings-submit-wrapper" ><input type="submit" name="general-submit" class="settings-submit" value="' . t('Save Settings') . '" /></div>';
789
790                 $settings_connectors .= '</div><div class="clear"></div>';
791
792                 call_hooks('connector_settings', $settings_connectors);
793
794                 if (is_site_admin()) {
795                         $diasp_enabled = sprintf( t('Built-in support for %s connectivity is %s'), t('Diaspora'), ((get_config('system','diaspora_enabled')) ? t('enabled') : t('disabled')));
796                         $ostat_enabled = sprintf( t('Built-in support for %s connectivity is %s'), t('GNU Social (OStatus)'), ((get_config('system','ostatus_disabled')) ? t('disabled') : t('enabled')));
797                 } else {
798                         $diasp_enabled = "";
799                         $ostat_enabled = "";
800                 }
801
802                 $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
803                 if(get_config('system','dfrn_only'))
804                         $mail_disabled = 1;
805
806                 if(! $mail_disabled) {
807                         $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
808                                 local_user()
809                         );
810                 }
811                 else {
812                         $r = null;
813                 }
814
815                 $mail_server       = ((count($r)) ? $r[0]['server'] : '');
816                 $mail_port         = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : '');
817                 $mail_ssl          = ((count($r)) ? $r[0]['ssltype'] : '');
818                 $mail_user         = ((count($r)) ? $r[0]['user'] : '');
819                 $mail_replyto      = ((count($r)) ? $r[0]['reply_to'] : '');
820                 $mail_pubmail      = ((count($r)) ? $r[0]['pubmail'] : 0);
821                 $mail_action       = ((count($r)) ? $r[0]['action'] : 0);
822                 $mail_movetofolder = ((count($r)) ? $r[0]['movetofolder'] : '');
823                 $mail_chk          = ((count($r)) ? $r[0]['last_check'] : '0000-00-00 00:00:00');
824
825
826                 $tpl = get_markup_template("settings_connectors.tpl");
827
828                 if(! service_class_allows(local_user(),'email_connect')) {
829                         $mail_disabled_message = upgrade_bool_message();
830                 }
831                 else {
832                         $mail_disabled_message = (($mail_disabled) ? t('Email access is disabled on this site.') : '');
833                 }
834
835
836                 $o .= replace_macros($tpl, array(
837                         '$form_security_token' => get_form_security_token("settings_connectors"),
838
839                         '$title'        => t('Social Networks'),
840
841                         '$diasp_enabled' => $diasp_enabled,
842                         '$ostat_enabled' => $ostat_enabled,
843
844                         '$h_imap' => t('Email/Mailbox Setup'),
845                         '$imap_desc' => t("If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."),
846                         '$imap_lastcheck' => array('imap_lastcheck', t('Last successful email check:'), $mail_chk,''),
847                         '$mail_disabled' => $mail_disabled_message,
848                         '$mail_server'  => array('mail_server',  t('IMAP server name:'), $mail_server, ''),
849                         '$mail_port'    => array('mail_port',    t('IMAP port:'), $mail_port, ''),
850                         '$mail_ssl'             => array('mail_ssl',     t('Security:'), strtoupper($mail_ssl), '', array( 'notls'=>t('None'), 'TLS'=>'TLS', 'SSL'=>'SSL')),
851                         '$mail_user'    => array('mail_user',    t('Email login name:'), $mail_user, ''),
852                         '$mail_pass'    => array('mail_pass',    t('Email password:'), '', ''),
853                         '$mail_replyto' => array('mail_replyto', t('Reply-to address:'), $mail_replyto, 'Optional'),
854                         '$mail_pubmail' => array('mail_pubmail', t('Send public posts to all email contacts:'), $mail_pubmail, ''),
855                         '$mail_action'  => array('mail_action',  t('Action after import:'), $mail_action, '', array(0=>t('None'), /*1=>t('Delete'),*/ 2=>t('Mark as seen'), 3=>t('Move to folder'))),
856                         '$mail_movetofolder'    => array('mail_movetofolder',    t('Move to folder:'), $mail_movetofolder, ''),
857                         '$submit' => t('Save Settings'),
858
859                         '$settings_connectors' => $settings_connectors
860                 ));
861
862                 call_hooks('display_settings', $o);
863                 return $o;
864         }
865
866         /*
867          * DISPLAY SETTINGS
868          */
869         if(($a->argc > 1) && ($a->argv[1] === 'display')) {
870                 $default_theme = get_config('system','theme');
871                 if(! $default_theme)
872                         $default_theme = 'default';
873                 $default_mobile_theme = get_config('system','mobile-theme');
874                 if(! $mobile_default_theme)
875                         $mobile_default_theme = 'none';
876
877                 $allowed_themes_str = get_config('system','allowed_themes');
878                 $allowed_themes_raw = explode(',',$allowed_themes_str);
879                 $allowed_themes = array();
880                 if(count($allowed_themes_raw))
881                         foreach($allowed_themes_raw as $x)
882                                 if(strlen(trim($x)) && is_dir("view/theme/$x"))
883                                         $allowed_themes[] = trim($x);
884
885
886                 $themes = array();
887                 $mobile_themes = array("---" => t('No special theme for mobile devices'));
888                 $files = glob('view/theme/*'); /* */
889                 if($allowed_themes) {
890                         foreach($allowed_themes as $th) {
891                                 $f = $th;
892                                 $is_experimental = file_exists('view/theme/' . $th . '/experimental');
893                                 $unsupported = file_exists('view/theme/' . $th . '/unsupported');
894                                 $is_mobile = file_exists('view/theme/' . $th . '/mobile');
895                                 if (!$is_experimental or ($is_experimental && (get_config('experimentals','exp_themes')==1 or get_config('experimentals','exp_themes')===false))){
896                                         $theme_name = (($is_experimental) ?  sprintf("%s - \x28Experimental\x29", $f) : $f);
897                                         if($is_mobile) {
898                                                 $mobile_themes[$f]=$theme_name;
899                                         }
900                                         else {
901                                                 $themes[$f]=$theme_name;
902                                         }
903                                 }
904                         }
905                 }
906                 $theme_selected = (!x($_SESSION,'theme')? $default_theme : $_SESSION['theme']);
907                 $mobile_theme_selected = (!x($_SESSION,'mobile-theme')? $default_mobile_theme : $_SESSION['mobile-theme']);
908
909                 $browser_update = intval(get_pconfig(local_user(), 'system','update_interval'));
910                 $browser_update = (($browser_update == 0) ? 40 : $browser_update / 1000); // default if not set: 40 seconds
911
912                 $itemspage_network = intval(get_pconfig(local_user(), 'system','itemspage_network'));
913                 $itemspage_network = (($itemspage_network > 0 && $itemspage_network < 101) ? $itemspage_network : 40); // default if not set: 40 items
914                 $itemspage_mobile_network = intval(get_pconfig(local_user(), 'system','itemspage_mobile_network'));
915                 $itemspage_mobile_network = (($itemspage_mobile_network > 0 && $itemspage_mobile_network < 101) ? $itemspage_mobile_network : 20); // default if not set: 20 items
916
917                 $nosmile = get_pconfig(local_user(),'system','no_smilies');
918                 $nosmile = (($nosmile===false)? '0': $nosmile); // default if not set: 0
919
920                 $first_day_of_week = get_pconfig(local_user(),'system','first_day_of_week');
921                 $first_day_of_week = (($first_day_of_week===false)? '0': $first_day_of_week); // default if not set: 0
922                 $weekdays = array(0 => t("Sunday"), 1 => t("Monday"));
923
924                 $noinfo = get_pconfig(local_user(),'system','ignore_info');
925                 $noinfo = (($noinfo===false)? '0': $noinfo); // default if not set: 0
926
927                 $infinite_scroll = get_pconfig(local_user(),'system','infinite_scroll');
928                 $infinite_scroll = (($infinite_scroll===false)? '0': $infinite_scroll); // default if not set: 0
929
930                 $no_auto_update = get_pconfig(local_user(),'system','no_auto_update');
931                 $no_auto_update = (($no_auto_update===false)? '0': $no_auto_update); // default if not set: 0
932
933                 $theme_config = "";
934                 if( ($themeconfigfile = get_theme_config_file($theme_selected)) != null){
935                         require_once($themeconfigfile);
936                         $theme_config = theme_content($a);
937                 }
938
939                 $tpl = get_markup_template("settings_display.tpl");
940                 $o = replace_macros($tpl, array(
941                         '$ptitle'       => t('Display Settings'),
942                         '$form_security_token' => get_form_security_token("settings_display"),
943                         '$submit'       => t('Save Settings'),
944                         '$baseurl' => $a->get_baseurl(true),
945                         '$uid' => local_user(),
946
947                         '$theme'        => array('theme', t('Display Theme:'), $theme_selected, '', $themes, true),
948                         '$mobile_theme' => array('mobile_theme', t('Mobile Theme:'), $mobile_theme_selected, '', $mobile_themes, false),
949                         '$ajaxint'   => array('browser_update',  t("Update browser every xx seconds"), $browser_update, t('Minimum of 10 seconds, no maximum')),
950                         '$itemspage_network'   => array('itemspage_network',  t("Number of items to display per page:"), $itemspage_network, t('Maximum of 100 items')),
951                         '$itemspage_mobile_network'   => array('itemspage_mobile_network',  t("Number of items to display per page when viewed from mobile device:"), $itemspage_mobile_network, t('Maximum of 100 items')),
952                         '$nosmile'      => array('nosmile', t("Don't show emoticons"), $nosmile, ''),
953                         '$calendar_title' => t('Calendar'),
954                         '$first_day_of_week'    => array('first_day_of_week', t('Beginning of week:'), $first_day_of_week, '', $weekdays, false),
955                         '$noinfo'       => array('noinfo', t("Don't show notices"), $noinfo, ''),
956                         '$infinite_scroll'      => array('infinite_scroll', t("Infinite scroll"), $infinite_scroll, ''),
957                         '$no_auto_update'       => array('no_auto_update', t("Automatic updates only at the top of the network page"), $no_auto_update, 'When disabled, the network page is updated all the time, which could be confusing while reading.'),
958
959                         'stitle' => t('Theme settings'),
960                         '$theme_config' => $theme_config,
961                 ));
962
963                 $tpl = get_markup_template("settings_display_end.tpl");
964                 $a->page['end'] .= replace_macros($tpl, array(
965                         '$theme'        => array('theme', t('Display Theme:'), $theme_selected, '', $themes)
966                 ));
967
968                 return $o;
969         }
970
971
972         /*
973          * ACCOUNT SETTINGS
974          */
975
976         require_once('include/acl_selectors.php');
977
978         $p = q("SELECT * FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1",
979                 intval(local_user())
980         );
981         if(count($p))
982                 $profile = $p[0];
983
984         $username   = $a->user['username'];
985         $email      = $a->user['email'];
986         $nickname   = $a->user['nickname'];
987         $timezone   = $a->user['timezone'];
988         $notify     = $a->user['notify-flags'];
989         $defloc     = $a->user['default-location'];
990         $openid     = $a->user['openid'];
991         $maxreq     = $a->user['maxreq'];
992         $expire     = ((intval($a->user['expire'])) ? $a->user['expire'] : '');
993         $blockwall  = $a->user['blockwall'];
994         $blocktags  = $a->user['blocktags'];
995         $unkmail    = $a->user['unkmail'];
996         $cntunkmail = $a->user['cntunkmail'];
997
998         $expire_items = get_pconfig(local_user(), 'expire','items');
999         $expire_items = (($expire_items===false)? '1' : $expire_items); // default if not set: 1
1000
1001         $expire_notes = get_pconfig(local_user(), 'expire','notes');
1002         $expire_notes = (($expire_notes===false)? '1' : $expire_notes); // default if not set: 1
1003
1004         $expire_starred = get_pconfig(local_user(), 'expire','starred');
1005         $expire_starred = (($expire_starred===false)? '1' : $expire_starred); // default if not set: 1
1006
1007         $expire_photos = get_pconfig(local_user(), 'expire','photos');
1008         $expire_photos = (($expire_photos===false)? '0' : $expire_photos); // default if not set: 0
1009
1010         $expire_network_only = get_pconfig(local_user(), 'expire','network_only');
1011         $expire_network_only = (($expire_network_only===false)? '0' : $expire_network_only); // default if not set: 0
1012
1013
1014         $suggestme = get_pconfig(local_user(), 'system','suggestme');
1015         $suggestme = (($suggestme===false)? '0': $suggestme); // default if not set: 0
1016
1017         $post_newfriend = get_pconfig(local_user(), 'system','post_newfriend');
1018         $post_newfriend = (($post_newfriend===false)? '0': $post_newfriend); // default if not set: 0
1019
1020         $post_joingroup = get_pconfig(local_user(), 'system','post_joingroup');
1021         $post_joingroup = (($post_joingroup===false)? '0': $post_joingroup); // default if not set: 0
1022
1023         $post_profilechange = get_pconfig(local_user(), 'system','post_profilechange');
1024         $post_profilechange = (($post_profilechange===false)? '0': $post_profilechange); // default if not set: 0
1025
1026         // nowarn_insecure
1027
1028         if(! strlen($a->user['timezone']))
1029                 $timezone = date_default_timezone_get();
1030
1031
1032
1033         $pageset_tpl = get_markup_template('pagetypes.tpl');
1034         $pagetype = replace_macros($pageset_tpl, array(
1035                 '$user'         => t("User Types"),
1036                 '$community'    => t("Community Types"),
1037                 '$page_normal'  => array('page-flags', t('Normal Account Page'), PAGE_NORMAL,
1038                                                                         t('This account is a normal personal profile'),
1039                                                                         ($a->user['page-flags'] == PAGE_NORMAL)),
1040
1041                 '$page_soapbox'         => array('page-flags', t('Soapbox Page'), PAGE_SOAPBOX,
1042                                                                         t('Automatically approve all connection/friend requests as read-only fans'),
1043                                                                         ($a->user['page-flags'] == PAGE_SOAPBOX)),
1044
1045                 '$page_community'       => array('page-flags', t('Community Forum/Celebrity Account'), PAGE_COMMUNITY,
1046                                                                         t('Automatically approve all connection/friend requests as read-write fans'),
1047                                                                         ($a->user['page-flags'] == PAGE_COMMUNITY)),
1048
1049                 '$page_freelove'        => array('page-flags', t('Automatic Friend Page'), PAGE_FREELOVE,
1050                                                                         t('Automatically approve all connection/friend requests as friends'),
1051                                                                         ($a->user['page-flags'] == PAGE_FREELOVE)),
1052
1053                 '$page_prvgroup'        => array('page-flags', t('Private Forum [Experimental]'), PAGE_PRVGROUP,
1054                                                                         t('Private forum - approved members only'),
1055                                                                         ($a->user['page-flags'] == PAGE_PRVGROUP)),
1056
1057
1058         ));
1059
1060         $noid = get_config('system','no_openid');
1061
1062         if($noid) {
1063                 $openid_field = false;
1064         }
1065         else {
1066                 $openid_field = array('openid_url', t('OpenID:'),$openid, t("\x28Optional\x29 Allow this OpenID to login to this account."), "", "", "url");
1067         }
1068
1069
1070         $opt_tpl = get_markup_template("field_yesno.tpl");
1071         if(get_config('system','publish_all')) {
1072                 $profile_in_dir = '<input type="hidden" name="profile_in_directory" value="1" />';
1073         }
1074         else {
1075                 $profile_in_dir = replace_macros($opt_tpl,array(
1076                         '$field'        => array('profile_in_directory', t('Publish your default profile in your local site directory?'), $profile['publish'], '', array(t('No'),t('Yes'))),
1077                 ));
1078         }
1079
1080         if(strlen(get_config('system','directory'))) {
1081                 $profile_in_net_dir = replace_macros($opt_tpl,array(
1082                         '$field'        => array('profile_in_netdirectory', t('Publish your default profile in the global social directory?'), $profile['net-publish'], '', array(t('No'),t('Yes'))),
1083                 ));
1084         }
1085         else
1086                 $profile_in_net_dir = '';
1087
1088
1089         $hide_friends = replace_macros($opt_tpl,array(
1090                         '$field'        => array('hide-friends', t('Hide your contact/friend list from viewers of your default profile?'), $profile['hide-friends'], '', array(t('No'),t('Yes'))),
1091         ));
1092
1093         $hide_wall = replace_macros($opt_tpl,array(
1094                         '$field'        => array('hidewall',  t('Hide your profile details from unknown viewers?'), $a->user['hidewall'], t("If enabled, posting public messages to Diaspora and other networks isn't possible."), array(t('No'),t('Yes'))),
1095
1096         ));
1097
1098         $blockwall = replace_macros($opt_tpl,array(
1099                         '$field'        => array('blockwall',  t('Allow friends to post to your profile page?'), (intval($a->user['blockwall']) ? '0' : '1'), '', array(t('No'),t('Yes'))),
1100
1101         ));
1102
1103
1104         $blocktags = replace_macros($opt_tpl,array(
1105                         '$field'        => array('blocktags',  t('Allow friends to tag your posts?'), (intval($a->user['blocktags']) ? '0' : '1'), '', array(t('No'),t('Yes'))),
1106
1107         ));
1108
1109
1110         $suggestme = replace_macros($opt_tpl,array(
1111                         '$field'        => array('suggestme',  t('Allow us to suggest you as a potential friend to new members?'), $suggestme, '', array(t('No'),t('Yes'))),
1112
1113         ));
1114
1115
1116         $unkmail = replace_macros($opt_tpl,array(
1117                         '$field'        => array('unkmail',  t('Permit unknown people to send you private mail?'), $unkmail, '', array(t('No'),t('Yes'))),
1118
1119         ));
1120
1121         $invisible = (((! $profile['publish']) && (! $profile['net-publish']))
1122                 ? true : false);
1123
1124         if($invisible)
1125                 info( t('Profile is <strong>not published</strong>.') . EOL );
1126
1127
1128         //$subdir = ((strlen($a->get_path())) ? '<br />' . t('or') . ' ' . $a->get_baseurl(true) . '/profile/' . $nickname : '');
1129
1130         $tpl_addr = get_markup_template("settings_nick_set.tpl");
1131
1132         $prof_addr = replace_macros($tpl_addr,array(
1133                 '$desc' => sprintf(t("Your Identity Address is <strong>'%s'</strong> or '%s'."), $nickname.'@'.$a->get_hostname().$a->get_path(), $a->get_baseurl().'/profile/'.$nickname),
1134                 '$basepath' => $a->get_hostname()
1135         ));
1136
1137         $stpl = get_markup_template('settings.tpl');
1138
1139         $expire_arr = array(
1140                 'days' => array('expire',  t("Automatically expire posts after this many days:"), $expire, t('If empty, posts will not expire. Expired posts will be deleted')),
1141                 'advanced' => t('Advanced expiration settings'),
1142                 'label' => t('Advanced Expiration'),
1143                 'items' => array('expire_items',  t("Expire posts:"), $expire_items, '', array(t('No'),t('Yes'))),
1144                 'notes' => array('expire_notes',  t("Expire personal notes:"), $expire_notes, '', array(t('No'),t('Yes'))),
1145                 'starred' => array('expire_starred',  t("Expire starred posts:"), $expire_starred, '', array(t('No'),t('Yes'))),
1146                 'photos' => array('expire_photos',  t("Expire photos:"), $expire_photos, '', array(t('No'),t('Yes'))),
1147                 'network_only' => array('expire_network_only',  t("Only expire posts by others:"), $expire_network_only, '', array(t('No'),t('Yes'))),
1148         );
1149
1150         require_once('include/group.php');
1151         $group_select = mini_group_select(local_user(),$a->user['def_gid']);
1152
1153
1154         // Private/public post links for the non-JS ACL form
1155         $private_post = 1;
1156         if($_REQUEST['public'])
1157                 $private_post = 0;
1158
1159         $query_str = $a->query_string;
1160         if(strpos($query_str, 'public=1') !== false)
1161                 $query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
1162
1163         // I think $a->query_string may never have ? in it, but I could be wrong
1164         // It looks like it's from the index.php?q=[etc] rewrite that the web
1165         // server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
1166         if(strpos($query_str, '?') === false)
1167                 $public_post_link = '?public=1';
1168         else
1169                 $public_post_link = '&public=1';
1170
1171
1172         $o .= replace_macros($stpl, array(
1173                 '$ptitle'       => t('Account Settings'),
1174
1175                 '$submit'       => t('Save Settings'),
1176                 '$baseurl' => $a->get_baseurl(true),
1177                 '$uid' => local_user(),
1178                 '$form_security_token' => get_form_security_token("settings"),
1179                 '$nickname_block' => $prof_addr,
1180
1181                 '$h_pass'       => t('Password Settings'),
1182                 '$password1'=> array('password', t('New Password:'), '', ''),
1183                 '$password2'=> array('confirm', t('Confirm:'), '', t('Leave password fields blank unless changing')),
1184                 '$password3'=> array('opassword', t('Current Password:'), '', t('Your current password to confirm the changes')),
1185                 '$password4'=> array('mpassword', t('Password:'), '', t('Your current password to confirm the changes')),
1186                 '$oid_enable' => (! get_config('system','no_openid')),
1187                 '$openid'       => $openid_field,
1188
1189                 '$h_basic'      => t('Basic Settings'),
1190                 '$username' => array('username',  t('Full Name:'), $username,''),
1191                 '$email'        => array('email', t('Email Address:'), $email, '', '', '', 'email'),
1192                 '$timezone' => array('timezone_select' , t('Your Timezone:'), select_timezone($timezone), ''),
1193                 '$defloc'       => array('defloc', t('Default Post Location:'), $defloc, ''),
1194                 '$allowloc' => array('allow_location', t('Use Browser Location:'), ($a->user['allow_location'] == 1), ''),
1195
1196
1197                 '$h_prv'        => t('Security and Privacy Settings'),
1198
1199                 '$maxreq'       => array('maxreq', t('Maximum Friend Requests/Day:'), $maxreq ,t("\x28to prevent spam abuse\x29")),
1200                 '$permissions' => t('Default Post Permissions'),
1201                 '$permdesc' => t("\x28click to open/close\x29"),
1202                 '$visibility' => $profile['net-publish'],
1203                 '$aclselect' => populate_acl($a->user),
1204                 '$suggestme' => $suggestme,
1205                 '$blockwall'=> $blockwall, // array('blockwall', t('Allow friends to post to your profile page:'), !$blockwall, ''),
1206                 '$blocktags'=> $blocktags, // array('blocktags', t('Allow friends to tag your posts:'), !$blocktags, ''),
1207
1208                 // ACL permissions box
1209                 '$acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
1210                 '$group_perms' => t('Show to Groups'),
1211                 '$contact_perms' => t('Show to Contacts'),
1212                 '$private' => t('Default Private Post'),
1213                 '$public' => t('Default Public Post'),
1214                 '$is_private' => $private_post,
1215                 '$return_path' => $query_str,
1216                 '$public_link' => $public_post_link,
1217                 '$settings_perms' => t('Default Permissions for New Posts'),
1218
1219                 '$group_select' => $group_select,
1220
1221
1222                 '$expire'       => $expire_arr,
1223
1224                 '$profile_in_dir' => $profile_in_dir,
1225                 '$profile_in_net_dir' => $profile_in_net_dir,
1226                 '$hide_friends' => $hide_friends,
1227                 '$hide_wall' => $hide_wall,
1228                 '$unkmail' => $unkmail,
1229                 '$cntunkmail'   => array('cntunkmail', t('Maximum private messages per day from unknown people:'), $cntunkmail ,t("\x28to prevent spam abuse\x29")),
1230
1231
1232                 '$h_not'        => t('Notification Settings'),
1233                 '$activity_options' => t('By default post a status message when:'),
1234                 '$post_newfriend' => array('post_newfriend',  t('accepting a friend request'), $post_newfriend, ''),
1235                 '$post_joingroup' => array('post_joingroup',  t('joining a forum/community'), $post_joingroup, ''),
1236                 '$post_profilechange' => array('post_profilechange',  t('making an <em>interesting</em> profile change'), $post_profilechange, ''),
1237                 '$lbl_not'      => t('Send a notification email when:'),
1238                 '$notify1'      => array('notify1', t('You receive an introduction'), ($notify & NOTIFY_INTRO), NOTIFY_INTRO, ''),
1239                 '$notify2'      => array('notify2', t('Your introductions are confirmed'), ($notify & NOTIFY_CONFIRM), NOTIFY_CONFIRM, ''),
1240                 '$notify3'      => array('notify3', t('Someone writes on your profile wall'), ($notify & NOTIFY_WALL), NOTIFY_WALL, ''),
1241                 '$notify4'      => array('notify4', t('Someone writes a followup comment'), ($notify & NOTIFY_COMMENT), NOTIFY_COMMENT, ''),
1242                 '$notify5'      => array('notify5', t('You receive a private message'), ($notify & NOTIFY_MAIL), NOTIFY_MAIL, ''),
1243                 '$notify6'  => array('notify6', t('You receive a friend suggestion'), ($notify & NOTIFY_SUGGEST), NOTIFY_SUGGEST, ''),
1244                 '$notify7'  => array('notify7', t('You are tagged in a post'), ($notify & NOTIFY_TAGSELF), NOTIFY_TAGSELF, ''),
1245                 '$notify8'  => array('notify8', t('You are poked/prodded/etc. in a post'), ($notify & NOTIFY_POKE), NOTIFY_POKE, ''),
1246
1247         '$desktop_notifications' => array('desktop_notifications', t('Activate desktop notifications') , false, t('Show desktop popup on new notifications')),
1248                 
1249                 '$email_textonly' => array('email_textonly', t('Text-only notification emails'),
1250                                                                         get_pconfig(local_user(),'system','email_textonly'),
1251                                                                         t('Send text only notification emails, without the html part')),
1252
1253                 '$h_advn' => t('Advanced Account/Page Type Settings'),
1254                 '$h_descadvn' => t('Change the behaviour of this account for special situations'),
1255                 '$pagetype' => $pagetype,
1256
1257                 '$relocate' => t('Relocate'),
1258                 '$relocate_text' => t("If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."),
1259                 '$relocate_button' => t("Resend relocate message to contacts"),
1260
1261         ));
1262
1263         call_hooks('settings_form',$o);
1264
1265         $o .= '</form>' . "\r\n";
1266
1267         return $o;
1268
1269 }}
1270