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