Issues (1798)

public/main/auth/profile.php (4 issues)

1
<?php
2
/* For licensing terms, see /license.txt */
3
4
use Chamilo\CoreBundle\Entity\User;
5
use Chamilo\CoreBundle\Entity\UserAuthSource;
6
use Chamilo\CoreBundle\Framework\Container;
7
use Chamilo\CoreBundle\Event\AbstractEvent;
8
use Chamilo\CoreBundle\Event\Events;
9
use Chamilo\CoreBundle\Event\UserUpdatedEvent;
10
use ChamiloSession as Session;
11
use Chamilo\CoreBundle\Component\Utils\ActionIcon;
12
use Chamilo\CoreBundle\Component\Utils\ToolIcon;
13
14
/**
15
 * This file displays the user's profile,
16
 * optionally it allows users to modify their profile as well.
17
 *
18
 * See inc/conf/profile.conf.php to modify settings
19
 */
20
$cidReset = true;
21
require_once __DIR__.'/../inc/global.inc.php';
22
23
$this_section = SECTION_MYPROFILE;
24
$allowSocialTool = 'true' == api_get_setting('allow_social_tool');
25
if ($allowSocialTool) {
26
    $this_section = SECTION_SOCIAL;
27
}
28
29
$logInfo = [
30
    'tool' => 'profile',
31
    'action' => $this_section,
32
];
33
Event::registerLog($logInfo);
0 ignored issues
show
The method registerLog() does not exist on Event. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

33
Event::/** @scrutinizer ignore-call */ 
34
       registerLog($logInfo);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
