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