]> git.mxchange.org Git - friendica.git/blob - mod/settings.php
1a7905ef6455a9fe45809c01c72cc675b02e95cb
[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                 $gcontact = array("name" => $username, "generation" => 1, "hide" => ($hidewall OR !$net_publish),
624                                 "network" => NETWORK_DFRN, "url" => $r[0]["url"], "updated" => datetime_convert());
625
626                 update_gcontact($gcontact);
627         }
628
629         require_once('include/profile_update.php');
630         profile_change();
631
632         //$_SESSION['theme'] = $theme;
633         if($email_changed && $a->config['register_policy'] == REGISTER_VERIFY) {
634
635                 // FIXME - set to un-verified, blocked and redirect to logout
636                 // Why? Are we verifying people or email addresses?
637
638         }
639
640         goaway('settings' );
641         return; // NOTREACHED
642 }
643
644
645 function settings_content(&$a) {
646
647         $o = '';
648         nav_set_selected('settings');
649
650         if(! local_user()) {
651                 #notice( t('Permission denied.') . EOL );
652                 return;
653         }
654
655         if(x($_SESSION,'submanage') && intval($_SESSION['submanage'])) {
656                 notice( t('Permission denied.') . EOL );
657                 return;
658         }
659
660
661
662         if(($a->argc > 1) && ($a->argv[1] === 'oauth')) {
663
664                 if(($a->argc > 2) && ($a->argv[2] === 'add')) {
665                         $tpl = get_markup_template("settings_oauth_edit.tpl");
666                         $o .= replace_macros($tpl, array(
667                                 '$form_security_token' => get_form_security_token("settings_oauth"),
668                                 '$title'        => t('Add application'),
669                                 '$submit'       => t('Save Settings'),
670                                 '$cancel'       => t('Cancel'),
671                                 '$name'         => array('name', t('Name'), '', ''),
672                                 '$key'          => array('key', t('Consumer Key'), '', ''),
673                                 '$secret'       => array('secret', t('Consumer Secret'), '', ''),
674                                 '$redirect'     => array('redirect', t('Redirect'), '', ''),
675                                 '$icon'         => array('icon', t('Icon url'), '', ''),
676                         ));
677                         return $o;
678                 }
679
680                 if(($a->argc > 3) && ($a->argv[2] === 'edit')) {
681                         $r = q("SELECT * FROM clients WHERE client_id='%s' AND uid=%d",
682                                         dbesc($a->argv[3]),
683                                         local_user());
684
685                         if (!count($r)){
686                                 notice(t("You can't edit this application."));
687                                 return;
688                         }
689                         $app = $r[0];
690
691                         $tpl = get_markup_template("settings_oauth_edit.tpl");
692                         $o .= replace_macros($tpl, array(
693                                 '$form_security_token' => get_form_security_token("settings_oauth"),
694                                 '$title'        => t('Add application'),
695                                 '$submit'       => t('Update'),
696                                 '$cancel'       => t('Cancel'),
697                                 '$name'         => array('name', t('Name'), $app['name'] , ''),
698                                 '$key'          => array('key', t('Consumer Key'), $app['client_id'], ''),
699                                 '$secret'       => array('secret', t('Consumer Secret'), $app['pw'], ''),
700                                 '$redirect'     => array('redirect', t('Redirect'), $app['redirect_uri'], ''),
701                                 '$icon'         => array('icon', t('Icon url'), $app['icon'], ''),
702                         ));
703                         return $o;
704                 }
705
706                 if(($a->argc > 3) && ($a->argv[2] === 'delete')) {
707                         check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth', 't');
708
709                         $r = q("DELETE FROM clients WHERE client_id='%s' AND uid=%d",
710                                         dbesc($a->argv[3]),
711                                         local_user());
712                         goaway($a->get_baseurl(true)."/settings/oauth/");
713                         return;
714                 }
715
716
717                 $r = q("SELECT clients.*, tokens.id as oauth_token, (clients.uid=%d) AS my
718                                 FROM clients
719                                 LEFT JOIN tokens ON clients.client_id=tokens.client_id
720                                 WHERE clients.uid IN (%d,0)",
721                                 local_user(),
722                                 local_user());
723
724
725                 $tpl = get_markup_template("settings_oauth.tpl");
726                 $o .= replace_macros($tpl, array(
727                         '$form_security_token' => get_form_security_token("settings_oauth"),
728                         '$baseurl'      => $a->get_baseurl(true),
729                         '$title'        => t('Connected Apps'),
730                         '$add'          => t('Add application'),
731                         '$edit'         => t('Edit'),
732                         '$delete'               => t('Delete'),
733                         '$consumerkey' => t('Client key starts with'),
734                         '$noname'       => t('No name'),
735                         '$remove'       => t('Remove authorization'),
736                         '$apps'         => $r,
737                 ));
738                 return $o;
739
740         }
741
742         if(($a->argc > 1) && ($a->argv[1] === 'addon')) {
743                 $settings_addons = "";
744
745                 $r = q("SELECT * FROM `hook` WHERE `hook` = 'plugin_settings' ");
746                 if(! count($r))
747                         $settings_addons = t('No Plugin settings configured');
748
749                 call_hooks('plugin_settings', $settings_addons);
750
751
752                 $tpl = get_markup_template("settings_addons.tpl");
753                 $o .= replace_macros($tpl, array(
754                         '$form_security_token' => get_form_security_token("settings_addon"),
755                         '$title'        => t('Plugin Settings'),
756                         '$settings_addons' => $settings_addons
757                 ));
758                 return $o;
759         }
760
761         if(($a->argc > 1) && ($a->argv[1] === 'features')) {
762
763                 $arr = array();
764                 $features = get_features();
765                 foreach($features as $fname => $fdata) {
766                         $arr[$fname] = array();
767                         $arr[$fname][0] = $fdata[0];
768                         foreach(array_slice($fdata,1) as $f) {
769                                 $arr[$fname][1][] = array('feature_' .$f[0],$f[1],((intval(feature_enabled(local_user(),$f[0]))) ? "1" : ''),$f[2],array(t('Off'),t('On')));
770                         }
771                 }
772
773
774                 $tpl = get_markup_template("settings_features.tpl");
775                 $o .= replace_macros($tpl, array(
776                         '$form_security_token' => get_form_security_token("settings_features"),
777                         '$title'        => t('Additional Features'),
778                         '$features' => $arr,
779                         '$submit'   => t('Save Settings'),
780                 ));
781                 return $o;
782         }
783
784         if(($a->argc > 1) && ($a->argv[1] === 'connectors')) {
785
786                 $settings_connectors = '<span id="settings_general_inflated" class="settings-block fakelink" style="display: block;" onclick="openClose(\'settings_general_expanded\'); openClose(\'settings_general_inflated\');">';
787                 $settings_connectors .= '<h3 class="connector">'. t('General Social Media Settings').'</h3>';
788                 $settings_connectors .= '</span>';
789                 $settings_connectors .= '<div id="settings_general_expanded" class="settings-block" style="display: none;">';
790                 $settings_connectors .= '<span class="fakelink" onclick="openClose(\'settings_general_expanded\'); openClose(\'settings_general_inflated\');">';
791                 $settings_connectors .= '<h3 class="connector">'. t('General Social Media Settings').'</h3>';
792                 $settings_connectors .= '</span>';
793
794                 $checked = ((get_pconfig(local_user(), 'system', 'no_intelligent_shortening')) ? ' checked="checked" ' : '');
795
796                 $settings_connectors .= '<div id="no_intelligent_shortening" class="field checkbox">';
797                 $settings_connectors .= '<label id="no_intelligent_shortening-label" for="shortening-checkbox">'. t('Disable intelligent shortening'). '</label>';
798                 $settings_connectors .= '<input id="shortening-checkbox" type="checkbox" name="no_intelligent_shortening" value="1" ' . $checked . '/>';
799                 $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>';
800                 $settings_connectors .= '</div>';
801
802                 $checked = ((get_pconfig(local_user(), 'system', 'ostatus_autofriend')) ? ' checked="checked" ' : '');
803
804                 $settings_connectors .= '<div id="snautofollow-wrapper" class="field checkbox">';
805                 $settings_connectors .= '<label id="snautofollow-label" for="snautofollow-checkbox">'. t('Automatically follow any GNU Social (OStatus) followers/mentioners'). '</label>';
806                 $settings_connectors .= '<input id="snautofollow-checkbox" type="checkbox" name="snautofollow" value="1" ' . $checked . '/>';
807                 $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>';
808                 $settings_connectors .= '</div>';
809
810                 $default_group = get_pconfig(local_user(), 'ostatus', 'default_group');
811                 $legacy_contact = get_pconfig(local_user(), 'ostatus', 'legacy_contact');
812
813                 $settings_connectors .= mini_group_select(local_user(), $default_group, t("Default group for OStatus contacts"));
814
815                 if ($legacy_contact != "")
816                         $a->page['htmlhead'] = '<meta http-equiv="refresh" content="0; URL='.$a->get_baseurl().'/ostatus_subscribe?url='.urlencode($legacy_contact).'">';
817
818                 $settings_connectors .= '<div id="legacy-contact-wrapper" class="field input">';
819                 $settings_connectors .= '<label id="legacy-contact-label" for="snautofollow-checkbox">'. t('Your legacy GNU Social account'). '</label>';
820                 $settings_connectors .= '<input id="legacy-contact-checkbox" name="legacy_contact" value="'.$legacy_contact.'"/>';
821                 $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>';
822                 $settings_connectors .= '</div>';
823
824                 $settings_connectors .= '<p><a href="'.$a->get_baseurl().'/repair_ostatus">'.t("Repair OStatus subscriptions").'</a></p>';
825
826                 $settings_connectors .= '<div class="settings-submit-wrapper" ><input type="submit" name="general-submit" class="settings-submit" value="' . t('Save Settings') . '" /></div>';
827
828                 $settings_connectors .= '</div><div class="clear"></div>';
829
830                 call_hooks('connector_settings', $settings_connectors);
831
832                 if (is_site_admin()) {
833                         $diasp_enabled = sprintf( t('Built-in support for %s connectivity is %s'), t('Diaspora'), ((get_config('system','diaspora_enabled')) ? t('enabled') : t('disabled')));
834                         $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')));
835                 } else {
836                         $diasp_enabled = "";
837                         $ostat_enabled = "";
838                 }
839
840                 $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
841                 if(get_config('system','dfrn_only'))
842                         $mail_disabled = 1;
843
844                 if(! $mail_disabled) {
845                         $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
846                                 local_user()
847                         );
848                 }
849                 else {
850                         $r = null;
851                 }
852
853                 $mail_server       = ((count($r)) ? $r[0]['server'] : '');
854                 $mail_port         = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : '');
855                 $mail_ssl          = ((count($r)) ? $r[0]['ssltype'] : '');
856                 $mail_user         = ((count($r)) ? $r[0]['user'] : '');
857                 $mail_replyto      = ((count($r)) ? $r[0]['reply_to'] : '');
858                 $mail_pubmail      = ((count($r)) ? $r[0]['pubmail'] : 0);
859                 $mail_action       = ((count($r)) ? $r[0]['action'] : 0);
860                 $mail_movetofolder = ((count($r)) ? $r[0]['movetofolder'] : '');
861                 $mail_chk          = ((count($r)) ? $r[0]['last_check'] : '0000-00-00 00:00:00');
862
863
864                 $tpl = get_markup_template("settings_connectors.tpl");
865
866                 if(! service_class_allows(local_user(),'email_connect')) {
867                         $mail_disabled_message = upgrade_bool_message();
868                 }
869                 else {
870                         $mail_disabled_message = (($mail_disabled) ? t('Email access is disabled on this site.') : '');
871                 }
872
873
874                 $o .= replace_macros($tpl, array(
875                         '$form_security_token' => get_form_security_token("settings_connectors"),
876
877                         '$title'        => t('Social Networks'),
878
879                         '$diasp_enabled' => $diasp_enabled,
880                         '$ostat_enabled' => $ostat_enabled,
881
882                         '$h_imap' => t('Email/Mailbox Setup'),
883                         '$imap_desc' => t("If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."),
884                         '$imap_lastcheck' => array('imap_lastcheck', t('Last successful email check:'), $mail_chk,''),
885                         '$mail_disabled' => $mail_disabled_message,
886                         '$mail_server'  => array('mail_server',  t('IMAP server name:'), $mail_server, ''),
887                         '$mail_port'    => array('mail_port',    t('IMAP port:'), $mail_port, ''),
888                         '$mail_ssl'             => array('mail_ssl',     t('Security:'), strtoupper($mail_ssl), '', array( 'notls'=>t('None'), 'TLS'=>'TLS', 'SSL'=>'SSL')),
889                         '$mail_user'    => array('mail_user',    t('Email login name:'), $mail_user, ''),
890                         '$mail_pass'    => array('mail_pass',    t('Email password:'), '', ''),
891                         '$mail_replyto' => array('mail_replyto', t('Reply-to address:'), $mail_replyto, 'Optional'),
892                         '$mail_pubmail' => array('mail_pubmail', t('Send public posts to all email contacts:'), $mail_pubmail, ''),
893                         '$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'))),
894                         '$mail_movetofolder'    => array('mail_movetofolder',    t('Move to folder:'), $mail_movetofolder, ''),
895                         '$submit' => t('Save Settings'),
896
897                         '$settings_connectors' => $settings_connectors
898                 ));
899
900                 call_hooks('display_settings', $o);
901                 return $o;
902         }
903
904         /*
905          * DISPLAY SETTINGS
906          */
907         if(($a->argc > 1) && ($a->argv[1] === 'display')) {
908                 $default_theme = get_config('system','theme');
909                 if(! $default_theme)
910                         $default_theme = 'default';
911                 $default_mobile_theme = get_config('system','mobile-theme');
912                 if(! $mobile_default_theme)
913                         $mobile_default_theme = 'none';
914
915                 $allowed_themes_str = get_config('system','allowed_themes');
916                 $allowed_themes_raw = explode(',',$allowed_themes_str);
917                 $allowed_themes = array();
918                 if(count($allowed_themes_raw))
919                         foreach($allowed_themes_raw as $x)
920                                 if(strlen(trim($x)) && is_dir("view/theme/$x"))
921                                         $allowed_themes[] = trim($x);
922
923
924                 $themes = array();
925                 $mobile_themes = array("---" => t('No special theme for mobile devices'));
926                 $files = glob('view/theme/*'); /* */
927                 if($allowed_themes) {
928                         foreach($allowed_themes as $th) {
929                                 $f = $th;
930                                 $is_experimental = file_exists('view/theme/' . $th . '/experimental');
931                                 $unsupported = file_exists('view/theme/' . $th . '/unsupported');
932                                 $is_mobile = file_exists('view/theme/' . $th . '/mobile');
933                                 if (!$is_experimental or ($is_experimental && (get_config('experimentals','exp_themes')==1 or get_config('experimentals','exp_themes')===false))){
934                                         $theme_name = (($is_experimental) ?  sprintf("%s - \x28Experimental\x29", $f) : $f);
935                                         if($is_mobile) {
936                                                 $mobile_themes[$f]=$theme_name;
937                                         }
938                                         else {
939                                                 $themes[$f]=$theme_name;
940                                         }
941                                 }
942                         }
943                 }
944                 $theme_selected = (!x($_SESSION,'theme')? $default_theme : $_SESSION['theme']);
945                 $mobile_theme_selected = (!x($_SESSION,'mobile-theme')? $default_mobile_theme : $_SESSION['mobile-theme']);
946
947                 $browser_update = intval(get_pconfig(local_user(), 'system','update_interval'));
948                 if (intval($browser_update) != -1)
949                         $browser_update = (($browser_update == 0) ? 40 : $browser_update / 1000); // default if not set: 40 seconds
950
951                 $itemspage_network = intval(get_pconfig(local_user(), 'system','itemspage_network'));
952                 $itemspage_network = (($itemspage_network > 0 && $itemspage_network < 101) ? $itemspage_network : 40); // default if not set: 40 items
953                 $itemspage_mobile_network = intval(get_pconfig(local_user(), 'system','itemspage_mobile_network'));
954                 $itemspage_mobile_network = (($itemspage_mobile_network > 0 && $itemspage_mobile_network < 101) ? $itemspage_mobile_network : 20); // default if not set: 20 items
955
956                 $nosmile = get_pconfig(local_user(),'system','no_smilies');
957                 $nosmile = (($nosmile===false)? '0': $nosmile); // default if not set: 0
958
959                 $first_day_of_week = get_pconfig(local_user(),'system','first_day_of_week');
960                 $first_day_of_week = (($first_day_of_week===false)? '0': $first_day_of_week); // default if not set: 0
961                 $weekdays = array(0 => t("Sunday"), 1 => t("Monday"));
962
963                 $noinfo = get_pconfig(local_user(),'system','ignore_info');
964                 $noinfo = (($noinfo===false)? '0': $noinfo); // default if not set: 0
965
966                 $infinite_scroll = get_pconfig(local_user(),'system','infinite_scroll');
967                 $infinite_scroll = (($infinite_scroll===false)? '0': $infinite_scroll); // default if not set: 0
968
969                 $no_auto_update = get_pconfig(local_user(),'system','no_auto_update');
970                 $no_auto_update = (($no_auto_update===false)? '0': $no_auto_update); // default if not set: 0
971
972                 $theme_config = "";
973                 if( ($themeconfigfile = get_theme_config_file($theme_selected)) != null){
974                         require_once($themeconfigfile);
975                         $theme_config = theme_content($a);
976                 }
977
978                 $tpl = get_markup_template("settings_display.tpl");
979                 $o = replace_macros($tpl, array(
980                         '$ptitle'       => t('Display Settings'),
981                         '$form_security_token' => get_form_security_token("settings_display"),
982                         '$submit'       => t('Save Settings'),
983                         '$baseurl' => $a->get_baseurl(true),
984                         '$uid' => local_user(),
985
986                         '$theme'        => array('theme', t('Display Theme:'), $theme_selected, '', $themes, true),
987                         '$mobile_theme' => array('mobile_theme', t('Mobile Theme:'), $mobile_theme_selected, '', $mobile_themes, false),
988                         '$ajaxint'   => array('browser_update',  t("Update browser every xx seconds"), $browser_update, t('Minimum of 10 seconds. Enter -1 to disable it.')),
989                         '$itemspage_network'   => array('itemspage_network',  t("Number of items to display per page:"), $itemspage_network, t('Maximum of 100 items')),
990                         '$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')),
991                         '$nosmile'      => array('nosmile', t("Don't show emoticons"), $nosmile, ''),
992                         '$calendar_title' => t('Calendar'),
993                         '$first_day_of_week'    => array('first_day_of_week', t('Beginning of week:'), $first_day_of_week, '', $weekdays, false),
994                         '$noinfo'       => array('noinfo', t("Don't show notices"), $noinfo, ''),
995                         '$infinite_scroll'      => array('infinite_scroll', t("Infinite scroll"), $infinite_scroll, ''),
996                         '$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.'),
997
998                         'stitle' => t('Theme settings'),
999                         '$theme_config' => $theme_config,
1000                 ));
1001
1002                 $tpl = get_markup_template("settings_display_end.tpl");
1003                 $a->page['end'] .= replace_macros($tpl, array(
1004                         '$theme'        => array('theme', t('Display Theme:'), $theme_selected, '', $themes)
1005                 ));
1006
1007                 return $o;
1008         }
1009
1010
1011         /*
1012          * ACCOUNT SETTINGS
1013          */
1014
1015         require_once('include/acl_selectors.php');
1016
1017         $p = q("SELECT * FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1",
1018                 intval(local_user())
1019         );
1020         if(count($p))
1021                 $profile = $p[0];
1022
1023         $username   = $a->user['username'];
1024         $email      = $a->user['email'];
1025         $nickname   = $a->user['nickname'];
1026         $timezone   = $a->user['timezone'];
1027         $language   = $a->user['language'];
1028         $notify     = $a->user['notify-flags'];
1029         $defloc     = $a->user['default-location'];
1030         $openid     = $a->user['openid'];
1031         $maxreq     = $a->user['maxreq'];
1032         $expire     = ((intval($a->user['expire'])) ? $a->user['expire'] : '');
1033         $blockwall  = $a->user['blockwall'];
1034         $blocktags  = $a->user['blocktags'];
1035         $unkmail    = $a->user['unkmail'];
1036         $cntunkmail = $a->user['cntunkmail'];
1037
1038         $expire_items = get_pconfig(local_user(), 'expire','items');
1039         $expire_items = (($expire_items===false)? '1' : $expire_items); // default if not set: 1
1040
1041         $expire_notes = get_pconfig(local_user(), 'expire','notes');
1042         $expire_notes = (($expire_notes===false)? '1' : $expire_notes); // default if not set: 1
1043
1044         $expire_starred = get_pconfig(local_user(), 'expire','starred');
1045         $expire_starred = (($expire_starred===false)? '1' : $expire_starred); // default if not set: 1
1046
1047         $expire_photos = get_pconfig(local_user(), 'expire','photos');
1048         $expire_photos = (($expire_photos===false)? '0' : $expire_photos); // default if not set: 0
1049
1050         $expire_network_only = get_pconfig(local_user(), 'expire','network_only');
1051         $expire_network_only = (($expire_network_only===false)? '0' : $expire_network_only); // default if not set: 0
1052
1053
1054         $suggestme = get_pconfig(local_user(), 'system','suggestme');
1055         $suggestme = (($suggestme===false)? '0': $suggestme); // default if not set: 0
1056
1057         $post_newfriend = get_pconfig(local_user(), 'system','post_newfriend');
1058         $post_newfriend = (($post_newfriend===false)? '0': $post_newfriend); // default if not set: 0
1059
1060         $post_joingroup = get_pconfig(local_user(), 'system','post_joingroup');
1061         $post_joingroup = (($post_joingroup===false)? '0': $post_joingroup); // default if not set: 0
1062
1063         $post_profilechange = get_pconfig(local_user(), 'system','post_profilechange');
1064         $post_profilechange = (($post_profilechange===false)? '0': $post_profilechange); // default if not set: 0
1065
1066         // nowarn_insecure
1067
1068         if(! strlen($a->user['timezone']))
1069                 $timezone = date_default_timezone_get();
1070
1071
1072
1073         $pageset_tpl = get_markup_template('pagetypes.tpl');
1074         $pagetype = replace_macros($pageset_tpl, array(
1075                 '$user'         => t("User Types"),
1076                 '$community'    => t("Community Types"),
1077                 '$page_normal'  => array('page-flags', t('Normal Account Page'), PAGE_NORMAL,
1078                                                                         t('This account is a normal personal profile'),
1079                                                                         ($a->user['page-flags'] == PAGE_NORMAL)),
1080
1081                 '$page_soapbox'         => array('page-flags', t('Soapbox Page'), PAGE_SOAPBOX,
1082                                                                         t('Automatically approve all connection/friend requests as read-only fans'),
1083                                                                         ($a->user['page-flags'] == PAGE_SOAPBOX)),
1084
1085                 '$page_community'       => array('page-flags', t('Community Forum/Celebrity Account'), PAGE_COMMUNITY,
1086                                                                         t('Automatically approve all connection/friend requests as read-write fans'),
1087                                                                         ($a->user['page-flags'] == PAGE_COMMUNITY)),
1088
1089                 '$page_freelove'        => array('page-flags', t('Automatic Friend Page'), PAGE_FREELOVE,
1090                                                                         t('Automatically approve all connection/friend requests as friends'),
1091                                                                         ($a->user['page-flags'] == PAGE_FREELOVE)),
1092
1093                 '$page_prvgroup'        => array('page-flags', t('Private Forum [Experimental]'), PAGE_PRVGROUP,
1094                                                                         t('Private forum - approved members only'),
1095                                                                         ($a->user['page-flags'] == PAGE_PRVGROUP)),
1096
1097
1098         ));
1099
1100         $noid = get_config('system','no_openid');
1101
1102         if($noid) {
1103                 $openid_field = false;
1104         }
1105         else {
1106                 $openid_field = array('openid_url', t('OpenID:'),$openid, t("\x28Optional\x29 Allow this OpenID to login to this account."), "", "", "url");
1107         }
1108
1109
1110         $opt_tpl = get_markup_template("field_yesno.tpl");
1111         if(get_config('system','publish_all')) {
1112                 $profile_in_dir = '<input type="hidden" name="profile_in_directory" value="1" />';
1113         }
1114         else {
1115                 $profile_in_dir = replace_macros($opt_tpl,array(
1116                         '$field'        => array('profile_in_directory', t('Publish your default profile in your local site directory?'), $profile['publish'], '', array(t('No'),t('Yes'))),
1117                 ));
1118         }
1119
1120         if(strlen(get_config('system','directory'))) {
1121                 $profile_in_net_dir = replace_macros($opt_tpl,array(
1122                         '$field'        => array('profile_in_netdirectory', t('Publish your default profile in the global social directory?'), $profile['net-publish'], '', array(t('No'),t('Yes'))),
1123                 ));
1124         }
1125         else
1126                 $profile_in_net_dir = '';
1127
1128
1129         $hide_friends = replace_macros($opt_tpl,array(
1130                         '$field'        => array('hide-friends', t('Hide your contact/friend list from viewers of your default profile?'), $profile['hide-friends'], '', array(t('No'),t('Yes'))),
1131         ));
1132
1133         $hide_wall = replace_macros($opt_tpl,array(
1134                         '$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'))),
1135
1136         ));
1137
1138         $blockwall = replace_macros($opt_tpl,array(
1139                         '$field'        => array('blockwall',  t('Allow friends to post to your profile page?'), (intval($a->user['blockwall']) ? '0' : '1'), '', array(t('No'),t('Yes'))),
1140
1141         ));
1142
1143
1144         $blocktags = replace_macros($opt_tpl,array(
1145                         '$field'        => array('blocktags',  t('Allow friends to tag your posts?'), (intval($a->user['blocktags']) ? '0' : '1'), '', array(t('No'),t('Yes'))),
1146
1147         ));
1148
1149
1150         $suggestme = replace_macros($opt_tpl,array(
1151                         '$field'        => array('suggestme',  t('Allow us to suggest you as a potential friend to new members?'), $suggestme, '', array(t('No'),t('Yes'))),
1152
1153         ));
1154
1155
1156         $unkmail = replace_macros($opt_tpl,array(
1157                         '$field'        => array('unkmail',  t('Permit unknown people to send you private mail?'), $unkmail, '', array(t('No'),t('Yes'))),
1158
1159         ));
1160
1161         $invisible = (((! $profile['publish']) && (! $profile['net-publish']))
1162                 ? true : false);
1163
1164         if($invisible)
1165                 info( t('Profile is <strong>not published</strong>.') . EOL );
1166
1167
1168         //$subdir = ((strlen($a->get_path())) ? '<br />' . t('or') . ' ' . 'profile/' . $nickname : '');
1169
1170         $tpl_addr = get_markup_template("settings_nick_set.tpl");
1171
1172         $prof_addr = replace_macros($tpl_addr,array(
1173                 '$desc' => sprintf(t("Your Identity Address is <strong>'%s'</strong> or '%s'."), $nickname.'@'.$a->get_hostname().$a->get_path(), $a->get_baseurl().'/profile/'.$nickname),
1174                 '$basepath' => $a->get_hostname()
1175         ));
1176
1177         $stpl = get_markup_template('settings.tpl');
1178
1179         $expire_arr = array(
1180                 'days' => array('expire',  t("Automatically expire posts after this many days:"), $expire, t('If empty, posts will not expire. Expired posts will be deleted')),
1181                 'advanced' => t('Advanced expiration settings'),
1182                 'label' => t('Advanced Expiration'),
1183                 'items' => array('expire_items',  t("Expire posts:"), $expire_items, '', array(t('No'),t('Yes'))),
1184                 'notes' => array('expire_notes',  t("Expire personal notes:"), $expire_notes, '', array(t('No'),t('Yes'))),
1185                 'starred' => array('expire_starred',  t("Expire starred posts:"), $expire_starred, '', array(t('No'),t('Yes'))),
1186                 'photos' => array('expire_photos',  t("Expire photos:"), $expire_photos, '', array(t('No'),t('Yes'))),
1187                 'network_only' => array('expire_network_only',  t("Only expire posts by others:"), $expire_network_only, '', array(t('No'),t('Yes'))),
1188         );
1189
1190         require_once('include/group.php');
1191         $group_select = mini_group_select(local_user(),$a->user['def_gid']);
1192
1193
1194         // Private/public post links for the non-JS ACL form
1195         $private_post = 1;
1196         if($_REQUEST['public'])
1197                 $private_post = 0;
1198
1199         $query_str = $a->query_string;
1200         if(strpos($query_str, 'public=1') !== false)
1201                 $query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
1202
1203         // I think $a->query_string may never have ? in it, but I could be wrong
1204         // It looks like it's from the index.php?q=[etc] rewrite that the web
1205         // server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
1206         if(strpos($query_str, '?') === false)
1207                 $public_post_link = '?public=1';
1208         else
1209                 $public_post_link = '&public=1';
1210
1211         /* Installed langs */
1212         $lang_choices = get_avaiable_languages();
1213
1214         $o .= replace_macros($stpl, array(
1215                 '$ptitle'       => t('Account Settings'),
1216
1217                 '$submit'       => t('Save Settings'),
1218                 '$baseurl' => $a->get_baseurl(true),
1219                 '$uid' => local_user(),
1220                 '$form_security_token' => get_form_security_token("settings"),
1221                 '$nickname_block' => $prof_addr,
1222
1223                 '$h_pass'       => t('Password Settings'),
1224                 '$password1'=> array('password', t('New Password:'), '', ''),
1225                 '$password2'=> array('confirm', t('Confirm:'), '', t('Leave password fields blank unless changing')),
1226                 '$password3'=> array('opassword', t('Current Password:'), '', t('Your current password to confirm the changes')),
1227                 '$password4'=> array('mpassword', t('Password:'), '', t('Your current password to confirm the changes')),
1228                 '$oid_enable' => (! get_config('system','no_openid')),
1229                 '$openid'       => $openid_field,
1230
1231                 '$h_basic'      => t('Basic Settings'),
1232                 '$username' => array('username',  t('Full Name:'), $username,''),
1233                 '$email'        => array('email', t('Email Address:'), $email, '', '', '', 'email'),
1234                 '$timezone' => array('timezone_select' , t('Your Timezone:'), select_timezone($timezone), ''),
1235                 '$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),
1236                 '$defloc'       => array('defloc', t('Default Post Location:'), $defloc, ''),
1237                 '$allowloc' => array('allow_location', t('Use Browser Location:'), ($a->user['allow_location'] == 1), ''),
1238
1239
1240                 '$h_prv'        => t('Security and Privacy Settings'),
1241
1242                 '$maxreq'       => array('maxreq', t('Maximum Friend Requests/Day:'), $maxreq ,t("\x28to prevent spam abuse\x29")),
1243                 '$permissions' => t('Default Post Permissions'),
1244                 '$permdesc' => t("\x28click to open/close\x29"),
1245                 '$visibility' => $profile['net-publish'],
1246                 '$aclselect' => populate_acl($a->user),
1247                 '$suggestme' => $suggestme,
1248                 '$blockwall'=> $blockwall, // array('blockwall', t('Allow friends to post to your profile page:'), !$blockwall, ''),
1249                 '$blocktags'=> $blocktags, // array('blocktags', t('Allow friends to tag your posts:'), !$blocktags, ''),
1250
1251                 // ACL permissions box
1252                 '$acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
1253                 '$group_perms' => t('Show to Groups'),
1254                 '$contact_perms' => t('Show to Contacts'),
1255                 '$private' => t('Default Private Post'),
1256                 '$public' => t('Default Public Post'),
1257                 '$is_private' => $private_post,
1258                 '$return_path' => $query_str,
1259                 '$public_link' => $public_post_link,
1260                 '$settings_perms' => t('Default Permissions for New Posts'),
1261
1262                 '$group_select' => $group_select,
1263
1264
1265                 '$expire'       => $expire_arr,
1266
1267                 '$profile_in_dir' => $profile_in_dir,
1268                 '$profile_in_net_dir' => $profile_in_net_dir,
1269                 '$hide_friends' => $hide_friends,
1270                 '$hide_wall' => $hide_wall,
1271                 '$unkmail' => $unkmail,
1272                 '$cntunkmail'   => array('cntunkmail', t('Maximum private messages per day from unknown people:'), $cntunkmail ,t("\x28to prevent spam abuse\x29")),
1273
1274
1275                 '$h_not'        => t('Notification Settings'),
1276                 '$activity_options' => t('By default post a status message when:'),
1277                 '$post_newfriend' => array('post_newfriend',  t('accepting a friend request'), $post_newfriend, ''),
1278                 '$post_joingroup' => array('post_joingroup',  t('joining a forum/community'), $post_joingroup, ''),
1279                 '$post_profilechange' => array('post_profilechange',  t('making an <em>interesting</em> profile change'), $post_profilechange, ''),
1280                 '$lbl_not'      => t('Send a notification email when:'),
1281                 '$notify1'      => array('notify1', t('You receive an introduction'), ($notify & NOTIFY_INTRO), NOTIFY_INTRO, ''),
1282                 '$notify2'      => array('notify2', t('Your introductions are confirmed'), ($notify & NOTIFY_CONFIRM), NOTIFY_CONFIRM, ''),
1283                 '$notify3'      => array('notify3', t('Someone writes on your profile wall'), ($notify & NOTIFY_WALL), NOTIFY_WALL, ''),
1284                 '$notify4'      => array('notify4', t('Someone writes a followup comment'), ($notify & NOTIFY_COMMENT), NOTIFY_COMMENT, ''),
1285                 '$notify5'      => array('notify5', t('You receive a private message'), ($notify & NOTIFY_MAIL), NOTIFY_MAIL, ''),
1286                 '$notify6'  => array('notify6', t('You receive a friend suggestion'), ($notify & NOTIFY_SUGGEST), NOTIFY_SUGGEST, ''),
1287                 '$notify7'  => array('notify7', t('You are tagged in a post'), ($notify & NOTIFY_TAGSELF), NOTIFY_TAGSELF, ''),
1288                 '$notify8'  => array('notify8', t('You are poked/prodded/etc. in a post'), ($notify & NOTIFY_POKE), NOTIFY_POKE, ''),
1289
1290         '$desktop_notifications' => array('desktop_notifications', t('Activate desktop notifications') , false, t('Show desktop popup on new notifications')),
1291
1292                 '$email_textonly' => array('email_textonly', t('Text-only notification emails'),
1293                                                                         get_pconfig(local_user(),'system','email_textonly'),
1294                                                                         t('Send text only notification emails, without the html part')),
1295
1296                 '$h_advn' => t('Advanced Account/Page Type Settings'),
1297                 '$h_descadvn' => t('Change the behaviour of this account for special situations'),
1298                 '$pagetype' => $pagetype,
1299
1300                 '$relocate' => t('Relocate'),
1301                 '$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."),
1302                 '$relocate_button' => t("Resend relocate message to contacts"),
1303
1304         ));
1305
1306         call_hooks('settings_form',$o);
1307
1308         $o .= '</form>' . "\r\n";
1309
1310         return $o;
1311
1312 }
1313