34
35
$profileList = (array) api_get_setting('profile');
36
37
$_user = api_get_user_info();
38
$_SESSION['this_section'] = $this_section;
39
40
if (!(isset($_user['user_id']) && $_user['user_id']) || api_is_anonymous($_user['user_id'], true)) {
41
    api_not_allowed(true);
42
}
43
44
$htmlHeadXtra[] = api_get_password_checker_js('#username', '#password1');
45
//$htmlHeadXtra[] = api_get_css_asset('cropper/dist/cropper.min.css');
46
//$htmlHeadXtra[] = api_get_asset('cropper/dist/cropper.min.js');
47
$htmlHeadXtra[] = '<script>
48
$(function() {
49
    $("#id_generate_api_key").on("click", function (e) {
50
        e.preventDefault();
51
52
        $.ajax({
53
            contentType: "application/x-www-form-urlencoded",
54
            type: "POST",
55
            url: "'.api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?a=generate_api_key",
56
            data: "num_key_id="+"",
57
            success: function(datos) {
58
                $("#div_api_key").html(datos);
59
            }
60
        });
61
    });
62
63
});
64
65
function confirmation(name) {
66
    if (confirm("'.get_lang('Are you sure to delete?').' " + name + " ?")) {
67
            document.forms["profile"].submit();
68
    } else {
69
        return false;
70
    }
71
}
72
function show_image(image,width,height) {
73
    width = parseInt(width) + 20;
74
    height = parseInt(height) + 20;
75
    window_x = window.open(image,\'windowX\',\'width=\'+ width + \', height=\'+ height + \'\');
76
}
77
</script>';
78
79
$jquery_ready_content = '';
80
if ('true' === api_get_setting('allow_message_tool')) {
81
    $jquery_ready_content = <<<EOF
82
    $(".message-content .message-delete").click(function(){
83
        $(this).parents(".message-content").animate({ opacity: "hide" }, "slow");
84
        $(".message-view").animate({ opacity: "show" }, "slow");
85
    });
86
EOF;
87
}
88
89
$tool_name = get_lang('View my e-portfolio');
90
$table_user = Database::get_main_table(TABLE_MAIN_USER);
91
92
/*
93
 * Get initial values for all fields.
94
 */
95
$user_data = api_get_user_info(
96
    api_get_user_id(),
97
    false,
98
    false,
99
    false,
100
    false,
101
    true,
102
    true
103
);
104
$array_list_key = UserManager::get_api_keys(api_get_user_id());
105
$id_temp_key = UserManager::get_api_key_id(api_get_user_id(), 'default');
106
$value_array = [];
107
if (isset($array_list_key[$id_temp_key])) {
108
    $value_array = $array_list_key[$id_temp_key];
109
}
110
$user_data['api_key_generate'] = $value_array;
111
112
if (false !== $user_data) {
113
    if ('true' == api_get_setting('login_is_email')) {
114
        $user_data['username'] = $user_data['email'];
115
    }
116
    if (is_null($user_data['language'])) {
117
        $user_data['language'] = api_get_setting('platformLanguage');
118
    }
119
}
120
121
$form = new FormValidator('profile');
122
123
if (api_is_western_name_order()) {
124
    //    FIRST NAME and LAST NAME
125
    $form->addElement('text', 'firstname', get_lang('First name'), ['size' => 40]);
126
    $form->addElement('text', 'lastname', get_lang('Last name'), ['size' => 40]);
127
} else {
128
    //    LAST NAME and FIRST NAME
129
    $form->addElement('text', 'lastname', get_lang('Last name'), ['size' => 40]);
130
    $form->addElement('text', 'firstname', get_lang('First name'), ['size' => 40]);
131
}
132
if (!in_array('name', $profileList)) {
133
    $form->freeze(['lastname', 'firstname']);
134
}
135
$form->applyFilter(['lastname', 'firstname'], 'stripslashes');
136
$form->applyFilter(['lastname', 'firstname'], 'trim');
137
$form->applyFilter(['lastname', 'firstname'], 'html_filter');
138
$form->addRule('lastname', get_lang('Required field'), 'required');
139
$form->addRule('firstname', get_lang('Required field'), 'required');
140
141
//    USERNAME
142
$form->addElement(
143
    'text',
144
    'username',
145
    get_lang('Username'),
146
    [
147
        'id' => 'username',
148
        'maxlength' => User::USERNAME_MAX_LENGTH,
149
        'size' => User::USERNAME_MAX_LENGTH,
150
    ]
151
);
152
if (!in_array('login', $profileList) || 'true' == api_get_setting('login_is_email')) {
153
    $form->freeze('username');
154
}
155
$form->applyFilter('username', 'stripslashes');
156
$form->applyFilter('username', 'trim');
157
$form->addRule('username', get_lang('Required field'), 'required');
158
$form->addRule('username', get_lang('Your login can only contain letters, numbers and _.-'), 'username');
159
$form->addRule('username', get_lang('This login is already in use'), 'username_available', $user_data['username']);
160
161
$form->addElement('text', 'official_code', get_lang('Code'), ['size' => 40]);
162
if (!in_array('officialcode', $profileList)) {
163
    $form->freeze('official_code');
164
}
165
$form->applyFilter('official_code', 'stripslashes');
166
$form->applyFilter('official_code', 'trim');
167
$form->applyFilter('official_code', 'html_filter');
168
if ('true' === api_get_setting('registration', 'officialcode') &&
169
    in_array('officialcode', $profileList)
170
) {
171
    $form->addRule('official_code', get_lang('Required field'), 'required');
172
}
173
174
//    EMAIL
175
$form->addElement('email', 'email', get_lang('e-mail'), ['size' => 40]);
176
if (!in_array('email', $profileList)) {
177
    $form->freeze('email');
178
}
179
180
if ('true' == api_get_setting('registration', 'email') && in_array('email', $profileList)
181
) {
182
    $form->applyFilter('email', 'stripslashes');
183
    $form->applyFilter('email', 'trim');
184
    $form->addRule('email', get_lang('Required field'), 'required');
185
    $form->addEmailRule('email');
186
}
187
188
//    PHONE
189
$form->addElement('text', 'phone', get_lang('Phone'), ['size' => 20]);
190
if (!in_array('phone', $profileList)) {
191
    $form->freeze('phone');
192
}
193
$form->applyFilter('phone', 'stripslashes');
194
$form->applyFilter('phone', 'trim');
195
$form->applyFilter('phone', 'html_filter');
196
197
//  PICTURE
198
if (in_array('picture', $profileList)) {
199
    $form->addFile(
200
        'picture',
201
        [
202
            '' != $user_data['picture_uri'] ? get_lang('Update Image') : get_lang('Add image'),
203
            get_lang('Only PNG, JPG or GIF images allowed'),
204
        ],
205
        [
206
            'id' => 'picture',
207
            'class' => 'picture-form',
208
            'crop_image' => true,
209
            'crop_ratio' => '1 / 1',
210
            'accept' => 'image/*',
211
        ]
212
    );
213
214
    $form->addProgress();
215
    if (!empty($user_data['picture_uri'])) {
216
        $form->addElement('checkbox', 'remove_picture', null, get_lang('Remove picture'));
217
    }
218
    $allowed_picture_types = api_get_supported_image_extensions(false);
219
    $form->addRule(
220
        'picture',
221
        get_lang('Only PNG, JPG or GIF images allowed').' ('.implode(', ', $allowed_picture_types).')',
222
        'filetype',
223
        $allowed_picture_types
224
    );
225
}
226
227
//    LANGUAGE
228
$form->addSelectLanguage('language', get_lang('Language'));
229
if (!in_array('language', $profileList)) {
230
    $form->freeze('language');
231
}
232
233
// THEME
234
if ('true' === api_get_setting('user_selected_theme')) {
235
    $form->addSelectTheme('theme', get_lang('Graphical theme'));
236
    if (!in_array('theme', $profileList)) {
237
        $form->freeze('theme');
238
    }
239
    $form->applyFilter('theme', 'trim');
240
}
241
242
//    EXTENDED PROFILE  this make the page very slow!
243
if ('true' === api_get_setting('extended_profile')) {
244
    $width_extended_profile = 500;
245
    //    MY COMPETENCES
246
    $form->addHtmlEditor(
247
        'competences',
248
        get_lang('My competences'),
249
        false,
250
        false,
251
        [
252
            'ToolbarSet' => 'Profile',
253
            'Width' => $width_extended_profile,
254
            'Height' => '130',
255
        ]
256
    );
257
    //    MY DIPLOMAS
258
    $form->addHtmlEditor(
259
        'diplomas',
260
        get_lang('My diplomas'),
261
        false,
262
        false,
263
        [
264
            'ToolbarSet' => 'Profile',
265
            'Width' => $width_extended_profile,
266
            'Height' => '130',
267
        ]
268
    );
269
    // WHAT I AM ABLE TO TEACH
270
    $form->addHtmlEditor(
271
        'teach',
272
        get_lang('What I am able to teach'),
273
        false,
274
        false,
275
        [
276
            'ToolbarSet' => 'Profile',
277
            'Width' => $width_extended_profile,
278
            'Height' => '130',
279
        ]
280
    );
281
282
    //    MY PRODUCTIONS
283
    /*
284
    $form->addElement('file', 'production', get_lang('My productions'));
285
    if ($production_list = UserManager::build_production_list(api_get_user_id(), '', true)) {
286
        $form->addElement('static', 'productions_list', null, $production_list);
287
    }
288
    */
289
    //    MY PERSONAL OPEN AREA
290
    $form->addHtmlEditor(
291
        'openarea',
292
        get_lang('My personal open area'),
293
        false,
294
        false,
295
        [
296
            'ToolbarSet' => 'Profile',
297
            'Width' => $width_extended_profile,
298
            'Height' => '350',
299
        ]
300
    );
301
    // openarea is untrimmed for maximum openness
302
    $form->applyFilter(['competences', 'diplomas', 'teach', 'openarea'], 'stripslashes');
303
    $form->applyFilter(['competences', 'diplomas', 'teach'], 'trim');
304
}
305
306
//    PASSWORD, if auth_source is platform
307
if (in_array(UserAuthSource::PLATFORM, $user_data['auth_sources']) &&
308
    in_array('password', $profileList)
309
) {
310
    $form->addElement('password', 'password0', [get_lang('Pass'), get_lang('Enter2passToChange')], ['size' => 40]);
311
    $form->addElement('password', 'password1', get_lang('New password'), ['id' => 'password1', 'size' => 40]);
312
313
    $form->addElement('password', 'password2', get_lang('Confirm password'), ['size' => 40]);
314
    //    user must enter identical password twice so we can prevent some user errors
315
    $form->addRule(['password1', 'password2'], get_lang('You have typed two different passwords'), 'compare');
316
    $form->addPasswordRule('password1');
317
}
318
319
$extraField = new ExtraField('user');
320
$return = $extraField->addElements(
321
    $form,
322
    api_get_user_id()
323
);
324
325
$jquery_ready_content = $return['jquery_ready_content'];
326
327
// the $jquery_ready_content variable collects all functions that
328
// will be load in the $(document).ready javascript function
329
$htmlHeadXtra[] = '<script>
330
$(function() {
331
    '.$jquery_ready_content.'
332
});
333
</script>';
334
335
if (in_array('apikeys', $profileList)) {
336
    $form->addElement('html', '<div id="div_api_key">');
337
    $form->addElement(
338
        'text',
339
        'api_key_generate',
340
        get_lang('My API key'),
341
        ['size' => 40, 'id' => 'id_api_key_generate']
342
    );
343
    $form->addElement('html', '</div>');
344
    $form->addButton(
345
        'generate_api_key',
346
        get_lang('Generate API key'),
347
        'cogs',
348
        'default',
349
        'default',
350
        null,
351
        ['id' => 'id_generate_api_key']
352
    );
353
}
354
//    SUBMIT
355
$form->addButtonUpdate(get_lang('Save settings'), 'apply_change');
356
357
// Student cannot modified their user conditions
358
$extraConditions = api_get_setting('profile.show_conditions_to_user', true);
359
if ($extraConditions && isset($extraConditions['conditions'])) {
360
    $extraConditions = $extraConditions['conditions'];
361
    foreach ($extraConditions as $condition) {
362
        $element = $form->getElement('extra_'.$condition['variable']);
363
        if ($element) {
364
            $element->freeze();
365
        }
366
    }
367
}
368
369
$form->setDefaults($user_data);
370
371
$filtered_extension = false;
372
373
if ($form->validate()) {
374
    Container::getEventDispatcher()->dispatch(
375
        new UserUpdatedEvent([], AbstractEvent::TYPE_PRE),
376
        Events::USER_UPDATED
377
    );
378
379
    $wrong_current_password = false;
380
    $user_data = $form->getSubmitValues(1);
381
    $user_data['item_id'] = api_get_user_id();
382
    $user = api_get_user_entity(api_get_user_id());
383
384
    // set password if a new one was provided
385
    $validPassword = false;
386
    $passwordWasChecked = false;
387
388
    if ($user &&
0 ignored issues
show
Consider adding parentheses for clarity. Current Interpretation: ($user && ! empty($user_...('email', $profileList), Probably Intended Meaning: $user && (! empty($user_...'email', $profileList))
Loading history...
389
        (!empty($user_data['password0']) &&
390
        !empty($user_data['password1'])) ||
391
        (!empty($user_data['password0']) &&
392
            in_array('email', $profileList)
393
        )
394
    ) {
395
        $passwordWasChecked = true;
396
        $validPassword = UserManager::isPasswordValid(
397
            $user,
398
            $user_data['password0'],
399
        );
400
401
        if ($validPassword) {
402
            $password = $user_data['password1'];
403
        } else {
404
            Display::addFlash(
405
                Display:: return_message(
406
                    get_lang('The current password is incorrect'),
407
                    'warning',
408
                    false
409
                )
410
            );
411
        }
412
    }
413
414
    $allow_users_to_change_email_with_no_password = true;
415
    if (isset($user_data['auth_sources']) && in_array(UserAuthSource::PLATFORM, $user_data['auth_sources']) &&
416
        'false' === api_get_setting('allow_users_to_change_email_with_no_password')
417
    ) {
418
        $allow_users_to_change_email_with_no_password = false;
419
    }
420
421
    // If user sending the email to be changed (input available and not frozen )
422
    if (in_array('email', $profileList)) {
423
        $userFromEmail = api_get_user_info_from_email($user_data['email']);
424
        if ($allow_users_to_change_email_with_no_password) {
425
            if (!empty($userFromEmail)) {
426
                $changeemail = $user_data['email'];
427
            }
428
        } else {
429
            // Normal behaviour
430
            if (!empty($userFromEmail) && $validPassword) {
431
                $changeemail = $user_data['email'];
432
            }
433
434
            if (!empty($userFromEmail) && empty($user_data['password0'])) {
435
                Display::addFlash(
436
                    Display:: return_message(
437
                        get_lang('ToChangeYoure-mailMustTypeYourPassword'),
438
                        'error',
439
                        false
440
                    )
441
                );
442
            }
443
        }
444
    }
445
446
    // Upload picture if a new one is provided
447
    if (isset($_FILES['picture']) && $_FILES['picture']['size']) {
448
        $new_picture = UserManager::update_user_picture(
449
            api_get_user_id(),
450
            $_FILES['picture']['name'],
451
            $_FILES['picture']['tmp_name'],
452
            $user_data['picture_crop_result']
453
        );
454
455
        if ($new_picture) {
0 ignored issues
show
$new_picture is of type false|null, thus it always evaluated to false.
Loading history...
456
            $user_data['picture_uri'] = $new_picture;
457
458
            Display::addFlash(
459
                Display:: return_message(
460
                    get_lang('Your picture has been uploaded'),
461
                    'normal',
462
                    false
463
                )
464
            );
465
        }
466
    } elseif (!empty($user_data['remove_picture'])) {
467
        // remove existing picture if asked
468
        UserManager::deleteUserPicture(api_get_user_id());
469
        $user_data['picture_uri'] = '';
470
    }
471
472
    // Remove production.
473
    /*
474
    if (isset($user_data['remove_production']) &&
475
        is_array($user_data['remove_production'])
476
    ) {
477
        foreach (array_keys($user_data['remove_production']) as $production) {
478
            UserManager::remove_user_production(api_get_user_id(), urldecode($production));
479
        }
480
        if ($production_list = UserManager::build_production_list(api_get_user_id(), true, true)) {
481
            $form->insertElementBefore(
482
                $form->createElement('static', null, null, $production_list),
483
                'productions_list'
484
            );
485
        }
486
        $form->removeElement('productions_list');
487
        Display::addFlash(
488
            Display:: return_message(get_lang('File deleted'), 'normal', false)
489
        );
490
    }
491
    */
492
    // upload production if a new one is provided
493
    /*if (isset($_FILES['production']) && $_FILES['production']['size']) {
494
        $res = upload_user_production(api_get_user_id());
495
        if (!$res) {
496
            //it's a bit excessive to assume the extension is the reason why
497
            // upload_user_production() returned false, but it's true in most cases
498
            $filtered_extension = true;
499
        } else {
500
            Display::addFlash(
501
                Display:: return_message(
502
                    get_lang('Your production file has been uploaded'),
503
                    'normal',
504
                    false
505
                )
506
            );
507
        }
508
    }*/
509
510
    // remove values that shouldn't go in the database
511
    unset(
512
        $user_data['password0'],
513
        $user_data['password1'],
514
        $user_data['password2'],
515
        $user_data['MAX_FILE_SIZE'],
516
        $user_data['remove_picture'],
517
        $user_data['apply_change'],
518
        $user_data['email']
519
    );
520
521
    // Following RFC2396 (http://www.faqs.org/rfcs/rfc2396.html), a URI uses ':' as a reserved character
522
    // we can thus ensure the URL doesn't contain any scheme name by searching for ':' in the string
523
    $my_user_openid = isset($user_data['openid']) ? $user_data['openid'] : '';
524
    if (!preg_match('/^[^:]*:\/\/.*$/', $my_user_openid)) {
525
        //ensure there is at least a http:// scheme in the URI provided
526
        $user_data['openid'] = 'http://'.$my_user_openid;
527
    }
528
    $extras = [];
529
530
    //Checking the user language
531
    $languages = array_keys(api_get_languages());
532
    if (!in_array($user_data['language'], $languages)) {
533
        $user_data['language'] = api_get_setting('platformLanguage');
534
    }
535
    $_SESSION['_user']['language'] = $user_data['language'];
536
537
    //Only update values that are request by the "profile" setting
538
    //Adding missing variables
539
540
    $available_values_to_modify = [];
541
    foreach ($profileList as $key) {
542
        switch ($key) {
543
            case 'language':
544
                $available_values_to_modify[] = 'language';
545
                $available_values_to_modify[] = 'locale';
546
                $user_data['locale'] = $user_data['language'];
547
                break;
548
            case 'login':
549
                $available_values_to_modify[] = 'username';
550
                break;
551
            case 'name':
552
                $available_values_to_modify[] = 'firstname';
553
                $available_values_to_modify[] = 'lastname';
554
                break;
555
            case 'picture':
556
                $available_values_to_modify[] = 'picture_uri';
557
                break;
558
            default:
559
                $available_values_to_modify[] = $key;
560
                break;
561
        }
562
    }
563
564
    //Fixing missing variables
565
    $available_values_to_modify = array_merge(
566
        $available_values_to_modify,
567
        ['competences', 'diplomas', 'openarea', 'teach', 'openid', 'address']
568
    );
569
570
    // build SQL query
571
    $sql = "UPDATE $table_user SET";
572
    unset($user_data['api_key_generate']);
573
574
    foreach ($user_data as $key => $value) {
575
        if ('extra_' === substr($key, 0, 6)) { //an extra field
576
            continue;
577
        } elseif (false !== strpos($key, 'remove_extra_')) {
578
        } else {
579
            if (in_array($key, $available_values_to_modify)) {
580
                $sql .= " $key = '".Database::escape_string($value)."',";
581
            }
582
        }
583
    }
584
585
    $changePassword = false;
586
    // Change email
587
    if ($allow_users_to_change_email_with_no_password) {
588
        if (isset($changeemail) && in_array('email', $available_values_to_modify)) {
589
            $sql .= " email = '".Database::escape_string($changeemail)."' ";
590
        }
591
        if (isset($password) && in_array('password', $available_values_to_modify)) {
592
            $changePassword = true;
593
        }
594
    } else {
595
        if (isset($changeemail) && !isset($password) && in_array('email', $available_values_to_modify)) {
596
            $sql .= " email = '".Database::escape_string($changeemail)."'";
597
        } else {
598
            if (isset($password) && in_array('password', $available_values_to_modify)) {
599
                if (isset($changeemail) && in_array('email', $available_values_to_modify)) {
600
                    $sql .= " email = '".Database::escape_string($changeemail)."' ";
601
                }
602
                $changePassword = true;
603
            }
604
        }
605
    }
606
607
    $sql = rtrim($sql, ',');
608
    if ($changePassword && !empty($password)) {
609
        UserManager::updatePassword(api_get_user_id(), $password);
610
    }
611
612
    if (!in_array('officialcode', $profileList) &&
613
        isset($user_data['official_code'])
614
    ) {
615
        $sql .= ", official_code = '".Database::escape_string($user_data['official_code'])."'";
616
    }
617
618
    $sql .= " WHERE id  = '".api_get_user_id()."'";
619
    Database::query($sql);
620
621
    if (isset($user_data['language']) && !empty($user_data['language'])) {
622
        // _locale_user is set in the UserLocaleListener during login
623
        Session::write('_locale_user', $user_data['language']);
624
    }
625
626
    if (false == $passwordWasChecked) {
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
627
        Display::addFlash(
628
            Display:: return_message(get_lang('Your new profile has been saved'), 'normal', false)
629
        );
630
    } else {
631
        if ($validPassword) {
632
            Display::addFlash(
633
                Display:: return_message(get_lang('Your new profile has been saved'), 'normal', false)
634
            );
635
        }
636
    }
637
638
    $extraField = new ExtraFieldValue('user');
639
    $extraField->saveFieldValues($user_data);
640
641
    $userInfo = api_get_user_info(
642
        api_get_user_id(),
643
        false,
644
        false,
645
        false,
646
        false,
647
        true,
648
        true
649
    );
650
    Session::write('_user', $userInfo);
651
652
    Container::getEventDispatcher()->dispatch(
653
        new UserUpdatedEvent(
654
            ['user' => api_get_user_entity()],
655
            AbstractEvent::TYPE_POST
656
        ),
657
        Events::USER_UPDATED
658
    );
659
660
    /*if ($hook) {
661
        Database::getManager()->clear(User::class); // Avoid cache issue (user entity is used before)
662
        $user = api_get_user_entity(api_get_user_id()); // Get updated user info for hook event
663
        $hook->setEventData(['user' => $user]);
664
        $hook->notifyUpdateUser(HOOK_EVENT_TYPE_POST);
665
    }*/
666
667
    Session::erase('system_timezone');
668
669
    $url = api_get_self();
670
    header("Location: $url");
671
    exit;
672
}
673
674
$actions = '';
675
if ($allowSocialTool) {
676
    if ('true' === api_get_setting('extended_profile')) {
677
        if ('true' === api_get_setting('allow_message_tool')) {
678
            $actions .= '<a href="'.api_get_path(WEB_PATH).'main/social/profile.php">'.
679
                Display::getMdiIcon(ToolIcon::SHARED_PROFILE, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('View shared profile')).'</a>';
680
            $actions .= '<a href="'.api_get_path(WEB_PATH).'main/messages/inbox.php">'.
681
                Display::getMdiIcon(ToolIcon::MESSAGE, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Messages')).'</a>';
682
        }
683
        $show = isset($_GET['show']) ? '&show='.(int) $_GET['show'] : '';
684
685
        if (isset($_GET['type']) && 'extended' === $_GET['type']) {
686
            $actions .= '<a href="profile.php?type=reduced'.$show.'">'.
687
                Display::getMdiIcon(ActionIcon::EDIT, 'ch-tool-icon', null, ICON_SIZE_TINY, get_lang('Edit normal profile')).'</a>';
688
        } else {
689
            $actions .= '<a href="profile.php?type=extended'.$show.'">'.
690
                Display::getMdiIcon(ActionIcon::EDIT, 'ch-tool-icon', null, ICON_SIZE_TINY, get_lang('Edit extended profile')).'</a>';
691
        }
692
    }
693
}
694
695
$show_delete_account_button = 'true' === api_get_setting('platform_unsubscribe_allowed') ? true : false;
696
697
$tpl = new Template(get_lang('Profile'));
698
699
if ($actions) {
700
    $tpl->assign(
701
        'actions',
702
        Display::toolbarAction('toolbar', [$actions])
703
    );
704
}
705
706
SocialManager::setSocialUserBlock($tpl, api_get_user_id(), 'messages');
707
$tabs = SocialManager::getHomeProfileTabs('profile');
708
709
if ($allowSocialTool) {
710
    SocialManager::setSocialUserBlock($tpl, api_get_user_id(), 'home');
711
    $tpl->assign('social_right_content', $form->returnForm());
712
    $social_layout = $tpl->get_template('social/edit_profile.html.twig');
713
    $tpl->display($social_layout);
714
} else {
715
    $bigImage = UserManager::getUserPicture(api_get_user_id(), USER_IMAGE_SIZE_BIG);
716
    $normalImage = UserManager::getUserPicture(api_get_user_id(), USER_IMAGE_SIZE_ORIGINAL);
717
718
    $imageToShow = '<div id="image-message-container">';
719
    $imageToShow .= '<a class="expand-image float-right" href="'.$bigImage.'" /><img src="'.$normalImage.'"></a>';
720
    $imageToShow .= '</div>';
721
722
    $content = $imageToShow.$form->returnForm();
723
724
    $tpl->assign('content', $content);
725
    $tpl->display_one_col_template();
726
}
727