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