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