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