<?php use mystic\forum\orm\UserPermissions; use mystic\forum\utils\RequestUtils; use mystic\forum\utils\StringUtils; /** @var mystic\forum\orm\User $user */ /** @var bool $lastNameChangeTooRecent */ $canEdit = ($user->id === $GLOBALS["currentUser"]?->id && $user->hasPermission(UserPermissions::EDIT_OWN_USER)) || $GLOBALS["currentUser"]?->hasPermission(UserPermissions::EDIT_OTHER_USER); $isOwnProfile = $user->id === $GLOBALS["currentUser"]?->id; $sUserPossessive = ""; if ($isOwnProfile) $sUserPossessive = "Your posts"; else $sUserPossessive = "%display_name%'s posts"; $dateJoined = DateTime::createFromImmutable($user->created); $dateJoined->setTime(0, 0, 0, 0); $emailPending = $isOwnProfile && $user->pendingEmail !== null; ?> <div class="clearfix page-header margin-top-0"> <img class="pull-left margin-right" src="?_action=profilepicture&user=<?= htmlentities(urlencode($user->id)) ?>" alt="<?= __("Profile picture") ?>" width="64" height="64"> <span class="h1"><?= htmlentities($user->displayName) ?></span> <?php if ($isOwnProfile): ?> <span class="label label-primary"><?= __("You") ?></span> <?php endif; ?><br> @<?= htmlentities($user->name) ?> • <span class="text-muted"><?= __("Member since %join_date%", [ "join_date" => '<span class="_date">' . htmlentities($dateJoined->format("c")) . '</span>', ]) ?></span> </div> <?php if ($canEdit): ?> <div class="row"> <div class="col-md-9"> <?php endif; ?> <h3><?= __($sUserPossessive, [ "display_name" => $user->displayName, ]) ?></h3> <?php if (count($posts) > 0): ?> <div class="post-container"> <div class="post-container-posts"> <div class="list-group margin-top"> <?php foreach ($posts as $post): if ($post->deleted) continue; $hasAttachments = count($attachments[$post->id]) > 0; ?> <a href="?_action=viewtopic&topic=<?= htmlentities(urlencode($post->topicId)) ?>#post-<?= htmlentities(urlencode($post->id)) ?>" class="list-group-item"> <?php if ($hasAttachments): ?> <span class="badge"><span class="glyphicon glyphicon-paperclip"></span></span> <?php endif; ?> <?= htmlentities(html_entity_decode(StringUtils::truncate(strip_tags(renderPost($post->content)), 100))) ?><br> <span class="text-muted"><?= __("posted on %post_date% in %topic%", [ "post_date" => '<span class="_time">' . htmlentities($post->postDate->format("c")) . '</span>', "topic" => '<em>' . ($topics[$post->topicId]?->isLocked ? '<span class="glyphicon glyphicon-lock text-muted" aria-hidden="true"></span> ' : '') . htmlentities($topics[$post->topicId]?->title ?? "unknown") . '</em>', ]) ?></span> </a> <?php endforeach; ?> </div> </div> <div class="post-container-controls"> <button class="btn btn-default"><?= __("Show all posts") ?></button> </div> </div> <?php else: ?> <div class="well icon-well text-info margin-top margin-bottom"> <span class="glyphicon glyphicon-info-sign text-info" aria-hidden="true"></span> <em><?= __("This user has not posted anything yet") ?></em> </div> <?php endif; ?> <?php if ($canEdit): ?> </div> <div class="col-md-3"> <h3><?= __("Edit profile") ?></h3> <?php if (($_formError = RequestUtils::getAndClearFormError("update_profile")) !== null) { _view("alert_error", ["message" => $_formError]); } ?> <form action="<?= htmlentities($_SERVER["REQUEST_URI"]) ?>" method="post" enctype="multipart/form-data"> <input type="hidden" name="form_id" value="update_profile"> <div class="form-group"> <label for="i_display_name"><?= __("Display name:") ?></label> <input required class="form-control" type="text" name="display_name" id="i_display_name" value="<?= htmlentities($user->displayName) ?>"> </div> <div class="form-group"> <label for="i_name"><?= __("Username:") ?></label> <?php if ($lastNameChangeTooRecent): ?> <input class="form-control" type="text" id="i_name" value="<?= htmlentities($user->name) ?>" disabled> <small class="text-danger"><strong><?= __("You can only change your username every 30 days!") ?></strong></small> <?php else: ?> <input required class="form-control" type="text" name="name" id="i_name" value="<?= htmlentities($user->name) ?>"> <?php endif; ?> </div> <div class="form-group"> <label for="i_email"><?= __("Email address:") ?></label> <?php if ($emailPending): ?> <input class="form-control" type="email" id="i_email" value="<?= htmlentities($user->email) ?>" disabled> <?php else: ?> <input required class="form-control" type="email" id="i_email" name="email" value="<?= htmlentities($user->email) ?>"> <?php endif; ?> </div> <div class="form-group"> <label><?= __("Profile picture:") ?></label> <?php $_checkbox_disabled = empty($user->profilePicture); $_checkbox_disabled_class = $_checkbox_disabled ? " disabled text-muted" : ""; ?> <div class="radio margin-top-0 <?= $_checkbox_disabled_class ?>"> <label> <input type="radio" name="pfp_action" id="pfp_action_1" value="keep"<?= !empty($user->profilePicture) ? ' checked' : ' disabled' ?>> <?= __("Keep current profile picture") ?> </label> </div> <div class="radio"> <label> <input type="radio" name="pfp_action" id="pfp_action_2" value="remove"<?= empty($user->profilePicture) ? ' checked' : '' ?>> <?php if (empty($user->profilePicture)): ?> <?= __("No profile picture") ?> <?php else: ?> <?= __("Remove profile picture") ?> <?php endif; ?> </label> </div> <div class="radio"> <label> <input type="radio" name="pfp_action" value="replace" id="pfp_action_3"> <?= __("Upload new profile picture") ?> </label> </div> <input type="file" name="pfp" id="i_pfp" accept="image/png,image/jpeg" class="margin-left-3x small"> </div> <div class="form-group"> <button type="submit" class="btn btn-success"><?= __("Save changes") ?></button> </div> </form> <?php if ($isOwnProfile): ?> <h3><?= __("Change password") ?></h3> <?php if (($_formError = RequestUtils::getAndClearFormError("update_password")) !== null) { _view("alert_error", ["message" => $_formError]); } ?> <form action="<?= htmlentities($_SERVER["REQUEST_URI"]) ?>" method="post"> <input type="hidden" name="form_id" value="update_password"> <div class="form-group"> <label for="i_current_password"><?= __("Current password:") ?></label> <input autocomplete="current-password" required class="form-control" type="password" name="current_password" id="i_current_password" required> </div> <div class="form-group"> <label for="i_new_password"><?= __("New password:") ?></label> <input autocomplete="new-password" required class="form-control" type="password" name="new_password" id="i_new_password" required> </div> <div class="form-group"> <label for="i_retype_password"><?= __("Retype password:") ?></label> <input autocomplete="new-password" required class="form-control" type="password" name="retype_password" id="i_retype_password" required> </div> <div class="form-group"> <button type="submit" class="btn btn-success"><?= __("Change password") ?></button> </div> </form> <?php endif; ?> </div> </div> <?php endif; ?> <script> $(function() { $(".post-container").each(function(i, e) { if ($(e).height() > 900) { // more than 800 so it doesn't collapse just a few pixels $(e).addClass("collapsed"); } $(e).find(".post-container-controls button").click(function() { $(e).removeClass("collapsed"); }); }); }); <?php if ($canEdit): ?> $(function() { function _hide() { $("#i_pfp").hide().prop("disabled", true).prop("required", false); $("#i_pfp + .file-input-group").hide().find("button").prop("disabled", true); } _hide(); setTimeout(_hide, 10); $("[name='pfp_action']").on("change input check click", function() { if ($("#pfp_action_3").is(":checked")) { $("#i_pfp").show().prop("disabled", false).prop("required", true); $("#i_pfp + .file-input-group").show().find("button").prop("disabled", false); } else { _hide(); } }) }); <?php endif; ?> </script>