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