]> git.mxchange.org Git - friendica.git/blob - mod/settings.php
Merge pull request #1754 from rabuzarus/share-jotnets
[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                         'stitle' => t('Theme settings'),
920                         '$theme_config' => $theme_config,
921                 ));
922
923                 $tpl = get_markup_template("settings_display_end.tpl");
924                 $a->page['end'] .= replace_macros($tpl, array(
925                         '$theme'        => array('theme', t('Display Theme:'), $theme_selected, '', $themes)
926                 ));
927
928                 return $o;
929         }
930
931
932         /*
933          * ACCOUNT SETTINGS
934          */
935
936         require_once('include/acl_selectors.php');
937
938         $p = q("SELECT * FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1",
939                 intval(local_user())
940         );
941         if(count($p))
942                 $profile = $p[0];
943
944         $username   = $a->user['username'];
945         $email      = $a->user['email'];
946         $nickname   = $a->user['nickname'];
947         $timezone   = $a->user['timezone'];
948         $notify     = $a->user['notify-flags'];
949         $defloc     = $a->user['default-location'];
950         $openid     = $a->user['openid'];
951         $maxreq     = $a->user['maxreq'];
952         $expire     = ((intval($a->user['expire'])) ? $a->user['expire'] : '');
953         $blockwall  = $a->user['blockwall'];
954         $blocktags  = $a->user['blocktags'];
955         $unkmail    = $a->user['unkmail'];
956         $cntunkmail = $a->user['cntunkmail'];
957
958         $expire_items = get_pconfig(local_user(), 'expire','items');
959         $expire_items = (($expire_items===false)? '1' : $expire_items); // default if not set: 1
960
961         $expire_notes = get_pconfig(local_user(), 'expire','notes');
962         $expire_notes = (($expire_notes===false)? '1' : $expire_notes); // default if not set: 1
963
964         $expire_starred = get_pconfig(local_user(), 'expire','starred');
965         $expire_starred = (($expire_starred===false)? '1' : $expire_starred); // default if not set: 1
966
967         $expire_photos = get_pconfig(local_user(), 'expire','photos');
968         $expire_photos = (($expire_photos===false)? '0' : $expire_photos); // default if not set: 0
969
970         $expire_network_only = get_pconfig(local_user(), 'expire','network_only');
971         $expire_network_only = (($expire_network_only===false)? '0' : $expire_network_only); // default if not set: 0
972
973
974         $suggestme = get_pconfig(local_user(), 'system','suggestme');
975         $suggestme = (($suggestme===false)? '0': $suggestme); // default if not set: 0
976
977         $post_newfriend = get_pconfig(local_user(), 'system','post_newfriend');
978         $post_newfriend = (($post_newfriend===false)? '0': $post_newfriend); // default if not set: 0
979
980         $post_joingroup = get_pconfig(local_user(), 'system','post_joingroup');
981         $post_joingroup = (($post_joingroup===false)? '0': $post_joingroup); // default if not set: 0
982
983         $post_profilechange = get_pconfig(local_user(), 'system','post_profilechange');
984         $post_profilechange = (($post_profilechange===false)? '0': $post_profilechange); // default if not set: 0
985
986         // nowarn_insecure
987
988         if(! strlen($a->user['timezone']))
989                 $timezone = date_default_timezone_get();
990
991
992
993         $pageset_tpl = get_markup_template('pagetypes.tpl');
994         $pagetype = replace_macros($pageset_tpl, array(
995                 '$user'         => t("User Types"),
996                 '$community'    => t("Community Types"),
997                 '$page_normal'  => array('page-flags', t('Normal Account Page'), PAGE_NORMAL,
998                                                                         t('This account is a normal personal profile'),
999                                                                         ($a->user['page-flags'] == PAGE_NORMAL)),
1000
1001                 '$page_soapbox'         => array('page-flags', t('Soapbox Page'), PAGE_SOAPBOX,
1002                                                                         t('Automatically approve all connection/friend requests as read-only fans'),
1003                                                                         ($a->user['page-flags'] == PAGE_SOAPBOX)),
1004
1005                 '$page_community'       => array('page-flags', t('Community Forum/Celebrity Account'), PAGE_COMMUNITY,
1006                                                                         t('Automatically approve all connection/friend requests as read-write fans'),
1007                                                                         ($a->user['page-flags'] == PAGE_COMMUNITY)),
1008
1009                 '$page_freelove'        => array('page-flags', t('Automatic Friend Page'), PAGE_FREELOVE,
1010                                                                         t('Automatically approve all connection/friend requests as friends'),
1011                                                                         ($a->user['page-flags'] == PAGE_FREELOVE)),
1012
1013                 '$page_prvgroup'        => array('page-flags', t('Private Forum [Experimental]'), PAGE_PRVGROUP,
1014                                                                         t('Private forum - approved members only'),
1015                                                                         ($a->user['page-flags'] == PAGE_PRVGROUP)),
1016
1017
1018         ));
1019
1020         $noid = get_config('system','no_openid');
1021
1022         if($noid) {
1023                 $openid_field = false;
1024         }
1025         else {
1026                 $openid_field = array('openid_url', t('OpenID:'),$openid, t("\x28Optional\x29 Allow this OpenID to login to this account."), "", "", "url");
1027         }
1028
1029
1030         $opt_tpl = get_markup_template("field_yesno.tpl");
1031         if(get_config('system','publish_all')) {
1032                 $profile_in_dir = '<input type="hidden" name="profile_in_directory" value="1" />';
1033         }
1034         else {
1035                 $profile_in_dir = replace_macros($opt_tpl,array(
1036                         '$field'        => array('profile_in_directory', t('Publish your default profile in your local site directory?'), $profile['publish'], '', array(t('No'),t('Yes'))),
1037                 ));
1038         }
1039
1040         if(strlen(get_config('system','directory_submit_url'))) {
1041                 $profile_in_net_dir = replace_macros($opt_tpl,array(
1042                         '$field'        => array('profile_in_netdirectory', t('Publish your default profile in the global social directory?'), $profile['net-publish'], '', array(t('No'),t('Yes'))),
1043                 ));
1044         }
1045         else
1046                 $profile_in_net_dir = '';
1047
1048
1049         $hide_friends = replace_macros($opt_tpl,array(
1050                         '$field'        => array('hide-friends', t('Hide your contact/friend list from viewers of your default profile?'), $profile['hide-friends'], '', array(t('No'),t('Yes'))),
1051         ));
1052
1053         $hide_wall = replace_macros($opt_tpl,array(
1054                         '$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'))),
1055
1056         ));
1057
1058         $blockwall = replace_macros($opt_tpl,array(
1059                         '$field'        => array('blockwall',  t('Allow friends to post to your profile page?'), (intval($a->user['blockwall']) ? '0' : '1'), '', array(t('No'),t('Yes'))),
1060
1061         ));
1062
1063
1064         $blocktags = replace_macros($opt_tpl,array(
1065                         '$field'        => array('blocktags',  t('Allow friends to tag your posts?'), (intval($a->user['blocktags']) ? '0' : '1'), '', array(t('No'),t('Yes'))),
1066
1067         ));
1068
1069
1070         $suggestme = replace_macros($opt_tpl,array(
1071                         '$field'        => array('suggestme',  t('Allow us to suggest you as a potential friend to new members?'), $suggestme, '', array(t('No'),t('Yes'))),
1072
1073         ));
1074
1075
1076         $unkmail = replace_macros($opt_tpl,array(
1077                         '$field'        => array('unkmail',  t('Permit unknown people to send you private mail?'), $unkmail, '', array(t('No'),t('Yes'))),
1078
1079         ));
1080
1081         $invisible = (((! $profile['publish']) && (! $profile['net-publish']))
1082                 ? true : false);
1083
1084         if($invisible)
1085                 info( t('Profile is <strong>not published</strong>.') . EOL );
1086
1087
1088         $subdir = ((strlen($a->get_path())) ? '<br />' . t('or') . ' ' . $a->get_baseurl(true) . '/profile/' . $nickname : '');
1089
1090         $tpl_addr = get_markup_template("settings_nick_set.tpl");
1091
1092         $prof_addr = replace_macros($tpl_addr,array(
1093                 '$desc' => t('Your Identity Address is'),
1094                 '$nickname' => $nickname,
1095                 '$subdir' => $subdir,
1096                 '$basepath' => $a->get_hostname()
1097         ));
1098
1099         $stpl = get_markup_template('settings.tpl');
1100
1101         $expire_arr = array(
1102                 'days' => array('expire',  t("Automatically expire posts after this many days:"), $expire, t('If empty, posts will not expire. Expired posts will be deleted')),
1103                 'advanced' => t('Advanced expiration settings'),
1104                 'label' => t('Advanced Expiration'),
1105                 'items' => array('expire_items',  t("Expire posts:"), $expire_items, '', array(t('No'),t('Yes'))),
1106                 'notes' => array('expire_notes',  t("Expire personal notes:"), $expire_notes, '', array(t('No'),t('Yes'))),
1107                 'starred' => array('expire_starred',  t("Expire starred posts:"), $expire_starred, '', array(t('No'),t('Yes'))),
1108                 'photos' => array('expire_photos',  t("Expire photos:"), $expire_photos, '', array(t('No'),t('Yes'))),
1109                 'network_only' => array('expire_network_only',  t("Only expire posts by others:"), $expire_network_only, '', array(t('No'),t('Yes'))),
1110         );
1111
1112         require_once('include/group.php');
1113         $group_select = mini_group_select(local_user(),$a->user['def_gid']);
1114
1115
1116         // Private/public post links for the non-JS ACL form
1117         $private_post = 1;
1118         if($_REQUEST['public'])
1119                 $private_post = 0;
1120
1121         $query_str = $a->query_string;
1122         if(strpos($query_str, 'public=1') !== false)
1123                 $query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
1124
1125         // I think $a->query_string may never have ? in it, but I could be wrong
1126         // It looks like it's from the index.php?q=[etc] rewrite that the web
1127         // server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
1128         if(strpos($query_str, '?') === false)
1129                 $public_post_link = '?public=1';
1130         else
1131                 $public_post_link = '&public=1';
1132
1133
1134         $o .= replace_macros($stpl, array(
1135                 '$ptitle'       => t('Account Settings'),
1136
1137                 '$submit'       => t('Save Settings'),
1138                 '$baseurl' => $a->get_baseurl(true),
1139                 '$uid' => local_user(),
1140                 '$form_security_token' => get_form_security_token("settings"),
1141                 '$nickname_block' => $prof_addr,
1142
1143                 '$h_pass'       => t('Password Settings'),
1144                 '$password1'=> array('password', t('New Password:'), '', ''),
1145                 '$password2'=> array('confirm', t('Confirm:'), '', t('Leave password fields blank unless changing')),
1146                 '$password3'=> array('opassword', t('Current Password:'), '', t('Your current password to confirm the changes')),
1147                 '$password4'=> array('mpassword', t('Password:'), '', t('Your current password to confirm the changes')),
1148                 '$oid_enable' => (! get_config('system','no_openid')),
1149                 '$openid'       => $openid_field,
1150
1151                 '$h_basic'      => t('Basic Settings'),
1152                 '$username' => array('username',  t('Full Name:'), $username,''),
1153                 '$email'        => array('email', t('Email Address:'), $email, '', '', '', 'email'),
1154                 '$timezone' => array('timezone_select' , t('Your Timezone:'), select_timezone($timezone), ''),
1155                 '$defloc'       => array('defloc', t('Default Post Location:'), $defloc, ''),
1156                 '$allowloc' => array('allow_location', t('Use Browser Location:'), ($a->user['allow_location'] == 1), ''),
1157
1158
1159                 '$h_prv'        => t('Security and Privacy Settings'),
1160
1161                 '$maxreq'       => array('maxreq', t('Maximum Friend Requests/Day:'), $maxreq ,t("\x28to prevent spam abuse\x29")),
1162                 '$permissions' => t('Default Post Permissions'),
1163                 '$permdesc' => t("\x28click to open/close\x29"),
1164                 '$visibility' => $profile['net-publish'],
1165                 '$aclselect' => populate_acl($a->user),
1166                 '$suggestme' => $suggestme,
1167                 '$blockwall'=> $blockwall, // array('blockwall', t('Allow friends to post to your profile page:'), !$blockwall, ''),
1168                 '$blocktags'=> $blocktags, // array('blocktags', t('Allow friends to tag your posts:'), !$blocktags, ''),
1169
1170                 // ACL permissions box
1171                 '$acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
1172                 '$group_perms' => t('Show to Groups'),
1173                 '$contact_perms' => t('Show to Contacts'),
1174                 '$private' => t('Default Private Post'),
1175                 '$public' => t('Default Public Post'),
1176                 '$is_private' => $private_post,
1177                 '$return_path' => $query_str,
1178                 '$public_link' => $public_post_link,
1179                 '$settings_perms' => t('Default Permissions for New Posts'),
1180
1181                 '$group_select' => $group_select,
1182
1183
1184                 '$expire'       => $expire_arr,
1185
1186                 '$profile_in_dir' => $profile_in_dir,
1187                 '$profile_in_net_dir' => $profile_in_net_dir,
1188                 '$hide_friends' => $hide_friends,
1189                 '$hide_wall' => $hide_wall,
1190                 '$unkmail' => $unkmail,
1191                 '$cntunkmail'   => array('cntunkmail', t('Maximum private messages per day from unknown people:'), $cntunkmail ,t("\x28to prevent spam abuse\x29")),
1192
1193
1194                 '$h_not'        => t('Notification Settings'),
1195                 '$activity_options' => t('By default post a status message when:'),
1196                 '$post_newfriend' => array('post_newfriend',  t('accepting a friend request'), $post_newfriend, ''),
1197                 '$post_joingroup' => array('post_joingroup',  t('joining a forum/community'), $post_joingroup, ''),
1198                 '$post_profilechange' => array('post_profilechange',  t('making an <em>interesting</em> profile change'), $post_profilechange, ''),
1199                 '$lbl_not'      => t('Send a notification email when:'),
1200                 '$notify1'      => array('notify1', t('You receive an introduction'), ($notify & NOTIFY_INTRO), NOTIFY_INTRO, ''),
1201                 '$notify2'      => array('notify2', t('Your introductions are confirmed'), ($notify & NOTIFY_CONFIRM), NOTIFY_CONFIRM, ''),
1202                 '$notify3'      => array('notify3', t('Someone writes on your profile wall'), ($notify & NOTIFY_WALL), NOTIFY_WALL, ''),
1203                 '$notify4'      => array('notify4', t('Someone writes a followup comment'), ($notify & NOTIFY_COMMENT), NOTIFY_COMMENT, ''),
1204                 '$notify5'      => array('notify5', t('You receive a private message'), ($notify & NOTIFY_MAIL), NOTIFY_MAIL, ''),
1205                 '$notify6'  => array('notify6', t('You receive a friend suggestion'), ($notify & NOTIFY_SUGGEST), NOTIFY_SUGGEST, ''),
1206                 '$notify7'  => array('notify7', t('You are tagged in a post'), ($notify & NOTIFY_TAGSELF), NOTIFY_TAGSELF, ''),
1207                 '$notify8'  => array('notify8', t('You are poked/prodded/etc. in a post'), ($notify & NOTIFY_POKE), NOTIFY_POKE, ''),
1208
1209         '$desktop_notifications' => array('desktop_notifications', t('Activate desktop notifications') , false, t('Show desktop popup on new notifications')),
1210                 
1211                 '$email_textonly' => array('email_textonly', t('Text-only notification emails'),
1212                                                                         get_pconfig(local_user(),'system','email_textonly'),
1213                                                                         t('Send text only notification emails, without the html part')),
1214
1215                 '$h_advn' => t('Advanced Account/Page Type Settings'),
1216                 '$h_descadvn' => t('Change the behaviour of this account for special situations'),
1217                 '$pagetype' => $pagetype,
1218
1219                 '$relocate' => t('Relocate'),
1220                 '$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."),
1221                 '$relocate_button' => t("Resend relocate message to contacts"),
1222
1223         ));
1224
1225         call_hooks('settings_form',$o);
1226
1227         $o .= '</form>' . "\r\n";
1228
1229         return $o;
1230
1231 }}
1232