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