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