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